※ 引述《Hertzfeld (Google+)》之銘言:
: 很多明星大學的數學系畢業生也不會寫程式。
: 我最近和十幾位這一類的學生聊天,他們都告訴我一件事,
: 他們的老師從來不教他們如何畫流程圖。
: 對這些老師而言,寫程式最重要的是要熟悉電腦語言,而不是利用邏輯思考。
: 其結果是,學生搞不清楚程式是如何產生的。
: 我實在不懂,為什麼現在的老師們不重視邏輯思考,
: 也不教學生如何畫流程圖?畫流程圖其實是寫程式的第一步,
: 如果你不會畫流程圖,就表示你不知道程式是如何寫出來的,
: 也表示你根本不會設計程式。
: 很多學生寫程式的時候是亂寫一陣,其中的來龍去脈根本搞不清處,
: 寫完以後,如果程式有問題,你也不會偵錯。
: 我強調流程圖的重要性已經很久了,可是顯然沒有什麼效用,
: 因為這幾天我碰到的學生都是才從大學畢業的,
: 他們雖然畢業於資訊相關科系,卻都不會寫程式。
: 但是我還是要再呼籲一次,學生如果不會畫流程圖,
: 就表示他沒有邏輯思考的能力,不可能會寫程式的。
我作開發也差不多快15年,我自己個人的經驗是:
只要用的程式語言支援Object Oriented programming 或
Funtional programming,正常開發情境下是非常少會用到流程圖的
因為任何語言只要支援這兩者,那『定義』也就是『正確的命名』
行為或物件才是開發的重點,而程式的決策樹,會被命了名的
物件或程序給分割搶食,只留下許多的情境,與當中特定的角色
如何互動
命名對了,介面開好,流程圖用javadoc的敘述就能取代了
所以,把流程畫得很清楚,有那種閒功夫不如直接寫Code
而畫得不清楚,那通常流程圖就會退化成混雜特殊語法的用例圖
或甚至是幾行敘述
而且流程圖在我來看有個很不好的缺點:就是他會引誘不成熟的
開發者寫出非常imperative programming的程式,因為照著寫,
分支就是開if else,然後加個後迴圈、裡面再if else,如此一行
一行的寫下去
有沒有看過一個Java class 2000行,其中主要的public methods
動輒300行起跳,indent 深到可以打波動拳的?
這種Code 就是看著流程圖、把程式碼當做指令才會寫成這樣的
所以,我什麼時候才會用流程圖呢?
就是我得接手上述這種明顯照著流程圖作開發的程式的時候
對,原作者可能有把流程圖留下來,但,流程圖是維護成本最高的一種圖
而只要專案一忙、bug一多,那文件肯定是過時的,所以最後常常
只能照著程式碼重建整個流程,才能推斷不同內容的資料流流進來的時候
會發生什麼事,但很多時候即使面對這種情況我也是不畫流程圖的,
我會乾脆開始寫單元測試搞重構
若要講到我最常用的圖,那肯定是循序圖第一、用例圖第二,以及非常不規範
的組件圖第三
特別在開發的系統遵循Micro service 設計思維的時候,循序圖畫不出來等
同於我根本不知道我在幹嘛
當然,也有可能是我寫的跟李家阿伯寫的領域不一樣,所以會這樣吧?
身為programmer,我最喜歡的一套小說,就是夢枕貘的『陰陽師』
寫程式就是命名,命名就是下咒,咒下得好,程式就會有強烈的生命,你
只要看著它,它就會透過你的眼睛操作你的手去敲鍵盤,把該有的其他部分
程式碼給打出來。
命名得不好,程式是死的,那就只好自個一個字、一個字慢慢敲了