在各種??各樣的熱議算法實(shí)現、軟件(jian)包開(kāi)源可用的封裝當下,算法對于程序員而言還重要嗎?包那
時(shí)(shi)代真的序員學(xué)習變了嗎?近日,一篇相關(guān)主題的還用文章在 Hacker News 網(wǎng)站引發(fā)討論。
以下是算法文章的主要內容:
我剛開(kāi)始做軟件開(kāi)發(fā)時(shí),開(kāi)發(fā)者必須自己實(shí)現大部分用到的熱議算法。硬件供應商會(huì )提供一些庫,但(′?ω?`)是當時(shí)整體的開(kāi)發(fā)氛圍就是自己編寫(xiě)算法(除了技術(shù)性較強且復雜的數學(xué)函數)。
開(kāi)發(fā)者大多都會(huì )閱讀高德納(Donald Knuth)的《計算機程序設計藝術(shù)》,對于一步一步實(shí)現算法,這本書(shū)是很可靠的閱讀資源。我還記得看到過(guò)一個(gè)庫的副本,是用很(hen)小的字母手寫(xiě)了算法的更新,并將其粘貼到頁(yè)面的上一頁(yè)文本上。
那個(gè)時(shí)候,算法非常(chang)重要,因為計算機的計算速度不夠快,無(wú)法以可接受的速率解決常見(jiàn)問(wèn)題。普通指令的執行時(shí)間和指令時(shí)間,以及給定 CPU 上可用的寄存器數量,是開(kāi)發(fā)者經(jīng)常討論??的話(huà)題。內存容量通常是以千字節為單位的,每個(gè)字節??都算在內。
那??是算法的時(shí)代。
隨著(zhù)內存容量從以兆字節為單位變成了以千兆???字節為單位,開(kāi)源商業(yè)化算法和ˉ\_(ツ)_/ˉ計算機ヽ(′ー`)ノ的存儲速度提高了非常多。
在算法的實(shí)現方面,現在的開(kāi)發(fā)者擁有大量選擇。有那么多其他問(wèn)題需要解決,為什么要浪費時(shí)間來(lái)實(shí)現算法呢?
現在,算法就ヽ(′ー`)ノ像一座橋上的螺栓,非常重要但無(wú)人問(wèn)津。今天的開(kāi)發(fā)者更愿意討論故事點(diǎn)、功能??、商業(yè)邏輯等等。給出一個(gè)定義明確的問(wèn)題,許多開(kāi)發(fā)者現在更傾向于查找已有的包,而不是從頭開(kāi)始編寫(xiě)代碼。
仍然會(huì )有新的算法被開(kāi)發(fā)出來(lái),研究人員持續對現有算法進(jìn)行改進(jìn)。但這是相對小眾的。
有些公司的算法不是商品。例如谷歌,以谷歌的規模,即使看似非常小的改進(jìn),也可以為公司節省數百萬(wàn)美元(??這純粹是因為巨額??數字的一小部分也是很多的)。而對于有些公司,算法開(kāi)發(fā)可(′▽?zhuān)?能是其核心競爭力的一部(′;ω;`)分,算法的非商品性讓這樣的公司在競爭中占據優(yōu)勢,而在非核心競爭力中算法被看作商品。
高德納的《計算機程序設計藝術(shù)》在使算法變得普遍可用方ヾ(′?`)?面發(fā)揮了重要作用。盡管這本書(shū)經(jīng)常被引用,但是我猜想現在很少有人會(huì )讀它了。
今天,我們處在軟件開(kāi)發(fā)生態(tài)系統的時(shí)代(dai)。
算法還沒(méi)有完全走向默默無(wú)聞,它必須等到人們只需將需求告訴計算??機,而不需要關(guān)心實(shí)現細節時(shí)(或遺傳算法編程發(fā)展得更好時(shí)),才能真正退出歷史舞臺。
開(kāi)發(fā)者們怎么看?
即使有一天,計算機能夠通過(guò)語(yǔ)音轉代碼的形式來(lái)編譯算法,那時(shí)程序員的工作??可能就是為計算機朗讀待實(shí)現的算法。
如今與 80 年代相比,在絕對數量上,有更??多的開(kāi)發(fā)人員在從事算法編寫(xiě)工作,雖然,更高比例的開(kāi)發(fā)人員從??不(bu)編寫(xiě)任何算法。但如果有「算法時(shí)代」,我認為就是現在。今天我們所擁有的算法比以往任何時(shí)候都要多。
有人將算法??與攝影類(lèi)??比,解釋了算法行業(yè)正在經(jīng)歷的變革:
現在這個(gè)(′?ω?`)時(shí)代,我們可以在幾分鐘內找到任何符合自己想象的圖片。所(suo)以從商業(yè)的視角來(lái)看,攝影作為一門(mén)純藝術(shù),其價(jià)值已經(jīng)被消解了。但??為什么還有人聘請攝影師呢?
攝影師收取??的報酬不在于「交付最好的圖像」,而在于為客戶(hù)定制想要的照片主題及???效果。我認為這也是軟件行???業(yè)的現狀,我們不是在算法的「藝術(shù)水平」上登峰造極,而是(╯°□°)╯︵ ┻━┻要針對特定業(yè)務(wù)和需(°ロ°) !求給出定(ding)制解決方案。這不是宏觀(guān)層面的創(chuàng )新,而是微觀(guān)層面的創(chuàng )新。
時(shí)代變了,也意味著(zhù)程序員必須要調整自己的目標所在?!笇τ谠S多人來(lái)說(shuō),編寫(xiě)純粹、通用、美妙的東西會(huì )更有吸引力。遺憾的是,我們可能沒(méi)有機會(huì )寫(xiě)出像谷歌開(kāi)源的軟件包那么好的東西了?!?/p>
有人表示,要不要自己編寫(xiě)??最合適的算(suan)法是自己的選擇,但如果不影響最后的實(shí)現結果,為什么還要浪費時(shí)間去做這樣簡(jiǎn)單低級的工作呢?
也有人認為:封裝包的確讓他ˉ\_(ツ)_/ˉ們不需要再做一些低級繁瑣的工??作,但是實(shí)際工作中仍然需要編寫(xiě)一些算法,因為總有一些沒(méi)有封裝好的算法需要開(kāi)發(fā)者自己實(shí)現。
算法技能永遠不會(huì )過(guò)時(shí)。的確,目前一些高質(zhì)量的算法實(shí)現具有廣泛可用性,可能不再需要手工實(shí)現此類(lèi)算法。但是開(kāi)發(fā)人員不僅需要了解數據結構支持的操作,還必須要了解??其復雜性。只有這樣,才能夠滿(mǎn)足應用程序自身的復雜性需求。
【編輯推薦】
一個(gè)程序員老兵的思考國外程序員的吶喊:遠程可以,降薪不行,國內網(wǎng)友:遠程 007 不是鬧著(zhù)玩的(de)寫(xiě)給年輕程序員:37歲的我,正在找工作!程序員喜大普( ???)奔 Linux基金會(huì )確認開(kāi)源技術(shù)不受(shou)美國出口管制如何看待程序員年齡越大越貶值(′▽?zhuān)?的問(wèn)題


網(wǎng)站二維碼
導航
電話(huà)
短信
咨詢(xún)
地圖
分享