《程序員修煉之道》總結

注重實效的哲學

  • 提前的補救預警,把可能要做的補救選擇全部做一遍,不要害怕提要求,坦然面對你的困境
  • 破窗戶的蝴蝶效應,愛惜窗戶會更加變得有潔癖,沒有時間修窗戶,就先拿木板堵起來
  • 石頭湯案例,讓他們瞥見未來,就能讓他們聚焦在你周圍,協作很好的,不能忽略小事
  • 軟件足夠好就行不必完美,讓用戶參與進來,提前制定好各種標準和範圍,點到爲止
  • 像投資一樣對知識投資評估,因爲知識會過時,咱們要避免自己的價值降低,有用的一些方法如下:定期投資,多元化,管理風險,低買高賣,重新評估和平衡,每個月讀一本書,尋求一些幫助建議,還要交流學習
  • 交流前先提煉大綱,分析聽衆的需求、興趣,能讓你的聽衆明白纔是交流,切記莫空談,要選擇好的時機,要讓文檔更好看,要讓聽衆參與,要仔細聽他們說話,並回復他人

注重實效的途經

  • 重複的危害,每一項知識應該是單一,無歧義,權威的表示,註釋是會過時的請謹慎使用,用程序生成頭文件,保持屬性封裝和更多的不用改動性,倘若現在重複代碼是快了幾秒,但是後面會耽擱幾個小時,開發者之間也應該避免重複(建立代碼中央區域,互相訪問學習)
  • 正交模式開發,降低風險,提高效率,隔離第三方工具,全局變量有多線程等問題,改善結構和正交性就是重構,對測試和文檔(內容和表現)都有好處
  • 要靈活要有可撤銷性,如果無法徹底隔離,就用元數據自動生成技術搞
  • 曳光彈:把系統環境定死,製作大量文檔,確定未知因素。具體操作採用組件式的曳光彈代碼,所以這和原型是不同的
  • 用便籤紙也是原型製作的一種方式,除此之外還適用於代碼,新功能,架構,庫,性能。
  • 實現自己的語言,提高生產力
  • 估算:來自模型,要考慮範圍,分解成組件,給參數指定值。估算項目進度表增加自己的信心,每次記錄下迭代的次數和時間,養成寫估算日誌的習慣。

基本工具

  • 純文本力量:加密或者哈希值校驗
  • shell就是工作臺,GUI沒有自動化
  • 精通一種編輯器,vs的模板就有宏啊
  • 版本管理很重要,bug是誰的不重要,因爲都是你的事情,壞變量檢查可考慮它的鄰居,bug可能隨環境存在,用二分法查找bug,除了修正bug還要反思之前爲啥沒找出來,倘若一定規模這裏需不需要單元測試
  • 學習一種短小的語言比如python,perl
  • 被動和主動的代碼生成器

注重實效的偏執

  • 軟件模塊交互要按照合約,沒有完美的軟件,自己都不要去相信
  • 預處理器加斷言可制定合約,通過前置和後置約束來讓程序早點崩潰,因爲早比後崩潰好得多
  • 合約就是一些約定註釋
  • 如果有一個錯誤,就是非常糟糕的了
  • 斷言檢查不了不會發生的事情,所以重構要心中有數
  • 使用異常可讓代碼量減少
  • 分配資源採用有始有終的原則,警惕全局變量
  • 把資源配平的方法是使用棧,在一個類裏封裝指針,在捕獲異常的時候finally中釋放資源
  • 注意動態語言無法配平資源的時候所採取的3個處理方法
  • 使用完對象置於null

彎曲或折斷

  • 元程序的設計,其實就是配置表
  • 時間解耦,涉及到軟件工程各個方面不僅僅編碼
  • mvc
  • 黑板模式的好處(有很多解耦思想)
  • 方法調用保持低耦合的墨忒耳法則,比如一個方法最好採用如下的方式調用
    • 自身調用
    • 傳入該方法的任何參數調用
    • 它創建的任何對象調用
    • 任何直接持有的組件對象調用

當編碼時候

一些思考

  • 模塊化讓代碼容易測試
  • 不要靠巧合編程
  • 考慮邊界值,新bug風險
  • 爲工作劃分優先級
  • 算法速度的重要性(所以要估算)
  • 編程中去估算代碼
  • 時間也會退化,所以不能只看這是線性算法速率就完事
  • 編程隱喻是園藝(遊戲編程未必)

什麼時候需要重構(原則:早重構、常重構)

  • 重複
  • 非正交的設計
  • 過時了的知識
  • 性能

如何重構

  • 要深思熟慮,而不是撕壞大片的代碼
  • 確保有良好的測試
  • 不要在重構的時候添加功能

測試相關

  • 按照合約測試
  • 經常測試
  • 反射技術
  • 即興測試代碼也要放在單元測試裏
  • 構建測試窗口
  • 採用自動化測試

測試的內容

  • 基本功能,錯誤,邊界值,約定,速度

有些技術需要自己造輪子

  • 比如自動化的嚮導

在項目開始之前

  • 項目也不能等太久,不能分析癱瘓
  • 事物埋在了深深誤解上,肯定沒有考慮解決用戶的商業問題,所以應該思考他所想
  • cookburn用例模板
  • 好的需求和文檔應該保持抽象
  • 看遠些
  • 只是再增加一個特性,對不起已經是15個了
  • 維護詞彙表
  • 去解開不可能解開的謎題的思考:或許根本就不用,或者有更容易的方法
  • 是拖延還是良好判斷
  • 編寫要規範
  • 不要成爲方法的奴隸

注重實效的項目

一些思考

  • 要交流
  • 圍繞功能而不是職務
  • 項目要有項目經理和技術主管
  • 無處不在的自動化
  • 無情的測試

測試什麼

  • 單元測試
  • 集成測試
  • 校驗和驗證
  • 資源,錯誤,恢復
  • 性能
  • 用戶友好度

其它

  • 對測試代碼去測試
  • 測試狀態覆蓋而不是代碼覆蓋
  • 代碼中的英文註釋是很講究的
  • 編寫文檔用宏啊,你甚至可以製作出自己的文檔模版
  • 期望要溫和地超過
  • 給代碼籤自己名字
發佈了53 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章