《程序員的吶喊》讀書筆記


    

     在JD的購書通道里,看到了這樣的一個書名,果斷入手,看了以后果然非同凡響。
     通常程序員在工作開始的幾年內,很多習慣就已經定型,甚至影響一輩子了。這個規律不僅適用於程序員,也適應於其他各行各業。所以,前幾年好習慣的培養,或者是學校的培養,那是相當重要的。
     人總是喜歡呆在自己的舒適區,做覺得沒有難度的事情。問題是,沒有難度和挑戰,哪來的成長和進步?很多二流程序員,會陷入自己設計的二流架構中,然后一輩子就圈在這樣的陷阱中了。多跳出來看一看,多做一點讓自己覺得困難的事情。
     很多公司的代碼庫大的讓人吃驚,幾百萬,幾千萬甚至上億行。他們為什么失去了創新和快速變化的能力?因為代碼太多了。代碼越多, 維護成本就成倍增長,最后甚至沒人能搞定它們。設計模式就像盒子, 它雖然能把代碼分門別類整理的看似很規整,可是你要知道設計模式也是代碼,也一定程度上惡化了問題。
     這讓我想起了我設計的框架,我花了兩三年時間, 設計了一套C#的代碼庫,並精心維護它們。但大量的時間花在了維護框架本身,而不是解決問題上。雖然框架設計的還算合理,可是我明顯感覺到它就像拖在我身后的麻袋,雖然裝了並不好吃的口糧,但卻讓我越走越慢。仔細看每一個類,好像都有作用,但自己再想想,真的需要那么多嗎?它們是財富,也是包袱,越通用的方案,解決特定問題的能力就越弱。如果我真要下定決心重寫一遍,代碼量會減少到現在的五分之一!
     為什么會有那么多的代碼?設計人員難推其責,不斷的重復和過度設計,溝通不暢,反復的堆疊,這些自不必說。程序語言本身也有問題。比如Java,什么類都要加上Manager, Builder, Factory...又丑又重,強類型語言難以對復雜的變化做拓展,於是再被設計模式添油加醋,越寫越復雜。
     於是,弱類型語言就是個好選擇嗎?弱類型語言的動態性要強很多,能動態增加方法和屬性,但這些自由也意味着一定的代價,比如不安全和一系列動態錯誤。這仿佛是現實世界的保守派和自由派一樣,兩派的爭論無休無止。保守派意味着詳細的文檔和規范,嚴格的建模和測試,SQL,穩定的代碼風格,拒絕新特性,各司其職和責任划分。自由派意味着弱類型,腳本風格,NoSQL,先跑起來再說,樂於接受事物,面對變化。很難說哪一派更好,對於銀行業這樣的系統而言,顯然是保守派的天下,而如今世界紛繁多變,搶占市場,快速迭代,到底哪一種思維更好,那就是各位看官們的判斷了。總之不論如何,請好好學習一門弱類型的動態語言,比如Ruby或者Python!
     弱類型有缺點,比如編譯器的自動支持不夠好,但這些問題在未來總歸是能解決的,因為有懂編譯器的大牛搞定,說起編譯器,基本上懂或者寫過編譯器的人,編程水平超出別人一大截(這不是廢話嗎)。於是,在簡歷上寫“搞過編譯器”,那簡直是夜空中閃亮的星!如果我是面試官,一定會首先考慮!你會想這樣對不懂編譯器的大牛們太不公平了吧,可惜,很多事情就是如此的正相關。算法搞得好的人,他的編程,知識和技巧肯定不會差。編譯原理的知識,能夠讓你解決大量很酷的問題,能重新審視寫過的代碼和系統。什么能讓你徹底精通一門語言,那就是設計它的編譯器!
     軟件需要哲學家,因為哲學能幫你更好的理解和抽象問題。而數學也非常重要,學生時代的數學課程有問題,它教了太多對程序員太不實用的東西。如果說普通數學和計算機最大的區別,那就是前者是連續的,而后者是離散的。如果你有機會把離散數學,概率論,線性代數都再學一遍,那么編程水平就會又有一個質的飛越,做到可以隨手寫一個機器學習的算法。
     所以,趁現在還處於黃金年齡,趕緊靜下心來學習吧,有無數值得看的書,要學的數學和算法,要研究的編譯器(也許我真能學點皮毛呢)。避免眼高手低,去把它寫出來。不要問為什么,世界頂級公司的平台,待遇和發展值得你這樣去努力!也許被Google這樣的公司拒絕並不好受,但要知道很多大神也被拒了兩三次之多,無非就是再等半年么,相信我,時間過得很快的!

  堅持做一個傻瓜!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM