最近看的書比較多也比較雜配并,像《芯片戰(zhàn)爭》高镐、《芯片簡史》、《比爾蓋茨傳》嫉髓、《數(shù)學(xué)之美》等等,這幾本書里有提到圖靈獎(jiǎng)的信息梧油,順手買了一本《圖靈和ACM圖靈獎(jiǎng)》州邢,看了這本書對(duì)我震撼很大,原來計(jì)算機(jī)的大牛在搞這些東西量淌,他們可以是程序員,更重要的是這些人更看重?cái)?shù)學(xué)胚股,用數(shù)學(xué)建立模型來構(gòu)建和改善計(jì)算機(jī)生態(tài)裙秋。
之前看過左耳朵耗子寫 的《程序員三重門》,當(dāng)時(shí)還沒太懂进宝,現(xiàn)在完全明白了枷恕,
簡單說:三等程序員寫代碼,二等程序員調(diào)試調(diào)優(yōu),一等程序員玩數(shù)學(xué)漏益。
這篇文章也是對(duì)自己將近十年的職業(yè)生涯的一個(gè)總結(jié)吧深胳,知道自己在計(jì)算機(jī)這座神廟里干的什么活,以后前進(jìn)的方向舞终。
之前一直想把數(shù)學(xué)和算法應(yīng)用到工作中,相信很多人在給你灌輸這樣的想法(他們的主要目的還是讓你交智商稅)余爆,簡單概括他們的說法夸盟,技術(shù)萬法不離其宗,不學(xué)好算法你就不配做程序員桩砰,學(xué)會(huì)你就天下無敵了释簿。但是隨著時(shí)間的推移,你發(fā)現(xiàn)你就算學(xué)完這些對(duì)你的工作提升也不大庶溶,因?yàn)樵诠ぷ髦懈居貌坏剑@個(gè)月學(xué)完下個(gè)月忘(沒錯(cuò)就是以前的我??)行疏,好像自己很笨一直沖不破這道門一樣砖茸。
其實(shí)這個(gè)道理很簡單,我下面舉個(gè)例子:
比如你是軍隊(duì)一名步兵凉夯,你的日常作戰(zhàn)任務(wù)就是瞄準(zhǔn)開槍劲够。你的長官說:小子,想做好一名步兵征绎,你需要學(xué)習(xí)子彈和槍的設(shè)計(jì)原理磨取,這樣你才能更好的瞄準(zhǔn)射擊柴墩,才能做一名出色的步兵。
當(dāng)然逢净,作為一個(gè)積極向上的步兵歼指,你欣然接受了前輩長官的建議。因此你除了在作戰(zhàn)中開槍射擊之外踩身,不打仗的時(shí)候就去研究各種槍炮原理挟阻、空氣動(dòng)力學(xué),材料學(xué)啥的赁濒。然后你想在射擊中應(yīng)用你學(xué)到的這些原理孟害,但是你發(fā)現(xiàn)學(xué)習(xí)動(dòng)力學(xué)好像和射擊有點(diǎn)關(guān)系,但是關(guān)系又不大击你,因?yàn)槟闶且幻奖驯愕娜粘?dòng)作是瞄準(zhǔn)開槍射擊,你所處的場(chǎng)所沒有為你提供改造槍和子彈的結(jié)構(gòu)的環(huán)境或者條件朝巫。
研究這些東西并沒有錯(cuò)劈猿,因?yàn)槟闶且粋€(gè)想提升自己的人,但是你急于把所學(xué)轉(zhuǎn)化成當(dāng)前的步兵角色中揪荣,效果甚微,長此以往佛舱,你得到的只有對(duì)自己的質(zhì)疑和前途的迷茫,因?yàn)槟闵磉吽惺勘歼@樣說的请祖,想做好步兵就要學(xué)習(xí)槍炮原理,如果你學(xué)到的東西長期用不到陌粹,有可能是你學(xué)的東西不對(duì)福压,也有可能是你的職業(yè)錯(cuò)了。
然而真正研究槍和子彈原理并應(yīng)用的是兵工廠的槍炮師蒙幻,這些東西是通過他們的倡導(dǎo)流行開來的胆筒,所以你學(xué)這些東西后就不要在想去做一個(gè)步兵了,你應(yīng)該是去做兵工廠的炮槍師抒和,這樣才能發(fā)揮你的所學(xué)彤蔽。
這也是AK47發(fā)明者米哈伊留申·卡拉希尼柯夫的故事,二戰(zhàn)中顿痪,卡拉希尼柯夫作為一名坦克手奔赴前線,在征懈,在1941年10月手臂嚴(yán)重受傷揩悄,卡拉希尼柯夫在野戰(zhàn)醫(yī)院療傷時(shí),打聽著傷員們常在一起抱怨蘇聯(lián)槍械的拙劣性能和前線德軍使用的自動(dòng)武器亏娜,于是萌發(fā)了設(shè)計(jì)輕武器的念頭镇匀。回家養(yǎng)傷期間汗侵,他設(shè)計(jì)出第一支PPK-42沖鋒槍群发,引起軍方的注意发乔。1943年,他進(jìn)入正規(guī)學(xué)校起愈,并被分配到武器試驗(yàn)場(chǎng)擔(dān)任技術(shù)員译仗,從此轉(zhuǎn)型做了槍炮師。
所以阐污,如果想做好一名步兵咱圆,你還是應(yīng)該把主要精力放在射擊練習(xí)和熟系槍械上,同理
作為一個(gè)三等程序員手幢,你只要把程序邏輯搞明白忱详,會(huì)看英語文檔、懂點(diǎn)操作系統(tǒng)踱阿、網(wǎng)絡(luò)和編譯钦铁,再懂點(diǎn)設(shè)計(jì)模式牛曹,明白軟件工程師需要注意什么就OK了,這一層的天花板很低黎比,而且這些東西之間聯(lián)系并不大,不需要你把這些東西全部融會(huì)貫通演闭。
當(dāng)然颓帝,作為一名軟件工程師窝革,如果想進(jìn)一步提升等級(jí)吕座,就必須去研究性能優(yōu)化,需要全面考量的那種漆诽,CPU锣枝、操作系統(tǒng)、網(wǎng)絡(luò)蚪腐、內(nèi)存税朴、程序等等(可以看看《性能之巔》),真正把你學(xué)的算法和數(shù)學(xué)運(yùn)用起來正林。換句話說,學(xué)完這些你就得準(zhǔn)備轉(zhuǎn)換程序員角色了鼻忠,如果你下定決心轉(zhuǎn)型杈绸,這一過程肯定是充滿了曲折的,因?yàn)槟阋と肽吧念I(lǐng)域塑娇,運(yùn)用不同的思維和技能去解決你沒有完全熟悉的問題劫侧。
現(xiàn)在再看,那些把數(shù)學(xué)和算法掛在嘴邊的人写妥,你就知道什么叫蒙昧审姓,他們能騙的也就是哪些喜歡揍捷徑的人(有些PM都被忽悠去學(xué)了)或者說這些人本身就是槍炮師,他們只是站在自己的應(yīng)用領(lǐng)域去學(xué)習(xí)這些東西魔吐,但是他們或者你自己無意間把這些強(qiáng)加在你自己身上了,過度神話了砸琅。通過這個(gè)思考,我更知道了讀書的重要性谚赎,讓你看到更大的世界诱篷,讓你獨(dú)立思考,不能人云亦云闸盔。
總之琳省,算法和數(shù)學(xué)和普通程序員關(guān)系不大,大家都知道編程的門檻有多低击费,現(xiàn)在小學(xué)生都學(xué)的懂桦他。讀了這本書我才發(fā)現(xiàn),一等程序員更多的是用數(shù)學(xué)去解決計(jì)算機(jī)的普遍性問題快压,比如非對(duì)稱加密質(zhì)數(shù)解密,計(jì)算復(fù)雜性問題蔫劣、怎么讓編譯器性能更快,為什么用關(guān)系型數(shù)據(jù)庫代替網(wǎng)狀數(shù)據(jù)庫截粗,我之后會(huì)結(jié)合圖靈獎(jiǎng)寫幾篇數(shù)學(xué)在計(jì)算機(jī)中的應(yīng)用的博客鸵隧。
最后緬懷下左耳朵耗子意推,他對(duì)中國技術(shù)圈的貢獻(xiàn)和積極的影響力絕對(duì)是值得肯定的。