Re: [討論] 李家同 怪不得資工學生不會寫程式

作者: zanyking (最後的六年級生)   2019-03-13 15:54:47
※ 引述《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,我最喜歡的一套小說,就是夢枕貘的『陰陽師』
寫程式就是命名,命名就是下咒,咒下得好,程式就會有強烈的生命,你
只要看著它,它就會透過你的眼睛操作你的手去敲鍵盤,把該有的其他部分
程式碼給打出來。
命名得不好,程式是死的,那就只好自個一個字、一個字慢慢敲了
作者: pttworld (批踢踢世界)   2019-03-13 16:16:00
DFD是SA文件必備的
作者: testPtt (測試)   2019-03-13 16:18:00
其實asm,vhdl這種接近硬體的還是會畫看看
作者: thefattiger (LT)   2019-03-13 16:31:00
我也覺得循序圖實用得多,不過非開發者看流程圖應該是比較好懂
作者: bcew (bcew)   2019-03-13 17:21:00
asm是循序語言和流程圖天然匹配,vhdl還是架構圖、FSM、和波形圖比較好描述,loop和while在電路上很不直覺^^
作者: jhjhs33504 ( )   2019-03-13 17:31:00
流程圖也沒那麼不堪 尤其很多framework底下邏輯照著跑hard code的話反而是特殊案例吧畢竟涵蓋範圍有限bug多
作者: ripple0129 (perry tsai)   2019-03-13 18:22:00
推,最大的問題其實是圖文不符啊XD
作者: es8603 (緋色之翼)   2019-03-13 21:27:00
推zanyking!
作者: atpx (秋雨的心情)   2019-03-13 21:50:00
任何文件最後都會落得與程式碼不符吧, 除非不斷投入人力改問題對管理者來說, 程式碼才是產出, 文件不是
作者: brucetu (sec)   2019-03-13 22:10:00
我覺得不是UML圖那種很文件的東西而是規劃程式的時候隨便畫的幾個框框幾條線寫一些重點跟同事討論或者跟主管說明的時候也都會用到開會總不能拿code出來討論商業邏輯吧至於UML那種圖 真的很難跟程式一致 還是算了就像是一個新成員加入專案 要讓對方快速了解有圖還是比較快
作者: Masakiad (Masaki)   2019-03-13 22:20:00
講UML很難跟程式一至的只是沒認真做而已吧,扣除UML維護的問題,第一次按圖施工不一樣鐵定有人不認真
作者: testPtt (測試)   2019-03-13 22:49:00
微軟派來的有code map可以用就不會想畫那些圖了
作者: lazarus1121 (...)   2019-03-13 22:59:00
施工的時候設計圖一直改 是要怎麼按圖施工XD改到最後時間壓力出來 你會先改程式還是設計圖
作者: atst2 (atst2)   2019-03-13 23:25:00
流程圖有用, 但不是對應在程式細節上.Android的Activity生命週期就是使用流程圖的一個好例子.不過對實作細節而言,流程圖確實比不上程式本身來得清楚.
作者: neo5277 (I am an agent of chaos)   2019-03-13 23:40:00
推循序我第一個一定先弄這個
作者: shter (飛梭之影)   2019-03-14 01:22:00
我是寫好 function 名字後先在內部用註解寫判斷步驟然後每一行的步驟下面寫 code,每行註解的 code 都寫完就完如果某一步驟的可以重複使用時就再開一個 function 直接寫
作者: konkonchou (卡卡貓)   2019-03-14 01:42:00
流程圖主要是拿來溝通用,SA用很多,拿去當SD文件給PG自然是用錯地方了,至於文件過時所以才要持續修正小專案一個人作當然是耗費人力資源,專責分工才有效益
作者: ku399999   2019-03-14 09:04:00
像是slack推播判斷流程圖 溝通 debug還是很有用吧
作者: buwa56 (balasai)   2019-03-14 11:20:00
感覺是一人戰隊
作者: layolayo (藍天晴雨)   2019-03-14 18:38:00
300行code小意思
作者: tinlans ( )   2019-03-15 03:01:00
很難一致是惰性問題,拆成 microservices 做就很難偷懶了
作者: superpandal   2019-03-15 04:03:00
流程圖的確是給外行人看的 架構還是要夠飄逸才可以
作者: ruokcnn (Dean)   2019-03-16 14:10:00
同意你
作者: supermmi (陳敏憲)   2019-03-18 00:23:00
我是程式寫完後才畫流程圖,算是筆記,將來要回頭看code時會有幫助

Links booklink

Contact Us: admin [ a t ] ucptt.com