《編程人生》部分筆記摘要及個人體會—引領大師編程智慧

《編程人生:15位軟件先驅訪談錄》是一本訪 談筆錄,記錄了當今最具我的魅力的15位軟件先驅的編程生涯。做爲軟件領域的小菜,在閒暇的時候會拿來讀讀,感覺一下大師們的編程風範,給本身懶散的大腦 洗個澡。目前只讀了一部分,也作了一些筆記摘要和個人簡單體會,與你們分享,後期如有機會會繼續補充,引領大師編程智慧。html


1. 一個用C++寫的庫,Python程序員能夠用SWIG封裝它,而Java程序員能夠用JNI封裝,可是這很讓Java程序員感到不爽,由於若JVM崩潰了,咱們根本不會知道是爲何。程序員

體會:隨着編程語言的發展,愈來愈多的語言之間能夠相互嵌入,出現了不少混合編程,好比Java與C++、C#與C++等,Java平臺上的多語言混合編程正 成爲主流,在實際應用中,每種語言均可以針對本身擅長的方面更好的解決問題,這是好的發展方向,但隨之帶來的也有不少麻煩與惱人之處,好比Java中混合 了C++,當JVM崩潰了,還真不知道是Java出了問題仍是嵌入的C++出現了問題,因此不能一味追潮流,而應具體狀況適當選擇。web



2. 爲何要學習多門語言?算法

由於只懂一門語言如Java的話,他們解決問題的思路被侷限在他們的知識範圍內,他們不會全面地思考問題。編程

體會:毋庸置疑,如今優秀的程序員不可能只會一門編程語言,程序員多元化或最近流行的「全棧工程師」(來自知乎上很熱的話題「怎樣成爲全棧工程師(Full Stack Developer)?」)纔是社會將來的發展趨勢,因此爲了能遇上社會潮流,不被淘汰,咱們不能侷限在一門編程語言裏,學的語言多了,你的思惟也會更加廣闊,也許能給你的棘手問題帶來靈感。安全



3. 如何閱讀別人的代碼?閱讀代碼是爲了全面瞭解它是如何工做的,仍是本身想要對代碼作些修改?服務器

若是你崇拜某個程序員,也能夠去讀讀他的代碼,也許你會意識到他們也是凡人,不應成爲你崇拜的對象。你也可能會從他們的代碼中學到一些東西。網絡

若是閱讀代碼是爲了想要修改一些東西:第一步,找個原始的tar文件或者從SVN檢出代碼,試着把工程構建起來。你必定要跨過那道坎,那對多數人來 說是最大的障礙——構建系統時的依賴或者開發者假定你已經安裝了這個庫。我但願這些大項目都能自帶一個虛擬機,也就是它的構建環境。一旦你有了一個乾淨 的、可工做的構建版本,幹掉它,作一個修改,好比把標題欄改爲「」。改變一些東西,即便沒什麼實際意義,只要動手開始去改變就好。而後把你的補丁發出去, 我發現這是最好的開始對話的方法。數據結構

若是隻是想簡單瞭解:大體地看一下,試着去了解目錄結構。而後若是有東西吸引你的注意,或者我對什麼東西不太理解,就隨便選個文件,邊構建邊讀代碼,這是能夠並行的,讀代碼會發現新的模式,也許會對你有幫助。編程語言

體會:我也是最近幾個月纔開始閱讀別人的源碼的,我第一個閱讀的是Google工程師寫的代碼,雖然沒有徹底看懂,但的確學到了不少東西,好比他們代碼的構建模式、編程風格(好比Google Java編程風格指南中文版)、採用的測試方案(從Google開源RE2庫學習到的C++測試方案)等, 很是規範,這是Google全部工程師都有的風格。雖然每一個公司都有本身的一套編程規範,但從他們的風格里仍是能學到不少你沒有注意到的東西。固然,若是 你只是爲了學習,那麼不用徹底一個個文件的細看每一個函數,只須要大體瞭解它們的總體模式便可;若是你是爲了修改,那麼就須要按需細看某些文件,在此基礎上 實現本身的需求。



4. 怎麼強迫本身不去逛那些浪費時間的網站?

能夠用iptables重定向這些網站到你本身的web服務器,上面寫着「你正在工做,不是嗎?」

體會:這貌似是geek們的作法大笑。若是你以爲該方法有效,那麼能夠施行。對於吾等普通程序員,個人作法是將一天中最重要的事情列個清單,工做的時候把清單放在鍵盤上,強迫本身先把這些事情作完了,有剩餘時間纔有機會去放鬆一下。我最近在使用一款時間收集工具「RescueTime」,能夠詳細的記錄到你在電腦上使用任何一個應用所花費的時間,若是是瀏覽網站能夠詳細的記錄到你在某一個網站上停留時間,而後作個報告呈現給你。不少人推薦,我也不知道怎麼樣,正在試用期。



5. 對程序員來講什麼纔是最重要的技能?

像科學家那樣思考,一次改變同樣東西。

有耐心,試着去了解問題的本質。尤爲是在調試或者設計不太正常的東西時更應該這樣。我看到過年輕程序員在那裏抱怨:哦,見鬼,這個東西運行不了。而後就把它完全重寫了。其實應該停下看看究竟發生了什麼。

要學會增量地開發,這樣每一步你都能進行驗證。

體會:「耐心」真的是很重要也是很難的技能,隨着社會快節奏的發展,人們愈來愈不淡定,很是心浮氣躁,咱們程序員這行亦是如此。遇到個難解決的bug就氣憤的想要砸掉鍵盤,維護上屆員工寫的老代碼,巴不得重寫也不想在他們基礎上作修訂,由於沒耐心。我本身也是的,看書看到不懂的地方就合上書本看不下去,也沒想借助網絡慢慢搞懂它,不能認清問題的本質。我只能說,沒有耐心,這是社會的通病,得治。



6. 你爲何極力反對C++?

使用C++,一切變得臃腫不堪,另外還引入了大量兼容性問題,由於用C++編程時,沒人能判定C++哪部分是能夠安全使用的。有個傢伙說他要用模板,結果你會發現,沒有哪兩個編譯器實現模板的機制是同樣的。最後,C++不能跨平臺。

體會:這種說法固然很片面。每種語言都有其極度擁護者和極度反對者,咱們不能偏向任何一方,而應該全面看待,在這裏咱們能夠學習到C++的缺點:安全問題、兼容性問題、跨平臺問題等。但C++的優勢也是很多的:面向對象、更多封裝的庫、類型更加安全等。前段時間看了個視頻「C++之父 Bjarne Stroustrup 9月4日在 GoingNative 2013 大會上長達1個半小時的主題演講《The Essence of C++: With Examples in C++84, C++98, C++11, and C++14》」仍是挺不錯的,我我的才疏學淺,不能對它們作很好的評價。



7. 軟件領域也有不少工程方面的問題。有這麼一個笑話:若是用造軟件的方法來蓋摩天大樓,那第一隻啄木鳥就能毀掉文明世界。

體會:第一句毋庸置疑,軟件工程師不就是用來解決工程問題的嗎?固然也有非工程問題,不然學數據結構、學算法是幹嗎用的。後面這個笑話很具備諷刺意味,寓意咱們軟件工程師對工程方面的問題解決的一直不使人滿意。

相關文章
相關標籤/搜索