天天看點

《程式設計人生》部分筆記摘要及我的體會—引領大師程式設計智慧

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

1. 一個用C++寫的庫,Python程式員可以用SWIG封裝它,而Java程式員可以用JNI封裝,但是這很讓Java程式員感到不爽,因為若JVM崩潰了,我們根本不會知道是為什麼。

體會:随着程式設計語言的發展,越來越多的語言之間可以互相嵌入,出現了很多混合程式設計,比如Java與C++、C#與C++等,Java平台上的多語言混合程式設計正

成為主流,在實際應用中,每種語言都可以針對自己擅長的方面更好的解決問題,這是好的發展方向,但随之帶來的也有很多麻煩與惱人之處,比如Java中混合

了C++,當JVM崩潰了,還真不知道是Java出了問題還是嵌入的C++出現了問題,是以不能一味追潮流,而應具體情況适當選擇。

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. 軟體領域也有很多工程方面的問題。有這麼一個笑話:如果用造軟體的方法來蓋摩天大樓,那第一隻啄木鳥就能毀掉文明世界。

體會:第一句毋庸置疑,軟體工程師不就是用來解決工程問題的嗎?當然也有非工程問題,否則學資料結構、學算法是幹嘛用的。後面這個笑話很具有諷刺意味,寓意我們軟體工程師對工程方面的問題解決的一直不令人滿意。

《程式設計人生》部分筆記摘要及我的體會—引領大師程式設計智慧

作者:Alexia(minmin)

如果您認為閱讀這篇部落格讓您有些收獲,不妨點選一下右下角的【推薦】

如果您希望與我交流互動,歡迎微網誌互粉

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

繼續閱讀