盡管函數(shù)式編程具有美學(xué)上的優(yōu)點(diǎn)柱搜,但我發(fā)現(xiàn)前面的解決方案比它們的遞歸對(duì)應(yīng)方案更漂亮框喳。它們?cè)诤愣ǎǘ皇蔷€性)時(shí)間內(nèi)運(yùn)行坎弯,而且很容易適應(yīng)非整數(shù)輸入的工作。更重要的是桦锄,它們鼓勵(lì)程序員提出并研究這些問題:為什么斐波那契方程涉及5的平方根扎附?取一個(gè)分?jǐn)?shù)的階乘是什么意思?這些問題都有巧妙的答案结耀,而僅靠遞歸關(guān)系是不容易發(fā)現(xiàn)的留夜。
在對(duì)其遞歸解決方案進(jìn)行編碼之后,Lisp黑客更有可能提出一個(gè)無關(guān)緊要的問題:我如何才能將這兩個(gè)函數(shù)簡化為一個(gè)函數(shù)图甜?
Lisp黑客傳統(tǒng)的問題在于碍粥,它過度關(guān)注編程的問題--編譯器、抽象黑毅、編輯器等等--而不去思考程序員知識(shí)范疇之外的思路嚼摩。我猜想,Lisp學(xué)校的論文作者--Raymond矿瘦、Graham和Yegge--提到 "不需要數(shù)學(xué)"枕面,是因?yàn)樗麄儼褧r(shí)間花在擔(dān)心如何使代碼更加抽象上。這種想法可能會(huì)導(dǎo)致緊湊缚去、強(qiáng)大的代碼庫潮秘,但用經(jīng)濟(jì)學(xué)的語言來說,有一個(gè)機(jī)會(huì)成本易结。如果你只考慮你的代碼枕荞,你就沒有機(jī)會(huì)發(fā)現(xiàn)外面的世界,以及可能最好地描述它的數(shù)學(xué)方程式搞动。
盡管二十一世紀(jì)的早期似乎更傾向于Lisp派的哲學(xué)躏精,但我預(yù)測本世紀(jì)余下的時(shí)間將屬于那些能夠成功地將數(shù)學(xué)應(yīng)用于實(shí)際問題的Fortran派的程序員。宣稱大多數(shù)編程問題 "不需要數(shù)學(xué) "是很誘人的滋尉,但這只是在制造玉控、供應(yīng)鏈管理或棒球領(lǐng)域,"不需要數(shù)學(xué) "也許是正確的:高級(jí)數(shù)學(xué)對(duì)現(xiàn)有的從業(yè)者來說似乎完全沒有必要狮惜,但只是在我們沒有發(fā)現(xiàn)特定的數(shù)學(xué)概念是思考手頭問題的正確方式之前高诺。一旦發(fā)現(xiàn)了這個(gè)對(duì)應(yīng)關(guān)系,數(shù)學(xué)就至關(guān)重要了碾篡。
我對(duì)計(jì)算機(jī)編程中的數(shù)學(xué)的未來感到樂觀的原因有兩個(gè)虱而。第一個(gè)是與網(wǎng)絡(luò)公司產(chǎn)生的數(shù)據(jù)量的增長有關(guān)("大數(shù)據(jù)")。隨著更多類型的數(shù)據(jù)在手开泽,有更多的方程可能被實(shí)用化牡拇。由于這個(gè)原因,人們對(duì)先進(jìn)的機(jī)器學(xué)習(xí)技術(shù)很感興趣,即使是簡單的統(tǒng)計(jì)技術(shù)也可能被證明有至少同樣多的應(yīng)用惠呼。應(yīng)用于商業(yè)數(shù)據(jù)的數(shù)學(xué)將產(chǎn)生更好的商業(yè)洞察力导俘,更有效的運(yùn)作,更好的產(chǎn)品(如推薦)和新產(chǎn)品(如預(yù)測服務(wù))剔蹋。
我對(duì)數(shù)學(xué)在計(jì)算機(jī)編程中的地位持樂觀態(tài)度的第二個(gè)原因是:普通消費(fèi)者擁有的數(shù)據(jù)比以往任何時(shí)候都多旅薄,而數(shù)學(xué)可以幫助人們理解這些數(shù)據(jù),或者至少使其更加美觀泣崩。傳統(tǒng)上被認(rèn)為是 "科學(xué)計(jì)算 "的應(yīng)用領(lǐng)域(例如少梁,地理信息系統(tǒng)或圖像處理),現(xiàn)在對(duì)擁有(例如)地理標(biāo)記的數(shù)字照片集的普通人來說很感興趣矫付。例如凯沪,Instagram是建立在對(duì)圖像的顏色通道進(jìn)行操作的幾個(gè)方程式上。對(duì)數(shù)學(xué)的理解可以幫助程序員為用戶解決實(shí)際問題买优,并提供一個(gè)更令人愉悅的體驗(yàn)妨马。(為此,你可能會(huì)喜歡我以前的文章《Winkel Tripel Warping Trouble》)而叼。
說到底身笤,數(shù)學(xué)并不能幫助你理解計(jì)算機(jī)編程。它不是為了尋找隱喻葵陵,或理解永遠(yuǎn)不會(huì)被應(yīng)用的 "基本原理"液荸。相反,數(shù)學(xué)是理解世界上各種現(xiàn)象的工具:行星的運(yùn)動(dòng)脱篙,數(shù)據(jù)的模式娇钱,對(duì)顏色的感知,或者世界上無數(shù)的事情绊困,通過數(shù)學(xué)公式都可以更好地理解文搂。黑客的工作是找出如何將洞察力編碼成一段可以反復(fù)使用的代碼。
我們是否應(yīng)該回到過去的好日子秤朗,即人們用Fortran編程煤蹭,所有東西都是一個(gè)數(shù)組?很難說取视。我們需要的是在黑客教育中注入應(yīng)用數(shù)學(xué)硝皂。在Lisp學(xué)校的論文中長大的黑客們知識(shí)面太窄了。我們需要實(shí)例作谭、教程和成功案例稽物,來展示數(shù)學(xué)在計(jì)算機(jī)程序中的成功應(yīng)用。盡管大多數(shù)計(jì)算機(jī)程序員不愛炫耀折欠,但我們需要黑客們?cè)诎l(fā)現(xiàn)新的有趣的數(shù)學(xué)應(yīng)用時(shí)能廣而告之贝或。我們需要宣揚(yáng)這種科學(xué)好奇心精神吼过。
最后,我們需要下一代有抱負(fù)的黑客將數(shù)學(xué)納入他們的自學(xué)計(jì)劃咪奖。我們需要大學(xué)生學(xué)習(xí)物理學(xué)盗忱、工程學(xué)、線性代數(shù)赡艰、統(tǒng)計(jì)學(xué)售淡、微積分和數(shù)值計(jì)算等課程,我們需要他們教育那些從小就對(duì)這些東西一無所知的長輩們慷垮。隨著大數(shù)據(jù)的增長,以及使用Fortran的守舊派即將消亡揍堕,新晉的數(shù)學(xué)黑客們有大量的機(jī)會(huì)料身,要更嚴(yán)謹(jǐn)?shù)姆绞剿伎紗栴},為世界帶來改變衩茸。
總結(jié):程序員和數(shù)學(xué)家還是兩個(gè)不同的領(lǐng)域芹血,能融合當(dāng)然更好。
程序員還是個(gè)低門檻的行業(yè)楞慈,進(jìn)入這個(gè)行業(yè)不需要數(shù)學(xué)幔烛;數(shù)學(xué)是個(gè)加分項(xiàng)。
日更133天 - 小說《大染坊》
日更132天 - 西線無戰(zhàn)事
日更131天 - (翻譯)The Mathematical Hacker(中)
日更130天 - (翻譯)The Mathematical Hacker(上
日更129天 - (翻譯) C語言學(xué)習(xí)中的數(shù)學(xué)知識(shí)簡要說明
日更128天 - (翻譯) 編程是否需要數(shù)學(xué)(下)
日更127天 - (翻譯) 編程是否需要數(shù)學(xué) (上)
日更126天 - 知識(shí)付費(fèi)是士力架還是人參果
日更125天 - 整理下自己的手機(jī)囊蓝,別讓它碎片化了我們的生活
日更124天 - 打造自己小環(huán)境
日更123天 - 杠桿
日更122天 - 收入的四個(gè)象限
日更121天 - 時(shí)光穿梭饿悬,回顧和展望
前日更120天索引