我今天才知道:學習編程和學習編程語言是兩碼事


大多數程序員、初學者都以為自己正在學習編程,其實並不是,而是在走彎路。

你可能正在學習一門編程語言,而不是編程本身

計算機科學不是學習計算機,很震驚吧。相反,它是關於借助計算機來自動解決問題的一門學問。解決問題才是計算機科學,而不是寫代碼。這就是許多計算機科學專業的學生,似乎不理解他們為什么學習算法和數學的原因。

如果你以前上過計算機科學的課,那么你不會對此感到驚訝。因為你會注意到編程與編程語言幾乎沒有關系。 思考一下,為什么偽代碼在這些課程中如此常見。

但大多數程序員總是會落入陷阱。我們學了十幾年編程語言,才意識到自己真正需要學的是編程,而我本身就是受害者。

我花了十多年的時間來學習各種編程語言。我學的編程語言越多,構建簡單的東西就越困難,我感覺找不到正確的工具。但問題是,當我不知道如何下手時,我忘記了應該去探索要做什么,而不是尋找正確的工具。

編程語言的奇怪之處在於它們總是在變化。編程語言幾乎每天都在變化,跟進非常困難。而且大多數優秀的程序僅用到了編程語言的一小部分。

優先學習編程語言的問題就像在學習木工之前學習如何使用木工鋸、錘子和各種切割機。木工需要注意:想法、可行性分析、度量、測試、用戶使用習慣,老木匠更關注這些。而不是錘子和釘子這些東西。在對工作進行科學研究期間,他還將花時間檢查釘子、着色劑、木材等的質量。

學習編程和學習編程語言有什么區別?

“編程” 通過給出一條指令來使系統自動運行。我們每天都這樣做,我們教我們的孩子、士兵、客戶。我們發出或收到指令,要求自由或獨立地按照規定的方式進行。你的父母不需要一直跟着你,並指導你生活中的每一步,他們已經在之前生活中的許多方面對你給予過指導(指令)。

大多數學校和教育網站都會教授編程語言的語法。他們還會添加一些設計模式(而你可能恰好忽略了設計模式是什么)、一些數學計算、如何聲明變量以及如何使用它們,數據類型以及如何聲明和創建它們。

上面說的那些編程語言的知識不會教你編程。當你發現時,你會覺得學習編程實在浪費時間,大把的時間。

我們用編程來解決問題,而編程語言是幫助我們解決問題的工具。

它們就像工具箱,我們稱之為框架。它們可以讓你的想法更有條理。

如果你正在學習編程,但仍無法設計和編寫一個實際的應用程序,這意味着你要花更多的時間去學習編程而不是編程語言。

我們遇到過很多人,他們仍然不知道如何設計一個程序。對於程序員來說,一個程序是一個需要解決的問題。在涉及任何編程語言之前,需要先認真思考、理解問題。當你無論要解決什么問題時,其實都可以使用任何一種編程語言進行編碼(重要的是思考要解決的問題)。

讓我們以計算平方為例。計算一個數的平方,對自身進行多次乘法計算。我們可以用多種語言來實現它,例如:

用 C 語言

function square(int * x) {
    return x * x;
}

用 PHP

function square ($x){
    return $x * $x;
}

用 JavaScript

function square(x){
    return x * x
}

用 Scheme(一種 Lisp 方言)

(define (square x) (* x x))

你會注意到,語法只決定具體實現,而解決問題的方法是相同的。這就是你幾乎可以使用任何你願意使用的語言,構建任何類型的軟件的主要原因之一。

通過編程更容易理解一門語言

人類語言是個問題,因為人類語言充滿局限和錯誤,所以機器無法直接理解。

在學習編程時,你將學習新的術語和新的工具來編寫邏輯,這樣計算機或其他程序員也可以理解並達成共識。

通常,你將從一個簡單的、類似人類語言,被稱作偽代碼的語言開始。它是從人類語言到計算機編程語言的很好的過渡工具,這樣做是為了防止你在編程語言上浪費時間。如此,你就可以完全專注於問題的本身和解決的邏輯。通過這一過程,你將發現一個好的編程工具(語言)的核心部分,你就知道那些是重要的、你所需要的(如果你需要用到錘子砸東西,就先學砸東西,釘釘子暫時用不到就先不學)。這樣一來,你就會在不知不覺間就學會一門編程語言(完全掌握錘子的用法)。


關注 HelloGitHub 公眾號

歡迎熱愛技術和開源的小伙伴加入 HG 推出的譯文亦舞系列的翻譯中來,可添加微信號:HelloGitHub(備注:翻譯)。​


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM