現代軟件工程 第三章 【軟件工程師的成長】練習與討論


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 

那么,軟件工程師在企業中是勞動密集型的工人么,還是有獨創性的專業人士? 他們對軟件企業的成敗負多大的責任?
 
7. 對職業梯子 (career ladder) 的思考:
從初學到精通(找到工作)的幾個階段,真遺憾,它不是勻速上升的:
 
 
8. 自知之明
我們經常看到一些IT 專業的同學,同事,或者專家對一些事情進行評論,並且表現得頭頭是道,他們真的懂多少,他們有自知之明么? 你在剛學習某個語言或技術的時候,是否也有這種現象?
   
 
類似的文章有:
     http://stock.jrj.com.cn/2018/11/29101425420269.shtml   或者搜索 “愚昧之巔 開悟之坡” 

鄧寧·克魯格心理效應,又稱達克效應(Dunning-Kruger effect),簡單說就是一種認知偏差,在某些領域能力欠缺的人總有一種虛幻的自我優越感,認為自己比真實情況更加了解並擅長這一領域的事情;但隨着知識的完善,他們會意識到自己的不足,通過不斷學習,逐步達到真正意義上的優秀。

9. 同學們在上這門課的時候,都是大二,大三, 你的困難和迷茫,別人一定有過。請看看別人怎么學習的,有些是科班,有些是野路子,有些成功,有些失敗。 請讀完下面所有博客 (讀完這些博客你不吃虧,你也不上當!),談談自己的感想,你現在的條件比他們如何? 你對計算機的熱愛僅僅是口頭的么? IT 專業的技術道路, 職業道路,社會道路怎么計划呢?
 
    http://www.jianshu.com/p/67a0cf352986  (光口頭上說 “熱愛” 是遠遠不夠的 )
    http://www.cnblogs.com/geniusalex/p/4928713.html (速成的培訓班和打基礎的大學教育有區別么)
    http://www.cnblogs.com/Tpf386/p/4798437.html 很多同學看不起大學老師按部就班地教課,他們心想,我看視頻也能學會的,為何要來聽課?請看這個學生學習的經歷。

 

[i]      Professional Software Development, ISBN 0-321-19367-9 作者:Steve McConnell, 出版社:Addison-Wesley


免責聲明!

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



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