[網文觀點] 李家同先生:不會畫流程圖,就表示他沒有邏輯思考的能力,不可能會寫程式
原文出處: https://goo.gl/UxxUeM
----------(本文開始)----------
前不久拜讀李家同先生的「怪不得很多資訊相關科系的學生不會寫程式」,對於其中他觀察到的現象「某些資訊系畢業生不會寫程式」,肇因於「沒有邏輯思考能力」,最後得出「會畫流程圖才有邏輯能力,才會寫程式」,我一半同意,一半不同意。所以撰文抒發一下我個人的淺見。
根據我自己在電腦補習班教書 30 年的經驗(我從 1989 年開始在電腦補習班執教),我同意「要會寫程式 --> 需要有邏輯能力」這條推論。但「要有邏輯能力 --> 要會畫流程圖」這一條我就不太敢苟同了。
先定義一下「邏輯能力」。我認為的邏輯能力是,遇到一個問題,腦袋能把「先做哪一件事,再做哪一件事」這個順序安排得好。邏輯能力與數學無關。就我看來,我家附近最有邏輯能力的人,是巷口早餐店的掌廚阿姨。大家絡繹不絕的點餐,她還是有辦法指揮廚房內的三名助手:「小A,你先下兩杯冰咖啡...小B,準備好一份切邊土司,兩份漢堡麵包...小C,XX 桌去收一下,然後幫李大哥結帳...」一切有條不紊!這也是程式設計最重要的能力:「把解題步驟有條不紊地依序寫成程式碼」。我覺得她來學程式,一定是會學得很好!
養成「邏輯能力」的方法很多,「畫流程圖」只是其中一種方法。所以「能畫流程圖 --> 有邏輯能力」這條我贊成。但李先生說的「要有邏輯能力 --> 必須要會畫流程圖」這條反過來的推論,我就不贊成了!「能畫流程圖 --> 有邏輯能力」這條,並非「反之亦然」的條件。「有邏輯能力」對應出去的,是個「一對多」的關係。能畫流程圖的人,邏輯能力一定不差,但邏輯能力好的人,不一定會畫流程圖。否則巷口早餐店掌廚阿姨不會畫流程圖,不就成了最沒有邏輯能力的人?(不知道我這樣解釋,大家覺得我的邏輯能力還可以嗎? XD )
另一點我不太贊成讓程式初學者去靠「畫流程圖」學會程式邏輯的原因是,業界已經不太要求程式設計師繪製流程圖了。用流程圖來表示程式邏輯,已經是 1980 年代「結構化程式導向」工法那個時期的事情了。進入 1990 年代,程式已經全面改用「物件導向程式設計」工法,「流程圖」裡的那些方塊、菱形,沒有辦法表示出「物件」、「類別」...等這類概念。所以 1990 年代業界提出另一套符號,叫做「UML(Unified Model Language)」圖。用「Use Case」、「Class Diagram」、「Sequence Diagram」...等這幾套符號,全面取代以前的流程圖符號了。想簡單了解 UML 的朋友可以參考這篇文章: https://goo.gl/LTv4fS
時序進入 2000 年代,大家發現「寫程式前先畫流程圖 / UML 圖」這件事是不切實際的。因為 2000 年代的軟體生命週期更短!汰換率比以前更快!已經沒有時間讓程式師慢慢畫流程圖後,才開始寫程式。況且,辛苦畫好的流程圖,會因為修改程式碼但忘了順便修改流程圖,導致流程圖漸漸無法反應現時這套程式的邏輯,而成了廢物。另外,流程圖並非每位新進員工都會,新人訓練還要加上教會他流程圖的各種符號,以便看懂公司內各種文件,C/P 值太低了!所以 2000 年後,資訊業界就不太要求程式師用流程圖或 UML 圖,來表示程式邏輯了。
那現在資訊業界用什麼方法表示程式邏輯呢?最簡單的方法:用文字條列。把一小段的程式該做哪些事情,一條條列出來,簡單描述即可。把該做的事情用文字條列,人人都不用特別學習另一套符號,成本超低!也能表現出程式邏輯(其實流程圖要表示的,不就是程式邏輯嗎?用文字表示效果一樣)。甚至於還能把這些條列文字,用「註解」的方式,寫入原始碼中。這樣修改原始碼,就會順便修改註解,保持「邏輯」與「原始碼」同步。如果你想把程式邏輯從註解抽出來變成文件,用特殊軟體抽出註解、拋棄原始碼就行了。業界最出名的這類抽取註解變文件的工具,有 JavaDoc(這部影片有示範 JavaDoc 抽出來的註解可以變成多精美的文件: https://youtu.be/Ls-NHebXY20 )。正因為用的是最簡單的「文字」,才能輕易地把程式邏輯內嵌在原始碼中。如果是圖形,那就辦不到了。
如果你真的要用圖形表示程式邏輯,業界現在流行「直接把操作介面畫出來」。不用畫得很精緻,用一些方框代表「這裡是文字框、這裡是確定鈕」即可。這類手法,稱為「Wireframe」。這邊有一篇 Wireframe 的中文說明: https://goo.gl/KIrq0Y 。用 Wireframe,不僅好學(基本上沒有特定規則,看得懂就好),畫出來也可以分享給客戶,示範我們會怎麼幫他設計他想要的程式,而不用擔心客戶看不懂流程圖。更適合用來表達 1990 年代後期興起的「圖形使用者介面(GUI, Graphical User Interface)」。流程圖某種情況下,只適合表示 1980 年代那種「文字式介面」的需求了。
那為什麼現今資訊系畢業的學生,不會寫程式的比例變多了呢?事實上,是現在資訊系學生要學的東西變多了。所以分配到每一樣的「練習」變少,就變成「樣樣通、樣樣鬆」了。光學完理論,還來不及實作,就被逼著去學下一項。就像剛考上普通駕照,沒時間給他道路駕駛,然後逼著他又去考職業駕照、大客車駕照、連結車駕照,再來感嘆:「現在年輕人道路駕駛變差了」。我開始學程式設計的時間,應該只比李家同先生晚一點,大概都是 1980 年代前後。那時候,只要學會 C 語言,加上資料結構、演算法,人家就虎視眈眈地問你什麼時候畢業、能去他們公司工作了。沒有 GUI、沒有網頁程式設計、沒有手機程式設計、沒有大數據...通.通.都.沒.有!所以,不太會寫程式的原因,是「練習不夠」,而「邏輯能力」就是靠大量實作練出來的。因此,真正的因果關係,我認為是「學習項目太多 --> 實作練習不足 --> 邏輯能力無法提昇 --> 寫程式時腦袋一片空白 --> 被人家說不會寫程式」。真正解藥是:「專注一項,多多實作練習」。你至少要把一種語言練到精通,養出基本的程式撰寫邏輯後,再去跳其他語言。這樣就不會「樣樣通、樣樣鬆」了(我個人的基本功底,是 C 與 Java。兩種語言我都練到真的很強!學新語言,我都會去找對照關係:這個語法對應到 C/Java 的哪一種,來加速學習)。
最後讓我重述一下我的觀點:我不反對用繪製流程圖來訓練邏輯能力,但說訓練邏輯能力,一定要會流程圖,這件事情我不贊同。天底下還有比流程圖更簡單、也能訓練邏輯能力的方法。千萬不要認為「流程圖」是訓練邏輯能力的唯一方法就行了。
啊!對了!麻煩不要拿著我這篇文章貼到李家同先生的網誌去戰人家。您可以兩篇文章都看,甚至選擇不同意我說的論點。李先生是我們這行的大前輩,我個人還是蠻尊敬他的。
「數學符號感嘆號」的推薦目錄:
- 關於數學符號感嘆號 在 紀老師程式教學網 Facebook 的最佳貼文
- 關於數學符號感嘆號 在 紀老師程式教學網 Facebook 的最佳貼文
- 關於數學符號感嘆號 在 趙惠雯言文 Facebook 的最讚貼文
- 關於數學符號感嘆號 在 在標點符號裡稱為「驚嘆號」,在數學上稱為「階乘」,在計算 ... 的評價
- 關於數學符號感嘆號 在 驚嘆號特殊符號的評價費用和推薦,YOUTUBE、DCARD 的評價
- 關於數學符號感嘆號 在 驚嘆號特殊符號的評價費用和推薦,YOUTUBE、DCARD 的評價
- 關於數學符號感嘆號 在 小学语文- 中文学习] 109认识问号和感叹号|标点符号 - YouTube 的評價
數學符號感嘆號 在 紀老師程式教學網 Facebook 的最佳貼文
[網文觀點] 李家同先生:不會畫流程圖,就表示他沒有邏輯思考的能力,不可能會寫程式
原文出處: https://goo.gl/UxxUeM
-\-\-\-\-\-\-\-\-\-\(本文開始)-\-\-\-\-\-\-\-\-\-\
前不久拜讀李家同先生的「怪不得很多資訊相關科系的學生不會寫程式」,對於其中他觀察到的現象「某些資訊系畢業生不會寫程式」,肇因於「沒有邏輯思考能力」,最後得出「會畫流程圖才有邏輯能力,才會寫程式」,我一半同意,一半不同意。所以撰文抒發一下我個人的淺見。
根據我自己在電腦補習班教書 30 年的經驗(我從 1989 年開始在電腦補習班執教),我同意「要會寫程式 -\-\> 需要有邏輯能力」這條推論。但「要有邏輯能力 -\-\> 要會畫流程圖」這一條我就不太敢苟同了。
先定義一下「邏輯能力」。我認為的邏輯能力是,遇到一個問題,腦袋能把「先做哪一件事,再做哪一件事」這個順序安排得好。邏輯能力與數學無關。就我看來,我家附近最有邏輯能力的人,是巷口早餐店的掌廚阿姨。大家絡繹不絕的點餐,她還是有辦法指揮廚房內的三名助手:「小A,你先下兩杯冰咖啡...小B,準備好一份切邊土司,兩份漢堡麵包...小C,XX 桌去收一下,然後幫李大哥結帳...」一切有條不紊!這也是程式設計最重要的能力:「把解題步驟有條不紊地依序寫成程式碼」。我覺得她來學程式,一定是會學得很好!
養成「邏輯能力」的方法很多,「畫流程圖」只是其中一種方法。所以「能畫流程圖 -\-\> 有邏輯能力」這條我贊成。但李先生說的「要有邏輯能力 -\-\> 必須要會畫流程圖」這條反過來的推論,我就不贊成了!「能畫流程圖 -\-\> 有邏輯能力」這條,並非「反之亦然」的條件。「有邏輯能力」對應出去的,是個「一對多」的關係。能畫流程圖的人,邏輯能力一定不差,但邏輯能力好的人,不一定會畫流程圖。否則巷口早餐店掌廚阿姨不會畫流程圖,不就成了最沒有邏輯能力的人?(不知道我這樣解釋,大家覺得我的邏輯能力還可以嗎? XD )
另一點我不太贊成讓程式初學者去靠「畫流程圖」學會程式邏輯的原因是,業界已經不太要求程式設計師繪製流程圖了。用流程圖來表示程式邏輯,已經是 1980 年代「結構化程式導向」工法那個時期的事情了。進入 1990 年代,程式已經全面改用「物件導向程式設計」工法,「流程圖」裡的那些方塊、菱形,沒有辦法表示出「物件」、「類別」...等這類概念。所以 1990 年代業界提出另一套符號,叫做「UML(Unified Model Language)」圖。用「Use Case」、「Class Diagram」、「Sequence Diagram」...等這幾套符號,全面取代以前的流程圖符號了。想簡單了解 UML 的朋友可以參考這篇文章: https://goo.gl/LTv4fS
時序進入 2000 年代,大家發現「寫程式前先畫流程圖 / UML 圖」這件事是不切實際的。因為 2000 年代的軟體生命週期更短!汰換率比以前更快!已經沒有時間讓程式師慢慢畫流程圖後,才開始寫程式。況且,辛苦畫好的流程圖,會因為修改程式碼但忘了順便修改流程圖,導致流程圖漸漸無法反應現時這套程式的邏輯,而成了廢物。另外,流程圖並非每位新進員工都會,新人訓練還要加上教會他流程圖的各種符號,以便看懂公司內各種文件,C/P 值太低了!所以 2000 年後,資訊業界就不太要求程式師用流程圖或 UML 圖,來表示程式邏輯了。
那現在資訊業界用什麼方法表示程式邏輯呢?最簡單的方法:用文字條列。把一小段的程式該做哪些事情,一條條列出來,簡單描述即可。把該做的事情用文字條列,人人都不用特別學習另一套符號,成本超低!也能表現出程式邏輯(其實流程圖要表示的,不就是程式邏輯嗎?用文字表示效果一樣)。甚至於還能把這些條列文字,用「註解」的方式,寫入原始碼中。這樣修改原始碼,就會順便修改註解,保持「邏輯」與「原始碼」同步。如果你想把程式邏輯從註解抽出來變成文件,用特殊軟體抽出註解、拋棄原始碼就行了。業界最出名的這類抽取註解變文件的工具,有 JavaDoc(這部影片有示範 JavaDoc 抽出來的註解可以變成多精美的文件: https://youtu.be/Ls-NHebXY20 )。正因為用的是最簡單的「文字」,才能輕易地把程式邏輯內嵌在原始碼中。如果是圖形,那就辦不到了。
如果你真的要用圖形表示程式邏輯,業界現在流行「直接把操作介面畫出來」。不用畫得很精緻,用一些方框代表「這裡是文字框、這裡是確定鈕」即可。這類手法,稱為「Wireframe」。這邊有一篇 Wireframe 的中文說明: https://goo.gl/KIrq0Y 。用 Wireframe,不僅好學(基本上沒有特定規則,看得懂就好),畫出來也可以分享給客戶,示範我們會怎麼幫他設計他想要的程式,而不用擔心客戶看不懂流程圖。更適合用來表達 1990 年代後期興起的「圖形使用者介面(GUI, Graphical User Interface)」。流程圖某種情況下,只適合表示 1980 年代那種「文字式介面」的需求了。
那為什麼現今資訊系畢業的學生,不會寫程式的比例變多了呢?事實上,是現在資訊系學生要學的東西變多了。所以分配到每一樣的「練習」變少,就變成「樣樣通、樣樣鬆」了。光學完理論,還來不及實作,就被逼著去學下一項。就像剛考上普通駕照,沒時間給他道路駕駛,然後逼著他又去考職業駕照、大客車駕照、連結車駕照,再來感嘆:「現在年輕人道路駕駛變差了」。我開始學程式設計的時間,應該只比李家同先生晚一點,大概都是 1980 年代前後。那時候,只要學會 C 語言,加上資料結構、演算法,人家就虎視眈眈地問你什麼時候畢業、能去他們公司工作了。沒有 GUI、沒有網頁程式設計、沒有手機程式設計、沒有大數據...通.通.都.沒.有!所以,不太會寫程式的原因,是「練習不夠」,而「邏輯能力」就是靠大量實作練出來的。因此,真正的因果關係,我認為是「學習項目太多 -\-\> 實作練習不足 -\-\> 邏輯能力無法提昇 -\-\> 寫程式時腦袋一片空白 -\-\> 被人家說不會寫程式」。真正解藥是:「專注一項,多多實作練習」。你至少要把一種語言練到精通,養出基本的程式撰寫邏輯後,再去跳其他語言。這樣就不會「樣樣通、樣樣鬆」了(我個人的基本功底,是 C 與 Java。兩種語言我都練到真的很強!學新語言,我都會去找對照關係:這個語法對應到 C/Java 的哪一種,來加速學習)。
最後讓我重述一下我的觀點:我不反對用繪製流程圖來訓練邏輯能力,但說訓練邏輯能力,一定要會流程圖,這件事情我不贊同。天底下還有比流程圖更簡單、也能訓練邏輯能力的方法。千萬不要認為「流程圖」是訓練邏輯能力的唯一方法就行了。
啊!對了!麻煩不要拿著我這篇文章貼到李家同先生的網誌去戰人家。您可以兩篇文章都看,甚至選擇不同意我說的論點。李先生是我們這行的大前輩,我個人還是蠻尊敬他的。
數學符號感嘆號 在 趙惠雯言文 Facebook 的最讚貼文
【只是閒聊—學生戀愛】
大學考試分發放榜,幾家歡樂幾家愁,這類「一年一度」的新聞,不管基測、學測、指考,寫起來都已經有既定公式。放榜後通常會有幾類學生受訪,第一種,努力念書,終於不負眾望得到好成績,能對某位親人或是長輩交代,例如林杰樑醫師的兒子,我看到他接受訪問,想到自己,有時支撐自己走下去的動力,不過就是對某個人的承諾,或者希望他以你為榮的渴望。第二種,如同戲劇,平步青雲、順順利利的故事大家不會想看,主人公原先普通不起眼、甚至處於劣勢,經過一番努力,扭轉命運、贏得勝利,例如雄女的馮姓女同學,接受採訪時她自述,原先成績普通,後來發奮圖強,終有這樣的成績。也不怪乎,當專訪刊出,她會無奈的澄清,請大家把重點放在她努力,而不是專訪中命名為「學霸男友」的身上。
我想到小我五歲的小妹,我小六時她小一,我還跑去他們班上當大姊姊,一直以來她都不怎麼愛讀書,整天抱著漫畫、盯著電視,看課本十分鐘就坐不住,能夠不考吊車尾,就阿彌陀佛。她國中時,老母拿著他的成績單,憂心忡忡地對著念高中的我說「妳也教教妳妹,這個成績我看了頭好痛」。但老實說,我高中成績了不起也就前十名,偶爾好一點可以到四、五名,雖然不差,但也不是頂好,數學還曾考過12分,教數學的班導看了差點沒吐血,要我教妹妹,我還真不知從何教起。
時光荏苒,很快的小妹上了大學,我也跑到台北打拼賺錢,新手上路、工作忙起來不得了,天昏地暗,能記得吃飯睡覺已經謝天謝地,根本沒有力氣管家人朋友到底怎麼了。雖然定期回家,但因為跟小妹回家的時間很難搭在一塊,有陣子我甚至忘記她到底長怎樣了。等到我有機會在家裡看見她時,她居然不是在客廳看動漫、打線上遊戲,手上拿的是厚厚的課本、電腦畫面是各種密密麻麻看不懂的符號跟資料。
也是那個時候,我才從大妹口中得知,小妹交了一個男朋友。
「妳還是學生,要專心唸書,不要急著談戀愛,影響妳的課業」這句話不知道是迴盪在多少人青春歲月中的雜音,好像所有的學生戀情必然影響成績,但也不得不說、這樣的例子並不少,也不怪乎家長們耳提面命,就怕孩子談了一場戀愛、毀了他們一生。
小妹交了這個男朋友之後,才開始認真唸書,光聽這樣的敘述,很容易被理解成「交了男友開始努力唸書」,但她自承,其實是意識到不能再渾噩度日,否則對不起老母,只是剛好這樣的想法,出現在交了男友之後。總之,小妹成績開始進步,甚至到班上第一名,此時她「自首」有這個男友的存在,老母也不意外的、贊成這段關係。
不想推翻或贊成談戀愛跟努力唸書之間的任何因果關係,更不是想否定小妹的男友對她產生的影響,只是感嘆,我們對許多結果所認知的原因,會不會只是外界一廂情願的想像。
#只是閒聊
#學生戀愛
數學符號感嘆號 在 小学语文- 中文学习] 109认识问号和感叹号|标点符号 - YouTube 的美食出口停車場
![影片讀取中](/images/youtube.png)
更多高品质课程和中文学习内容正在路上,以下链接可以让您快速拥有一站式、高品质的中文学习解决方案!所有课程均为中国国内同步教材;专为3-15岁海外 ... ... <看更多>
數學符號感嘆號 在 在標點符號裡稱為「驚嘆號」,在數學上稱為「階乘」,在計算 ... 的美食出口停車場
「❗」這個符號大家一定不陌生,在標點符號裡稱為「驚嘆號」,在數學上稱為「階乘」,在計算排列、組合的題目時,經常會使用到它。 ... <看更多>