【懷舊隨筆】那段與 C# 程式碼搏鬥的青春:從 StyleCop 到 Win32 API

回首 2011-2013:青澀工程師的技術筆記

整理舊文章時,翻到了十多年前自己寫下的一系列 C# 開發筆記。那時候的技術文章沒有什麼溫度,只有一行行冷冰冰的程式碼,以及為了應付各種奇怪錯誤訊息而留下的解法。

現在看來,這些筆記雖然很多已經過時,但卻是那段「與程式碼搏鬥的青春」最真實的紀錄。

對 Clean Code 的狂熱:StyleCop 症候群

那幾年,為了讓程式碼看起來像是「專業人士」寫的,我對 StyleCop 有著近乎強迫症的執著。每一行註解、每一個空格,都必須符合微軟的嚴格規範。

還記得那時記錄了一堆 SA 錯誤代碼:

  • SA1625: ElementDocumentationMustNotBeCopiedAndPasted (為了偷懶複製貼上註解被抓包)
  • SA1005: SingleLineCommentsMustBeginWithSingleSpace (單行註解後面忘記加空白)
  • SA1101: PrefixLocalCallsWithThis (呼叫本地方法忘記加 this)

當時覺得這些規定好煩,但也因為這些嚴苛的訓練,養成了後來寫扣時對排版與命名的一絲不苟。現在回想,那是一種對「工匠精神」的青澀追求。

土法煉鋼的 Hack:Win32 API 與 SendMessage

那年代的自動化還不像現在有這麼多好用的爬蟲框架或是 UI 測試工具。為了解決在 WebBrowser 裡自動點擊的問題,我們還要查 user32.dll,用 GetWindow 找 handle,最後推算座標用 SendMessage 去模擬滑鼠點擊 (Mouse Down / Mouse Up)。

那些看著視窗階層工具(Spy++)找 Internet Explorer_Server ClassName 的日子,真的是一段非常「硬核」的土法煉鋼時期。

效能與基礎工:StringBuilder 與時間計算

還有些筆記記錄著非常基礎的觀念,例如:

  • 用 StringBuilder 取代 string 的字串連接:這大概是每個 C# 新手都會經歷的「效能震撼教育」。當發現原本卡頓的迴圈換成 StringBuilder 後瞬間跑完,那種成就感至今難忘。
  • 計算兩個時間差 (TimeSpan):現在看起來理所當然的 API 呼叫,當年卻要特地寫一篇部落格記錄下來。

告別舊時代的程式碼

這些十多年前的技術片段,在現今 AI 寫程式、開源套件滿天飛的時代,已經失去了作為「技術文件」的參考價值。

但作為一個工程師的成長軌跡,它們見證了我從一個到處找解法的菜鳥,逐漸摸索出自己開發哲學的過程。這篇文章,就把那些零碎的程式碼濃縮成一份回憶,正式向那些年的 C# 歲月告別。

(註:這篇隨筆整合了部落格 2011-2013 年間零散的 C# 技術筆記,以此作為紀念與歸檔。)