1. 程式人生 > >個人作業3-(Alpha階段)

個人作業3-(Alpha階段)

命令行工具 叠代 big 價值 管理工具 導致 自動化測試 並行 中間

201421123108 王坤彬 網絡1414

一、 總結自己的alpha 過程

1.團隊的整體情況

Alpha階段我們團隊項目進行的很順利,這跟隊長合理的計劃和安排以及我們每位成員的積極配合是分不開的。雖然中間也出現了“小插曲”,但是問題的出現根本難不倒我們。我們分析了出現問題的原因,意義排查。這中間有很多的因素,時間的預估不足是最主要的。發現這個問題後,隊長對我們的工作做出了調整,整個團隊奮起直追,進度也趕上了。雖然最終團隊博客的得分不是最高的,但是我們每一位在這個過程中都盡職盡責,大家一起發現問題、解決問題,學到了團隊協作的重要性,學到了完成一個項目所該具備的素質。

2.我做了哪些工作

我們做的項目是 24點計算,我們的工作都是隊長分配好的。我主要完成:團隊部分博客;項目需求分析;項目演講

3.我是否完成了pm分配的任務

完成PM分配的全部任務

4.不足的地方

我個人在編程方面能力不強,這導致我在整個過程都主動。沒有在團隊需要出謀劃策的時候提出有用的意見。

5.對團隊的建議

我們隊長是很好的隊長,隊員是很好的隊員。在合作中,隊長有時候會少分配工作給我們,自己做的比較多,我覺得隊長工作要分配公平,大家該盡其所能,隊長本來責任就重。在分配完任務後,大家都很積極,會按時完成自己的工作,這是因為我們隊有監督機制,所以才能按時完成任務。

二、提出問題(軟件工程)

【大家一定會在過程中產生了很多問題, 結合你的讀書(教材,博客,參考書), 實踐, 提出關於軟件工程的 5 個問題。

  1. 在每個問題後面,請說明哪一章節的什麽內容引起了你的提問,提供一些上下文。
  2. 列出一些事例或資料,支持你的提問 。
  3. 說說你提問題的原因,你說因為自己的假設和書中的不同而提問,還是不懂書中的術語,還是對推理過程有疑問,還是書中的描述和你的經驗(直接經驗或間接經驗)矛盾?
    • 一個模板可以是這樣:
      我看了這一段文字 (引用文字),有這個問題 (提出問題)。 我查了資料,有這些說法(引用說法),根據我的實踐,我得到這些經驗(描述自己的經驗)。 但是我還是不太懂,我的困惑是(說明困惑)。【或者】我反對作者的觀點(提出作者的觀點,自己的觀點,以及理由)。】

自我評價

1.保持高標準,不要受制於破窗理論(broken windows theory)[i]。
當你看到不靠譜的設計、糟糕的代碼、過時的文檔和測試用例的時候,不要想 “既然別人的代碼已經這樣了,我的代碼也可以隨便一點啦。”c) 如果有明確要求,我可以做好。

2. 主動解決問題。當看到不靠譜的設計,糟糕的代碼的時候,不要想“可能別人會來管這個事情” ,或者“我下個月發一個郵件讓大家討論一下”。要主動地把問題給解決了[ii]。c) 如果有明確要求,我可以做好。

3. 經常給自己充電,身體訓練是運動員生活的一部分,學習是軟件工程師職業的伴侶。每半年就要了解和學習一些新的相關技術。通過定期分享(面對面的分享,寫技術博客等)來確保自己真正掌握了新技術。d) 一直主動這樣做

4. DRY (Don‘t Repeat Yourself)——別重復。在一個系統中,每一個知識點都應該有一個無異議的、正規的表現形式。b) 聽說過,但是認為意思不大;

5. 消除不相關模塊之間的影響,在設計模塊的時候,要讓它們目標明確並單一,能獨立存在,沒有不明確的外部依賴。d) 能夠在多種語言和架構中做到

6. 通過快速原型來學習,快速原型的目的是學習,它的價值不在於代碼,而在於你通過快速原型學到了什麽。c) 不用原型,一直在產品中直接改

7. 設計要接近問題領域,在設計的時候,要接近你目標用戶的語言和環境。c) 大概同意,但是怎麽接近用戶呢?

8. 估計任務所花費的時間,避免意外。在開始工作的時候,要做出時間和潛在影響的估計,並通告相關人士,避免最後關頭意外發生。工作中要告知可能的時間變化,事後要總結。
d) 一直主動這樣做

9. 圖形界面的工具有它的長處,但是不要忘了命令行工具也可以發揮很高的效率,特別是可以用腳本構建各種組合命令的時候。 c) 正在學習命令行工具

10. 有很多代碼編輯器,請把其中一個用得非常熟練。讓編輯器可以實現自己的定制,可以用腳本驅動,用起來得心應手。c) 沒有任何定制

11. 理解常用的設計模式,並知道擇機而用。設計模式不錯,更重要的是知道它的目的是什麽,什麽時候用,什麽時候不用。b) 模式沒用

12. 代碼版本管理工具是你代碼的保障,重要的代碼一定要有代碼版本管理。d) 經常用

13. 在debug的時候,不要驚慌,想想導致問題的原因可能在哪裏。一步一步地找到原因。要在實踐中運用工具,善於分析日誌(log),從中找到bug。同時,在自己的代碼裏面加 log. b) 只會printf

14. 重要的接口要用形式化的“合同”來規定。用文檔和斷言、自動化測試等工具來保證代碼的確按照合同來做事,不多也不少。使用斷言 (assertion) 或者其他技術來驗證代碼中的假設,你認為不可能發生的事情在現實世界中往往會發生。c) 想用,但沒有時間

15. 只在異常的情況下才使用異常 (Exception), 不加判斷地過多使用異常,會降低代碼的效率和可維護性。記住不要用異常來傳遞正常的信息。b) 抓住所有異常

16. 善始善終。如果某個函數申請了空間或其他資源,這個函數負責釋放這些資源。d) 一直主動這樣做

17. 當你的軟件有多種技術結合在一起的時候,要采用松耦合的配置模式,而不是要把所有代碼都混到一起。d) 一直主動這樣做

18. 把常用模塊的功能打造成獨立的服務,通過良好的界面 (API) 來調用不同的服務。b) 拷貝代碼過來用也可以

19. 在設計中考慮對並行的支持,這樣你的API 設計會比較容易擴展。 d) 考慮在適當的層次支持並行

20. 在設計中把展現模塊 (View) 和實體模塊 (Model) 分開,這樣你的設計會更有靈活性。 d) 一直主動這樣做

21. 重視算法的效率,在開始寫之前就要估計好算法的效率是哪一個數量級上的(big-O)。b) 我的數據量不大,無所謂

22. 在實際的運行場景中測試你的算法,不要停留在數學分析層面。有時候一個小小的實際因素 (是否支持大小寫敏感的排序,數據是否支持多語言)會導致算法效率的巨大變化。d) 一直主動這樣做

23. 經常重構代碼,同時註意要解決問題的根源。b) 任何修改都可以叫重構

24. 在開始設計的時候就要考慮如何測試 ,如果代碼出了問題,有log 來輔助debug 麽? 盡早測試,經常測試,爭取實現自動化測試,爭取每一個構建的版本都能有某些自動測試。c) 項目沒有安排時間,我也沒有提這事

25. 代碼生成工具可以生成一堆一堆的代碼,在正式使用它們之前,要確保你能理解它們,並且必要的時候能debug 這些代碼。b) 從來不看那些代碼

26. 和一個實際的用戶一起使用軟件,獲得第一手反饋。 c) 想做但是沒有機會

27. 在自動測試的時候,要有意引地入bug,來保證自動測試的確能捕獲這些錯誤。d) 一直主動這樣做

28. 如果測試沒有做完,那麽開發也沒有做完。d) 一直主動這樣做

29. 適當地追求代碼覆蓋率:每一行的代碼都覆蓋了,但是程序未必正確。要確保程序覆蓋了不同的程序狀態和各種組合條件。d) 一直主動這樣做

30. 如果團隊成員碰到了一個有普遍意義的bug, 應該建立一個測試用例抓住以後將會出現的類似的bug。b) 每個bug都是特殊的

31. 測試:多走一步,多考慮一層。如果程序運行了一星期不退出,如果用戶的屏幕分辨率再提高一個檔次,這個程序會出什麽可能的錯誤?c) 如果有明確要求,我可以做好

32. (帶領團隊)了解用戶的期望值,稍稍超出用戶的期望值,讓用戶有驚喜。 c) 如果有明確要求,我可以做好

33. (帶領團隊) 不要停留在被動地收集需求,要挖掘需求。真正的需求可能被過時的假設、對用戶的誤解或其他因素所遮擋。c) 如果有明確要求,我可以做好

34. (帶領團隊)把所有的術語和項目相關的名詞、縮寫等都放在一個地方。 b) 都記在我腦子裏

35. (帶領團隊)不要依賴於某個人的手動操作,而是要把這些操作都做成有相關權限的人士都能運行的腳本。這樣就不會出現因為某人休假而項目被卡住的情況。a) 從來沒聽說過

36. (帶領團隊)要讓重用變得更容易。一個軟件團隊要創造一種環境,讓大家有輕松的心態來嘗試各種想法 (例如,模塊的重用,效能的提升,等)。b) 團隊嚴肅緊張最好

37. (帶領團隊)在每一次叠代之後,都要總結經驗,讓下一次叠代的進度安排更可靠,質量更高。c) 如果上級有要求,就做一下

個人作業3-(Alpha階段)