各位還記得前幾天的故事中講過的「資料科學部主任」-- Yincheng 嗎?這也是有關他的故事。
在資料科學部裡面,技術最強的就是 Yincheng 他自己了。應該說,因為他認為自己的程式與架構能力都屬一流,因此他找的人都只管找「聰明人」,程式能力不在他考慮範圍內。
是說,要怎麼定義聰明人,我也是看不懂就是了…
有一次,筆者剛好路過,看到他們在 Code Review,一時好奇就停下腳步看了一下。不看還好,一看嚇一跳。畫面上的函式,竟然是用「編號」命名的。編號耶!就是 Function_F_001、Function_A_566 這種編號!真的假的?這實在是太讓我好奇了,於是我默默拉了把椅子坐在角落看還有什麼其他不同的東西。
我大概看了半小時,就看到了自己刻的 Bubble Sort Function、自己刻的 Tree Map、集中管理全系統定數的 Final Number Manager、八百多行的「演算法選擇器」、不用 Class,硬是用 Array of Object 來當參數傳遞… 等我人生只有看過那麼一次的程式寫法,而要解決的問題,大多是業界已有很通用的寫法,或是坊間已有常用 library,甚或是程式語言原生就已經支援的功能。
當時我本想說點什麼,但想想還是算了。
想想還是算了示意圖,圖片截自 Meme 梗圖倉庫
不久後有一次在與另一個 Team 的 Mike 聊天時聊到此事,Mike 說:「你幸好沒提,我跟他聊過,他不會改的,不要浪費時間。」
「你跟他聊過?那他當時怎麼說?」我好奇問。
具體內容我忘了,但據 Mike 回想,大概就是不出「我的寫法我的 team 都看得懂」,以及「如果沒什麼好處,只是大家都這麼寫,那我不想改寫法」之類的論述。
「那你沒跟他說耦合度的問題嗎?」我不死心問。
「有啊!他就說他一個類 800 多行,所有事情都在同一個 class 裡面做,完全零耦合!」Mike 笑答。
「那…那,那日後修改時難找也難改的問題呢?」本來是想這麼繼續追問的,但話到嘴邊,我就想到了,不問也沒差,反正就算問了,到時一定也就不出「我把所有未來可能發生的變化都想好了,不會有需要修改的時候。」之類的回應吧!
為了我們下午的工作情緒,我們就馬上換話題了。
我們今天要來討論的主題叫做業界標準做法。
什麼叫業界標準做法?為什麼不是正確答案,而是標準做法?主要是在軟體工程的世界中其實也沒有什麼正確答案:亦即,就算你不照這些大家會用的方式來做,其實也不能算錯。可是為什麼筆者要在這強調業界公認?其實說到底軟體界的歷史說長不長,但說短也不算真的很短。
你現在當下面臨到的問題, 也許你覺得很特別,也許你覺得只有你會遇到,但是很遺憾的,這些問題絕大多數已經在其他軟體工程師的經驗被解過了。既然大家都解過的問題,他肯定有個既定的做法,於是當你遇到一樣的情況的時候,如果直接使用這個通用的解法,那麼這個行動所造成的後果就是可控的,否則不但不可控,你還得要花很大的力氣去想你自己的解法。
這樣子的行為看起來很帥,但其實是非常浪費的:不只浪費時間,也浪費你的精神。
舉例來說:
我想說的是,在現在這個年代,這些常見的問題你絕對不會是第一個遇到。因為你不是第一個遇到,你應該要預設先去找先前遇到同樣問題的先進前輩們,都用什麼方法來解決這個問題。如果(而且很有可能)這個問題已經有了一個業界通用的解法,那麼不要客氣,直接使用因為它可以接生命很多的時間,而且,如前所述,套用這些解法的結果是可控的。
假設你這放著這些既定解法不用,還是要針對相同的問題去想自己的 Solutions,也不是不行,帥是很帥啦,但筆者認為你會至少遇到兩大問題:
上面這些都是無謂的時間成本的浪費,不可不慎!
當然,你也不太可能在工作中遇到的所有問題都被前人解決過了。
工作中的確是有一些問題是幾乎沒有人解過的。什麼問題?就是你的領域問題。在 Clean Architecutre 中,為什麼 Uncle Bob 要把 Entity 放在整個結構的最中間?因為這就是你的領域。什麼是領域?Uncle Bob 是這麼說的:「Enity 裡放的就是你的核心邏輯,是你的行業中最獨特的事情,這件事情造就了你的產品,或是形成了你的組織與別人最不同的地方。」
所以你可以想像, 既然你已經在開發一個全新的服務、全新的系統,那麼你所遇到的領域問題應該幾乎都是全新的,而既然他是全新的問題,你就應該要自己去想解法,因為以前從來都沒有人遇過,自然也就沒有通用結髮好參考了。
因此,遇到你自己的領域的專業問題,當然你要花很大的心思在研究如何解決這些問題上,而別人在「類似問題」上的解法,也就僅供參考了。
如果各位還記得的話, 在前幾天我們有討論過:「身為軟體開發者,你的工作是什麼?」
其實啊,如果我真的要說你的工作是幫老闆解決問題,那其實也有點太廣了。你的工作其實是拿著你的專業來幫老闆解決問題。
㚒是我們更進一步想問了:「那麼你的專業是什麼?你應該拿什麼樣的專業來發揮在你的工作上?」上是 sort 嗎?是創立物件導向新標準嗎?是發明程式語言嗎?是創造新的網路傳輸 protocol 嗎?當然有些人是的,但我相信大部分的人不是。
你的工作是什麼?對大部分的人來說應該是把你的 Domain 專業發展到最好,其他瑣事交給外人就好。
因此在現在這個年代,如果你真的想要把你的軟體專業做到最好、把你的效率提到最高,那麼不要客氣,只要是前人遇過的問題,都不要再自己造輪子了,用前人發明過,已經被證明有效的解法就好。
謎之聲:「把時間都花在最重要的事情上。什麼年代了,sort 還要自己寫喔?」
真的很有感,我們團隊都用編號命名,好不適應,想要正名很困難,原因是大家都習慣了。
或是已經有現有的CI / CD 工具,他們硬要自己用WinForm寫一套。
難怪說軟工最難的二件事情之一就是「命名」。
其實最辛苦的不是剛加入的人,而是在裡面待很久後出去的人。
要知道,與世界脫勾三五年後突然又回歸社會,要付出的適應成本會有多高。