我畢業於克萊門森大學政治學專業。我曾考慮過是否選擇學習計算機科學專業,還在大一那年報名參加了“程式設計概論”課程,不過很快就退出了。實在是太難了。你可以先嚐試自學,如果不行在報班。
畢業後我一直住在矽谷,我發現我需要學習程式設計。一年後,我成為了eBay公司的一名中級軟體工程師。我不想讓大家覺得這是很輕鬆就能做到的。實際上,這是極具挑戰的一件事。在這一年的不斷嘗試努力過程中,我得到了很多樂趣。
雖然與擁有計算機科學學士、碩士甚至是博士學位的同事一起工作的壓力很大,但別忘記了你還有“自學的優勢”。你選擇學習Python程式設計,不是出於老師佈置的任務,而是因為你內心學習的渴望,這一點是你所擁有的最大優勢。蘋果公司的創始人斯蒂夫·沃茲尼亞克(Steve Wozniak)就是一位自學成才的程式設計師;還有因在美國宇航局的阿波羅登月計劃中做出卓越貢獻而獲得總統自由勳章的瑪格麗特·漢密爾頓(Margaret Hamilton);還有Tumblr 的創始人大衛·卡普(David Karp),Twitter的創始人傑克·多西(Jack Dorsey),Instagram 的創始人凱文·斯特羅姆(Kevin Systrom),他們都是自學成才的程式設計師。
不管你從事什麼工作,程式設計都有助於你的職業發展。學習程式設計將給你自己賦能。我喜歡嘗試新想法,時刻都有希望啟動的新專案。學會程式設計後,我就可以坐下來自己實現,而不需要依賴他人。
程式設計也會提升你在其他方面的技能。因為你熟練掌握了問題解決能力,鮮有其他工作不會因此而受益。我最近要在Craiglist上租房,搜尋並篩選房子是個非常費力的活兒。但是我寫了一個程式來代替我搜索,最後將結果以郵件形式傳送給我。學會程式設計,將把你從重複性工作中解放出來。
如果你想成為軟體工程師,市場上對這類崗位的需求也日益增長,但是符合要求的候選者卻總是供不應求。到2020年,預計將有一百萬個程式設計崗位空缺。即使你的目標不是成為軟體工程師,科學和金融等領域的崗位也開始傾向那些擁有程式設計經驗的申請者。
如果你之前沒有任何程式設計經驗,擔心自己無法勝任程式設計工作,我想想告訴你的是:你完全有能力做到。人們對程式設計師有一些常見的誤解,比如程式設計師都得擅長數學。這是錯誤的印象,不過程式設計確實是一件困難的工作。幸運的是,專欄涵蓋的內容將讓這一切變得比你想象得更加容易。
為了提高程式設計技巧,你應該每天練習程式設計。擋在你面前的唯一障礙就是無法堅持,所以我們要採取一些措施確保自己能夠堅持不懈。準備一張檢查清單,來確保每天都有做練習,而且也能夠幫助你保持專注。
如果你還需要其他幫助,效率專家Tim Ferris建議採用如下技巧來保持驅動力。事先給家人或朋友一筆錢,如果你在規定的時間內完成了目標,就讓他們把錢還給你,否則就將錢捐獻給你討厭的機構。
《零基礎學Python》不僅是教你如何使用某種特定的語言程式設計,還會介紹標準教材中所不包括的其他所有知識點。專欄內分享的是我在成為軟體工程師過程中不得不自學的內容。專欄不適合那些想要隨意瞭解下程式設計知識、將寫程式碼作為愛好的人,而是專門寫給那些希望以程式設計為職業的人。不管你的目標是成為一名軟體工程師、企業家,還是在其他的崗位上使用程式設計技能,你都是專欄的目標讀者。
學會一門程式語言還不夠,你還需要學會其他技能,才能像計算機科學家一樣地工作。我會教授大家我從程式設計新手到專業軟體工程師過程中學到的一切。這個專欄,是為了向有志於程式設計崗位的人分享他們需要掌握的知識框架。
我經常從自學程式設計的朋友那聽到這樣的反饋:我現在該做什麼?我還不是一名程式設計師,也不知道下一步該學什麼?因此我設計了下面的專欄結構。
我的目標不是包羅你需要了解的每個主題的所有細節,而是提供一份指引——一個程式設計職業發展所需要的所有技術路線圖。由此我將專欄分成五個部分。
第一部分:程式設計簡介。讓你儘快寫出自己的第一個程式,最好在今天。
第二部分:面向物件程式設計簡介。這部分將介紹不同的程式設計正規化,著重闡述面向物件程式設計。你會開發一個遊戲,體會程式設計的強大能力。讀完這部分後你會沉迷於程式設計。
第三部分:程式設計工具簡介。將介紹提升程式設計生產力的不同工具。這時,你已經沉迷於程式設計,並希望變得更好。你將會學習相關的作業系統、使用正則表示式提升效率、安裝並管理他人的程式,以及使用版本控制與其他工程師協作的知識。
第四部分:計算機科學簡介。將簡要介紹計算機科學知識,主要涵蓋兩個主題——演算法和資料結構。
第五部分:找到工作。最後一部分是關於最佳程式設計實踐,如何找到軟體工程師的工作,團隊協作以及程式設計師的自我提升。我會分享如何透過技術面試與團隊協作的建議,以及如何進一步提升自己的技能。
我學會程式設計的方式,與計算機科學通常的教學方式正好相反。專欄的結構是根據我自己的方式組織的。一般來說,你會先花很多時間學習理論,理論知識學的太多以至於許多計算機科學的畢業生甚至不知道如何動手程式設計。傑夫·阿特伍德(Jeff Atwood),在其部落格“為什麼程式設計師不會程式設計”中寫道:“和我一樣,許多人都碰到了這樣的情況,程式設計崗位的200位申請者中,有199個根本不會寫程式碼。重申一遍:他們一點程式碼都不會寫。”這種現象直接促使Atwood發明了FizzBuzz程式碼挑戰,一種用來在面試中篩選申請者的程式設計測試。
《王者之旅》電影中的主角喬什(Josh Waitzkin),在《學習的藝術》一書中回憶了他如何反向學習國際象棋。他沒有和其他人一樣研究開局,而是從學習象棋殘局(棋盤上只剩下少數幾個棋子)開始。這樣做讓他對國際象棋有了更深的理解,並贏得了多次大賽冠軍。與此類似,我認為先學習如何程式設計再學習理論的方法更高效,因為你會擁有了解背後原理的強烈驅動。這就是為什麼專欄一直到第五部分才介紹計算機科學理論,而且內容也儘量精簡。雖然理論很重要,但是在你擁有了程式設計經驗之後,理論的價值才更大。
專欄的各個章節緊密相關。如果你讀到了某些看不懂的概念,可能在前一章已經做了介紹。專欄內儘量避免重複解釋,所以牢記這個特點。在給重點詞彙下定義時,會使用斜體。每個章節的末尾都有一個詞彙表,對該章內出現的斜體名詞進行解釋。
專欄程式碼段前的註釋為GitHub的網址,讀者可於網站直接複製程式碼。
為了讓讀者儘可能的積累程式設計經驗,專欄會介紹多種技術。在某些情況下,必須在許多不同的技術中做出選擇。在第20章“版本控制”中,我們將會學習Git的基礎知識。Git是一個流行的版本控制系統,選擇介紹Git是因為筆者認為它已經成為版本控制的業界標準。專欄中用Python來編寫大部分的程式設計示例,因為它是一門很流行的初學者語言,而且即使從來沒有使用過Python的人學習起來也比較簡單。此外,目前幾乎每個領域對Python開發者的需求都非常大。不過,專欄會盡量做到內容與技術無關——注重概念,而非技術本身。
首先需要有一臺計算機,以便跟著每個專欄內容進行示例練習。計算機有一個作業系統(operating system),即一個扮演人與計算機物理硬體之間的中間人的程式。可以在螢幕上看到的稱為圖形使用者介面(Graphical User Interface,GUI),它是作業系統的一部分。
臺式計算機和膝上型電腦目前有3種常用的作業系統:Windows、UNIX和Linux。
開源(open-source)意味著軟體不歸某個公司或個人所有,而是由一群志願者維護。Linux和UNIX都是類UNIX作業系統,意味著二者之間非常相似。
如果你喜歡歡迎關注我的專欄《零基礎學Python3》,有問題歡迎給我留言,我會第一時間反饋給您。https://learning.snssdk.com/feoffline/toutiao_wallet_bundles/toutiao_learning_wap/online/article.html?item_id=6681141509619712520&app_name=news_article
我畢業於克萊門森大學政治學專業。我曾考慮過是否選擇學習計算機科學專業,還在大一那年報名參加了“程式設計概論”課程,不過很快就退出了。實在是太難了。你可以先嚐試自學,如果不行在報班。
畢業後我一直住在矽谷,我發現我需要學習程式設計。一年後,我成為了eBay公司的一名中級軟體工程師。我不想讓大家覺得這是很輕鬆就能做到的。實際上,這是極具挑戰的一件事。在這一年的不斷嘗試努力過程中,我得到了很多樂趣。
1.1 自學的優勢雖然與擁有計算機科學學士、碩士甚至是博士學位的同事一起工作的壓力很大,但別忘記了你還有“自學的優勢”。你選擇學習Python程式設計,不是出於老師佈置的任務,而是因為你內心學習的渴望,這一點是你所擁有的最大優勢。蘋果公司的創始人斯蒂夫·沃茲尼亞克(Steve Wozniak)就是一位自學成才的程式設計師;還有因在美國宇航局的阿波羅登月計劃中做出卓越貢獻而獲得總統自由勳章的瑪格麗特·漢密爾頓(Margaret Hamilton);還有Tumblr 的創始人大衛·卡普(David Karp),Twitter的創始人傑克·多西(Jack Dorsey),Instagram 的創始人凱文·斯特羅姆(Kevin Systrom),他們都是自學成才的程式設計師。
1.2 為什麼應該學程式設計不管你從事什麼工作,程式設計都有助於你的職業發展。學習程式設計將給你自己賦能。我喜歡嘗試新想法,時刻都有希望啟動的新專案。學會程式設計後,我就可以坐下來自己實現,而不需要依賴他人。
程式設計也會提升你在其他方面的技能。因為你熟練掌握了問題解決能力,鮮有其他工作不會因此而受益。我最近要在Craiglist上租房,搜尋並篩選房子是個非常費力的活兒。但是我寫了一個程式來代替我搜索,最後將結果以郵件形式傳送給我。學會程式設計,將把你從重複性工作中解放出來。
如果你想成為軟體工程師,市場上對這類崗位的需求也日益增長,但是符合要求的候選者卻總是供不應求。到2020年,預計將有一百萬個程式設計崗位空缺。即使你的目標不是成為軟體工程師,科學和金融等領域的崗位也開始傾向那些擁有程式設計經驗的申請者。
1.3 沒有程式設計經驗怎麼辦?如果你之前沒有任何程式設計經驗,擔心自己無法勝任程式設計工作,我想想告訴你的是:你完全有能力做到。人們對程式設計師有一些常見的誤解,比如程式設計師都得擅長數學。這是錯誤的印象,不過程式設計確實是一件困難的工作。幸運的是,專欄涵蓋的內容將讓這一切變得比你想象得更加容易。
為了提高程式設計技巧,你應該每天練習程式設計。擋在你面前的唯一障礙就是無法堅持,所以我們要採取一些措施確保自己能夠堅持不懈。準備一張檢查清單,來確保每天都有做練習,而且也能夠幫助你保持專注。
如果你還需要其他幫助,效率專家Tim Ferris建議採用如下技巧來保持驅動力。事先給家人或朋友一筆錢,如果你在規定的時間內完成了目標,就讓他們把錢還給你,否則就將錢捐獻給你討厭的機構。
1.4學習前你需要了解《零基礎學Python》不僅是教你如何使用某種特定的語言程式設計,還會介紹標準教材中所不包括的其他所有知識點。專欄內分享的是我在成為軟體工程師過程中不得不自學的內容。專欄不適合那些想要隨意瞭解下程式設計知識、將寫程式碼作為愛好的人,而是專門寫給那些希望以程式設計為職業的人。不管你的目標是成為一名軟體工程師、企業家,還是在其他的崗位上使用程式設計技能,你都是專欄的目標讀者。
學會一門程式語言還不夠,你還需要學會其他技能,才能像計算機科學家一樣地工作。我會教授大家我從程式設計新手到專業軟體工程師過程中學到的一切。這個專欄,是為了向有志於程式設計崗位的人分享他們需要掌握的知識框架。
我經常從自學程式設計的朋友那聽到這樣的反饋:我現在該做什麼?我還不是一名程式設計師,也不知道下一步該學什麼?因此我設計了下面的專欄結構。
1.5 專欄的結構我的目標不是包羅你需要了解的每個主題的所有細節,而是提供一份指引——一個程式設計職業發展所需要的所有技術路線圖。由此我將專欄分成五個部分。
第一部分:程式設計簡介。讓你儘快寫出自己的第一個程式,最好在今天。
第二部分:面向物件程式設計簡介。這部分將介紹不同的程式設計正規化,著重闡述面向物件程式設計。你會開發一個遊戲,體會程式設計的強大能力。讀完這部分後你會沉迷於程式設計。
第三部分:程式設計工具簡介。將介紹提升程式設計生產力的不同工具。這時,你已經沉迷於程式設計,並希望變得更好。你將會學習相關的作業系統、使用正則表示式提升效率、安裝並管理他人的程式,以及使用版本控制與其他工程師協作的知識。
第四部分:計算機科學簡介。將簡要介紹計算機科學知識,主要涵蓋兩個主題——演算法和資料結構。
第五部分:找到工作。最後一部分是關於最佳程式設計實踐,如何找到軟體工程師的工作,團隊協作以及程式設計師的自我提升。我會分享如何透過技術面試與團隊協作的建議,以及如何進一步提升自己的技能。
1.6 從終點出發我學會程式設計的方式,與計算機科學通常的教學方式正好相反。專欄的結構是根據我自己的方式組織的。一般來說,你會先花很多時間學習理論,理論知識學的太多以至於許多計算機科學的畢業生甚至不知道如何動手程式設計。傑夫·阿特伍德(Jeff Atwood),在其部落格“為什麼程式設計師不會程式設計”中寫道:“和我一樣,許多人都碰到了這樣的情況,程式設計崗位的200位申請者中,有199個根本不會寫程式碼。重申一遍:他們一點程式碼都不會寫。”這種現象直接促使Atwood發明了FizzBuzz程式碼挑戰,一種用來在面試中篩選申請者的程式設計測試。
《王者之旅》電影中的主角喬什(Josh Waitzkin),在《學習的藝術》一書中回憶了他如何反向學習國際象棋。他沒有和其他人一樣研究開局,而是從學習象棋殘局(棋盤上只剩下少數幾個棋子)開始。這樣做讓他對國際象棋有了更深的理解,並贏得了多次大賽冠軍。與此類似,我認為先學習如何程式設計再學習理論的方法更高效,因為你會擁有了解背後原理的強烈驅動。這就是為什麼專欄一直到第五部分才介紹計算機科學理論,而且內容也儘量精簡。雖然理論很重要,但是在你擁有了程式設計經驗之後,理論的價值才更大。
1.7 專欄的格式專欄的各個章節緊密相關。如果你讀到了某些看不懂的概念,可能在前一章已經做了介紹。專欄內儘量避免重複解釋,所以牢記這個特點。在給重點詞彙下定義時,會使用斜體。每個章節的末尾都有一個詞彙表,對該章內出現的斜體名詞進行解釋。
專欄程式碼段前的註釋為GitHub的網址,讀者可於網站直接複製程式碼。
1.8 專欄使用的技術為了讓讀者儘可能的積累程式設計經驗,專欄會介紹多種技術。在某些情況下,必須在許多不同的技術中做出選擇。在第20章“版本控制”中,我們將會學習Git的基礎知識。Git是一個流行的版本控制系統,選擇介紹Git是因為筆者認為它已經成為版本控制的業界標準。專欄中用Python來編寫大部分的程式設計示例,因為它是一門很流行的初學者語言,而且即使從來沒有使用過Python的人學習起來也比較簡單。此外,目前幾乎每個領域對Python開發者的需求都非常大。不過,專欄會盡量做到內容與技術無關——注重概念,而非技術本身。
1.9初學者需要準備的工具首先需要有一臺計算機,以便跟著每個專欄內容進行示例練習。計算機有一個作業系統(operating system),即一個扮演人與計算機物理硬體之間的中間人的程式。可以在螢幕上看到的稱為圖形使用者介面(Graphical User Interface,GUI),它是作業系統的一部分。
臺式計算機和膝上型電腦目前有3種常用的作業系統:Windows、UNIX和Linux。
Windows是微軟推出的作業系統。UNIX作業系統發明於20世紀70年代,目前最流行的UNIX作業系統是蘋果的OS X。Linux則是目前世界上大部分伺服器(server)都在使用的一款開源作業系統。伺服器指的是執行託管網站等任務的計算機或計算機程式。開源(open-source)意味著軟體不歸某個公司或個人所有,而是由一群志願者維護。Linux和UNIX都是類UNIX作業系統,意味著二者之間非常相似。
如果你喜歡歡迎關注我的專欄《零基礎學Python3》,有問題歡迎給我留言,我會第一時間反饋給您。https://learning.snssdk.com/feoffline/toutiao_wallet_bundles/toutiao_learning_wap/online/article.html?item_id=6681141509619712520&app_name=news_article