您好,登錄后才能下訂單哦!
Advanced Software Engineering 現代軟件工程 講義
介紹: 個人軟件流程, 職業發展, 個人績效的衡量和提高, 軟件開發是科學, 工程, 手藝, 或是藝術?
我們剛講了軟件工程, 它包括了什么呢?
軟件工程包括了開發,運營, 維護軟件的過程中有很多技術, 做法, 習慣, 和思想。軟件工程把這些相關的技術和過程統一到一個體系中, 叫 “軟件開發流程”,軟件開發流程的目的是為了提高軟件開發, 運營, 維護的效率,以及用戶滿意度, 可靠性,和軟件的可維護性。 |
軟件開發流程不光指團隊的流程, 軟件團隊是由個人組成的。在團隊的大流程中, 是每一個具體的個人在做開發,測試,用戶界面設計,管理,交流等工作。因此, 個人在軟件團隊中也有個人的流程。
個人的勞動成果有序地組織起來, 就是團隊的流程。這里說的“有序”, 并不是“無爭論”, 在大部分成功的軟件團隊模型中, 各個角色(開發, 測試, 項目管理等)考慮問題的出發點是有區別的, 不同意見的沖突在所難免, 一個好的團隊流程能把沖突的積極方面 (各自盡力把自己的工作做好,說服別人) 釋放出來,而避免消極方面 (因為沖突而產生的消極,抵觸情緒等)。
我們用足球作一個比喻: 足球中有沒有個人流程? 當然有, 職業球隊對于運動員有很嚴格的要求: 例如:
體能, 技術, 意識, 斗志
具體技術有傳接,盤帶,射門, 定位球, 跑位, 等。一些特定的角色(守門員)還有獨特的技術要求。
足球的團隊有沒有流程? 當然有:
陣型, 配合, 臨場應變
足球隊有不少 “陣型” (442, 433, 451和它們的各種變體, 等等) 和打法 (南美,歐洲,技術,力量, 小快靈, 搶逼圍, 兩翼齊飛, 全攻全守, 等等).
盡管有這么多理論, 足球的每一次盤帶, 傳球, 跑動, 射門,撲救,都是單個運動員完成的。 如果單個運動員的技術, 體能不行, 無論是什么陣型用處都不大,有些陣型反而會起反作用, 例如, 讓體力弱的球隊去打全攻全守。
軟件也是這樣。
軟件系統的絕大部分模塊都是由個人開發或維護的。在軟件工程的術語中, 我們把這些單個的成員叫做 Individual Contributor (IC).
IC 在團隊中的流程是怎么樣的呢? 我們以開發人員為例:
理解問題或任務
提出多種解決辦法并估計工作量
其中包括尋找以前的解決方案,因為很多工作是重復性的 – 例如實現某些類似的web頁面。
與相關角色交流解決問題的提案, 決定最終方案
執行, 把想法變成實際中能工作的代碼
修復缺陷, 對結果負責
每個人的工作質量直接影響最終軟件的質量。
作為一個軟件工程師, 你覺得自己表現如何? 有沒有這樣的體會:
看書的時候覺得“技止此耳”,開發項目的時候才覺得實際情況和書上講的都有一些出入,一些重要的細節書上沒有提。我們很多人是邊看asp.net的書, 邊開發asp.net 的項目,這相當于一邊看醫學書一邊動手術。。。
如果你是病人, 你希望你的醫生是下面的那一種呢?
a) 剛剛在書上看到你的病例, 開刀的過程中非常認真嚴謹, 時不時還要停下來翻書看看…
b) 富有創新意識, 開刀時突然想到一個新技術, 新的刀法, 然后馬上在你身上試驗…
c) 已經處理過很多類似的病例, 可以一邊給你開刀, 一邊和護士聊天說昨天晚上放的 《非誠勿擾》的花絮…
d) 此醫生無正式文憑或醫院, 但是號稱有秘方, 可治百病。
e) 還有這一類, 給你開刀到一半的時候, 出去玩去了, 快下班的時候, 他們匆匆趕回來, 胡搞一氣, 給你再縫好, 打了很多麻藥,就把你送出了院, 說“治好了”!
事實上, 很多軟件項目就是用 a) b) 這樣的方法搞出來的。當然也有一些人走 d) 這條路。 e) 這一種可以在很多大學生軟件大作業上看到例子。
如果我可以選擇, 我要選 c) 那樣的醫生。
職業成長– Steve McConnell 版本:
Steve McConnell 創立的公司 (Construx Software) 為員工提供了下面的成長路徑。
知識:把相關的軟件知識分為十大知識領域。
能力:一個工程師對這些知識的掌握分為如下四個階段:
入門 (Introductory); 熟練 (Competency); 帶頭人 (Leadership); 大師 (Mastery)
職業成長級別 (Professional Development Ladder):
把工程師分為6個級別 ( 9 – 15) 每一個工程師屬于一個技術等級。一個工程師要從一個級別升到另一個級別, 需要在各方面達到一定的要求。例如, 要達到 level12 ,工程師必須在三個知識領域達到“帶頭人”水平。 例如要到達“工程管理 (知識領域) 的熟練 (能力)”水平,工程師必須要做到以下幾點:
· 閱讀: 4-6 個經典文獻的深入分析和閱讀
· 工作經驗: 要參與并完成6 個具體的工作
· 課程:要參加3 個專門的課程
有些水平還要求工程師獲得某種專業證書,在工業界,教育界教課, 發表論文等等。
微軟公司針對軟件工程師的職業發展也有很完備的規劃和支持。這方面的資料比較多, 這里簡單地以軟件開發工程師為例說明一下。 下面的解釋部分來自于 Eric Brechner 的書– Hard Code (link)
SDE (初級軟件開發工程師)
入門。在學校里學到了一些技能, 但是還沒有在實踐中得到充分鍛煉。
SDE II (中級軟件開發工程師)
獨立。可以寫別人交給你的任何東西。如果你不懂, 你知道去問誰。
Senior SDE (高級軟件開發工程師)
小組領導。影響著3 – 12 個工程師, 或者是他們的行政領導; 或者是他們的技術帶頭人。怎么顯示領導力呢? 這有幾個例子:
· 你當過新員工的導師么? 他們后來都尊重你的種種教誨么?
· 你是否成為別人的榜樣? (寫的代碼, 做的設計, 別人可以拿來重用)
· 你在招人方面是否有心得, 并言傳身教, 讓大家都認識到面試的重要性和各種技巧。
· 你是否創立/改進/推動一些流程, 而且這些流程不需要你親自參與,也能流傳下去?
· 在和別的角色 (例如, UX/PM/QA) 打交道的時候, 你往往都能贏得別人的支持, 而不是和別人爭執, 抱怨不休?
Principal SDE (首席軟件開發工程師)
團隊領導。影響著12 人以上的一個大團隊, 成為影響團隊成敗的關鍵人物。
Partner SDE, Distinguished Engineer, Technical Fellow
影響力擴大到整個機構,甚至工業界。
IT業界的不少專家也對于程序員的成長提出了不少好的建議. 例如:
這本書的副標題是“from journeyman to master”,從打下手的小工到大師。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。