原文地址: I Want to Learn Programming but I Don’t Know where to Startgit
原文做者: Robyn Silber程序員
譯文地址: 我想學習編程, 但不知道從哪裏開始github
譯者: 樸瑞卿面試
做爲導師, 筆者常常被問到如下問題:算法
若是您正在尋找頂級編程語言的官方排名, 能夠在這裏找到: IEEE Spectrum top programming languages編程
該列表很適合檢查指定的語言是否還在普遍使用. 但若是您不熟悉編程, 筆者建議您不要僅僅經過這個列表來選擇一門語言.數據結構
譯者注: PHP不必定是最好的開發語言呢...(破音)編程語言
計算機科學徹底是一個累積研究領域. 這意味着, 每個後續的知識點都是以先前的知識點爲基礎.編輯器
若是您曾在學校中不遺餘力學習編程(或任何其它科學領域)但失敗了——或許問題並不出在你身上. 任何累積性學科的優秀教授都去會精心規劃課程. 只要每一個學生都充分準備並知足前提條件, (教授)對於學生的先驗知識的預期就應該是明確的. 一個好的教授理解這種預期而且假定沒有超出該範圍的知識. 所以, 任何超出預期範圍的知識點都必需要進行教授. 課程中的每一個知識點都是按部就班的.ide
當一個學科是累積性的, 在設計課程或學習路徑時必須一絲不苟.
綜上所述, 不要依據排名選擇語言. 選擇一種您擁有完整的學習路徑且無需對先驗知識進行任何假設的語言.
譯者注: 選擇編程語言要進行綜合考量, 如語言學習曲線、社區活躍度、職位需求量(若是您是爲了工做的話)、您自身的基礎及意向從事的行業領域等
在開始學習編碼以前, 請務必反覆思考一下筆者的觀點: 計算機科學中的一切都按部就班的.
我喜歡重申這一點, 由於有追求的程序員可能犯的最大錯誤就是, 因爲錯誤地認爲本身不夠聰明去學習編程而放棄. 學習編碼與您的智力無關. 誠然, 學習編程很難, 但這並非取決於您是誰, 而是因爲有太多的知識點須要學習.
首先, 請接受如下即將發生的狀況: 爲您介紹一個對您徹底沒有意義的新知識點.
這種狀況將一遍又一遍地發生. 每次發生這種狀況時, 您的處理方式將決定你的成就.
若是當前你正在學習的知識點對你而言很無厘頭, 請停留在當前位置, 暫不要進行下一個知識點. 重申一下, 這些知識點是按部就班的. 略過前面的知識點無異於搭建空中樓閣.
譯者注: 我有一招從天而降的掌法, 少俠要不要學? —— emmm... 我仍是先鍛鍊身體吧
我發覺本身始終處於這種狀況. 經常不得很少反覆觀看同一視頻教程講座, 以掌握所學的內容. 若是您發現本身和筆者的處境同樣, 請不要氣餒.
若是您使用的輔導資料(或書籍)沒有充分詮釋該知識點, 那麼務必去尋找其餘適合您的資源. 沒有任何理由因輔導資料所涵蓋的知識點對您沒有用處而放棄. 您能夠在YouTube上免費找到幾乎全部想要學習的內容. 找出要搜索的內容(例如, [您的編程語言]中的[知識點] +其餘任何有用的關鍵字).
若是您正在YouTube上尋找教程, 請先查看統計信息. 快速瀏覽評分或觀看次數. 若是仍然不肯定該視頻是否值得花時間觀看, 請閱讀一些評論以瞭解他人的觀點.
不少知識點第一次見到就很無厘頭, 因此, 請避免過多負面的自省.
譯者注: 意思就是不要被各類問題打擊到懷疑人生, 堅持下去
對於您學習路線通過的每個知識點, 您須要自我檢討, 其目的是在學習中去理解. 對於您涵蓋的每一個知識點, 問本身一些問題, 例如:
最後一條建議: 永遠不要低估記憶的力量. 記憶是一種在學習中沒有獲得充分利用的方法. 誠然, 理解一個知識點是最終目標. 但理解可能須要時間. 若是您真的很難領悟一個知識點, 請分解該知識點並記住其核心內容. 若是您不瞭解某件事的原理, 那麼您的目標應該是背下來. 若是您須要有關如何記憶的技巧, 請考慮使用學習卡的技巧. 您能夠在Interview Prep文檔中閱讀有關如何使用此技巧的更多信息.
譯者注: 想不通, 先記憶, 後理解.
第一步是學習計算機科學基礎知識,這將在個人文章《Intro to Computer Science Terminology》中介紹. 本文的撰寫是專門針對每一個人. 我特意撰寫此文, 即便沒有計算機背景的人都易於理解.
本文涵蓋的概念主要是定義性的. 您能夠任意閱讀這篇文章, 足夠知足您的須要. 筆者建議將這些術語記住. 像在學校時那樣對待每一個術語, 您須要在考試中可以回憶起每一個術語的定義. 若是您不想這樣作, 也沒必要強求. 可是, 您記住的概念越多, 就越容易理解後面的知識點.
您沒必要具有強大的數學才能成爲程序員. 數學技能可能會有所幫助, 但不是必需的.
若是對本身的數學能力沒有把握, 筆者建議您學習命題邏輯. 命題邏輯涵蓋的原理是編程的基礎.
您能夠從如下YouTube教程中學習命題邏輯: Basic Concepts in Propositional Logic.
在學習了計算機科學的基礎知識以後, 你將準備好去學習一門編程語言.
不管你們的背景如何, 我精心設計一條適合多數人的學習路線. 之因此爲這條路線選擇Java, 是由於Java是我最有經驗的語言.
Java是需求最大的編程語言之一. 它被歸類爲一種面向對象的編程語言(稍後您將學習這意味着什麼), 而且用於製做桌面、Web和移動應用程序.
若是您喜歡從書中學習,我建議如下內容: Head First Java.
若是您正在尋找視頻教程,建議您在Derek Banas的Java YouTube教程: Java Video Tutorial中觀看1–1九、31–3三、88和93.
YouTube教程中的第一個視頻將指導您下載一個名爲Eclipse的計算機程序. Eclipse是一個集成開發環境(IDE)。您能夠將IDE視爲程序員專用文本編輯器的一個專業術語. 它只是一個計算機應用程序, 提供用於編程的文本編輯器以及用於運行程序的其餘工具. 這是Derek Banas的有關如何下載Eclipse的YouTube視頻的連接: Install Eclipse for Java.
譯者注: 推薦IDEA, 一個Eclipse的競品, 目前易用性比Eclipse略高
算法是用於執行特定任務的一組指令(或步驟), 其中每一個步驟必須明肯定義, 可以執行而且是有限的(也就是說, 它不會無限執行).
數據結構是組織內存中數據的一種方式.
算法和數據結構是編程中最具挑戰性的兩個專題. 在編程中, 您無需將算法做爲必備基礎進行學習, 但若是您但願在一家知名的科技公司擔任軟件工程師, 那麼您將在面試中表現出對算法和數據結構的理解.
譯者注: 原文做者推薦了一門99刀的課(點進去), 譯者以爲挺貴的, 連接被我刪了, 回家刷《算法導論》吧
在我看來, Android開發是Java編程最有趣的應用之一. Android應用程序主要使用Java進行編程, 所以一旦您學習Java, 就爲Android學習作好了準備.
譯者注: 目前Kotlin被Google做爲首選Android開發語言.
這是開始學習Android極佳的免費視頻教程:Udacity-Android面向初學者的開發.
完成上述Udacity課程後, 您將有幾種選擇. 以上課程應由同一團隊Google員工進行擴展. 完成課程後, 其餘講座應該會顯示(若是找不到, 請在Udacity上搜索). 這將是一個不錯的選擇, 尤爲由於它是免費的.
然而, 若是您願意花錢買一本出色的書, 我強烈建議推薦: 《Head First Android Development:A Brain-Friendly Guide》. 這本書提供的詳細的解釋和有用的視覺效果能夠真正幫助您學習Android的思想. 每章都會引導您完成一個示例應用程序. 全部內容都使用任何人都能理解的文字和圖表完全解釋.
Stack Overflow是一個程序員能夠在其中得到免費的代碼幫助的網站. 若是您有困惑並想提出問題, 請先搜索. 若是找不到問題, 那就建立一個賬戶並本身發佈問題吧!
譯者注: 搜索引擎是一種工具, 尋得答案是一種能力, 提問是一種智慧.
若是您對如何學習編程有任何看法, 歡迎下方留言討論.
若是這篇文章對您有幫助,請點個贊吧 ( ̄▽ ̄)"
歡迎關注公衆號(代碼如詩):