透過食譜學Code怎麼寫

"寫食譜”跟"寫Code"其實很像


cover

食譜與Code其實很像

因緣際會之下,要讓沒寫過程式的人,也能感受何謂"Code Review”,要讓非工程師的大家可以分辨好的Code(程式碼)與不好的Code(程式碼)之間的差異。

思考了許久,我發現"寫食譜”跟"寫Code"其實很像,或許可以用食譜的寫法差異,用來類比Code之間的不同。

食譜與Code的共同之處在於,兩者都是描述著步驟與作法,而且都是為了達到某個"可以被重現"的結果。

程式碼自然不用說,只要是同個機器,同樣環境,產出的結果"一定相同”;而理想上來說,食譜也是如此,只要照著步驟做,照理是可以做出一樣的料理。

比較兩款食譜

這邊有兩款食譜,做的都是蔥油雞,其中步驟都一樣,差別只在於"寫法"與說明方式的不同。

  • 食譜A

    準備好材料,雞腿肉、蔥薑蒜、鹽、米酒和胡椒粉。 雞腿肉使用鹽、胡椒粉 米酒醃製最少10分鐘 (如果是去骨雞腿, 骨頭也要一起醃)。 冷鍋小火,雞皮朝下煎出油。煎到雞皮微微上色取出。 接下來用蒸的,電鍋蒸一杯量米水。雞腿肉雞皮朝上,底部放 雞腿骨,若無則不用放。 製作簡易蔥油。 蔥切蔥花、薑切碎放碗中備用,使用剛剛 煎雞皮的油加香油燒熱,當你晃動鍋子像 水一樣流動後,澆到放蔥花薑碎碗中攪拌, 如果雞肉是使用蒸的蒸好的雞肉會有肉湯 再將肉湯加入,其滋味妙不可言。 蔥油澆在擺盤好的雞肉 上即製作完成。
  • 食譜B

    ## 材料 ### 主材料 - 雞腿肉: 兩副以上(依個人喜好) - 蔥: 至少為切完是一小碗的分量(1把以上) ### 其他配料 - 薑、蒜、鹽、米酒和胡椒粉: 適量 ## 製作步驟 ### 1. 煎+蒸雞腿 - 備料醃製: 雞腿肉使用鹽、胡椒粉和米酒醃製最少10分鐘 (如果是去骨雞腿, 骨頭也要一起醃) - 煎雞腿: 冷鍋小火,雞皮朝下煎出油,煎到雞皮"微微上色"後取出。 - 蒸熟雞腿: 電鍋(外鍋)一杯量米水,雞腿肉雞皮朝上,底部放雞腿骨(若無則不用放)。 ### 2. 做簡易蔥油 - 備料: 蔥切蔥花、薑切碎放碗中備用 - 燒熱剛剛的雞油: 煎雞皮的油加香油燒熱(直到晃動鍋子像水一樣流動後),若有雞湯,則將雞湯一同加入 - 收尾: 澆到放蔥花薑碎碗中攪拌,接著蔥油澆在擺盤好的雞肉上,就製作完成囉!

稍微思考一下,你覺得以上兩個食譜,哪個你看得比較懂,比較"有信心"能夠做出成功的蔥油雞呢?

這邊直接公布答案囉。

上面兩個食譜,後者(食譜B)是更好的食譜。因為食譜B更有條理,步驟更明確清楚,且每個小步驟都有明確區隔,會更好閱讀。

食譜A可以改進的地方,就是以食譜B為目標,改得像是B那樣清楚易懂、條理分明,而這個"審核食譜"的過程,就跟Code Review很像。

我會挑食譜B的原因,這與Code Review原則的"語意式編程"很接近,語意式編成大致上是指"光是看程式碼,就知道其中運作邏輯”。雖然程式主要是給機器運行,但終究還是由"人類"維護,所以程式碼還是得寫得讓人看得懂才行,其他人(或未來的你)接手時,才知道要怎麼改。

Code Review就像是這樣,Review的人要懂得分辨眼前的程式碼是否符合原則,並提出"改善建議”,才會讓對方(程式碼被review的人)有所改善並進步, 寫出更高品質、更好讀的程式碼

結論: 先從文字表達去感受何謂好的程式碼

有時程式碼不太直覺,不太容易"體會"何謂程式碼的”好壞”,尤其對於新手或是想學程式的人來說,光是要看懂就不太容易了,更別說根本不具有足夠的批判鑑賞力,哪看得出好壞?

我認為可以先從閱讀開始培養,先養成懂得如何判斷何謂”好的文章”,這邊說的閱讀,就是一般的讀書,像是看西遊記、水滸傳等。

透過大量閱讀及文章剖析,可以知道優質文章都是怎麼寫的,有什麼獨到之處,什麼樣的文字安排讀起來更讓人"舒服"好懂。看完之後,再加上寫作練習,試著學習作者用更簡潔有力,結構清楚的文字,完整表達自己的想法。

或許你會認為"一般文字寫作”與"寫程式碼”沒有關係,不過我們可以從剛剛食譜的例子來看,食譜也是可以應用這些通用的寫作法則,該如何拆解資訊,組成易讀的文章,這些道理其實都一樣,核心概念都是共通的。

除了大量閱讀書籍,想寫好程式碼沒有捷徑,就是多閱讀其他開源專案的優良程式碼(可以看那些星星數特別多的專案,基本上寫得都不錯),學會其他人都怎麼寫的,試著"拆解"其編寫思路,再加上多寫多練,終究可以內化成自己的寫程式思維。

寫了數年的程式碼,最近才終於發現這個道理,分享給大家。