當(dāng)程序員具備了抽象思維

什么是抽象
抽象是從眾多的事物中抽取出共同的、本質(zhì)性的特征,而舍棄其非本質(zhì)的特征的過程。具體地說,抽象就是人們在實踐的基礎(chǔ)上,對于豐富的感性材料通過去粗取精、去偽存真、由此及彼、由表及里的加工制作,形成概念、判斷、推理等思維形式,以反映事物的本質(zhì)和規(guī)律的方法。
實際上,抽象是與具體相對應(yīng)的概念,具體是事物的多種屬性的總和,因而抽象亦可理解為由具體事物的多種屬性中舍棄了若干屬性而固定了另一些屬性的思維活動。[1]
抽象是指為了某種目的,對一個概念或一種現(xiàn)象包含的信息進(jìn)行過濾,移除不相關(guān)的信息,只保留與某種最終目的相關(guān)的信息。例如,一個皮質(zhì)的足球,我們可以過濾它的質(zhì)料等信息,得到更一般性的概念,也就是球。從另外一個角度看,抽象就是簡化事物,抓住事物本質(zhì)的過程。[2]
抽象和語言是一體的
抽象思維,又稱詞(概念)的思維或者邏輯思維,是指用詞(概念)進(jìn)行判斷、推理并得出結(jié)論的過程。抽象思維以詞(概念)為中介來反映現(xiàn)實。這是思維的最本質(zhì)特征,也是人的思維和動物心理的根本區(qū)別。[3]
抽象的層次性

一個出版品 一份報紙 《舊金山紀(jì)事報》 5 月 18 日的《舊金山紀(jì)事報》

軟件中的分層抽象無處不在


重復(fù)代碼是抽象的缺失
首先,我們要從緩存中把搜索條件列表取出來; 然后,遍歷這些條件,將搜索的值填充進(jìn)去;
//取默認(rèn)搜索條件List<String> defaultConditions = searchConditionCacheTunnel.getJsonQueryByLabelKey(labelKey);for(String jsonQuery : defaultConditions){jsonQuery = jsonQuery.replaceAll(SearchConstants.SEARCH_DEFAULT_PUBLICSEA_ENABLE_TIME, String.valueOf(System.currentTimeMillis() / 1000));jsonQueryList.add(jsonQuery);}//取主搜索框的搜索條件if(StringUtils.isNotEmpty(cmd.getContent())){List<String> jsonValues = searchConditionCacheTunnel.getJsonQueryByLabelKey(SearchConstants.ICBU_SALES_MAIN_SEARCH);for (String value : jsonValues) {String content = StringUtil.transferQuotation(cmd.getContent());value = StringUtil.replaceAll(value, SearchConstants.SEARCH_DEFAULT_MAIN, content);jsonQueryList.add(value);}}
public class SearchConditionAssembler {public static SearchCondition assemble(String labelKey){String jsonSearchCondition = getJsonSearchConditionFromCache(labelKey);SearchCondition sc = assembleSearchCondition(jsonSearchCondition);return sc;}}
強(qiáng)制類型轉(zhuǎn)換是抽象層次有問題
public class FruitPicker {public List<Fruit> pickGood(List<Fruit> fruits){return fruits.stream().filter(e -> check(e)).collect(Collectors.toList());}private boolean check(Fruit e) {if(e instanceof Apple){if(((Apple) e).isSweet()){return true;}}if(e instanceof Watermelon){if(((Watermelon) e).isJuicy()){return true;}}return false;}}

public class FruitPicker {public List<Fruit> pickGood(List<Fruit> fruits){return fruits.stream().filter(e -> check(e)).collect(Collectors.toList());}//不再需要instanceof和強(qiáng)制類型轉(zhuǎn)換private boolean check(Fruit e) {return e.isTasty();}}
如何提升抽象思維能力
多閱讀
多總結(jié)沉淀
命名訓(xùn)練
領(lǐng)域建模訓(xùn)練
小結(jié)
抽象思維是程序員最重要的思維能力,抽象的過程就是尋找共性、歸納總結(jié)、綜合分析,提煉出相關(guān)概念的過程。
語言和抽象是一體的,抽象思維也叫詞思維,因為抽象的概念只能通過語言才能表達(dá)出來。
抽象是有層次性的,抽象層次越高,內(nèi)涵越小,外延越大,擴(kuò)展性越好;反之,抽象層次越低,內(nèi)涵越大,外延越小,擴(kuò)展性越差,但語義表達(dá)能力越強(qiáng)。
對抽象層次的拿捏,體現(xiàn)了我們的設(shè)計功力,視具體情況而定,抽象層次既不能太高,也不能太低。
重復(fù)代碼意味著抽象缺失,強(qiáng)制類型轉(zhuǎn)換意味著抽象層次有問題,我們可以利用這些信號來重構(gòu)代碼,讓代碼重新變的優(yōu)雅。
我們可以通過刻意練習(xí)來提升抽象能力,這些練習(xí)包括閱讀、總結(jié)、命名訓(xùn)練、建模訓(xùn)練等。
[1] https://baike.baidu.com/item/抽象/9021828
[2] https://zh.wikipedia.org/wiki/抽象化
[3] https://baike.baidu.com/item/抽象思維
[4] https://www.sohu.com/a/359915387_260616
﹀
﹀
﹀
2021-03-09
2021-03-02
2021-01-25
評論
圖片
表情
