如何快而好的學習編程


作者:劉鐵猛    編輯:張·布蘭登   翻譯:九幽科技

 當我寫這個話題的時候,我感覺我正在和整個世界對話,就像我在寫我的第一個程序“Hello,World”。希望這個話題可以幫助那些想學編程的人(包括你自己)獲得一個良好的開端。

關於我

 我的名字叫劉鐵猛,如果你願意可以叫我蒂姆。當我在大學的時候,才開始學習計算機編程,在此之前,電腦對我來說就僅僅是一台打印機或者游戲機。但是,當我開始編程,三個因素使我在計算機領域中受益匪淺。分別是:

1.相當迅速地打字

 2.知道一些磁盤操作系統命令,並且知道一些編程語言:Basic和Pascal

 3.一些熱愛電腦的志同道合者

 我為什么要提這個?因為這些使我不再對電腦有一種恐懼感,也不再害怕和其他人互動。我依稀記得,當我還是一個小男孩,做在一個不是很舒服的椅子上,面對着屏幕,完全不知所措。那是一種多么怪異而別扭的糟糕感覺!所以,當你決定學習編程的時候,問你自己一個簡單的問題--你對電腦有多熟悉?你經常使用電腦嗎?你能熟練地運行Windows/Linux系統嗎?你可以使用多少軟件?當然,即使你不是非常熟悉電腦,這也不意味着你不能學習編程。不過,在你征服計算機的旅途中,無論在心理上還是生理上都應該會比那些已經熟悉計算機操作的人來說,遇到的困難多得多了。

 我在大學自學了VB,Delphi和Flash編程。在我畢業之后,我成為了一名軟件工程師。然后,有機會去教大學生。也許因為我父母都是老師的原因,我總能非常輕松地將事物有邏輯而清楚地描述出來。所以,學生都非常喜歡我的課。這也鼓勵我一步一步地走得越來越遠。我開始翻譯並寫書,出版在線的培訓視頻等。之后,我搬到了美國,我開始做一些小業務來幫助更多的人來學習電腦編程。到現在為止,我已經在美國教了上百人如何來學習編程。所以,我認為這是一個非常好的時間點來總結一些我的經驗並分享給大家!

 在這些年的教學中,我主要的教學理念就是如何快而好的學習編程。你必須從“心理學之路”和“求知之路”做好准備。

心理學之路


 最近,我進行了一個學習實驗:如何快速地學習編程語言?當我說到“學習”,我的意思是這門語言必須足夠強大到可以通過有下面三個話題類型的面試:

 1.征服語言本身,比如:語法,關鍵字,運算符和表達式,語句,面向對象,基本庫等等。

 2.算法知識,比如:常用的集合和算法(排序,遞歸)。這包括了經典的算法問題,比如動態規划

 3.面向對象的知識和技能,比如網頁和移動開發(基於這種語言的),工具和框架

 最后,我發現大概還需要6個小時來完成項目1,另外的6個小時來完成項目2。我沒有測試項目3,因為當你獲得該企業的職位后,他們大多都願意給你機會來學習這些東西。
 我一共要花12個小時--是不是相當快?我猜想你一定迫切想知道我是如何做到的--在這個過程中,如下的三個重要的事情早已刻在了我的腦海中了:

 1,主動學習--我對要學習的編程語言充滿了好奇與興趣,並對它發自內心的熱愛。不管怎樣,要確保你自己是主動來學習的。有時候,壓力的確可以促進學習,但是它不可以持續很長時間也不可以使你快速掌握該語言。

 2,明白我要學習什么--我沒有老師,沒有練習資料,也沒有考試,但是我可以測試我自己來看自己有沒有理解正在學習的內容。我知道在新的領域,有很多限制,所以我在筆記本上寫下了一些問題,在以后再回答他們(一般都是幾個小時后)。你會發現記筆記,進行網絡搜索,盡可能的收集參考書等對你的學習是非常有幫助的。

 3,遷移知識--因為我是一個非常有經驗的軟件工程師,我可以遷移老知識來幫助我理解新的語言。在大多數情況下,都可以行的通,尤其對算法和理念屢試不爽。但是有些情況,知識遷移是錯的,我必須做一個“遷移->測試(代碼)->理解”的檢查。

 現在該你上場了!即使你沒有任何的編程經驗,也需要准確無誤地進行下面的三樣事。

 1,成為一個主動學習者--不管什么原因,你就是想學習這些語言。我認為你對這個科目的喜愛,你想成為一個專業人士,或者你僅僅是好奇,都是非常好的理由。它們會確保你不會退縮。因為學習這條路,並不是一條康庄大道,會被各種障礙堵塞。各種曲折困難在這路上,包括難以理解的各種復雜內容,有待解決的大難問題,被人嘲笑等等。通過我多年的經驗,我發現保持高度的自信是保持主動性的最好方法。我有三分之二的學生沒有編程經驗,變成主動學習者之后,卻做得非常好。而且,我發現那些表現非常好的學生往往都有一個積極樂觀的親密伙伴(妻子/丈夫/男朋友/女朋友)。因為他們鼓勵我的學生留在了正確的軌道上,這將最終使他們在計算機領域中取得成功!

 2,通過請教老師,做練習,海量敲代碼等,確保你可以完全理解。編程是一個特殊的技能,你所有的知識在編碼中都有作用和價值--如果你不知道如何寫代碼,那么你什么也沒學到。衡量你已經學到了多少最有效的方法是--在寫代碼的時候能夠有多順暢,你就學到了多少。順便說一下,通過我的觀察,當為自己不能理解知識點而感到內疚的學生在最后反而取得更多的成就。這是因為他們會更傾向於理解,同時更加努力去實現他們的目標。

 3,遷移你的知識--我知道你還沒有任何的編程知識來轉移,但是不要擔心憂慮。編程語言只是一種簡單的自然語言,被用來描述我們看到的世界。除非你剛剛從其他星系着陸到地球,否則一切在你大腦里面的東西都可以轉化為計算機編程語言!對於一個新的學習者,知識轉移還有另一個功能,你可以使用你剛剛學到的知識來解決你從未遇到的問題。這是非常常見的,尤其當你遇見一個算法問題的時候。你很快就會發現,理解和遷移知識總是綁在一起的。簡單地說,理解知識就是遷移知識,反之亦然。

求知之路

 老是有人問我“學習編程難嗎?”,我的回答是:不知道。這是因為不同的人在學習的過程會遇到不同難度的問題。當我還是學生的時候,常常會覺得無聊或者感興趣,沮喪或者開心等等。但是,從來不會覺得難。我的一些學生認為編程非常簡單,然而有些學生認為非常難。在整個學習的過程中,學生很難改變他們的最初對編程的觀念(簡單或難),即使材料變得越來越復雜了。這是什么意思呢?就是編程取決你的態度。簡單的說,知識就是知識,你的態度決定了難易程度。

 學習任何知識體系,我們必須遵循一些順序。如果你遵循了這些順序,你最終將在你的大腦里,建立起屬於你自己的結構化的信息系統。在我15年的軟件工程職業生涯和10年的編程培訓師生涯,我一直在微調這些順序。我使用這個順序已經教了成千上萬的學生,包括我自己,仍然在不斷在改進它。下面就是這個順序的簡介:

 1.准備一個相對好的運行速度快的電腦,然后安裝一個操作系統(建議Windows操作系統)。不要讓一台速度緩慢的電腦浪費你的時間。

 2.選擇一個正確的打字指法。此外,還要熟悉一些Windows快捷鍵和文本編輯器。

 3.學習計算機科學,第一步就是學習一門編程語言。下面就是這種語言的利弊:

 a.C語言
 【優點】:你可以學習到許多底層的知識,給你夯實基礎。
 【缺點】:C語言不支持面向對象編程,你很難使用它直接找到一份工作

 b.C++
 【優點】:很多用法和C一樣,但是卻支持面向對象編程
 【缺點】:有太多的知識點要學習,相對比較復雜的語言,有多個版本要選擇

 c.Java/C#/Python/JavaScript
 【優點】:簡單的語法,隱藏了低層次的知識點,可讀性強,學好它容易找工作
 【缺點】:你將丟失很多底層的知識點

 d.HTML和CSS不是編程語言

 e.匯編語言不適合初學者

 4.如果你想選擇一門語言的話,我建議你選擇Java/C#/Python。你只要選擇一個並學好它,那么其他的語言你將在一個月之內學成。

 5.找到一個老師或者一個導師。他們至少要具備5年以上的經驗。

 6.找到官方語言來規范你的語言,和所有相關書籍。但要確保你不是在盲目花錢

 7.要注意什么時候去閱讀書籍或者文檔,什么時候去搜索,什么時候去寫代碼或者調試Bug,什么時候並如何請教老師(導師)。千萬不要把你的老師或者導師當成你的“bug調試小能手”。

 8.當你學習語言的時候要使用並遵循如下順序:

a.這門語言支持多少種數據類型?它們的文字值是什么樣的?

b.如何聲明變量和常量?數組怎么定義?

c.如何調用和聲明一個函數?

d.學習一點庫函數,比如輸入和輸出

e.有多少操作系統支持這個語言?如何使用它們來構建表達式?

f.什么是判斷語句和循環語句?如何把它們放在一起使用?

g.這個語言支持面向對象嗎?如果支持,你如何建立一個類,並封裝成員(變量和函數)?

h.這門語言支持多少個標准形式的集合?(數組,列表,棧,隊列,集合等等)

i.這門語言如何實現繼承和多態?

j.如何實現接口和SOLID法則是什么?

k.如何實現回調函數?

l.是否支持函數型程序設計法?

m.盡可能的多熟悉標准庫。不同的語言有不同的庫函數,所以在這點上請教專業人士

n.使用這門語言來學習算法。實現經典算法,並破解難題

o.使用這門語言來寫像網站,手機app等軟件

 9.全日制學生通常花3個月的時間完成a到m,再花2個月的時間完成n。這個完全取決於你對之前的項目的理解。如果你發現你卡在一個項目上,然后重新回過來理解一下。記住要有耐心。

 10.一旦你學習了新的知識點,寫代碼,一定要聯網保存在Visual Studio的GitHub上。

結束語:


 還有兩天就是聖誕節了。這個小話題就是給我的學生和他們父母的聖誕禮物。期望我的學生在新的一年里可以取得更大的成就,特別感謝我的編輯布蘭登·張,他的糾正和建議使得這個話題更具有可讀性。如果你有任何問題或者建議,歡迎發送郵件到timliu@outlook.com中。

 希望這個話題可以幫助大家學好編程。祝好運!聖誕快樂,新年快樂!

原文地址: http://www.timliu.net/Portals/0/Topics/HowToLearnProgrammingWellAndQuick.pdf

開發者交流群:53078485,期待您的加入

 


免責聲明!

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



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