第一部分 : 人員管理
1 我的第一次BillG審查:
在這個小結里面,作者通過回憶在微軟工作的時候,自己設計Excel函數語言的時候被比爾蓋茨做例行審查,蓋茨在作者提交的規格說明上認真做了筆記,審查的時候問了非常細致的問題,包括一個在之前產品出現的日期函數錯誤問題。作者通過將比爾蓋茨與其他幾位不懂技術的大公司高管對比,得出結論。
“不懂編程的人管理公司,就好像不懂沖浪的人硬要去沖浪。”
我比較贊同作者的這一想法,通過自己為數不多的項目經驗,我也能體會到一個內行的leader對一個軟件項目的成功起到決定性的作用。假如團隊的領導只遵循經濟,管理或者其他一些行業的經驗,盲目地參與到軟件開發的需求獲取,設計甚至系統架構過程中,那么這個項目十有八九會遭遇失敗。
2 尋找優秀的程序員
3 尋找優秀的程序員之實戰指南
這兩節中,作者從理論和實踐上向管理者傳授了如何識別和招攬優秀程序員的方法。有一個觀點說得很有道理,優秀的程序員不會出現在各類招聘市場和求職網站上,因為他們在一開始就會早早地從一個較好的實習公司得到機會,不用去找其他工作。如果它們離開了當初的公司,一種情況是創業,一種是跟著老板跳槽到另一家公司。這里我想說,優秀的程序員也可能是因為有很多獵頭和一些公司的HR會主動聯系他們而不會出現在招聘市場上。那么如何招攬優秀的程序員呢?作者就給出了創建技術社區,去名校招攬實習生作為人才儲備,還有就是內部員工推薦,當然最好的方法還是使自己的產品足夠有吸引力,無論是在前景或者經濟或者技術上。同時在社交、生活等方面,要尊重程序員的成果,給予他們一定程度的自主權。看到這里我想起了馬云曾說過的關于人才管理的一句話,員工為什么離職?要么是錢沒給到位,要么是心受委屈了。真是切中要害。
在第三節,作者說程序員實際上不在乎錢,當有人在抱怨薪水的時候,說明他不是真正地喜歡現在的工作。這實際上跟我所處的環境的所見所聞有所不同。我所看到的周邊的同學,在找工作的時候薪資的因素會考慮比較重的分量。大概是因為國情不同吧,我們這邊的習慣是結婚成家必須有房子,有車更好,所以大家在經濟上的壓力還是比較大的。不過有一個現象是合理的,就是技術越強的人,能夠找到自己滿意薪資的職位的概率越大,薪水的水平也一般在最高的水平。
4 三種管理方法
5 軍事化管理法
6 經濟利益驅動法
7 認同法
在人員管理中比較流行的三種方法是軍事化管理法、經濟利益驅動法和認同法。軍事化管理方法絕對不適用于程序員的管理。因為程序工作是創造性的工作,軍事化管理需要的是絕對服從和嚴明的層級關系,這只會抹殺創造力,造成公司的人員僵化,從而極大降低工作效率。經濟利益驅動的缺點是他將工作的驅動力從強大的內部驅動轉變為相對弱的外部驅動。還有可能使程序員們具有局部利益最大化傾向,從而使他們的目標從優雅高效地實現需求轉為考慮如何使得自己獲得的酬勞最大化。而認同法,指的是使員工們認同你希望達到的目標。這種方法被認為是管理程序員最好的方法,但是實施起來也比較困難。結合我自己的經歷,我非常贊同認同法是管理軟件團隊最好的方法,但是更同意它是一種實現起來比較困難的方法。可以說在我接觸的程序員中,絕大多數都不是說對自己做出的東西有多么的認同。但是我認識的那兩三位真正在做自己非常喜歡做的技術和產品的同學,都已經取得了相當的成就。
第二部分 :寫給未來程序員的建議:
8 學校只教Java的危險性
作者的觀點是,Java這門語言可能很適合工作,但是它的出現給程序員的教育帶來負面影響。Java的出現屏蔽了一些類似指針和底層函數等能夠區分程序員學習能力和智商能力的語法點,使得優秀的程序員和平庸程序員之間的差異變得不再突出。Java使同學們變得越來越懶。作為一個在學習和工作中主要使用Java語言的碼農,我表示雖然很不情愿,但是作者說的對。雖然我們學校不是作者所說的只教Java的學校,但是我們院出來的同學好像都是把Java作為主要語言。仔細回想,我們的C++課,Linux課,我自己確實學得都不太好。希望能在之后的工作中,不怕吃苦,不懼困難,努力提高自己的技術全面性吧。
9 在耶魯大學的演講
10 給計算機系學生的建議
這兩節中,作者給出了他對計算機類學生的建議。主要是7個方面:
畢業前練好寫作;
畢業前學好C語言;
畢業前學好微觀經濟學;
不要因為枯燥就不選修非計算機專業的課程;
選修有大量編程實踐的課程
別擔心所有工作都被印度人搶走;
找一份好的暑期實習工作;
對這七條建議,就我自己而言可能就選修大量實踐課程稍微符合。相信大家跟我一樣,對印度人搶工作的說法比較感興趣。原來在美帝各個行業都在擔心中國和印度會搶他們的飯碗,看來人多力量大在IT領域的宏觀觀察方面還是靠點譜的。針對這種想法,一是真正優秀的程序員根本不會怕失去工作,二是除了計算機,其他的專業找工作的時候更坑爹,就作者的這兩種觀點,我無法反駁。
第三部分 :設計的作用
11 字體平滑、反鋸齒和次像素渲染
這節的內容是作者通過比較微軟和蘋果對字體鋸齒處理時候的不同思想,得出蘋果重視桌面和出版物的設計效果,而微軟則更傾向于實用性,但是這兩種設計思想都會得到各自用戶的認可。然后作者拋出觀點:一般情況下,用戶在面對模棱兩可的選擇的時候,會傾向于自己習慣的那種。
12 寸土必爭
在開發商業軟件的時候,我們應該對每一個細節反復思量,不放過任何能夠產生正作用的微小改進。
我覺得就是這樣,在產品上,所謂制作精良和粗糙的對比,對比的就是細節。就我們編寫代碼來說,當你的每個組件,每個函數都考慮算法和效率以及寫法的優雅性,那么我們整個項目就不會說搞得很雜亂,很難看。
13 大構想的陷阱
本節是對《夢斷代碼》一書的評論。作者指出:在軟件開發中,如果你頭腦提前有了一個整體構想然后馬上一頭扎入工作去實現,那么久陷入了所謂的“構想陷阱”。一是對自己的構想過于自信,二是沒有考慮團隊溝通的問題。
其實我覺得就是針對這種陷阱,我們才有了后來軟件開發過程中的需求分析,體系結構,模塊設計,詳細設計等階段。不過凡事皆須有度吧,由于軟件開發的特殊性,有時候我們按部就班地做了這些工作后發現,其實所有階段的產出都被后續階段修改的面目全非,那么這些階段產物的維護管理又是很大的開銷。所以,我們又有了敏捷開發的快速迭代模式。具體怎么搞,這個過程究竟是要多大程度上使用傳統的軟件工程迭代和敏捷開發,感覺還是要根據具體項目和團隊成員來確定。
14 別給用戶太多選擇
“關閉筆記本竟然有15種不同的方法”,這是作者本節對微軟vista操作系統的吐槽。
像這種問題,當一個功能的解決方案有很多備選的時候,我覺得正確之道是做一個調查,選出大家最認可的兩三種保留,其他的可以一概不要。
15 易用性是不夠的
本節旨在說明做好易用性的下一步是做好社會化界面的設計:主要包括界面的協調性、功能可見性、反饋性等。這章感覺沒什么新意。
16 用軟件搭建社區
程序員由于工作性質,一般比較宅,但是每個人都具有社會性,程序員也會渴望有多一點而的人際交往。于是他們涌向在線社區。我覺得我自己就是這樣的,除了微信朋友圈之外,我經常刷知乎,微博,水虎撲論壇等。感覺技術上的社區對程序員之間的交流作用比較大,這里推薦一下v2ex, 程序員專屬的交流場所。
第四部分 :管理大型項目
17 火星人的耳機
“Web標準”非常混亂,作者舉了IE7和IE8之間沖突的例子。實際上由于這些混亂的標準,現在IE在前端界根本不受待見,幾乎稍微現代一點的網頁項目都是只需要在chrome和firefox里面運行正常就可以了。
然后作者就舉了一個為火星人造耳機的例子來說明開發者面對各種各樣不同的“標準”是怎樣崩潰的。
18 為什么Microsoft Office的文件格式如此復雜
08年,微軟公開了Office文件的二進制格式說明書,光Excel有349頁那么多都沒說完。然后作者說,要寫出能與Office競爭,完美讀取和生成所有Office文件的軟件,需要幾千年的工作量。我覺得金山WPS可能需要傳授作者一點人生的經驗。可能作者這里說的是一個人開發出所有的Office 辦公軟件吧。當然,這確實不太現實。
19 要掙錢,就別怕臟
這既是針對軟件公司的運營來說的。包括業務推廣,招聘各類型的人才,客戶量的激增之后帶來的各種麻煩。總而言之,創業在當今并不是隨便找兩個人搞個APP發布了,靠吹吹牛拉點投資就能叫創業那是非常可笑的想法。