2020年3月19日 星期四

Changelog - 為什麼工程師會寫爛 code ?


前言

這是一個很有趣的現象: 工程師並不真的知道自己寫的code到底好不好. 大部份工作的時候, 我們加入一個大型的專案, 新加一點功能, 修正一些 bug. 專案裡前人的 code, 如果我們看不懂, 要嘛嫌前人寫得差, 想要全部翻掉重來, 要嘛不敢改, 選擇繞道. 如果說學界與業界有鴻溝, 最大的差別就在這: 在學校時, 我們只有機會寫個 2~3 人的專案, 大家都可以面對面討論, 所有的專案包括 compiler 都是從頭開始, code 的原始作者都在, 寫不寫文件一點都不重要. 但當你畢業後進入業界. 世界就變得完全不一樣.

當你是一個土木工程師時, 人們可以期待你會有造橋或是蓋房子的基本知識, 但當你說你是一個軟體工程師時, 人們不確定要期待你會什麼. . 這也讓 hiring process 變得很沒效率, 因為他只能問一些很愚蠢的演算法考題. 並且還是無法確認你是否適合這份工作. 當你面試一個醫生的時候, 你不會問他你是否會縫這個傷口, 但為什麼需要問一個軟體工程師是否會寫merge sort?

學界應該做什麼改變?

學校應該開一些 open source 的課程, 讓學生直接去讀大型的專案, 例如 apache, linux, 看看前人怎麼寫的, 哪些是好的, 為什麼你覺得好? 在討論的過程中, 學生會建立起一些 coding 準則的共識. 同時試著改一些 code, 即使不 commit, 也可以互相 code review, 看看別人怎麼寫.

啟動一些 open discussion, 讓學生用不同的方式/不同的語言/不同的限制去寫同樣的功能, 並且討論哪種方式比較好, 也許沒有誰優誰劣, 那也可以讓學生了解到這世界不是只有一種方式來做.

多一些直接在課堂上寫 code 的課程, 有問題大家可以互相討論, 而不是各自窩在自己的房間寫課後作業. 上班時, 跟別人討論是無可避免的.

業界應該做什麼改變?

很多軟體工程師都不曾參加任何學界的研討會, 或是成為任何一個組織 (例如ACM) 的會員, . 這是一個奇怪的現象. 土木工程師會成為 ACSE 的會員, 他們可以看到最新的出版, 但在軟體界卻很少見. 學界與業界的斷層也許就從這裡開始產生.

學界的某個研究可能突然間被業界的哪個人大肆宣揚, 業界的人根本不知道原始的研究, 應用範圍, 就生硬的套用, 例如scrum, law of Demeter. 可能適用, 也可能不適用, 沒有人去探究, 業界的人彷彿只是在追求一些"熱門字".

總結

我們還是沒有辦法回答什麼樣的code是好的, 什麼樣的code是壞的. 寫code不像造橋, 有絕對的標準可以遵守, 例如承重多少, 水泥的比例就應該是多少. 我們只能去追求寫一些有價值的code, 希望它們 30 年後還有機會為人所用.

Reference Source:
https://changelog.com/podcast/339
https://medium.com/@mitpress/why-smart-engineers-write-bad-code-7b8201fb040a

沒有留言: