我們不僅是程式設計師,而且是個(與時俱進的)學習者。鮮見的是有多少人認為他們是在學習程式設計的呢。原翻譯傳送門is here
你可能在學習程式設計語言而不是程式設計本身
別對學習電腦科學(CS)不是研究計算機這種言論感到驚訝。相反的,學習CS是對自動解決問題的研究。解決問題的是電腦科學,而不是程式設計。這就是為什麼許多CS的學生似乎不明白自己為什麼要學習演算法和數學。
如果之前你有去上過CS的課程,你就不會對我這裡說的話感到驚訝。因為你會注意到程式設計和程式語言沒有多大的關係。
但是,大多數自我思考的程式設計師會掉入這麼一個陷阱:在我們意識到自己正真要做的是程式設計事情的時候,我們已經花了很長的時間來學習程式語言了。我自己就是一個受害者。
我花了十幾年的時間學習各種程式語言。我學的越多,發現建立簡單的東西就越難。我總有那麼種感覺是我沒找到合適的工具。但是,問題出在當我還沒有意識到我要做的工作時,忘了尋找適合的工作而不是尋找適合的工具。
而且奇怪的一點是:程式語言總是在不斷髮展的。程式語言幾乎每天都有所變化,我們很難跟上其步伐。可是,大多數優秀的程式只是使用了程式語言的一小部分。
學習程式語言的問題就好比在學習木工之前去學習如何使用木工鋸,錘子和各種切割機器。木工需要注意:想法、可行性分析、測量、測試和使用者行為。老木工對上面提到的注意點更感興趣,而不是錘子和釘子。在對工作科學研究的期間,他還會花時間去檢查釘子、著色板和木材等的質量。
學習程式設計和學習程式設計語言有什麼區別呢
程式設定系統只需指令它一次就可以自由執行。我們每天都在做這件事情。我們告訴我們的孩子、士兵和顧客。我們給予他們或者我們自己接受到給定的指令去自由/獨立地生活。比如,您的父母不需要每天都關注你並且對你人生要走的下一步做指導。他們本來可以在你生活的方方面面為你設定好。
很多學校和教育網站都會教你程式語言的語法。他們會新增些設計模式(當你忽略設計的時候),一些數學計算,如何宣告變數並使用它們,資料型別以及如何宣告/建立它們等的內容。
這些並不能教會你推理。通過上面的途徑,你會學到些推理的方法,但是過不了多久,你會意識到自己浪費了或者花了很長時間去學習程式設計。
我們是通過程式設計解決問題,而程式語言只是協助我們的工具。程式語言就像一個個的工具盒,我們稱它們為框架。它們幫助我們組織自己的想法。
如果你正在學習程式設計,但是你還不能夠設計並且編碼出一個實實在在的應用,那麼說明你更多的是在學習程式語言而非程式設計。
有多少次我們碰到想知道怎麼建立程式的人(程式設計師)。對於他們這些程式設計師來說,建立程式就是解決一個問題。他們在使用程式語言的時候就通過批判的分析解決了這個問題。但是當你解決了這個問題,你是可以使用多種程式語言去實現的。我們以平方數為例。某數的平方就是這個數字乘以本身。我們可以用各種語言來實現它,如下:
# cfunction square(int * x) {
return x * x;
}複製程式碼
# phpfunction square ($x){
return $x * $x;
}複製程式碼
# javascriptfunction square(x){
return x * x
}複製程式碼
# In Scheme (a Lisp dialect)(define (square x) (* x x))複製程式碼
以上,你可以看到在實現的上面只有語法的不同,結果是一樣的。這也是你可以使用任何語言,這種語言使你輕鬆構建任何型別軟體的一個重要原因。
通過程式設計發現語言更容易
問題通常是人類語言。人類語言充滿了限制和錯誤,是不能用來指導機器工作的,因為機器接收不到。
學習程式設計的時候,你將學習一種新的術語和工具來幫助你編寫邏輯方式,這種邏輯方式是被計算機和其他程式設計師理解並且認同的。
通常,你將從簡單且類似人類語言的符號開始,稱之為虛擬碼。它是從人類語言到計算機程式語言的良好過渡工具。這通常為了防止你浪費時間在語言上面。這樣你可以關注在推理上面。如此,你會發現組成一個良好的程式設計工具(語言)的核心部分。你瞭解什麼才是正需要的,瞭解程式語言的核心目標。通過了解,你會不知不覺下意識去學習這種語言了。
- 後話:翻譯得不好得地方還請看官指出,歡迎多多交流@~@!原文Learning programming is different from learning a programming language