https://news.ycombinator.com/item?id=22496724
昨天剛好翻 HackerNews 看到 GitFlow 竟然也十年了,想當初還在跟同事激烈討論 branch 要怎麼規劃、Hotfix 要放在哪個 branch、給韓國代理商的特別版程式要放在哪裡。現在幾乎都沒有在開又大又長的 Feature branch,跟 HackerNews 底下的回應一樣,又回去用像是傳統版本控制的 Trunk based。當初在那邊規劃 branch 現在想起來感覺特別的空虛。
也許這個故事教給我們的就是 Technical Writing 的重要?
有的時候技術的傳播也真的不是取決於好壞,很多時候也是很看門面的。第一次接觸到 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。
測試在沒有做出 Impure-pure-impure 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.