“大多數優秀的程式員從事程式設計工作,不是因為期望獲得報酬或得到公眾的稱贊,而是因為程式設計是件有趣的事兒。”
——林納斯·託瓦茲(Linus Torvalds)
在美國亞馬遜,有一本書的影響力超高的Python入門書,Kindle版本在美國亞馬遜網站的計算機軟體、軟體開發分類中排行均為第一,超越了眾多實力派Python書,眾多五星好評。也許你有所耳聞,這本書就是《Python程式設計無師自通——專業程式員的養成》
《Python程式設計無師自通——專業程式員的養成》作者是一名自學成才的程式員,作為一名文科生他透過自學程式設計,掌握了程式設計技能併在eBay找到了一份軟體工程師的工作。這本書是作者結合個人經驗寫作而成,旨在幫助讀者從外行成長為一名專業的Python程式員。
這本書可以滿足幾乎所有想要學習程式設計的初學者。本書適合高中、大學階段想要自學程式設計的學生,以及其他行業想入門程式設計的人,同時也適合作為程式設計入門的培訓教材。
《Python程式設計無師自通——專業程式員的養成》
作者:[美] 科裡•奧爾索夫(Cory Althoff)
掃描二維碼,一鍵購買
我畢業於克萊門森大學政治學專業,曾考慮過是否選擇學習電腦科學專業,還在大一那年報名參加了“程式設計概論”課程,不過很快就退出了。實在是太難了。畢業後我一直住在矽谷,我發現我需要學習程式設計。一年後,我成為了eBay公司的一名中級軟體工程師。我不想讓大家覺得這是很輕鬆就能做到的。實際上,這是極具挑戰的一件事。在這一年的不斷嘗試努力過程中,我得到了很多樂趣。
剛開始,很多人學習的是如何用流行的程式語言Python來進行程式設計。但是本書不僅是教你如何使用某種特定的語言程式設計,還會介紹標準教材中所不包括的其他所有知識點。本書分享的是我在成為軟體工程師過程中不得不自學的內容。不管你的標的是成為一名軟體工程師、企業家,還是在其他的崗位上使用程式設計技能,你都是本書的標的讀者。
學會一門程式語言還不夠,你還需要學會其他技能,才能像電腦科學家一樣地工作。我會教授大家我從程式設計新手到專業軟體工程師過程中學到的一切。我寫是為了向有志於程式設計崗位的人分享他們需要掌握的知識框架。程式設計概論的書籍都大同小異——用Python或Ruby介紹程式設計的基礎知識,然後就讓你自己摸索。我經常從讀完類似書籍的朋友那聽到這樣的反饋:我現在該做什麼?我還不是一名程式員,也不知道下一步該學什麼。
本書,就是我給出的答案。
本書中涵蓋很多主題,作者的標的不是包羅你需要瞭解的每個主題的所有細節,而是提供一份指引——一個程式設計職業發展所需要的所有技能的導覽。
▌第一部分:程式設計簡介。讓你儘快寫出自己的第一個程式,最好在今天。
▌第二部分:面向物件程式設計簡介。這部分將介紹不同的程式設計正規化,著重闡述面向物件程式設計。你會開發一個遊戲,體會程式設計的強大能力。讀完這部分後你會沉迷於程式設計。
▌第三部分:程式設計工具簡介。將介紹提升程式設計生產力的不同工具。這時,你已經沉迷於程式設計,並希望變得更好。你將會學習相關的作業系統、使用正則運算式提升效率、安裝並管理他人的程式,以及使用版本控制與其他工程師協作的知識。
▌第四部分:電腦科學簡介。將簡要介紹電腦科學知識,主要涵蓋兩個主題——演演算法和資料結構。
▌第五部分:找到工作。最後一部分是關於最佳程式設計實踐,如何找到軟體工程師的工作,團隊協作以及程式員的自我提升。本文會分享如何透過技術面試與團隊協作的建議,以及如何進一步提升自己的技能。
一般來說,你會先花很多時間學習理論,理論知識學的太多以至於許多電腦科學的畢業生甚至不知道如何動手程式設計。傑夫·阿特伍德(Jeff Atwood),在其部落格“為什麼程式員不會程式設計”中寫道:“和我一樣,許多人都碰到了這樣的情況,程式設計崗位的200位申請者中,有199個根本不會寫程式碼。重申一遍:他們一點程式碼都不會寫。”這種現象直接促使Atwood發明瞭FizzBuzz程式碼挑戰,一種用來在面試中篩選申請者的程式設計測試。大部分人都通不過測試,這也是為什麼你要學習本書並掌握實踐中要使用到技能。
《王者之旅》電影中的主角喬什(Josh Waitzkin),在《學習的藝術》一書中回憶了他如何反向學習國際象棋。他沒有和其他人一樣研究開局,而是從學習象棋殘局。這樣做讓他對國際象棋有了更深的理解,並贏得了多次大賽冠軍。與此類似,先學習如何程式設計再學習理論的方法更高效,因為你會擁有瞭解背後原理的強烈驅動。雖然理論很重要,但是在你擁有了程式設計經驗之後,理論的價值才更大。
《王者之旅》電影截圖
畢業後再學習程式設計,已經越來越常見。Stack Overflow(一個程式員線上社群)在2015年的一份調查中顯示,48%的受訪者不是計算機專業卻從事程式設計職業。
在eBay工作期間,作者的團隊中有從斯坦福大學、加州大學和杜克大學電腦科學專業畢業的程式員,還有兩名物理學博士。當時他25歲,而年僅21歲的同事對程式設計和電腦科學的知識比其強10倍這個事實,讓作者尤其惶恐。
雖然與擁有電腦科學學士、碩士甚至是博士學位的同事一起工作的壓力很大,但別忘記了你還有“自學的優勢”。你選擇讀本文,不是出於老師佈置的任務,而是因為你內心學習的渴望,這一點是你所擁有的最大優勢。蘋果公司的創始人斯蒂夫·沃茲尼亞克(Steve Wozniak)就是一位自學成才的程式員;還有因在美國宇航局的阿波羅登月計劃中做出卓越貢獻而獲得總統自由勛章的瑪格麗特·漢密爾頓(Margaret Hamilton);還有Tumblr 的創始人大衛·卡普(David Karp),Twitter的創始人傑克·多西(Jack Dorsey),Instagram 的創始人凱文·斯特羅姆(Kevin Systrom),他們都是自學成才的程式員。
不管你從事什麼工作,程式設計都有助於你的職業發展。學習程式設計將給你自己賦能。你喜歡嘗試新想法,時刻都有希望啟動的新專案。學會程式設計後,你就可以坐下來自己實現,而不需要依賴他人。
程式設計也會提升你在其他方面的技能。因為你熟練掌握了問題解決能力,鮮有其他工作不會因此而受益。如我最近要在網上租房,搜尋並篩選房子是個非常費力的活兒。但是我寫了一個程式來代替我搜索,最後將結果以郵件形式傳送給我。學會程式設計,將把你從重覆性工作中解放出來。
如果你想成為軟體工程師,市場上對這類崗位的需求也日益增長,但是符合要求的候選者卻總是供不應求。到2020年,預計將有一百萬個程式設計崗位空缺。即使你的標的不是成為軟體工程師,科學和金融等領域的崗位也開始傾向那些擁有程式設計經驗的申請者。
如果你之前沒有任何程式設計經驗,擔心自己無法勝任程式設計工作,但是你要相信自己:你完全有能力做到。人們對程式員有一些常見的誤解,比如程式員都得擅長數學。這是錯誤的印象,不過程式設計確實是一件困難的工作。幸運的是,本書涵蓋的內容將讓這一切變得比你想象得更加容易。
為了提高程式設計技巧,你應該每天練習程式設計。擋在你面前的唯一障礙就是無法堅持,所以我們要採取一些措施確保自己能夠堅持不懈。準備一張檢查清單,來確保每天都有做練習,而且也能夠幫助你保持專註。
如果你還需要其他幫助,效率專家Tim Ferris建議採用如下技巧來保持驅動力。事先給家人或朋友一筆錢,如果你在規定的時間內完成了標的,就讓他們把錢還給你,否則就將錢捐獻給你討厭的機構。
為了讓讀者盡可能的積累程式設計經驗,書中會介紹多種技術。在某些情況下,必須在許多不同的技術中做出選擇。我們將會學習Git的基礎知識。Git是一個流行的版本控制系統,選擇介紹Git是因為筆者認為它已經成為版本控制的業界標準。書中用Python來編寫大部分的程式設計示例,因為它是一門很流行的初學者語言,而且即使從來沒有使用過Python的人學習起來也比較簡單。此外,目前幾乎每個領域對Python開發者的需求都非常大。不過,會儘量做到內容與技術無關——註重概念,而非技術本身。
《Python程式設計無師自通——專業程式員的養成》 每章結尾處都有術語表和挑戰練習,讓你更好地學習Python 3。