2016年9月8日(軟件工程之管理篇)

最近,我突然發(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)

無私編程是指設計、編程和文檔被當作團隊的夠公有產出。這樣人們不會在乎別人對自己代碼提出批評,也更加敢于干涉別人貢獻的代碼。

對于團隊粘性幫助最大的,莫過于信息透明,把他們當作負責任、能信任的人。就算經理想隱瞞什么,這最終也會導致不信任的氣氛。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,881評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 外在因素。 1 客流量變少。2服務 內在因素 1 個人手法 和客勤 和話術 2可以免費泊車 3來樓...
    理思艷閱讀 161評論 0 0
  • Leo_2dab閱讀 143評論 0 0
  • 所有忘卻的, 都是不應該的。 因為在我活著的時候, 注定我的母體會死去。 那是我的藥,卻在蠶食我的母體 寧愿是屈辱...
    達魯花赤閱讀 170評論 0 0

友情鏈接更多精彩內容