95%的程序員都用不到的“算法”,是不是沒必要死磕?
寫代碼快十年了,沒寫過一次插入排序,也沒有寫過一次紅黑樹,甚至遞歸也很少涉及到。這是絕大多數(shù)程序員的工作現(xiàn)狀。
然而,許多人對(duì)“算法”卻情有獨(dú)鐘,認(rèn)為它是評(píng)判一個(gè)程序員技術(shù)水平高低的重要標(biāo)準(zhǔn)之一。
有句話叫做:程序員=數(shù)據(jù)結(jié)構(gòu)+算法。為此許多人癡迷于刷leetcode不能自拔,執(zhí)意追求算法,卻忽略了在工作項(xiàng)目中學(xué)習(xí)的重要性。
另一部分人則走向另一個(gè)極端——算法無用論。公司項(xiàng)目的核心代碼都是我寫的,幾乎都是“評(píng)論回復(fù)功能”怎么實(shí)現(xiàn),“點(diǎn)贊功能”怎么實(shí)現(xiàn),“充值提現(xiàn)功能”怎么實(shí)現(xiàn),根本不會(huì)涉及所謂的算法,花大量精力去刷算法題,根本就是浪費(fèi)時(shí)間。
在面試過程中,“算法”往往扮演著智力題的作用。因?yàn)橛?jì)算機(jī)科學(xué)知識(shí)深度較淺,培養(yǎng)起來不難,大公司在招聘初級(jí)開發(fā)工程師時(shí),都會(huì)用算法知識(shí),來考察面試者的學(xué)習(xí)能力及潛力,而不是會(huì)使用某種技術(shù)。
在實(shí)際工作中,絕大多數(shù)情況下也不會(huì)用到算法,更多的是增刪改查、API的對(duì)接,數(shù)據(jù)格式的調(diào)整。只有在做比較底層、比較尖端和敏感的場景,才可能涉及算法的實(shí)現(xiàn),但這些場景的需求也遠(yuǎn)遠(yuǎn)不止算法。
對(duì)于軟件工程而言,寫出易懂、易合作、易維護(hù)的代碼,顯然比寫出效率高一點(diǎn),代碼卻很復(fù)雜要重要許多。
這樣看來算法就顯得很“雞肋。”這也是許多寫了多年代碼的程序員,堅(jiān)持算法無用論的原因之一。
另外一部分人認(rèn)為,算法非常之重要。
大公司非常注重基礎(chǔ),編程語言、數(shù)據(jù)結(jié)構(gòu)與算法、Lnux、操作系統(tǒng)等等。算法也是發(fā)掘程序員學(xué)習(xí)能力和成長潛力的關(guān)鍵手段。此外,算法能力的強(qiáng)弱,也能判斷程序員面對(duì)新問題時(shí),分析和解決問題的能力。
懂算法和不懂算法的程序員,完全是兩個(gè)水平,一個(gè)天一個(gè)地,所以算法非常重要。
其實(shí)不論哪種看法,都十分極端。算法究竟有多重要,到底是算法重要還是項(xiàng)目經(jīng)驗(yàn)重要,在許多人心中都有答案。
這個(gè)問題與“學(xué)歷還是能力重要?”“選擇重要還是努力重要”類似。當(dāng)你偏執(zhí)地認(rèn)為A很重要,所以B不重要的時(shí)候,就犯了一種邏輯謬誤。勢必要為此付出代價(jià)。
死磕算法,不了解常見的技術(shù)方案,就要付出代價(jià)。
輕視算法,過于重視項(xiàng)目經(jīng)驗(yàn),同樣要付出代價(jià)。
因?yàn)楣ぷ髦兴枰募寄芴嗵啵瑴贤芰?、管理能力、商業(yè)、規(guī)劃、招聘、架構(gòu)、工程等等,都會(huì)共同決定一個(gè)人能達(dá)到的高度。
在龐大的職場技能體系中,算法僅僅是其中的一環(huán),缺算法行,缺了算法也不行。把算法替換成上面所述的任何一種能力,結(jié)論都是一樣的。