Hacker News熱議:封裝包那么多,程序員還用學習算法嗎?
在各種各樣的算法實現、軟件包開源可用的當下,算法對于程序員而言還重要嗎?
如果你是幾十年前的程序員,那你一定精通于算法,并經常需要自己編寫算法。但在今天,算法已經變成了一種「商品」,從業者都在使用現成的軟件包和購買的算法。甚至有人提出這種觀點:「機器學習不需要數學,很多算法封裝好了,調個包就行」。
時代真的變了嗎?近日,一篇相關主題的文章在 Hacker News 網站引發討論。
以下是文章的主要內容:
我剛開始做軟件開發時,開發者必須自己實現大部分用到的算法。硬件供應商會提供一些庫,但是當時整體的開發氛圍就是自己編寫算法(除了技術性較強且復雜的數學函數)。
開發者大多都會閱讀高德納(Donald Knuth)的《計算機程序設計藝術》,對于一步一步實現算法,這本書是很可靠的閱讀資源。我還記得看到過一個庫的副本,是用很小的字母手寫了算法的更新,并將其粘貼到頁面的上一頁文本上。
那個時候,算法非常重要,因為計算機的計算速度不夠快,無法以可接受的速率解決常見問題。普通指令的執行時間和指令時間,以及給定 CPU 上可用的寄存器數量,是開發者經常討論的話題。內存容量通常是以千字節為單位的,每個字節都算在內。
那是算法的時代。
隨著內存容量從以兆字節為單位變成了以千兆字節為單位,開源商業化算法和計算機的存儲速度提高了非常多。
在算法的實現方面,現在的開發者擁有大量選擇。有那么多其他問題需要解決,為什么要浪費時間來實現算法呢?
現在,算法就像一座橋上的螺栓,非常重要但無人問津。今天的開發者更愿意討論故事點、功能、商業邏輯等等。給出一個定義明確的問題,許多開發者現在更傾向于查找已有的包,而不是從頭開始編寫代碼。
仍然會有新的算法被開發出來,研究人員持續對現有算法進行改進。但這是相對小眾的。
有些公司的算法不是商品。例如谷歌,以谷歌的規模,即使看似非常小的改進,也可以為公司節省數百萬美元(這純粹是因為巨額數字的一小部分也是很多的)。而對于有些公司,算法開發可能是其核心競爭力的一部分,算法的非商品性讓這樣的公司在競爭中占據優勢,而在非核心競爭力中算法被看作商品。
高德納的《計算機程序設計藝術》在使算法變得普遍可用方面發揮了重要作用。盡管這本書經常被引用,但是我猜想現在很少有人會讀它了。
幾年前,我突然發現自己正在看的軟件工程書籍竟然沒有專門的算法章節。
今天,我們處在軟件開發生態系統的時代。
算法還沒有完全走向默默無聞,它必須等到人們只需將需求告訴計算機,而不需要關心實現細節時(或遺傳算法編程發展得更好時),才能真正退出歷史舞臺。
開發者們怎么看?
「算法還重要嗎?」這個問題由來已久,早已成為開發者討論的焦點,大家對此的態度也各不相同。
即使有一天,計算機能夠通過語音轉代碼的形式來編譯算法,那時程序員的工作可能就是為計算機朗讀待實現的算法。
如今與 80 年代相比,在絕對數量上,有更多的開發人員在從事算法編寫工作,雖然,更高比例的開發人員從不編寫任何算法。但如果有「算法時代」,我認為就是現在。今天我們所擁有的算法比以往任何時候都要多。
有人將算法與攝影類比,解釋了算法行業正在經歷的變革:
現在這個時代,我們可以在幾分鐘內找到任何符合自己想象的圖片。所以從商業的視角來看,攝影作為一門純藝術,其價值已經被消解了。但為什么還有人聘請攝影師呢?
攝影師收取的報酬不在于「交付最好的圖像」,而在于為客戶定制想要的照片主題及效果。我認為這也是軟件行業的現狀,我們不是在算法的「藝術水平」上登峰造極,而是要針對特定業務和需求給出定制解決方案。這不是宏觀層面的創新,而是微觀層面的創新。
時代變了,也意味著程序員必須要調整自己的目標所在。「對于許多人來說,編寫純粹、通用、美妙的東西會更有吸引力。遺憾的是,我們可能沒有機會寫出像谷歌開源的軟件包那么好的東西了。」
有人表示,要不要自己編寫最合適的算法是自己的選擇,但如果不影響最后的實現結果,為什么還要浪費時間去做這樣簡單低級的工作呢?
也有人認為:封裝包的確讓他們不需要再做一些低級繁瑣的工作,但是實際工作中仍然需要編寫一些算法,因為總有一些沒有封裝好的算法需要開發者自己實現。
算法技能永遠不會過時。的確,目前一些高質量的算法實現具有廣泛可用性,可能不再需要手工實現此類算法。但是開發人員不僅需要了解數據結構支持的操作,還必須要了解其復雜性。只有這樣,才能夠滿足應用程序自身的復雜性需求。
「知其然,知其所以然」在當下還是金玉良言嗎?便捷可用的封裝包是否會使算法衰落?這值得我們思考。
【編輯推薦】
<div> 一個程序員老兵的思考國外程序員的吶喊:遠程可以,降薪不行,國內網友:遠程 007 不是鬧著玩的寫給年輕程序員:37歲的我,正在找工作!程序員喜大普奔 Linux基金會確認開源技術不受美國出口管制如何看待程序員年齡越大越貶值的問題聲明:免責聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,也不承認相關法律責任。如果您發現本社區中有涉嫌抄襲的內容,請發
送郵件至:operations@xinnet.com進行舉報,并提供相關證據,一經查實,本站將立刻刪除涉嫌侵權內容。本站原創內容未經允許不得轉載,或轉載時
需注明出處:新網idc知識百科