分享好文,中學生要學電腦嗎?
作者:創新工場CTO、人工智慧工程院執行院長 王詠剛
文章来自半轻人微信公众号(ban-qing-ren)
………………………………
朋友的孩子高中剛畢業,已拿到美國頂尖大學(非電腦專業)的錄取通知。疫情影響,不知何時才能去學校報到。孩子想抓緊學習一下程式設計,為大學打好基礎。這孩子找我聊了一個多小時,從如何學程式設計,聊到非電腦專業和電腦專業的路徑差異,又聊到如何從不同角度認識電腦與程式設計。聊得比較寬泛,不知是否對這孩子有用。
回想我自己的高中時代:那時雖迷戀程式設計,卻完全沒有懂行的人指導。在我們那個四線城市的廠礦中學裡,開設電腦興趣課的老師知道的資訊還沒我多。我高一時跑到北京中關村逛街,卻完全沒意識到中國第一代頂尖程式師當時就在我身邊的低矮辦公樓裡寫代碼(這話說得並不準確,比如求伯君那年就主要是在珠海做開發),鼎鼎大名的UCDOS、WPS、CCED就出自他們之手……我在當時街邊的一家書店(位置似乎就在今天的鼎好大廈對面)買到了許多種印刷品質極低劣的電腦圖書。用今天的標準看,那就是一批盜版影印或未授權翻譯的國外圖書。可那批書竟成了我高中時代最寶貴的程式設計知識來源。
顯然,我在高中時根本就是野路子學電腦。現在後悔也沒用,當時我的眼界或能觸及的資源就那麼多。如果能穿越回30年前,我該對喜歡程式設計的自己說些什麼呢?這些年,我與世界上最好的一批程式師合作過,也參與過世界上最有價值的軟體系統研發——我所積累的一些粗淺經驗裡,有哪些可以分享給一個愛程式設計的中學生?
【問題1】中學生要不要學電腦?
當然要!
每個中學生都要學。只不過——建議大部分中學生使用“休閒模式”,小部分(不超過10%)中學生使用“探險模式”。
啊?兩個模式?那我該進入哪個模式?⟹請跳轉至【問題2】
【問題2】選哪個模式?
你癡迷電腦嗎?比如,你玩遊戲時會特別想知道這遊戲背後的代碼是如何編寫的嗎?再比如,就算老師家長不同意你學電腦,甚至當著你的面把電腦砸了,你也要堅持學電腦嗎?如果是,恭喜你進入“探險模式”⟹請跳轉至【問題200】
你對數學有興趣嗎?比如,你看到街邊建築的曲線,就會在腦子裡琢磨曲線對應的函數或方程嗎?每當手裡攥著幾粒骰子,你就會不由自主地計算概率嗎?如果是,歡迎進入“探險模式”⟹請跳轉至【問題200】;當然,如果有些猶豫,也可以先進入“休閒模式”⟹請跳轉至【問題100】
即便你對電腦和數學興趣不大,家長、老師還是強烈建議你學電腦嗎?就算你一百個沒時間一千個不願意,家長、老師還是會逼著你學電腦嗎?如果是,建議你主動進入“休閒模式”並向家長、老師彙報說“我已經按照前谷歌資深軟體工程師的專業建議在認真學程式設計了”⟹請跳轉至【問題100】
其他情況,一律進入“休閒模式”。⟹請跳轉至【問題100】
【問題100】休閒模式 | 主要學什麼?
“休閒模式”將電腦視為我們生活、工作中的必備工具,主要學習如何聰明、高效、優雅地使用計算設備。這裡說的計算設備,包括所有形式的電腦、手機、遊戲機、智慧家電以及未來一定會進入生活的自動駕駛汽車。
什麼什麼?你已經會用電腦、會玩手機、會打遊戲了?別著急,慢慢往下看。
【問題101】休閒模式 | 我會用搜尋引擎嗎?
我知道你會用百度搜習題答案。但,習題答案不是知識。你會用搜尋引擎來搜索和梳理知識嗎?請試著用電腦和你喜歡的搜尋引擎來解決如下兩個問題:
(1)圓周率𝜋的計算方法有多少種?每種不同的計算方法分別是由什麼人在什麼時代提出的?借助電腦,今天人們可以將圓周率𝜋計算到小數點後多少位?將圓周率𝜋計算到小數點這麼多位元,一次大概需要花掉多少度電?
(2)全球大約有多少個廁所?在發展程度不同的國家,分別有多少比例的人可以享用安裝了抽水馬桶的衛生廁所?為什麼比爾·蓋茨曾大力推動一個設計新型馬桶的研發專案?比爾·蓋茨的公益組織在這個專案上大約花費了多少資金,最終收到了多大的效果?
如果你沒法快速得到上述問題的全部答案,那就給自己設一個小目標:一個月內,學會用搜尋引擎系統地獲取、梳理一組知識點的全部技巧。
【問題102】休閒模式 | 接下來學什麼?
建議學好典型的工具軟體。比如,我知道你會用Office了,但用Office和用Office是很不一樣的。對生活、學習、工作來說,學好、學透一個工具軟體比鑽研程式設計技巧更實用。
你會用Excel來管理班級公益基金的預算和實際收支情況嗎?
你會用Excel做出過去20年裡全球大學排名的演變趨勢圖嗎?
你會用Word排版一篇中學生論文嗎?論文中的圖表和最後的參考文獻部分該如何排版?
你會用Word編排一份班級刊物,包含封面、扉頁、目錄、插圖頁、附錄、封底等部分,可以在列印後直接裝訂成冊嗎?
PowerPoint呢?你有沒有研究過蘋果公司發佈會上那些幻燈片的設計?當約伯斯(多年以前)或蒂姆·庫克站在幻燈片前的時候,他們的演講思路是如何與幻燈片完美結合的?
還有哦,別忘了學學如何為數碼照片做後期,如何用電腦或手機剪視頻,如何為剪輯好的視頻配字幕,如何將照片、音樂、視頻等素材結合起來,做出一段吸引人的快手/抖音短視頻。
最後,抽空玩玩那些設計精妙的遊戲吧,比如《紀念碑穀》、《塞爾達傳說:曠野之息》之類;同時,遠離那些滿屏廣告,或者一心騙你在遊戲裡充值花錢的垃圾。
【問題103】休閒模式 | 不學學知識嗎?
當然要學知識。下面每種實用的電腦知識都夠大家學一陣子了。
(1)色彩知識:你知道同一張數碼照片在不同品牌的手機螢幕上、不同的電腦螢幕上、不同的智慧電視上顯示時,為什麼經常有較大色差嗎?你知道有一些色彩只適合螢幕顯示,不適合列印輸出嗎?你知道軟體工具裡常用的RGB、HSL之類的色彩空間都是什麼意思嗎?如何在設計PowerPoint幻燈片時選擇一組和諧美觀的色彩?
(2)字體知識:你知道什麼是襯線字體,什麼是無襯線字體嗎?你知道網頁中常用的英文字體都有哪些嗎?你知道商務演講時最適用于幻燈片的英文字體有哪些嗎?你知道電腦和手機常用的黑體、宋體、仿宋體、楷體等中文字體分別適合哪些實際應用場合嗎?你會將不同字體混排成一個美觀的頁面嗎?
(3)網路知識:你知道5G是什麼嗎?你知道5G和4G在通信頻寬、通信距離上的具體區別嗎?你知道什麼是路由器,什麼是防火牆嗎?你知道如何配置路由器,如何配置防火牆嗎?微信或QQ聊天時,對方發的文字、語音或視頻是如何傳送到你的手機上的?
(4)應用知識:淘寶中搜索得到的商品資訊是從哪裡來的?商品是按什麼方式排序的?為什麼購物APP經常會推薦給你一些曾經買過、看過的商品?你知道如何為自己建立個人網站嗎?你知道如何管理微信公眾號嗎?
(5)安全知識:你知道網路上的釣魚攻擊是怎麼回事兒嗎?你知道什麼是電腦漏洞嗎?你知道駭客為什麼想把一大批受攻擊的電腦變成可以遠端操控的傀儡機嗎?你知道為什麼現在很多手機APP都要通過短信發送驗證碼嗎?如果驗證碼被壞人截獲,你會面臨哪些風險?
這裡只是舉例。實用的電腦知識還有很多。大家可以自己發掘。
【問題104】休閒模式 | 我需要學程式設計嗎?
可以學,但不是必須。即便學,也只需要根據自己的需要,學那些最能幫你解決現實問題的部分。
【問題105】休閒模式 | 我該學什麼程式設計語言?
在“休閒模式”裡,電腦就是工具,程式設計也是工具,夠用就好。學什麼程式設計語言,完全看你想要電腦幫你做什麼。
• 如果你想對資料處理有更多自主權,那不妨學學Python;
• 如果你想做簡單的交互演示程式,那就先把JavaScript學起來;
• 如果你想更好、更快地寫論文,那不妨學學LaTeX(什麼什麼,LaTeX不是程式設計語言?你太小看LaTeX了);
• 如果你想學做簡單的手機APP,那麼,Android手機就學Java,蘋果手機就學Swift好了;
• 如果你只想知道程式設計是怎麼回事,那……從Python或JavaScript開始就行。其實,跟五六歲的小朋友一起學學Scratch圖形程式設計也不錯。
【問題106】休閒模式 | 我需要學人工智慧嗎?
在“休閒模式”裡,最需要學的不是“人工智慧的實現原理”,而是“什麼是人工智慧”,以及“人工智慧能做什麼,不能做什麼”。
• 在手機上試一試,人工智慧做語音辨識時能做到什麼水準?哪些話容易識別,哪些話不容易識別?
• 打開機器翻譯軟體,試一試哪些資訊翻譯得好,哪些資訊翻譯得不好?
• 手機上的拍照軟體一般都有人臉識別功能。試一試人臉識別在什麼場景下做得好,什麼場景下做得不好?
• 找一部講人工智慧的科幻電影,用自己的判斷解讀一下,電影裡哪些技術有可能成為現實,哪些技術存在邏輯矛盾。
【問題107】休閒模式 | 推薦什麼參考書、參考文獻?
書不重要,豆瓣評分7分以上的電腦應用、程式設計甚至科普類圖書都可以拿來翻翻。
直接在知乎裡搜索你想瞭解或學習的知識點可能更有效率。
如果你意猶未盡,覺得自己剛活動開筋骨,還想挑戰更高層次,歡迎進入“探險模式”。⟹請跳轉至【問題200】
否則,“休閒模式”到此結束。⟹請離開此問答
【問題200】探險模式 | 主要學什麼?
“探險模式”需要有挑戰精神。電腦科學的世界技術演進快,脈絡複雜,要想在探索時不迷路,你得通過有順序、有系統地學習電腦知識,慢慢構建出一張可以在未來幫你走得更遠的思維地圖來。
在“探險模式”裡,電腦就不止是一件能快速計算的工具了。電腦更像是我們大腦的一種延伸。這既包括認知能力的延伸,也包括認知邏輯的延伸。隨著學習深入,大家會逐漸體會到電腦所具有的多維度能力:
電腦是一種可以表示不同類型資訊(數、符號、文字、語音、圖像、視頻、虛擬空間、抽象邏輯)的“資訊管理機”;
同時,電腦也是一種可以連續執行指令以完成特定的資訊處理任務的“指令處理機”;
同時,電腦還是一種可以在知識與邏輯層面完成特定推理任務的“知識推理機”;
同時,電腦也是一種可以從人類給定的資料或自我生成的資料中總結規律,建立模型,自主完成某些決策的“智慧學習機”。
“探險模式”的目標就是盡可能準確地認識電腦,掌握有關電腦運行的最基本規律。有了這些基礎。未來在大學期間或工作中,你就能更容易地設計電腦軟硬體系統,或是設計出碳基大腦(人類)與矽基大腦(機器智慧)之間的最佳協作方案。
【問題201】探險模式 | 我的英語水準足夠嗎?
蘋果每年秋季的新品發佈會,不加字幕的話,你能聽懂多少?
能聽懂大部分:建議在學習電腦的過程中,盡可能使用英文教材、英文文檔。
能聽懂小部分:建議將原來準備學電腦的時間,分出一部分來學英語。
只能聽懂“你好”“再見”之類:⟹請離開此問答。然後,把原來準備學電腦的時間用於學英語,六個月後再回來。
【問題202】探險模式 | 我的數學水準足夠嗎?
如果你是數學和數學應用小能手——較複雜的數學問題總能快速找到核心思路,或快速簡化為簡單問題;很容易就能將抽象概念映射到具體的數學圖形,或將數學問題與相應的現實問題關聯在一起:請繼續探險之旅。
如果你應付正常數學課程感到吃力:建議將原來準備學電腦的時間,分出一部分來學數學。
如果你還搞不清楚什麼是方程、函數、集合、概率……:⟹請離開此問答。然後,把原來準備學電腦的時間用於學數學,六個月後再回來。
【問題203】探險模式 | 為什麼強調英語和數學?
(1)統計上說,最好的電腦參考資料大都是英文寫的,最好的電腦課程大都是用英文講的,最新的電腦論文大都是用英文發表的。
(2)函數、方程、坐標系、標量、向量、排列組合、概率這些中學數學裡會初步學習到的數學知識,是電腦科學的基礎。
【問題204】探險模式 | 電腦知識那麼多,正確的學習順序是什麼?
最重要的順序有兩個。建議先從順序一開始,學有餘力時兼顧兩個順序。
順序一:自底向上,即,自底層原理向上層應用拓展的順序。
電腦原理的基礎知識:
為什麼每台電腦(包括手機)都有CPU、記憶體和外部設備?
(馮·諾依曼體系結構的)記憶體中為什麼既可以存儲資料,也可以存儲指令?
CPU是如何完成一次加法運算的?
程式設計語言的基礎知識:
資料類型,值,變數,作用域……
語句,流程控制語句……
過程、方法或函數,類,模組,程式,服務……
編譯系統的基本概念:
電腦程式是如何被解釋或編譯成目標代碼的?
演算法和資料結構的基礎知識:
陣列,向量,鏈表,堆,棧,二叉樹,樹和圖……
遞迴演算法,排序演算法,二叉樹搜索演算法,圖搜索演算法……
應用層的基礎知識:
為什麼電腦需要作業系統?設備驅動程式是做什麼的?
網路通信的基本原理是什麼?流覽器是怎麼找到並顯示一個網頁的?
資料庫是做什麼用的?
虛擬機器是怎麼回事?
人工智慧系統的基礎知識:
先熟悉些線性代數、概率和數學優化的基礎知識。
什麼是機器學習?從簡單的線性回歸中體會機器學習的基本概念、基本思路。
什麼是神經網路?什麼是深度神經網路?為什麼神經網路可以完成機器學習任務?
如何使用PyTorch或TensorFlow實現簡單的深度學習功能?
順序二:自頂向下,即,自頂層抽象邏輯向下層具體邏輯拓展的順序。
• 電腦的本質是什麼?
• 什麼是圖靈機?什麼是通用圖靈機?
• 什麼是讀取﹣求值﹣輸出迴圈(Read–eval–print Loop,REPL)?
如何用自頂向下的方式理解(解析、解釋、編譯)一段程式碼?
• 靜態語言和動態語言的區別?
如何理解變數與資料類型之間的綁定關係?
• 什麼是函數式程式設計?
程式設計語言中,函數的本質是什麼?
函數為什麼可以像一個值一樣被表示、存儲、傳遞和處理?
• 什麼是物件導向?
類的本質是什麼?
如何用物件導向的方式定義個功能介面?
如何依據介面實現具體功能?
• 什麼是事件驅動?
什麼是事件?事件如何分發到接收者?
如何在事件驅動的環境中理解代碼的狀態和執行順序?
【問題205】探險模式 | 如何提高程式設計水準?
在掌握基本知識體系的基礎上,學好程式設計只有一條路:多程式設計,多參加程式設計比賽,多做程式設計題,多做實驗項目,多找實習機會——其中,能參與真實專案是最有價值的。
【問題206】探險模式 | 該從哪一門程式設計語言學起?
我個人推薦的程式設計入門語言(可根據情況任選):
Python
Java
Swift
C#
JavaScript / TypeScript
Ruby
……
可能不適合入門,但適合後續深入學習的語言:
C
C++
Go
Objective-C
組合語言
機器語言(CPU指令集)
Shell Script
Lua
Haskell
OCaml
R
Julia
Erlang
MATLAB
……
【問題207】探險模式 | 如何選參考書和參考資料?
(1)強烈推薦的參考書和參考資料:
• MIT、Stanford、CMU、UC Berkeley這四所大學中任何一個電腦專業方向使用的教學參考書或參考資料。網上可以查到這些學校電腦專業方向的課程體系,有的學校甚至公開了課程視頻。其中往往會列舉參考書和參考資料連結。
• 維琪百科(英文)上的數學、電腦科學相關條目。
• Github上star數在1000以上的開原始程式碼和開來源文件。
(2)強烈推薦但須小心辨別的參考資料:
知乎上的數學、電腦科學相關條目。使用時需要格外注意三件事:
儘量只看高贊答案或高贊文章;
辨別並避開廣告軟文;
辨別並避開純抖機靈的故事或段子。
Stack Overflow上的程式設計問題解答:
自己動手實驗,辨別解答是否有效。
CSDN上的程式設計問題解答:
自己動手實驗,辨別解答是否有效。
(3)其他推薦的參考書和參考資料:
國內專業作者寫作的專業技術書籍(豆瓣評分7分以上的)。
大廠(Google、Facebook、Microsoft、Amazon、阿裡、騰訊、百度、頭條等)資深工程師的技術公號、專欄、博客等。
著名圖書系列:如O’Reilly的動物封面的系列圖書(請注意最新版本和時效性)。
國內翻譯的著名技術圖書(譯本在豆瓣評分7分以上的)。
(4)儘量避免的參考書和參考資料:
• 已經過時的圖書或參考資料。
• 作者或譯者人數比章節數還多的專業圖書。
• 百度百科上的數學或電腦科學相關資料。
什麼什麼?你這篇問答居然沒有推薦一本具體的圖書?是,沒錯。如果你覺得即便有了上面的線索,自己還是找不到好書好資料,那也許你還是適合“休閒模式”⟹請跳轉至【問題100】
同時也有1部Youtube影片,追蹤數超過7萬的網紅在地上滾的工程師 Nic,也在其Youtube影片中提到,硬核的知識也許不是每個工程師都能夠在職涯發展中完全運用到,但無論是本科系、轉職、自學成為工程師的朋友,都應該要知道,這些紮實的背景知識提早學習起來,在未來的日子裡,只有好沒有壞。 就透過本影片我的真實經驗分享,告訴你這些我在大學時期看似枯燥乏味的理論,其實就是程式設計內功,而日後沉睡已久的內功卻又...
「c語言是物件導向嗎」的推薦目錄:
- 關於c語言是物件導向嗎 在 李開復 Kai-Fu Lee Facebook 的最佳解答
- 關於c語言是物件導向嗎 在 純靠北工程師 Facebook 的最佳解答
- 關於c語言是物件導向嗎 在 紀老師程式教學網 Facebook 的最佳貼文
- 關於c語言是物件導向嗎 在 在地上滾的工程師 Nic Youtube 的最佳貼文
- 關於c語言是物件導向嗎 在 [問題] 請問,有辦法用c語言實作物件導向嗎- 看板C_and_CPP 的評價
- 關於c語言是物件導向嗎 在 物件導向的語言是主流,C語言也是主流的程式語言嗎? 的評價
- 關於c語言是物件導向嗎 在 分享(更)【閒聊】Java真的應該被歸類為「物件導向程式語言 ... 的評價
- 關於c語言是物件導向嗎 在 紀老師程式教學網- 使用C 語言模擬物件導向中的「繼承」! 是 ... 的評價
- 關於c語言是物件導向嗎 在 [問卦] 現在大一新生都先學物件導向語言嗎? - PTT八卦政治 的評價
- 關於c語言是物件導向嗎 在 Re: [問卦] 會寫C++的人一定會寫C語言嗎? - 批踢踢實業坊 的評價
- 關於c語言是物件導向嗎 在 009 物件導向的基本觀念影片1 : C++ 教學進階 - YouTube 的評價
c語言是物件導向嗎 在 純靠北工程師 Facebook 的最佳解答
#純靠北工程師16b
開完會後,總經理把我老大留下來,說有事情要了解。
總經理:C跟C++的差別在哪?
我老大:這個,主要是差在物件導向邏輯……(開始解釋)
總經理:你說的我大致了解,也就是說C++是C的高階版囉?
我老大:……
我老大:總ㄟ你以後要管理程式開發部門嗎?
總經理:沒有啦,只是想了解一下程式語言,想長些知——
我老大:那總ㄟ你說的沒錯,C++是高階版的C。啊如果總ㄟ沒其他事情,我這邊有個專案有點急……
總經理:聽說還有個C井,我可以理解為C井是C的最高級嗎?
我老大:……(/facepalm)
----
其實我們總ㄟ是個很棒的人,尊重而且不插手專業,只是很喜歡問東問西……
🥙 全平台留言 https://kaobei.engineer/cards/show/1523
📢 匿名發文請至 https://kaobei.engineer/cards/create
c語言是物件導向嗎 在 紀老師程式教學網 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 的哪一種,來加速學習)。
最後讓我重述一下我的觀點:我不反對用繪製流程圖來訓練邏輯能力,但說訓練邏輯能力,一定要會流程圖,這件事情我不贊同。天底下還有比流程圖更簡單、也能訓練邏輯能力的方法。千萬不要認為「流程圖」是訓練邏輯能力的唯一方法就行了。
啊!對了!麻煩不要拿著我這篇文章貼到李家同先生的網誌去戰人家。您可以兩篇文章都看,甚至選擇不同意我說的論點。李先生是我們這行的大前輩,我個人還是蠻尊敬他的。
c語言是物件導向嗎 在 在地上滾的工程師 Nic Youtube 的最佳貼文
硬核的知識也許不是每個工程師都能夠在職涯發展中完全運用到,但無論是本科系、轉職、自學成為工程師的朋友,都應該要知道,這些紮實的背景知識提早學習起來,在未來的日子裡,只有好沒有壞。
就透過本影片我的真實經驗分享,告訴你這些我在大學時期看似枯燥乏味的理論,其實就是程式設計內功,而日後沉睡已久的內功卻又恰巧的在職涯旅途中碰上用處。
章節:
00:00 學這些有用嗎
00:52 我與速成班的距離
04:45 業務增長後的影響
06:36 基本功知識科普
喜歡影片的話!可以幫忙點個喜歡以及分享、訂閱唷!😘
━━━━━━━━━━━━━━━━
⭐ 蝦皮賣場: https://shopee.tw/bboyceo
⭐ instagram (生活日常): https://www.instagram.com/niclin_tw/
⭐ Facebook (資訊分享): https://www.facebook.com/niclin.dev
⭐ Blog (技術筆記): https://blog.niclin.tw
⭐ Linkedin (個人履歷): https://www.linkedin.com/in/nic-lin
⭐ Github: https://github.com/niclin
⭐ Podcast: https://anchor.fm/niclin
━━━━━━━━━━━━━━━━
🌟 任何問題或合作邀約信箱: niclin0226@gmail.com
#資料結構 #演算法 #計算機概論 #前端 #後端 #工程師
c語言是物件導向嗎 在 物件導向的語言是主流,C語言也是主流的程式語言嗎? 的美食出口停車場
大體上來說,C++可以當成是C的母集合,絕大部分合法的C程式,也是合法的C++程式。 雖然目前C++ Compiler很容易取得,但還是有些機器只使用C。 在無法開花結果的地方努力, ... ... <看更多>
c語言是物件導向嗎 在 分享(更)【閒聊】Java真的應該被歸類為「物件導向程式語言 ... 的美食出口停車場
一個語言究竟是物件導向、程序導向還是函數導向,完全取決於程式設計者 ... 可能有許多人認為類別是物件導向的本質,畢竟類別在Java和C++當中與物件 ... ... <看更多>
c語言是物件導向嗎 在 [問題] 請問,有辦法用c語言實作物件導向嗎- 看板C_and_CPP 的美食出口停車場
在linux底下好像沒有辦法用C++的程式來開發
但是還是習慣用物件的概念來寫程式
不知道在C底下是不是有辦法模擬呢
譬如說用functino table來代替class等等
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.199.180
... <看更多>