什麼是程式設計思維?寫程式碼需要什麼能力

有朋友在問現在市面上那麼多程式設計培訓班,是否有必要去學習程式設計,為了理解程式設計,咱們從計算機的起源開始。

二戰的時候,為了破解德軍通訊內容,盟軍研發了恩尼格瑪密碼機,可以將加密後的資訊進行解密,以獲取軍事情報,在電影《模仿遊戲》中,講述了這樣一個故事:盟軍招聘一批當時的精英,並組建了專門的工作小組,希望以此破解德軍的通訊內容。當時,在其他人用各種方法進行破解的時候,圖靈的想法是設計一臺通用的機器來解決密碼的加密解密問題。

什麼是程式設計思維?寫程式碼需要什麼能力

二戰的轉折點是斯大林格勒保衛戰,而不是一個簡單的密碼破譯,電影美化了個人英雄主義。在現實中圖靈也並未造出一臺真正的通用機器,只是與丘奇一同提出了邱奇-圖靈論題,認為“每個演算法可在一臺通用圖靈機上程式化”。可以簡單地理解為每個問題都可以演算法在一個通用的機器上程式設計實現。當然理論還停留在論題的階段,並非真正的命題。

電影中講到了圖靈做出來了通用的機器,這裡很有意思的是,現在的計算機就是一種通用模型的簡單實現。可以理解為,預想中的機器太難做出來,只停留在理論階段,只能做出一個簡化版本,在計算機上編寫程式解決問題。

什麼是程式設計思維?寫程式碼需要什麼能力

怎麼理解?計算機的引入是為了解決一種特定的問題,而大多數的問題都能轉化為“計算”,計算機的底層都是0,1編碼,透過所謂的加法和乘法實現了整個大的算術邏輯系統,程式設計師在這個系統上編寫程式,執行程式,就是我們現在見到的軟體。

咱們在計算機上實現一種計算步驟,就是一種理解問題,將其轉化為計算的過程,在編寫程式碼的時候,沒有思路,往往是對問題的理解有問題,一個大的問題有許多小問題組成,而程式碼編寫的過程就是一種對問題分解過程,將其拆解成更小的步驟,這也是我們人類的一種有效的思維習慣。

我們常說聰明的人,其實就是有能力對問題進行抽象和組合的人,在《有關人類理解的隨筆》中,作者寫到我們人類的心智活動,除了盡力產生各種簡單的認知之外,主要表現為如下三個方面

(1)將若干簡單認知組合為一個複合的認識,由此產出各種複雜的認知。

(2)將兩個認知放在一起對照,不管他們如何簡單或者複雜,在這樣做時,並不能將他們合而為一。由此得到有關他們的相互關係的認知。

(3)將有關認識與那些在實際中和它們同在的所有其他認識隔離開,這就是抽象。所有普遍的認識都是這樣得到的。

什麼是程式設計思維?寫程式碼需要什麼能力

從心智對照到程式設計思維,其實就是對我們要解決的問題進行一個拆解,將其變成一個個小問題,然後對其分析、抽象,寫出一個個更小的程式,每個程式之間都是獨立的個體,組合起來就是我們程式。

現在很多程式設計培訓班,都不教這種能力,只是告訴你程式碼怎麼寫,這種能力只能在實際的思考中獲得,與前面提到的,要造出能夠解決所有問題的通用機器,學習程式設計的過程即學習一種解決問題的通用能力,無論技術怎麼改變,這種能力可以一直存在。