+

https://news.ycombinator.com/item?id=22496724

+

昨天剛好翻 HackerNews 看到 GitFlow 竟然也十年了,想當初還在跟同事激烈討論 branch 要怎麼規劃、Hotfix 要放在哪個 branch、給韓國代理商的特別版程式要放在哪裡。現在幾乎都沒有在開又大又長的 Feature branch,跟 HackerNews 底下的回應一樣,又回去用像是傳統版本控制的 Trunk based。當初在那邊規劃 branch 現在想起來感覺特別的空虛。

+

也許這個故事教給我們的就是 Technical Writing 的重要?

+
+
+

你要無聊的一條線?

+
+
+ +
+
+

還是 git hero!!!

+
+
+ +

有的時候技術的傳播也真的不是取決於好壞,很多時候也是很看門面的。第一次接觸到 Technical Writing 是還在大學的時候讀的 Joel on Software,他寫的文章非常的吸引人,也從裡面學到了幾個至今很受用的概念。可惜他後來在 FogBugz 嘗試軟體工程界的人體練成自創語言,結果不是很好的樣子… (曾在遊戲公司維護過自創語言的人告訴你看過太多人 Compile 出東西就覺得完成了,其實 Compile 出東西才是剛開始,接下來還有編輯環境、Auto-complete、Debugger、Optimization 等等等…)

+

有的時候概念就是這樣普及起來了,等到浪費了以年為單位的時間後大家才才慢慢發現不對勁,最早開始提出要檢討的人可能還會被人放火燒。OOP 也是、Design Pattern 也是、TDD 也是、UML 也是、Scrum 也是 +。記得大學學軟體工程教的是 UML 跟 Rational Rose,照課本說的所謂的軟體工程工程就是設計師在 Rational Rose 裡面拉完圖之後其他人在 Code Gen 出來的 Class 玩填字遊戲。上課第一張投影片就寫到說希望軟體的產出可以無視由誰來實作,以現在的角度聽起來感覺像是在描述中古世紀的醫療,發燒就要放血之類的東西。但也才過十年多一點而已,難講現在很夯的東西,再過個三五年回頭看不會像是中世紀。

+

像我跟 Scrum 相處到現在就完全不相信時程是可以預估的,也不相信什麼越估會越準的的說法。以前還會半信半疑,現在你送我兩套撲克牌我都不信。當你寫的程式只佔整套系統(Firmware、OS、遊戲引擎、加上你的 Gameplay code)不到萬分之一的 LoC,怎麼可能會準。摸索到現在覺得只能靠 Feature Toggle 跟臨場應變來降低估錯的傷害。

+

在大學第一次念到 Design Pattern 的時候覺得有如見到葵花寶典,然後就拿 Pattern 亂揮,搞到差點自宮。到很久以後才知道 Pattern 是從既有的程式整理出來的,不是還沒開始寫程式就動手套的。要整理出 Pattern 需要重構,重構則需要測試來保證重構前後行為一致,是 Refactoring 不是 Refuctoring。所以正常的方向是測試 > 重構 > 設計模式,不過因為設計模式教起來感覺很有料、考試也好考,所以很多學校是不實做直接教 Pattern ,有如逆練九陰真經。

+

更退一步 Design Pattern 也不過是在 Class-based Inheritance OOP 裡面糾結,Class-based inheritance 把繼承跟 Reuse 混在一起造成 Diamond problem,然後為了迴避這個問題規定繼承需要是個樹狀結構不能多重繼承。結果一堆人在糾結實做要放在 Class 繼承樹的哪裡糾結不出來,實際上也不可能糾結出來,因為 Reuse 沒有樹狀結構。花了一堆時間在糾結 NPC class 是 is-a 還是 has-a Actor class、is-a 還是 has-a AI,結果鄙視鍊末端的 Javascript 走 Prototype-based Inheritance 根本沒在跟你糾結,最後只好兩手一攤大喊 Composition over inheritance

+

測試在沒有做出 Pure-impure-pure sandwitch 的情況下不 make sense,Mocking Library 雖然很酷炫但是用太多只會讓你在程式有改動的時候修測試修到死。Exception 不 make sense,丟的人不知道誰會接,接的人不知道底下誰會丟、丟哪種的。Defensive programming 不 make sense,有問題的輸入應該在邊界就擋掉,不是在業務邏輯裡面你防我我防你。Domain-driven Design 在沒有 Algebraic data type 的環境下不 make sense,在有 ADT 的語言裡面程式可以長得超像設計文件的。

+

然後努力念書以後什麼都會好也不 make sense,如果你不會生活,念了書、拿了文憑、賺了錢、寫了文章給別人看、演講給別人聽、救了無數的火也都不會讓你過得好,你只能哭給你的諮商師看。哭完繼續從幼幼班學人是怎麼生活的。

+

被人拐了彎路,沒有人會賠你的

+

下次看到什麼東西實踐起來覺得不 make sense,不要因為 長輩/名人/老闆/老師/很多其他人 都說沒問題就覺得是自己有問題。多往外找找不同的想法來嘗試,不要被慣例限制住了。

+
+

Nothing is true, Everything is permitted.

+
+ +