注重實效的哲學
- 提前的補救預警,把可能要做的補救選擇全部做一遍,不要害怕提要求,坦然面對你的困境
- 破窗戶的蝴蝶效應,愛惜窗戶會更加變得有潔癖,沒有時間修窗戶,就先拿木板堵起來
- 石頭湯案例,讓他們瞥見未來,就能讓他們聚焦在你周圍,協作很好的,不能忽略小事
- 軟件足夠好就行不必完美,讓用戶參與進來,提前制定好各種標準和範圍,點到爲止
- 像投資一樣對知識投資評估,因爲知識會過時,咱們要避免自己的價值降低,有用的一些方法如下:定期投資,多元化,管理風險,低買高賣,重新評估和平衡,每個月讀一本書,尋求一些幫助建議,還要交流學習
- 交流前先提煉大綱,分析聽衆的需求、興趣,能讓你的聽衆明白纔是交流,切記莫空談,要選擇好的時機,要讓文檔更好看,要讓聽衆參與,要仔細聽他們說話,並回復他人
注重實效的途經
- 重複的危害,每一項知識應該是單一,無歧義,權威的表示,註釋是會過時的請謹慎使用,用程序生成頭文件,保持屬性封裝和更多的不用改動性,倘若現在重複代碼是快了幾秒,但是後面會耽擱幾個小時,開發者之間也應該避免重複(建立代碼中央區域,互相訪問學習)
- 正交模式開發,降低風險,提高效率,隔離第三方工具,全局變量有多線程等問題,改善結構和正交性就是重構,對測試和文檔(內容和表現)都有好處
- 要靈活要有可撤銷性,如果無法徹底隔離,就用元數據自動生成技術搞
- 曳光彈:把系統環境定死,製作大量文檔,確定未知因素。具體操作採用組件式的曳光彈代碼,所以這和原型是不同的
- 用便籤紙也是原型製作的一種方式,除此之外還適用於代碼,新功能,架構,庫,性能。
- 實現自己的語言,提高生產力
- 估算:來自模型,要考慮範圍,分解成組件,給參數指定值。估算項目進度表增加自己的信心,每次記錄下迭代的次數和時間,養成寫估算日誌的習慣。
基本工具
- 純文本力量:加密或者哈希值校驗
- shell就是工作臺,GUI沒有自動化
- 精通一種編輯器,vs的模板就有宏啊
- 版本管理很重要,bug是誰的不重要,因爲都是你的事情,壞變量檢查可考慮它的鄰居,bug可能隨環境存在,用二分法查找bug,除了修正bug還要反思之前爲啥沒找出來,倘若一定規模這裏需不需要單元測試
- 學習一種短小的語言比如python,perl
- 被動和主動的代碼生成器
注重實效的偏執
- 軟件模塊交互要按照合約,沒有完美的軟件,自己都不要去相信
- 預處理器加斷言可制定合約,通過前置和後置約束來讓程序早點崩潰,因爲早比後崩潰好得多
- 合約就是一些約定註釋
- 如果有一個錯誤,就是非常糟糕的了
- 斷言檢查不了不會發生的事情,所以重構要心中有數
- 使用異常可讓代碼量減少
- 分配資源採用有始有終的原則,警惕全局變量
- 把資源配平的方法是使用棧,在一個類裏封裝指針,在捕獲異常的時候finally中釋放資源
- 注意動態語言無法配平資源的時候所採取的3個處理方法
- 使用完對象置於null
彎曲或折斷
- 元程序的設計,其實就是配置表
- 時間解耦,涉及到軟件工程各個方面不僅僅編碼
- mvc
- 黑板模式的好處(有很多解耦思想)
- 方法調用保持低耦合的墨忒耳法則,比如一個方法最好採用如下的方式調用
- 自身調用
- 傳入該方法的任何參數調用
- 它創建的任何對象調用
- 任何直接持有的組件對象調用
當編碼時候
一些思考
- 模塊化讓代碼容易測試
- 不要靠巧合編程
- 考慮邊界值,新bug風險
- 爲工作劃分優先級
- 算法速度的重要性(所以要估算)
- 編程中去估算代碼
- 時間也會退化,所以不能只看這是線性算法速率就完事
- 編程隱喻是園藝(遊戲編程未必)
什麼時候需要重構(原則:早重構、常重構)
- 重複
- 非正交的設計
- 過時了的知識
- 性能
如何重構
- 要深思熟慮,而不是撕壞大片的代碼
- 確保有良好的測試
- 不要在重構的時候添加功能
測試相關
- 按照合約測試
- 經常測試
- 反射技術
- 即興測試代碼也要放在單元測試裏
- 構建測試窗口
- 採用自動化測試
測試的內容
- 基本功能,錯誤,邊界值,約定,速度
有些技術需要自己造輪子
- 比如自動化的嚮導
在項目開始之前
- 項目也不能等太久,不能分析癱瘓
- 事物埋在了深深誤解上,肯定沒有考慮解決用戶的商業問題,所以應該思考他所想
- cookburn用例模板
- 好的需求和文檔應該保持抽象
- 看遠些
- 只是再增加一個特性,對不起已經是15個了
- 維護詞彙表
- 去解開不可能解開的謎題的思考:或許根本就不用,或者有更容易的方法
- 是拖延還是良好判斷
- 編寫要規範
- 不要成爲方法的奴隸
注重實效的項目
一些思考
- 要交流
- 圍繞功能而不是職務
- 項目要有項目經理和技術主管
- 無處不在的自動化
- 無情的測試
測試什麼
- 單元測試
- 集成測試
- 校驗和驗證
- 資源,錯誤,恢復
- 性能
- 用戶友好度
其它
- 對測試代碼去測試
- 測試狀態覆蓋而不是代碼覆蓋
- 代碼中的英文註釋是很講究的
- 編寫文檔用宏啊,你甚至可以製作出自己的文檔模版
- 期望要溫和地超過
- 給代碼籤自己名字