最近,我突然發(fā)覺了自己對管理學的濃厚興趣。不得不說what you believe determine what you achieve,一個growing mindset(成長性思維模式)真的能發(fā)覺原本以為“我做不到”的才能。
這學期伊始,發(fā)現(xiàn)課程單上有一門software engineer I,意思是“一學年課”的上半截,下學期上II。也就是說,如果要在學這門課的話,要么等到暑假,要么等兩學期。但是選課之后并沒有太多驚喜,于是退課。
grainger圖書館三樓東北面的書架上有一本softerware engineering 6th edition,人說:“就算在項目中不實際動手編寫程序,也要懂得軟件工程?!?。看了這本書的第一章(介紹)和第22章(管理),我深得體會。
軟件工程強調的是:
1,客戶的要求
2,軟件合理性(validity)
3,軟件高效性(efficience)
要完成以上三點,需要經理和客戶、團隊保持有效溝通。
我更感興趣是管理方面。畢竟成也是人、敗也是人?!叭恕辈粌H僅指代工程師,也包括客戶和管理者。
談到管理學,人們首先想到的是類似官僚體制里的行為——上下級層層分明,統(tǒng)一的溝通方法(打報告),統(tǒng)一的任務派送方式(發(fā)郵件)。然而并不是這樣,這本書是從認知科學(cognitive science)和心理學(psychology)展開——
人的記憶有三類:感官記憶、工作記憶、長期記憶(或者又叫短中長)。在編程領域,我們既要學習程序的內在邏輯(條件、循環(huán),以及它們的應用—排序,等等),還要學習程序語言。前者稱之為“語義知識”,后者稱為“語法知識”,來源于語言學。并且“語義”是獨立于語言的(英語、漢語中都有“我”這個概念),“語法”是必然和語言相關的(Pascal的begin-end,C++的{})。
在計算機編程入門課上,學生們往往會糾結于像“排序、數(shù)據(jù)結構”這樣的語義知識,而且不那么有經驗的教師往往或陷入“知識陷阱”——意味一個內行沒有辦法提取出能教會外行的關鍵信息。但在高級編程課上,學生們熟悉起一門語言來要比之前快多了??傊?,學習編程語言的語義知識要比語法知識難。
對于合格軟件程序員來說,“語義知識”應當被存儲在長期記憶中;要解決的總問題、各個擊破的分問題和部分解發(fā),最后,總解法(也就是程序框架)應當放在工作記憶中,這就要求程序設計的簡介明了,段落格式統(tǒng)一,并且方便記憶(結構化編程(if then while do...)、面向對象(animal->dog->哈士奇.function_犯二)編程)
接下來我們想知道軟件工程的方法論:
Building an internal semantic model of the problem and a corresponding model of the solution. When the model has been built, it may be represented in any appropriated syntactic notation.
- 1 Integrate existing computer and task knowledge to create new knowledge and hence understand the problem.
- 2 Construct a semantic model of the solution, Test this against the problem and refine it until it is satisfactory.
- 3 Represent the model in some programming language or design notation
方法論是個大框架,時不時參考一下,確保沒有偏離軌道。具體問題具體解決。
俗話說,成也是人,敗也是人。
那么在軟件項目中我們會遇到什么樣的人呢?
- 1 面向技術:把解決技術難題當成樂趣的人,同時在項目初期的結構搭建上起關鍵作用。
- 2 面向自我: 我編程,我快樂。別不信,真有這種人。
- 3 面向互動:與團隊成員密切溝通,跟蹤項目進度,問出好問題。在項目中后期起關鍵作用。
如果經理人沒有選人限制的話,需要均勻分配這三種人格的成員。
人選好了,項目框架完成,workload也讓不至于溢出人腦主存。那么如何讓激勵人們的熱情呢?
馬斯洛需求層理論說:活著-》溫飽-》社交-》尊嚴感(被尊重)-》自我實現(xiàn)。軟件工程里,前兩項需求還是能滿足的。社交,也就是溝通,需要面向互動人格的成員來領頭,這是他們的工作。尊嚴感的建設需要用到“Milestone”這個概念;在框架搭建好之后,設立幾個“里程碑”,沖刺到達之后慶祝,然后再向下一個里程碑沖刺。
而自我實現(xiàn)這一塊兒,可以用“激情”,“改變世界”或者“做偉大的產品”哄騙之(笑)。
我們之前的選人假設是“沒有選人限制”。那么如果公司資源緊張怎么辦。那就需要團隊建設了。
團隊粘性(cohesiveness)
像軟件工程一樣快速前進的行業(yè)里,新人往往有比老人更與時俱進、受到更好的教育,要么是新人不服老人,要么反之;或者是首席工程師貢獻了絕大多數(shù)代碼,讓其他成員失去參與感。軟件工程有很高的管理難度。
這就是我們?yōu)槭裁匆ㄔO團隊粘性。
它有4個好處:
- 1 統(tǒng)一的代碼標準
- 2 團隊緊密工作,互相學習
- 3 團隊成員知曉互相的進度
- 4 無私編程(Egoless programming)
無私編程是指設計、編程和文檔被當作團隊的夠公有產出。這樣人們不會在乎別人對自己代碼提出批評,也更加敢于干涉別人貢獻的代碼。
對于團隊粘性幫助最大的,莫過于信息透明,把他們當作負責任、能信任的人。就算經理想隱瞞什么,這最終也會導致不信任的氣氛。