整理完「重構」一書列舉的壞味道,再補上另一份參考資料。 NDepend 是個評估程式碼好壞,估算技術債的 Visual Studio 擴充套件。它會用事先定義的規則分析專案,清查程式碼的壞味道,給出一組品質指標及技術債(Technical-Debt)估價,技術債的計量單位是預估償債(調整程式)所需的...

由「好程式」跟你想的不一樣!一文,我們知道重構是「提升程式碼的可讀性,寫出容易修改擴充的好程式」的有效手段,接下來,你得先知道什麼叫壞程式,才寫出好程式。 Kent Beck 用「壞味道』(Bad Smell,中譯本把它翻成程式異味,但我偏好最早聽 Ruddy 老師採用的翻譯 - 壞味道)傳神地形容...

從事程式開發超過二十年,我一直不是開發方法論的信徒,對於 TDD、重構、Pair Programming 這些僅止於概略輪廓,不曾深入。不過,寫了超過一萬小時,對於程式該怎麼寫才漂亮,多少也發展出自己的心法,例如:抽取成方法重複利用或共用、將函數結果存成變數重複利用減少呼叫... 等等。不記得是怎麼...

我從 onclick/onselect 寫 JavaScript 開始寫動態網頁,經歷了 jQuery 盛世,陸續學過 Knockout.js/AngularJS MVVM,還玩過一點 TypeScript;從來前端開發演進如火箭升天,但我當了中輟生,沒再跟隨前端潮流前進。當今主流的前端開發加入許多...

最近寫到內容維護 UI,想留下資料修改軌跡。除了保留修改前修改後的完整內容,我還想出一份簡單的差異報告,指出哪幾行有更改,增加了哪幾行、哪幾行被刪除... 等,方便一眼看出變更重點;甚至不必保留舊版,用最新版加差異報告便能一路反推完整修改歷程,大量節省儲存空間。思考這個需求時,我想到 Git dif...

產生文字檔或顯示純文字時會蠻常遇到類似:呈現多欄資料,文字靠左,數字靠右,每一欄寬度固定,字串長度不足時補空白至指定寬度。(例如下面這個例子) 分享我以前的笨寫法 - 自己寫一個輸出固定長度字串的函數,傳入字串(或數值)、欄位寬度並指定左靠或右靠,函數負責補足空白: class Program {...

看到一則新聞,提到那種有紅、黃、左轉箭頭、綠四枚燈號的紅綠燈,圓形綠燈亮但左轉箭頭綠燈沒亮時,只要對向沒有來車,是可以左轉的。默默搞錯多年,特將此發現分享到專頁,收到 Derek 與 Lane 令人意外的回響 - 不準,警察照樣會開單。 為一探究竟,爬文查到該新聞在PTT 八卦版的討論,網友的回應卻...

我是在翻譯如何選擇程式語言?海報時才認識 Python 這個程式語言。 在我心中它取代當年 BASIC 語言的角色,語法單純易上手,格外適合非資訊相關領域但想或需要寫程式的人學習,Python 因此在科學研究與學術領域十分受歡迎,應用廣泛。 自己有多年 C# 開發經驗,面對一般程式需求,不論命令列工...

分享這幾天寫程式學到的 System.Reflection 小技巧一枚:使用 Type.GetMethod() 於執行期間取得類別的靜態方法,方法包含選擇性參數。以強型別呼叫,選擇性參數可省略不寫,.NET 會帶入預設值;但透過 MethodInfo.Invoke() 呼叫時,object[] 參數...

同事遇到的案例,某台伺服器升級後,某支連接該主機網路磁碟機的固定排程出錯。手動測試以檔案總管無法連上伺服器,確認帳號密碼正確,但得到含糊的「An extended error has occurred./發生延伸錯誤。」訊息。再試了其他主機,使用相同帳號密碼連線網路磁碟並無問題。 改用net use...

分享 .NET 老鳥前陣子犯下的低級錯誤 - 字串比對結果與預想不同,還因觀念不清迷惑好一陣子(羞)。 故事是這樣的,先前知道 Dapper 查詢所傳回的 dynamic 底層型別是 DapperRow,並可轉型成 IDcitionary<string, object>方便動態指定欄位處...