愛伊米

程式設計難學?3點解答你的疑惑

很多程式設計新手

都會套用以前上學時的學習方法:

記語法、定義、常量……

然而,這些方法在程式設計學習中

卻完全不奏效

程式設計究竟難在哪?

有沒有更有效的學習方法呢?

往下翻看,解鎖答案�

程式設計難學?3點解答你的疑惑

1、難在我們從未接受過解決問題的訓練

從小到大,我們所接受的教育都是為了考取更好的學校。即使是強調分析和辯論的政治歷史主觀題,也可以用答題模版死記硬背拿分,連作文都有統一的模版標準。

這些經歷,讓我們非常擅長記憶,習慣透過套公式解答問題。

不過,到了學程式設計這裡,卻統統不奏效了。

因為,程式設計的核心,不是語法,也不是演算法結構,而是學會運用程式設計思維,去獨立思考解決問題。

卡耐基梅隆大學計算機的一名華裔教授提出「程式設計思維」這個概念。

程式設計難學?3點解答你的疑惑

她把程式設計思維分成4個部分。

第一個部分,Decomposition,即拆分。

比如,我想喝咖啡,那我可以請求你:“可以幫我倒杯咖啡嗎?”

但這句話如果想讓電腦聽懂,我得先告訴它哪個是“杯子”、哪個是“咖啡”、什麼是“倒”,然後再告訴它怎麼去倒,比如先直走5米,左轉75度,左臂下放50度……

程式設計難學?3點解答你的疑惑

現實生活,每一個複雜問題,都是基於解決一個個被拆分的小問題而被解決的。這就是程式設計思維中的“拆分”。

第二個部分,Pattern Recognition,即模式識別。

假如你需要畫100只貓,你會怎麼辦?找100只貓來挨個臨摹?

對於計算機來說,你需要找出貓的“模式”。

程式設計難學?3點解答你的疑惑

你要知道貓是有毛髮,眼睛,尾巴,四條腿等,按照這個“模式”,你才可以“批次”畫貓——你不用每次畫一個新動物,只需要變換區域性特徵:黃白條的貓還是黑貓,長尾巴的貓還是短尾貓。

模式識別,就是這樣,根據新問題和以前解決過的問題的相似性,舉一反三琢磨出規律。

第三個部分,Abstraction,即抽象。

比如,當我們看到這一房子,我們看到的是:

程式設計難學?3點解答你的疑惑

但在建築師的眼中,它可能是這樣的:

程式設計難學?3點解答你的疑惑

建築師透過自己的經驗,抽象出房子裡面具體的構造。

將問題裡涉及的資料,抽象到資料結構(變數,陣列,連結串列等),把資料處理過程可重複執行部分抽象成函式模組,這就是程式設計思維中的“抽象”。

第四個部分, Algorithms,即演算法。

透過迴圈執行,根據前三步的分析成果,設計步驟,寫出演算法,從而解決問題。這一整個過程,我們看到所謂的程式語言和語法,在最後才發揮出作用。

程式設計思維,是你找出解決方法的能力,把現實問題轉換為程式碼邏輯的能力。只有認清這一點,你才能更好地攻克它。

2、難在我們從未學過創造

清華大學前校長陳吉寧曾提過一個觀點:清華大學裡有很多“A型學生”,但未來社會最需要的是“X型學生”。

“A型學生”,指的是傳統觀念裡的“好學生”,他們的成績總是能得“A”。

“X型學生”與之不同,他們的成績並不一定拔尖,但願意承擔創新風險,勇於嘗試新鮮事物。

兩者最大的差別,在於創造力。

當開始學程式設計的時候,看著“Hello World”,等著我們去創造的時候,是非常茫然的。整個世界的運轉,都是靠你的大腦想象出來的。這是程式設計的難。

程式設計難學?3點解答你的疑惑

但是,如果你在程式設計世界中,始終保持“實驗者心態”,不斷探索自己的想法,質疑自己的假設,從所犯錯誤中學習經驗,就一定能在程式設計的魔法世界中得到更多寶藏。

3、難在我們從未需要如此深刻地理解世界

學程式設計,需要探其根本,理解每一個概念的來由、定義和用途;需要多學科、深入而原始瞭解這個世界。

舉兩個小例子:

C語言氣泡排序法,它的原理是來自汽水中的氣泡,水中常常有許多小小的氣泡,嘩啦嘩啦飄到上面來。而組成小氣泡的二氧化碳比水要輕,所以小氣泡可以一點一點向上浮動。

程式設計難學?3點解答你的疑惑

在C語言中,這種排序演算法的每一個元素都可以像小氣泡一樣,根據自身大小,一點一點向著陣列的一側移動。

人工神經網路,則是依靠一種類似於大腦神經突觸聯接的結構,進行資訊處理的數學模型。

它們都受到了自然的啟發。

程式設計的第三難就在於,學程式設計,往往學的也不僅僅是計算機本身。

你要懂“生物”:不同的技術構成不同的生態系統,不同的生態系統有不同的規則;

你要懂“化學”:各類系統和語言的關鍵性質,提供能寫出優秀程式的原料;

你要懂“歷史”:技術從哪裡來,要到哪裡去……

它需要我們具備深入探究知識細節的能力,不允許我們冠以籠統的態度求知。

理解了以上3個難點,調整你的學習方式,你就會發現,程式設計其實也沒有那麼難。