軟體開發者的培養

程式設計入門

我學習程式設計的第一步,就是學會寫出能滿足需求的解決方案。一開始學習怎麼透過程式語言叫機器工作,光是理解程式語言本身的運作方式,就可以讓我耗盡腦力。

開始建立價值觀

在學會寫出會動的程式之後,一開始會接觸到的價值觀,通常是如果能用越短的程式碼行數或字數就讓程式能動起來就越好,因為這表示我開始可以實作出多種版本的解決方案。

對同一個問題能提出越多種解決方案就越強

價值觀:程式碼執行成本(效能)

隨著問題的資料量開始變大之後,程式再也不是啟動的瞬間就跑完了,而是開始要等機器在那邊運算,有的時候只要程式碼一個沒寫好,程式就會跑個不停,等到天荒地老都沒跑完,而我也無法預期到底程式會跑多久。

識別出可省略的運算、去除重複運算以及快取是加速的秘訣

價值觀:程式碼修改成本(可維護性)

在學習的過程中,開發的專案有大有小,有些專案會持續的增加需求,而有些不會。我在那些持續增加需求的專案上發現到新的問題,那就是每當複製程式碼來完成實作的時候,就會導致下次修改所有相同程式碼段落的成本上升。很多案主除了增加需求之外,還會叫我最後再改回原版。

價值觀:程式碼理解成本(可讀性)

案主常常會說:「這只是要增加一點小功能,應該很快吧?」

學會刪掉沒用到的程式碼是最重要的

價值觀:程式碼彈性

有些時候,我們是有機會可以預測未來需求的生長方向,不論是物件導向程式設計還是函數導向程式設計,其實都是將一體成型的程式碼(神之物件),改為以設計零件的方式,在執行時期才將零件組裝成想要的機器。

價值觀:程式碼測試成本

隨著時間的推移,價值觀不斷在變化,有很多因素可以導致我覺得以前寫的程式碼是爛程式碼,每當隔幾個月回頭看到自己寫的程式都會覺得:「幹!這誰寫的爛程式碼!」於是又重寫。

價值觀:保留修改權

當我們面臨 A、B 兩種解決方案時,可以先考慮從 A 改為 A’ 的修改成本,以及從 B 改為 B’ 的修改成本,我們永遠可以選擇修改成本較低的解決方案。例如所有靜態的東西改起來都比動態的簡單,例如修改一個類別的變數名稱永遠比修改資料庫表格的一個欄位名稱容易。

價值觀:保留反悔權

當我們面臨 A、B 兩種解決方案時,可以先考慮從 A 改為 B 的反悔成本,以及從 B 改為 A 的反悔成本,若其中一個選項的反悔成本是可接受的,則我們永遠可以優先選擇反悔成本較低的那個,從而保留反悔的機會。若兩個選項的反悔成本都是可以接受的,那麼就隨便選一個吧,降低在這個問題上思考的成本才是重要的。

避免做出悔不當初的選擇

價值觀:學習前人經驗

因為我寫程式很快,所以在我小時候面臨一個小需求時,會覺得自己實作一下很快,與其花時間調查別人寫好的開源套件,不如直接把時間拿來實作,也許實作只要 1~2 天,而調查套件本身就需要 1~2 天,還不包含串接的部分。

只會自幹不厲害,學會善用工具才厲害

完整的價值觀

在許多互相衝突的價值觀當中,我們應該如何取捨?在不同情況下,價值觀的優先程度也會跟著不同,例如新創公司大多選用 Rails 是因為用戶數接近 0 的情況下,以開發速度為優先考量,效能則不重要,而在用戶數高的情況下,同一段程式碼被執行的次數開始變多,效能的重要性才會開始顯現出來。

應依照情況從 N 種解決方案中選出最佳解

通靈能力

案主經常會提出多個需求,而這多個需求是互相矛盾的,或者不完整的,此時應該要引導案主說出想要的需求,或者說,我們應該先幫案主想好可能會遇到的問題以及對應的解決方案。

協作能力

以上提到的都是單人開發時的情況就會遇到的問題,而有些議題則是在多人開發時才會遇到,融入一個開發團隊是身為軟體開發者必備的能力,Git 之類的版本管理工具這種必備的能力就不多解釋了。

禮貌、尊重和同理心

我曾經遇過一個情況,當時我是主管,帶了兩個人小明、小美,小明實作了功能 A,而小美在一段時間後將 A 改寫為 B 以符合新需求,小美說:「A 的實作很爛,所以我重寫了 B」,引起了小明的不滿,小明說:「B 的設計有缺陷,A 有 A 的好處」,我身為主管進來調解,在聽完 A 跟 B 的實作後,我提出 C 設計,同時具有 A 跟 B 的優點,當然小明跟小美就都閉嘴了。

能不能好好相處也是非常重要的

備註

我可能還遺漏了許多重要的內容,各位讀者不應該將以上內容視為完整內容。

看完請拍手分享,謝謝

--

--

在追求真理的道路上

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store