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