原文地址: I Want to Learn Programming but I Don’t Know where to Start
原文作者: Robyn Silber
譯文地址: 我想學習程式設計, 但不知道從哪裡開始
譯者: 樸瑞卿
常常被問的問題
作為導師, 筆者經常被問到以下問題:
- “如果我是新手, 我應該學習哪種程式語言? ”
- “哪種程式語言最適合工作? ”
- “最流行的程式語言是什麼? ”
頂級程式語言
如果您正在尋找頂級程式語言的官方排名, 可以在這裡找到: IEEE Spectrum top programming languages
該列表很適合檢查指定的語言是否還在廣泛使用. 但如果您不熟悉程式設計, 筆者建議您不要僅僅通過這個列表來選擇一門語言.
譯者注: PHP不一定是最好的開發語言呢...(破音)
如何選擇一門程式語言
電腦科學完全是一個累積研究領域. 這意味著, 每一個後續的知識點都是以先前的知識點為基礎.
如果您曾在學校中竭盡全力學習程式設計(或任何其它科學領域)但失敗了——或許問題並不出在你身上. 任何累積性學科的優秀教授都去會精心規劃課程. 只要每個學生都充分準備並滿足前提條件, (教授)對於學生的先驗知識的預期就應該是明確的. 一個好的教授理解這種預期並且假定沒有超出該範圍的知識. 因此, 任何超出預期範圍的知識點都必須要進行教授. 課程中的每個知識點都是循序漸進的.
當一個學科是累積性的, 在設計課程或學習路徑時必須一絲不苟.
綜上所述, 不要依據排名選擇語言. 選擇一種您擁有完整的學習路徑且無需對先驗知識進行任何假設的語言.
譯者注: 選擇程式語言要進行綜合考量, 如語言學習曲線、社群活躍度、職位需求量(如果您是為了工作的話)、您自身的基礎及意向從事的行業領域等
幾句忠告
在開始學習編碼之前, 請務必反覆思考一下筆者的觀點: 電腦科學中的一切都循序漸進的.
我喜歡重申這一點, 因為有追求的程式設計師可能犯的最大錯誤就是, 由於錯誤地認為自己不夠聰明去學習程式設計而放棄. 學習編碼與您的智力無關. 誠然, 學習程式設計很難, 但這並不是取決於您是誰, 而是由於有太多的知識點需要學習.
首先, 請接受以下即將發生的情況: 為您介紹一個對您完全沒有意義的新知識點.
這種情況將一遍又一遍地發生. 每次發生這種情況時, 您的處理方式將決定你的成就.
如果當前你正在學習的知識點對你而言很無厘頭, 請停留在當前位置, 暫不要進行下一個知識點. 重申一下, 這些知識點是循序漸進的. 略過前面的知識點無異於搭建空中樓閣.
譯者注: 我有一招從天而降的掌法, 少俠要不要學? —— emmm... 我還是先鍛鍊身體吧
我發覺自己始終處於這種情況. 常常不得不多反覆觀看同一視訊教程講座, 以掌握所學的內容. 如果您發現自己和筆者的處境一樣, 請不要氣餒.
如果您使用的輔導資料(或書籍)沒有充分詮釋該知識點, 那麼務必去尋找其他適合您的資源. 沒有任何理由因輔導資料所涵蓋的知識點對您沒有用處而放棄. 您可以在YouTube上免費找到幾乎所有想要學習的內容. 找出要搜尋的內容(例如, [您的程式語言]中的[知識點] +其他任何有用的關鍵字).
如果您正在YouTube上尋找教程, 請先檢視統計資訊. 快速瀏覽評分或觀看次數. 如果仍然不確定該視訊是否值得花時間觀看, 請閱讀一些評論以瞭解他人的觀點.
很多知識點第一次見到就很無厘頭, 所以, 請避免過多負面的自省.
譯者注: 意思就是不要被各種問題打擊到懷疑人生, 堅持下去
對於您學習路線經過的每一個知識點, 您需要自我反省, 其目的是在學習中去理解. 對於您涵蓋的每個知識點, 問自己一些問題, 例如:
- “這個知識點對我有意義嗎?”
- “有沒有新的術語? 如果是這樣, 是否為每個新術語提供了正式定義? ”
- “有沒有新技能? 我瞭解應用程式中如何使用每種新技能嗎? 我可以通過解決實踐問題來驗證我對這項技能的理解嗎? ”
- “明天我會記住剛剛學到的東西嗎? 後天呢? 如果沒有, 我該如何將其記憶? ”
最後一條建議: 永遠不要低估記憶的力量. 記憶是一種在學習中沒有得到充分利用的方法. 誠然, 理解一個知識點是最終目標. 但理解可能需要時間. 如果您真的很難領悟一個知識點, 請分解該知識點並記住其核心內容. 如果您不瞭解某件事的原理, 那麼您的目標應該是背下來. 如果您需要有關如何記憶的技巧, 請考慮使用學習卡的技巧. 您可以在Interview Prep文件中閱讀有關如何使用此技巧的更多資訊.
譯者注: 想不通, 先記憶, 後理解.
一. 電腦科學基礎
第一步是學習電腦科學基礎知識,這將在我的文章《Intro to Computer Science Terminology》中介紹. 本文的撰寫是專門針對每個人. 我特地撰寫此文, 即使沒有計算機背景的人都易於理解.
本文涵蓋的概念主要是定義性的. 您可以任意閱讀這篇文章, 足夠滿足您的需要. 筆者建議將這些術語記住. 像在學校時那樣對待每個術語, 您需要在考試中能夠回憶起每個術語的定義. 如果您不想這樣做, 也不必強求. 但是, 您記住的概念越多, 就越容易理解後面的知識點.
二. 命題邏輯(可選)
您不必具備強大的數學才能成為程式設計師. 數學技能可能會有所幫助, 但不是必需的.
如果對自己的數學能力沒有把握, 筆者建議您學習命題邏輯. 命題邏輯涵蓋的原理是程式設計的基礎.
您可以從以下YouTube教程中學習命題邏輯: Basic Concepts in Propositional Logic.
三. Java程式設計
在學習了電腦科學的基礎知識之後, 你將準備好去學習一門程式語言.
無論大家的背景如何, 我精心設計一條適合多數人的學習路線. 之所以為這條路線選擇Java, 是因為Java是我最有經驗的語言.
Java是需求最大的程式語言之一. 它被歸類為一種物件導向的程式語言(稍後您將學習這意味著什麼), 並且用於製作桌面、Web和移動應用程式.
如果您喜歡從書中學習,我建議以下內容: Head First Java.
如果您正在尋找視訊教程,建議您在Derek Banas的Java YouTube教程: Java Video Tutorial中觀看1–19、31–33、88和93.
YouTube教程中的第一個視訊將指導您下載一個名為Eclipse的計算機程式. Eclipse是一個整合開發環境(IDE)。您可以將IDE視為程式設計師專用文字編輯器的一個專業術語. 它只是一個計算機應用程式, 提供用於程式設計的文字編輯器以及用於執行程式的其他工具. 這是Derek Banas的有關如何下載Eclipse的YouTube視訊的連結: Install Eclipse for Java.
譯者注: 推薦IDEA, 一個Eclipse的競品, 目前易用性比Eclipse略高
四. 演算法和資料結構
演算法是用於執行特定任務的一組指令(或步驟), 其中每個步驟必須明確定義, 能夠執行並且是有限的(也就是說, 它不會無限執行).
資料結構是組織記憶體中資料的一種方式.
演算法和資料結構是程式設計中最具挑戰性的兩個專題. 在程式設計中, 您無需將演算法作為必備基礎進行學習, 但如果您希望在一家知名的科技公司擔任軟體工程師, 那麼您將在面試中表現出對演算法和資料結構的理解.
譯者注: 原文作者推薦了一門99刀的課(點進去), 譯者覺得挺貴的, 連結被我刪了, 回家刷《演算法導論》吧
五. Android開發
在我看來, 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是一個程式設計師可以在其中獲得免費的程式碼幫助的網站. 如果您有困惑並想提出問題, 請先搜尋. 如果找不到問題, 那就建立一個帳戶並自己釋出問題吧!
譯者注: 搜尋引擎是一種工具, 尋得答案是一種能力, 提問是一種智慧.
如果您對如何學習程式設計有任何見解, 歡迎下方留言討論.
如果這篇文章對您有幫助,請點個贊吧 ( ̄▽ ̄)"
推薦閱讀
- 不停服! 怎麼遷移資料
- 開放API閘道器實踐(一) ——設計一個API閘道器
- 開放API閘道器實踐(二) —— 重放攻擊及防禦
- 開放API閘道器實踐(三) —— 限流
- Kubernetes(一) 跟著官方文件從零搭建K8S
- Kubernetes(二) 應用部署
- Kubernetes(三) 如何從外部訪問服務
歡迎關注公眾號(程式碼如詩)
本文釋出於樸瑞卿的部落格, 允許非商業用途轉載, 但轉載必須保留原作者樸瑞卿 及連結:blog.piaoruiqing.com. 如有授權方面的協商或合作, 請聯絡郵箱: piaoruiqing@gmail.com.