1. 選哪一種醫生?
作為一個軟件工程師, 你覺得自己表現如何? 有沒有這樣的體會:
看書的時候覺得“技止此耳”,開發項目的時候才覺得實際情況和書上講的都有一些出入,一些重要的細節書上沒有提。我們很多人是邊看Asp.net的書, 邊開發Asp.net 的項目,這相當於一邊看醫學書一邊動手術……
如果你是病人,你希望你的醫生是下面的哪一種呢?
a) 剛剛在書上看到你的病例, 開刀的過程中非常認真嚴謹, 時不時還要停下來翻書看看……
b) 富有創新意識, 開刀時突然想到一個新技術、 新的刀法, 然后馬上在你身上試驗……
c) 已經處理過很多類似的病例, 可以一邊給你開刀, 一邊和護士聊天說昨天晚上的 《非誠勿擾》花絮……
d) 此醫生無正式文憑或正式醫院的認證, 但是號稱有秘方, 可治百病。
事實上,很多軟件項目就是用 a)或者 b) 這樣的方法搞出來的。當然也有一些人走 d) 這條路。
討論: ① 你要選哪種類型的醫生?② 醫生、葯劑師、律師和很多行業都有職業考試和職業證書,軟件工程師需要有正式的職業證書才能上崗么? 請參考Steve McConnell 的觀點[i]。
2. 工程還是藝術
軟件開發是一門工程(Engineering), 是一門藝術(Art),還是一門手藝(Craftmanship)? 你如何衡量藝術家? 如何衡量創造能力?
如果是一門工程, 那工程師要守規矩; 如果是一門藝術, 那藝術家要創新。
- 寫詩歌最多的人是誰?
- 最有創造力的詩人是誰?
一些最有影響力的作家,他們的作品都非常少,甚至只有一本,例如:
- 《飄》 (Gone with the Wind) 作者 Margaret Mitchell[ii]
- 《紅樓夢》,作者曹雪芹(這一本據說都沒寫完!)
另外,優秀的作品往往並不符合所有“好”的標准。例如,找出下面這首詞中重復的字:
念奴嬌 · 赤壁懷古 - 蘇軾
大江東去,浪淘盡,
千古風流人物。
故壘西邊,人道是,三國周郎赤壁。
亂石崩雲,驚濤裂岸,卷起千堆雪。
江山如畫,一時多少豪傑。
遙想公謹當年,小喬初嫁了。
羽扇綸巾,談笑間,檣櫓灰飛煙滅。
故國神游,多情應笑我,早生華發。
人生如夢,一樽還酹江月。
出現了三遍的字有: 江,人; 出現了兩遍的字有: 國,生,千,故,如。這符合“好詞”的標准么?
南宋人俞文豹評價道:
今人看人文字,未論其大體如何,先且指點重字。
軟件設計工程師們在做代碼復審的時候,是看“重復字”的多少, 還是程序的藝術性?
這個問題的另一個側面是,在中國,一個成名的歌唱家往往出現在各種場合,演唱她當年成名的作品,觀眾們往往顯得百聽不厭。一個軟件工程師就不能這樣,在舞台上展現他當年寫的“hello world” 程序,或者是1.0 的產品。為啥有這樣的區別呢?
3. 絞刑架和職業發展
移山公司的人力資源總監給同學們做了職業發展的演講,大意是隨着軟件工具和軟件工程理論的發展,開發軟件將會越來越容易,軟件企業的水平都是CMMi4級以上。軟件白領的生活指日可待,金領也不是夢,大家前途無可限量,學軟件工程的同學越來越多,就是明證。大家紛紛鼓掌。最后他分享了一個故事:
兩個劫匪在亡命的路上看到一副絞刑架,劫匪小弟說,大哥,如果這世界上沒有絞刑架,咱們的職業就好干多了。大哥說:你真笨!如果沒有了它,這世上做劫匪的人怕是太多,我倆恐怕競爭不過同行,早就餓死了!
請同學們思考這個故事對個人及軟件業發展的啟示。
4. 案例
程序員小飛原計划三天完成某個任務,現在是第三天的下午,他馬上就可以做完。但是在實現功能的過程中, 他越來越意識到自己原來設計中的弱點,他應該采取另一個辦法,才能避免后面集成階段的額外工作。但是他如果現在就改弦更張,那勢必要影響自己原來估計的准確性,並且會花費額外的時間,這樣他的老板,同事也許會因此看不起他。如果他按部就班地按既定設計完成,最后整個團隊還要花更多時間在后續集成上,但那就不是他個人的問題了。怎么辦?
5. 成長和代碼量的關系
軟件工程師的工作就是寫代碼,相關專業的練習也是以閱讀代碼,寫代碼為主,那么代碼量和工程師的水平是線性的關系么?
這個問題有人還研究過:
http://www.techug.com/norris-numbers (翻譯)
http://www.teamten.com/lawrence/writings/norris-numbers.html (原文)
當代碼是在2,000行以下,程序員可以用 “寫了再改” 的蠻干方法,並且靠記憶力搞定一個程序,但是, 如果你的代碼規模達到20,000行,你要用結構化編程(類,模塊,API,細節隱藏,面向對象的其它方法,等)來保證程序不變成一團亂麻。 如果代碼規模再大一個數量級, 20萬,200萬呢?
6. 成長和公司的關系
絕大部分的工程師都在某一個企業工作,工程師的成長也和企業的興衰有很大關系。企業興旺,工程師也是與有榮焉,很多人覺得是自己的功勞,理所應當提薪升職;企業衰落,很多工程師未必覺得是自己的問題(我的代碼很好的,都是經理,市場,老大的問題!); 企業最后要裁員,很多人為了一些補償和企業產生糾紛。
幾個例子:
http://weibo.com/1620213837/BgSGLhdAe
http://www.csdn.net/article/2014-09-29/2821931
http://www.csdn.net/article/2014-10-01/2821945
http://blog.jobbole.com/93320/
職業發展的梯子,有什么優缺點:
https://blog.usejournal.com/the-software-engineering-job-ladder-4bf70b4c24f3

鄧寧·克魯格心理效應,又稱達克效應(Dunning-Kruger effect),簡單說就是一種認知偏差,在某些領域能力欠缺的人總有一種虛幻的自我優越感,認為自己比真實情況更加了解並擅長這一領域的事情;但隨着知識的完善,他們會意識到自己的不足,通過不斷學習,逐步達到真正意義上的優秀。
[i] Professional Software Development, ISBN 0-321-19367-9 作者:Steve McConnell, 出版社:Addison-Wesley
http://blog.csdn.net/haoel/article/details/1688104