你們都是怎麼學Python 的?

學了一個月,感覺自己怎麼學都學不進去啊,我感覺自己方法錯了,在學習前我有做過規劃,現在連入門都不算,我應該怎麼辦啊,求大神給一個學習思路,我希望大神能給我講解入門要重點學習那一塊,不然我覺得我要失敗了


我是真正零基礎開始學Python的,從一開始的一竅不通,到3個月後成功搭建了一個動態網站(沒有用任何框架)。相比於計算機大牛,我更加知道一個小白將會遇到什麼坑,遇到哪些難點。我把我的學習過程寫在下面,並附上在每個階段的學習資料,希望對零基礎的Python學習者有所幫助。

註:本文只做經歷分享,不是技術探討。

---


在知乎上常常看到想要轉行IT,或者是想學習編程但不知如何開始的朋友。回答這類問題的人往往只是列出書單資源然後給出一個大致的方向。有些朋友一開始就扎入了理論學習的汪洋大海,從苦讀類似《演算法導論》開始,能夠堅持讀下來的寥寥無幾,學習的積極性也被不斷的挫敗感消磨的所剩無幾。


一直以來,編程對我而言是一種「黑魔法」般的存在。去年阿里月餅門,當很多人都參與到是非之爭的時候,我更加著迷於程序員區區幾行代碼的腳本所展現出的威力,對於外行而言,這是超乎他們想像之外的某種能力——為什麼我守在電腦面前盯著秒針然後拚命點擊滑鼠都不一定能搶到的禮物,程序員只需要提前花5分鐘寫3行代碼就輕鬆搞定?

所以,我的心底深處一直都想變成這樣的一位魔法師。去年的8月,剛好工作上想要開發一個基於微信的英語學習網站,藉此機會,我決定好好學習一下編程。在此之前,我所有關於程序的知識僅僅來源於兩部分,一是本科時期的C語言必修課,現在已經忘的一乾二淨,不過好歹我從中明白編程是怎麼回事;第二部分是大概兩年前由於工作關係學的一些Python,不過只是皮毛,現在忘的七七八八。


簡單說,我的目標是建立一個網站,不過這個網站是動態的,也就是說它能識別誰登陸,然後對不同的人顯示不同的內容。而當時的現實是,我完全不明白網頁是如何顯示出來的?譬如每個人登陸知乎的時候看到的是定製化的頁面,後台是如何基於每個ID來組織出不同的頁面的?所有我們看到的問題,回答,參與的評論在背後的伺服器上是以一種什麼樣的形式存在的?又比如為什麼有些頁面只能在微信端打開,在電腦上就會出錯?(不知道你有沒有發現這一點)


當時我的心中充滿了無數個類似的問號?當然如果你也是小白,一定有著同樣的疑問。好處是一開始就明確了學習的目的:Web建站。所以我的學習方案基本就是通過做項目學習,哪裡不懂就解決哪裡,邊做邊學習,不斷推進。另外,由於知道很多成功的網站在用Python做伺服器開發,比如知乎,所以我就自然選擇了Python。


於是我就開始了我充滿著挫敗感和成就感的編程之路……


從去年8月到12月的四個月里,除去本來的工作,為了學習質量,我會保證平均每天4個小時的學習時間,周末也不例外。另外,所有的文檔,問答都盡量看英文的,這可以幫你剩下大量的時間。12月13日,我做的網站上線了,3天時間大概有5000人訪問了這個網站,我有時在後台看著日誌,不免有些心潮噴涌,我想把自己的經驗寫下來,希望對於那些有心學習編程但無從下手的朋友提供一些幫助和鼓勵。

1. 我的自學編程之路

1)基礎

剛開始的時候,我對搭建網站一無所知。為了給自己迅速建立一個框架,我在Google上面泡了整整一天,了解了HTML,CSS,JavaScript,Ajax,jQuery,React,SQL,伺服器腳本等等知識,不求精通,只是了解每一項技術是幹嘛的,另一方面建立起了一個學習的roadmap,這樣大概知道做一個Web App需要哪些知識,分別學習的主次順序。重點推薦兩個資源:

Python基礎知識:Learn Python the Hard Way

Web App基礎知識:@張秋怡的答案寫的通俗易懂,極力推薦。

有了這個roadmap,我明白了前端三大必須掌握技能HTML,CSS和JavaScript,花了大概10天左右把W3Schools上的教程全部過了一遍,然後試著寫了幾個網頁,感覺自己寫的很沒有底氣。於是根據知乎和豆瓣上的推薦,買了《JaveScript DOM》和《Head First HTML與CSS》,邊看書邊把例子過了一遍。

W3Schools: www.w3schools.com/

JavaScript:JavaScript DOM編程藝術

HTML CSS : Head First HTML與CSS(第2版)


前端是需要慢慢學習的,在看完上面的資料後,雖然能寫出來一些挺漂亮的頁面,但是我自己知道很多都是不符合標準的,更不要說代碼風格什麼的。這隻能通過不斷地積累和增加代碼量來提高。由於明白伺服器端需要耗費自己大量的時間,所以在發現自己能夠按照構思勉強實現網頁之後,我就把學習中心放到了伺服器端上。不過每天還是會抽空寫一寫網頁,避免手生。


2)伺服器端

最先了解的是HTTP協議,也就是瀏覽器和伺服器之間是如何通信的。也就是當你在瀏覽器里鍵入網址按下回車直到網頁顯示在你瀏覽器的這個過程中,瀏覽器和瀏覽器之間發生了什麼事情。這是很有意思的內容,我是以讀小說的心情了解了這部分內容。了解這部分後,你就會明白類似為什麼有時候會有404頁面?在百度搜索框里鍵入的搜索詞是如何提交到百度伺服器的?為什麼重新登錄知乎的時候就不用再輸入密碼了?之類的問題了。

HTTP協議學習資料:In Introduction to HTTP Basics

@Vamei的博客:協議森林


了解了HTTP協議之後,我就多少有些入迷了。看似神秘難懂的現象其實原理並不複雜,你反而會被吸引。接下來就進入到我投入時間最多的部分了——後端開發。記得當時了解Web開發的MVC(Model-View-Controller)模式後,有一種心血噴涌的感覺,覺得太有意思了(程序員別噴,我就是這麼沒見過世面)。我們以知乎為例子來說明MVC是個啥:

https://pic3.zhimg.com/v2-0f9a54678b79094188b7e281cc7ffd5e_b.png

每個人的主頁都是相同的布局和風格,例如最上面的菜單搜索欄,顏色分割,左邊顯示動態等,右邊是個人信息等,然後具體的內容卻因人而異——每個人的頭像,名字,動態都是不一樣的。那麼知乎是如何保證每一個人看到的都是自己的主頁呢?


你可以把這個相同的布局想像成一個模板,裡面有一個個空格子,當你用你的賬戶登陸頁面時,想像你的電腦里有無數個小人根據你的賬號從知乎後台的資料庫里取出你的頭像,動態,認證信息等等內容,然後對應著模板上規定好的位置,把對應的內容填進去。這些小人的動作實在是太快了,以至於你覺得這是在瞬間完成的。


上面所說的模板就是MVC中的V,是View的縮寫,負責顯示。這樣做的好處在於,如果知乎有一天突然想改變一下個人主頁的風格,那麼只需要改變這一個模板,然後幾千萬註冊用戶的主頁就相應的變化了,因為模板是公用的,是不是省了很多事情?(早期的Web開發可不是這樣喲,你可能要一個個用戶去改,非常麻煩。)


而這些小人除了擺放內容,它們真正負責的是業務邏輯,我們把他們叫做Controller,也就是MVC中的C。例如當你登陸的時候,這些小人要檢查你的用戶名是不是準確的,如果準確,它們要去資料庫里取出你請求的信息等,如果用戶名錯誤,它們要攔截住你的登陸。它們的職責還有很多,無法一一列舉。在實際中,這些小人做的事情其實就是Python(或者其它腳本語言)做的事情。


最後,MVC中的Model其實就是傳給View的數據,包括上面的頭像,用戶名,動態等因人而異的數據。這些數據在知乎伺服器上是以資料庫表格(table)的形式存在的,你可以把它們想像成很多不同的excel表格,不同的表格儲存著不同的信息,有些記錄著知乎用戶的個人信息,有些記錄著回答,有些記錄著評論等等,而這些表格之間又彼此聯繫,當你在知乎的不同網頁間跳轉的時候,上面說的那些小人就根據你的要求,組合對應的表格取出對應的數據,然後把他們放到模板對應的空格里,發送給瀏覽器。然後瀏覽器根據你寫的CSS,用不同的顏色,大小等等,將數據很漂亮的顯示出來。

這樣做的好處是什麼呢?雖然你最終在瀏覽器里看到的是一個完整的頁面,但是在後端邏輯上它們都是區分開的——模型(M),視圖(V)和控制器(C)的區分就保證了較高的可維護性——我可以隨時修改主頁的顯示並看到效果,同樣我可以隨時加入一些業務邏輯。

如果你的學習堅持到這裡了,首先要恭喜你。其次你可能已經知道一些非常成熟的Python Web框架了,例如Django,Flask等等,並且你可能看到了很多小白教程教你直接使用,畢竟大部分人可能覺得沒有必要重複造輪子。

本來為了省事,我也打算直接用框架。我是在設計資料庫的時候,當時在看SQLAlchemy文檔,覺得相對自己的項目SQLAlchemy太過複雜,所以我決定自己寫自己的ORM(名詞不懂沒關係),這對於當時的我來說是一件難度非常大的事情。於是我投入了極大的精力每天都在看關於SQL和Python相關的教程和資料,Python核心編程(第二版) 給了我很大的啟發。在自己完成了ORM後,又寫了URL處理函數,同樣沒有用任何現成的Web框架。

現在回頭看,我認為這一段時間的造輪子是提升編程能力最快的時候。比如為了寫ORM,就必須去花很多時間學習SQL,去了解Python裡面的metaclass,而如果用一個現成的框架,我很有可能偷懶不去關注某些細節。而不出問題還好,一旦出問題,我就只能跪。另外,造輪子迫使我在開始的時候就構思整個框架,因為我必須儘可能的考慮到所有的情況,於是就會不斷的強迫自己完善知識體系,和別人的代碼作對比從而改進自己的,這個過程充滿了無盡的挫敗感,但是得來的成就和快樂也是無可比擬的。

SQL書籍:Sams Teach Yourself MySQL in 21 Days

Python:Python核心編程(第二版)

Github上的優質Python資源:CodementorIO/Python-Learning-Resources

過程中還牽涉到部署,我的網站是跑在Linux上的。關於部署網上有非常多的優質教程,一搜一大把。這裡就不再贅述。這些是我學習大致路線,當然過程中充滿著小的磕磕絆絆,雖然網站上線了,貌似運行還比較順利,但是如果以一個程序員的標準來要求自己,自己依然非常菜鳥。不過我並沒有以前那樣懼怕技術了,就像你明白魔術的背後的原理後,會更多的思考原理本身。

2. 自學編程需要注意的問題

很多人都推薦小白第一門語言選Python,因為語法簡單。這句話只說了一半,Python確實容易上手,對初學者的門檻很低。但我發現,對於小白真正的門檻在於系統知識,這就和用什麼語言完全沒有任何關係了。例如很多人學完了Python的語法,覺得確實簡單,但是轉頭去用Python標準庫的時候,卻發現自己連文檔都看不懂。標準庫提供了Python和其它系統功能的介面,最終實現了Python和系統之間的互動。讀標準庫需要系統知識,比如操作系統,資料庫,進程和線程,socket編程,網路協議等等,這些對於編程小白來才構成很高的門檻,但是只有學會這些,才能真正發揮出Python的威力來。

這也是我覺得自己的經歷對小白是有價值的一個原因。因為設計一個動態的網頁是一個很不錯的練手Project。建立網頁(Web App)會逼迫你了解從你在瀏覽器里鍵入地址按下回車到網頁顯示在瀏覽器的過程中,瀏覽器,網路,伺服器都幹了些什麼。具體到技術上面,你不得不去學習前端的HTML,CSS和JavaScript,後端的腳本,資料庫,操作系統等。也就是說,這個過程能夠促使你去主動學習上面提到的系統知識,如果你再做另外一個項目,你就不會像現在這樣無從下手,而有能力去進行一些技術性的探討,所以我認為這是一個非常好的練手項目。

1)一定要空出時間補充理論知識

很多人會強調learn by doing,邊做項目邊學習,這也是我自己採用的方式。在這種方式中,你不斷犯錯,改正……學習效率非常高。但是,很多人走了極端,最後的結果就是不注意理論知識的學習。你會發現自己Google的能力越來越高,但是真實的編程能力並沒有得到提升。如果有這種情況,你需要反思一下。

一種可能是你太過於依賴各種成熟的框架,結果編程就變成了用「膠水」去粘合不同的框架完成需求。就好比你的Web App用了SQLAlchemy,雖然自己不太懂SQL,但是網站跑的也還不錯。這時候如果資料庫出現了問題,那你就只能跪了。

另外一種可能是你完全沉浸在做項目中,忽略了學習理論知識。做項目雖然充滿困難,但回報是強烈的成就感,很容易沉浸其中。我覺得這是極其錯誤的。首先半路出家的程序員都沒有經過系統的學習,沒有形成自己的知識體系,如果你不懂數據結構,演算法複雜度,操作系統這些理論,那麼你能達到的高度就極其有限。所以,在每天做項目的同時,一定要保證抽出一定的時間,惡補理論知識。這部分的書單在豆瓣和知乎上都有很多總結,可以自行搜索。

2)不要太糾結於無意義的問題,比如什麼框架好,XX語言比XX語言好啦這種問題。前期確定了練手項目,就去專心積累代碼量,積累基礎知識。那些你現在還看不懂的炫酷技術你慢慢也就能明白是怎麼回事了,反而沒有基礎,再炫酷的框架對你而言都是天書。

3)學會發問。好問題是建立在你自己已經實踐或者思考的基礎上問出來的,這是對自己的負責,也是對別人的尊重。不要一遇到困難就喜歡直接上網搜索:「這個問題是怎麼回事啊?」,「我不明白你能不能幫我看看……」。

4)學好英語。

THE END

最後,給自己打個廣告,如果學英語,一定要關注我。


無意中聽我們院長大人說:Python是一門神奇的語言,在此之前我已經對C/C++/Java等幾門語言有了一定得了解和掌握,並做過一些小項目。

學習Python大致可以分為以下幾個階段:

1.

剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變數、數據結構、語法等,基礎過的很快,基本上1~2周時間就能過完了,我當時是在這兒看的基礎:Python 簡介 | 菜鳥教程

2.

看完基礎後,就是做一些小項目鞏固基礎,比方說:做一個終端計算器,如果實在找不到什麼練手項目,可以在 Codecademy - learn to code, interactively, for free 上面進行練習。

3.

如果時間充裕的話可以買一本講Python基礎的書籍比如《Python編程》,閱讀這些書籍,在鞏固一遍基礎的同時你會發現自己諸多沒有學習到的邊邊角角,這一步是對自己基礎知識的補充。

4.

Python庫是Python的精華所在,可以說Python庫組成並且造就了Python,Python庫是Python開發者的利器,所以學習Python庫就顯得尤為重要:The Python Standard Library ,Python庫很多,如果你沒有時間全部看完,不妨學習一遍常用的Python庫:Python常用庫整理 - 知乎專欄

5.

Python庫是開發者利器,用這些庫你可以做很多很多東西,最常見的網路爬蟲、自然語言處理、圖像識別等等,這些領域都有很強大的Python庫做支持,所以當你學了Python庫之後,一定要第一時間進行練習。如何尋找自己需要的Python庫呢?推薦我之前的一個回答:如何找到適合需求的 Python 庫?

6.

學習使用了這些Python庫,此時的你應該是對Python十分滿意,也十分激動能遇到這樣的語言,就是這個時候不妨開始學習Python數據結構與演算法,Python設計模式,這是你進一步學習的一個重要步驟:faif/python-patterns

7.

當度過艱難的第六步,此時選擇你要研究的方向,如果你想做後端開發,不妨研究研究Django,再往後,就是你自己自由發揮了。

很多人問我如何學習Python爬蟲,為此我整理編寫了一本Python爬蟲相關的電子書,主要包括Python入門、Python爬蟲入門到進階、Python爬蟲面試總結等等。可以在微信公眾號【一個程序員的日常】後台回復關鍵詞【1】獲取這本電子書。


我學習新語言的基本套路,不僅只限於 python,常見的語言都可以按這個套路學。

1. 仔細讀完一本入門教程(如果有比較長的 code 一定要跟著打下來),我 python 用的 python 寶典,還能湊活。learn python the hard way 聽說升級到 3 了,如果是的話也能用這本。

2. 然後刷 code wars。之所以選擇 code wars,是因為 code wars 裡面有大量幫人熟悉該語言基本語法的題目(不像 leetcode 和 euler 強調的是演算法)。對初學者的提高很有幫助。

3. 刷的覺得基本和別人的答案差不多了,開始讀一本進階,python 的話當然是 effective python。

4. 然後寫項目,如果有喜歡的項目別人已經寫了,就讀源碼。


埋頭努力砍柴,少跟放羊的說話


最早接觸Python是大二剛上完C語言的課之後,剛剛讀完《C語言程序設計》,看得雲里霧裡,什麼指針內存地址,這種太底層的語言可能不適合我這種右腦稍發達一點的人…

然後同學就給我介紹了Python,他告訴我國外的編程入門課程一般都是用Python的,所以Python也被稱為教學語言(再早一點可能是Pascal),而且Python編寫的程序可以連接其他語言開發的程序,所以Python也可以當膠水語言。而且Python不用寫大括弧~

於是我就欣然接受了他的推薦,當時學校的圖書館裡就有一本《Python基礎教程》。雖然書名如此,但它的編排對新手並不是特別友好,書很厚,硬著頭皮讀了一半,雖然沒深入學習但至少了解了Python基本的語法。(所以現在你想入門Python的話,不推薦一開始就讀這本書,你還可以選擇《Python編程快速上手:讓繁瑣工作自動化》或《Python編程 從入門到實踐
》)

真正領略到Python的魅力和強大是大三時一次臨危受命的經歷。有一天,老師大中午的告訴我下午上課的時候需要一個隨機抽取考試題目的小程序,但當時我真正掌握的只有號稱全世界最好的語言php,可是如果要用php寫的話還得搭本地伺服器,還得在網頁里,而且還怕有兼容性只能帶自己的電腦連到教室的投影上…

何必那麼麻煩呢?Python號稱可以解決任何平台上的任何問題,任何你能想到的需求都已經有人開發出解決它的包了。(要知道當時的我只是會基礎的編程,然後了解基本的Python語法)我大概用了半個小時Google,然後找到了一個叫做tkinter的開發圖形界面的包,花了二十分鐘讀文檔,然後用了不到一個小時,就把老師的隨機考題抽取器的需求實現了。(我是為了說明Python有多好用)

後來有個師妹出國留學去學編程。果不其然第一堂入門課就是Python。師妹經常會問我問題,我相當於遠程上了個網課。她家老師的理念很好,第一堂課就介紹了TDD的概念,先寫測試描述好功能,再編寫可以通過測試的程序以完成作業。很多題目都設計的非常有意思,比較簡單的是計算載人衛星返回艙落地時如何制動(聽起來很高大上其實就是用Python描述一個加速度計算公式),後面還有一些比較好玩的演算法題,比如推銷員問題,三個火槍手問題,再然後還有編寫圖形界面的小程序,實現一個投票軟體,最後的大作業是用Python寫一個小遊戲~總之這段經歷又讓我更系統地學習了一遍Python

再後來就是完全把Python當作工具來用了。比如因為自己管理著許多微信群,而且也經常有知友要求拉進某某某學習交流群的,每次都手動真的特別煩,後來就用Python做了一系列的個人微信號自動化腳本,可以自動加好友,自動邀請入群,甚至還有自動回復轉賬下單的微商功能。discountry/itchat-examples

Python也可以做Web開發,django和flask用起來也是非常的順手,和JS的Express或PHP的Laravel比一點都不差,知乎的後端都是Python寫的呢~

甚至高端大氣上檔次的機器學習,大數據等等也都可以使用Python進行研究開發。所以不管是把Python當工具語言還是當作編程開發的主力語言,學習Python都是非常有益處的~一面可以朝著高端程序員崗位進發,另一面也確實能夠通過Python方便我們的生活。

學習資料

Python教程

[ 零基礎學Python(第一版) ] - 看雲

[ Python 3零起點教程 ]

Python編程 從入門到實踐:亞馬遜:圖書

Python編程快速上手:讓繁瑣工作自動化:亞馬遜:圖書


在大三時候學python之前已經精通C/C++/C#/數據結構/演算法/圖形學/操作系統/編譯原理,有10年編程經驗。以至於買了一本Learning Python,花了一節課的時間就學完了。但因為不常用,過很長時間再要用的話,還得花一節課的時間。


第一步: 熟悉基本的語法

這一部分隨便找本 Python 的教程就行了,推薦《The Python Tutorial》,或者《Learn Python the Hard Way》,或者《A Byte of Python》,或者其他什麼講語法的書。了解 Python 的基本語法:1)函數怎麼寫;2)類怎麼寫;3)基本數據類型(str、list、tuple、dict)以及它們的常用操作方法;4)如何編寫一個可執行的腳本;

- 使用 Python 3 而不是 Python 2,Python 3 用最新的 3.6。2.7 將會在 2020 年停止維護,初學者應該直接使用最新的版本,加快社區淘汰 2.7 的速度。現在基本上常用的庫都支持 3.x,即使有一些不支持的也有替代版本。

- 學會使用 REPL(Read, Evaluate, Print, Loop),推薦安裝 iPython 以及 Notebook。

- 讀一遍 PEP8 標準,開始的時候就養成規範的代碼習慣,給編輯器裝上格式檢查工具。

- 多多練習,可以選擇 LeetCode 或者 Codewar 或者其他的 OJ。遇到不會的勤查文檔和 Google,例如我想知道如何給 list 進行排序,只需要谷歌「python list sort」關鍵詞就可以了,文檔是很好的學習資源,初期的時候可以不細看,遇到什麼查什麼就行了。

建議學習周期:有其他語言基礎的同學一周時間就夠了,我大概花了兩節課的時間給只學過 C 語言的學弟學妹們教會了 Python。


第二步:實戰訓練

基本有了基本的語法知識就可以實戰寫一些簡單的項目了。對 Web 開發感興趣的可以學習一下 Flask,然後寫一個簡單的 Web App,或者做微信公眾號開發;對數據挖掘感興趣的可以學一下 Pandas、NumPy,爬一些數據下來分析一下,這樣還可以順便學習一下如何進行數據採集(簡單的爬蟲);機器學習和深度學習方面還可以學習一下 TensorFlow。

- 《Python 核心編程》,介紹了 Python 的一些具體領域的開發方法;

- 《Python 網路數據採集》,很簡單的爬蟲入門書;

- 《利用 Python 進行數據分析》,介紹了 Pandas 和 NumPy 的用法;

- 《Flask Web 開發》,如何用 Flask 寫一個博客。


第三步:深入學習 Python

經過上面兩步的學習,可能你已經基本熟悉了 Python,但是還有好多東西不理解,比如什麼是裝飾器,如何自己寫一個裝飾器,什麼是上下文管理器以及如何實現,元編程又是用來做什麼的?非同步編程如何實現?所以這一步是為了深入學習 Python 的高級特性以及如何編寫出更 Pythonic 的代碼。

- 《Python Cookcook》, David M. Beazley 大神所寫,每一個小節就是一個主題。

- 標準庫文檔:現在可以系統地讀一下各個標準庫的文檔,可以搭配 Python 3 Module of the Week 來學習,不知道怎麼用就 Google,後面加上 example 關鍵字就可以找到用法了。

- 看 PyCon 往期的視頻,每年的 PyCon 都是很好的學習資源,YouTube 上基本都有。

- 看 PEP。


第四步:閱讀各種源碼

其實這個可以在第二步的時候就同步完成,例如學習 Flask 的時候就順便讀了一下 Flask 的源碼,學習某個標準庫的時候也順便把它的源碼看了。還有 GitHub 上很多 Python 的項目可以來閱讀。

- Flask 的源碼很好讀,做 Web 開發強烈建議讀一下;

- 各種標準庫的源碼,不一定要全讀,挑感興趣的看一下就行,學習一下別人的寫法,但是標準庫中有很多代碼不符合 PEP8;

- 初學 Python,有哪些 Pythonic 的源碼推薦閱讀?

- aosabook/500lines 可以照著教程擼一些項目,大部分都是用 Python 寫的。


現在還處在第四步的水平,所以更進階的以後再更新。


真的是零經驗的選手來答一發:

第一個坑:因為在互聯網公司,自然第一時間問公司的技術,都說學習Python很有前途,問怎麼學?推薦廖雪峰老師的博客,說看看就懂了。看這個鏈接:Python教程

然後我是連什麼叫字元串都不清楚的人,堅持看了一段時間之後還是雲里霧裡,最後放棄。

第二個坑:買教學視頻。淘寶上花了十幾塊錢吧,40幾個G的視頻,各種教程,但是看下來還是看不懂,總是卡在莫名奇妙的地方,百度了半天才知道。自學Photoshop和網站建設的我都開始懷疑我自己的學習能力了。

最後老老實實在豆瓣一番比較之後,選擇了《Python編程:從入門到實踐》 [Eric Matthes著]

學習Python一下子變得簡單了,包括介紹給一個毫無基礎的朋友,也同樣覺得很簡單。

書很厚,真的是為毫無變成基礎的人編寫的一本書,最基礎的定義都會講的很清楚,每一個方法都會有清晰的說明和實際的編程案例,而且特別貼心的把未來會遇到的一些注意事項都會在前文簡單提一下。

按照自己的節奏,一個一個方法和函數學習過去就可以,就和玩消消樂一樣,一關一關很輕鬆就能學過去,但是難度其實在慢慢增加。

思考

我後來反思,視頻教學因為需要老師直接用口語表達,很多時候是不夠清晰的。

而且對於學會的人來說很多是常識性的東西壓根不用說,但是對於完全不會的人來說就是一個知識盲區,初學者很容易卡在這些盲區上,導致無法學習下去。

而書籍是經過反覆推敲的內容,內容安排和措辭都考慮的很周全,所以希望零基礎計入一個領域,最好的方法還是把經典的基礎書籍老老實實的讀完,真的是磨刀不費砍柴功。

小結一下

我發現學習編程其實並沒有想像中那麼難,就是和所有工具的學習方法一樣。

1、我的Photoshop也是自學的,Python每一個方法就是Photoshop工具欄上的工具,弄清楚每個方法能做到什,么效果是什麼,這是學習一個工具最基礎的過程。

2、然後函數等一些難一點的就是Photoshop裡面的蒙版啊,曲線啊之類的,需要花點時間理解透徹,是很重要的高階部分。

3、就像Photoshop學完所有工具之後我還是不知道怎麼做圖修圖一樣,所有的工具都需要在實踐中邊做邊學。而且需要了解光和色的原理,設計的原理等等。

4、Python也是一樣,基礎的方法之後掌握了,就去學習別人的代碼,用自己的代碼跑一遍。其實就是快速的學習「套路」,套路真的很重要!

評論裡面有人推薦可以去codewar刷題鞏固基礎知識

5、另外如果有條件有時間,可以在把基礎知識都鞏固之後,選擇線下的課程,直接和老師同學一起學。快速掌握大量成熟的套路,把這項技能學到80分。這樣會節省很多時間,也節省很多精力。

我的打算是先把這本書按照自己的節奏幹掉,然後會找個時間,花1-2個禮拜參加一個培訓,集中時間掌握成熟的討論,省去自己摸索的時間。

P.S.學習過程中不要心急,每一段代碼都記得自己手打一遍,作業認真的做完,其實完全不難。附一份我自己的學習筆記:

我現在也在學習中,等我把這本書學完在回來繼續更細,看我什麼時候學完orz...


當然是一邊心裡抱怨這玩意真彆扭, 一邊改代碼了...


我覺得學python要學以致用,用python做你想做的事。以下是我的python學習歷程:
1、看python簡明教程
2、用python刷leetcode和codeforces
3、寫爬蟲抓某數字網站圖片專區的圖片,用socket發圖片給狼友
4、抓某某熱最新番號,到torrentkitty抓磁力鏈接
5、用python寫智能選股程序,傾家蕩產,被迫做了碼農
6、現在天天用python寫數據處理腳本


from turtle import *


看到樓上 @2gua 瓜哥出沒,我就放心了。其實瓜哥說的很對,這個時候出現這樣的心情,一定是不夠專心,有點兒著急。除此之外,我想介紹下,我是如何引導我零基礎的女朋友走上學習python之路的。

1.由於我和女友現在是寫論文時期,需要很多數據來分析,於是我告訴她(鼓勵),要不要試試用爬蟲來自己爬取數據,這多高大上!她說,我也想,但是我不會編程啊。於是我鼓勵她說,我給你介紹一個非常好入手的編程語言,而且現在由於大數據和機器學習,也是非常熱門的一門語言,python。她說她不知道如何學,我說那就從head first python這本書看起來吧!

2.說實話,hfp這本書中有很多培養興趣但是又不太實用的東西,例如什麼在android上運行調試,我就告訴她直接略過。這樣大約20多天,一個月左右的時間,她把書看完了。但是我一問她,她還是說不清楚什麼是面向對象! 抽象出來的東西她還是搞不太清楚。於是我告訴她,換另一本書《簡明python教程》(極客學院的pdf)再看下類的章節。

3.又經過一個多月,這期間我沒催促她,原因是讓她自己去學習,培養興趣。在與其他同學交流的過程中,她發現別人都不會編程,而她還會一點兒,於是她說有成就感還能解決問題,她要自己學下去

4.說到這裡,我想說的是,關鍵是興趣。例如,你想學習Python到底是為了什麼,是為了解決什麼樣的實際問題,你用它來幹嘛。然後一步一步做下去。這樣就不會亂來。容易堅持下去。

http://5.wiki.jikexueyuan.com/list/python上面有很多python的學習資源。

6.分享一個我的交流QQ群,

http://qm.qq.com/cgi-bin/qm/qr?k=rv2wSy4Un7N9SlxEXTmCunvYJPq-cnca (二維碼自動識別)


第一步:

Python語言程序設計_中國大學MOOC(慕課)

第二步:

Python入門_Python入門教程_python入門視頻教程-慕課網

第三步:

Python的N種玩法_中國大學MOOC(慕課)

python教程_python基礎教程_python視頻教程-慕課網

第四步:

上手自己做---遇到問題 谷歌 百度 各個論壇

假裝我是最後一步:

每天和它約會兩個小時,不久你將成為大神!!!

推薦一些資源(來著這篇博文--http://www.cnblogs.com/leezx/p/6385327.html)

  • Python教程 - 廖雪峰的官方網站
    • http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
  • python初級教程:入門詳解
    • http://www.crifan.com/files/doc/docbook/python_beginner_tutorial/release/html/python_beginner_tutorial.html
  • Python 面向對象(初級篇)
    • http://m.blog.csdn.net/article/details?id=50760467
  • Python | Codecademy
    • https://www.codecademy.com/zh/learn/python
  • Google Python編碼風格
    • http://www.yeolar.com/note/2013/01/10/python-style-guide/
  • Python正則表達式指南
    • http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
  • 《Python學習手冊》
  • 《Python編程金典》

爬取了豆瓣 Python 標籤下所有書籍,為大家推薦一些自學Python的好書!

title = "推薦Python入門的好書"
version = "2.0"
author = "Zhiliao_01"
update_date = "2017-5-18"
commit = "添加源碼地址,修改錯字及標點"

---------2017-5-18-----------

github源碼地址:Alenwang1/Python_Practice

---------2017-5-12-----------

一、 前言

學習一門編程語言最重要的有兩點:

  1. 一本可以幫助你概覽知識框架的好書;
  2. 持續不斷地實踐和總結。

二、 找到一本適合自己的書

在學習編程的初級階段,一本好的入門書籍往往可以讓你打下堅實的基礎,從而提高學習效率,不用往複。

個人能力、精力畢竟是有限的。所以,爬取了豆瓣 Python 標籤下所有的書籍,我們從那些評論數、星數都較高的書籍開始找起,選擇適合我們的 Python 入門書籍。

我有了一些功夫,從400多本 Python 相關書籍中篩選了一些,並按照內容進行了分類,主要包括:

  • Python基礎
  • Python進階
  • Python高階
  • 演算法與數據結構
  • 網路數據採集|爬蟲
  • Web開發
  • 科學計算機器學習
  • 計算機安全

這些分類下的書籍,都是該分類下書籍中經過時間和群眾檢驗過的。但是,他們適合的讀者人群不太相似。比如:介紹 Python 基礎教程的書籍中就有適合孩子看的、適合非計算機專業人群看的和有一定編程基礎人看的。

所以,大家應該根據自己的情況來選擇書籍。為了方便大家更好的選擇,每個書目都對應了豆瓣的鏈接(由於知乎的BUG,目前取消了超鏈接,大家下載Excel表格進行查看吧!),大家可以通過其他網友的評論來自行選擇。有一些是我看過的書籍,我在書目後打了簡略的標籤

Python 書籍內容分類

Python基礎

  • Python編程快速上手 推薦使用
  • Think Python 推薦使用
  • Python基礎教程
  • A Byte of Python
  • Python for Informatics
  • Python編程:從入門到實踐 推薦使用
  • Invent Your Own Computer Games with Python 適合孩童
  • 從Python開始學編程 編程思想
  • Python Tutorial 作者:Python之父
  • 與孩子一起學編程老少咸宜的編程書
  • Python核心編程(第二版)

Python進階

  • Effective Python Pythonic
  • Fluent Python
  • Python Cookbook
  • 編寫高質量代碼:改善Python程序的91個建議

Python高階

  • Python源碼剖析

演算法與數據結構

  • Problem Solving with Algorithms and Data Structures Using Python 在線交互閱讀
  • 網路數據採集|爬蟲
  • Python網路數據採集推薦
  • 用Python寫網路爬蟲

Web開發

  • Flask Web開發:基於Python的Web應用開發實戰 Flask教程
  • The Definitive Guide to Django Django教程

科學計算機器學習

  • 利用Python進行數據分析 Numpypandas
  • 機器學習實戰

安全

  • Python灰帽子

另外,我將 Python 標籤下爬取的400多條書目保存在了EXCEL中,並存在了百度雲盤。大家需要可以自取。

Python_Book_Excel百度雲盤 下載鏈接: Python_book_list

三、 實踐項目

選擇一個剛興趣的方向趕快實踐起來才是正道。這方面可以看看另一個問題

Python 的練手項目有哪些值得推薦? 中的回答。

四、助學工具

在學習Python的時候一些可以幫助你學習的工具也是必不可少的。這裡就要推薦一下我們自己的APP—— 知了學習社 ,可能有廣告的嫌疑。不過,我們的APP確實是在移動端唯一可以用來互動式學習Python的工具(中文)。

特別是工作和課業比較繁忙的同學,在空閑的時間拿出手機就可以系統的學習Python了!

當然,除了Python之外,還有HTMLCSS、JS、經管以及心理學的基礎課程。這些課程也是免費分享給大家的。

APP目前還在第一版的測試階段,可能還存在著諸多不足,希望大家可以參與進來提出更多的建議。一起維護一個知識分享的社區。

如果,你也想分享你自己的知識和技能,也可以在知了學習社上傳自己的課程。謝謝大家!

APP下載地址: 知了APP下載鏈接


我最初學Python是為了給blender寫插件。那時候我已經對Perl很熟悉,C++也用了一年多,所以學習的主要內容是在Python里尋找各種Perl操作的對等物。


雖是碼農,卻從沒在IT公司干過,我是搞生物信息的。我學Python純粹是被逼的,好聽點是工作需要,以下是經驗分享,不做技術討論。

進入生物信息領域,我首先接觸的是perI,其文本處理的能為,特別是強大的正則表達式讓使用c和Fortran語言的我倍感振奮。我用了perⅠ六年做了若干項目,但當我整理以往程序的時侯,我發現我書寫"看不懂"代碼的能力與日俱增了,以往書寫的很多代碼我自己都很難看懂了,常年的perl編程讓我都沒有寫函數的習慣,更別說類了。那時我一直在盼著perl6的誕生,好解決perl的多語言支持等問題,可是遙遙無期。


讀完博士,到新的實驗室做博後。新老闆和師兄們一色用python,我也不得不跟著學。隨著項目的深入,靠著從前人代碼中學習,一個個腳本寫出來,python的可讀性好的特點體現在我能不廢力的讀懂他們的程序。等博後發表論文時,要整理代碼,文件組成的包自然地就打成一體。這讓我深切體會到了Python的優勢。

畢業後到公司工作,看到國內搞生信的人大部分還在學perl,就決定翻譯學習一些為生信學者寫的Python書,先後翻譯了兩本,邊翻邊學,邊學邊用,受益匪淺。後來工作需要又寫過爬蟲,做過網站和應用程序。讓我越來越稀罕Python這個工具了。

實用是最大的動力,實踐是最好的老師,實在說,Python真的不錯。


大一時候要搞各種事情(扒教務網信息/扒線上測試題庫一類)C/C++ 高中給我過心理陰影,幹這種事情也不趁手,然後覺得 Python 好帥,遂下載了個 《Diving into Python》,看了一個多禮拜邊看邊用就會了。


寫Perl整天打$打到要吐,發現Python居然沒這個毛病,於是就入了坑。

結果整天打tab打到要吐……


高三刷題那會兒,比較無聊。偷偷帶了父母給的手機,NOKIA E63 帶全鍵盤的那種。
跑的塞班系統,裝了個python。課間的時候偷偷拿出來寫著玩,不懂的直接查,慢慢就學會了,最後寫了一個梭哈出來。


先學過一年C++後又學了大半年Java之後,然後再來看python。雖然很詭異,但是還是接受了。大不了遇上什麼問題現查就是了


推薦閱讀:

天天寫業務代碼的程序員,怎麼成為技術大牛,開始寫技術代碼?
單身程序狗解決了一個技術難題後沒有妹子可以炫耀或誇一下自己怎麼辦?
你見過的最想笑的,最奇葩的,最逗逼的代碼是什麼?
Microsoft BASIC 源代碼公布,如何評價比爾·蓋茨寫代碼水平?
晚上腦子裡也想著bug,睡不好怎麼辦?

TAG:程序員 | Python | 編程學習 | Python 入門 |