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