學 Python 發現學一門編程語言很難,有哪些學好編程的方法或技巧?


1.快速入門

《Dive Into Python http://woodpecker.org.cn/diveintopython/》

這個教程是快速入門的典範,記得入職第一天主管就讓我看這本教程,兩周的時間看完,能掌握Python基本的語法。如果你需要更加哈皮些,可以嘗試《Head First Python(中文版)》

2.進階入門

《Python核心編程2》,這本書分基礎和高級兩部分,最重要的就是紮實基礎,去年買的這本書,已讀不下三遍,每遍都是新的感受和總結。然後在進階Python高級部分,如正則,多線程,多進程,網路編程等。

3.實戰部分

在學習過程中,光看書是不夠的,實戰最重要,所謂學以致用,如在《Python核心編程2》中課後練習題/學一些小腳本/等,這裡提供幾個站點,用於Python腳本實例的學習:

(1). 代碼分享列表 -- Python

(2). python代碼庫

(3). https://searchcode.com/

(4). github最佳選擇,多search一些相關項目,看看人家的代碼,抄輪子!!

4.高階入門

Python高級部分的學習可參考《Python核心編程2》,不夠這些是遠遠不夠的。我們可以從以下書籍中汲取新知:

(1).《編寫高質量代碼:改善Python程序的91個建議》

(2).《深入理解python》

5.Python庫的學習

學習Python 常用的標準庫以及第三方庫,具體可以參考這裡Python 常用的標準庫以及第三方庫有哪些?

網上熱售的《Python標準庫》個人建議最好不要買,去年入手一本,翻來看看讓人後悔。這些知識Python官方文檔已詳盡,其該書翻譯的』差強人意『。

6.網站推薦學習

(1). 學習Python編程的11個資源 (這裡著重推薦:Online Python Tutor:Python 初學者的好幫手,通過這個工具,教師或學生可以直接在 Web 瀏覽器中編寫 Python 代碼,並一步一步可視化地執行程序。Online Python Tutor)

(2).Python - 標籤 (Cnblog 網友Vamei 的Python總結)

(3). Python - 中國Zope用戶組

(4).PyZh — 一起寫Python文章,一起看Python文章

7.應用開發

  • 網站開發-- Django,flask, tornado。(文檔都比較齊全)

  • 遊戲開發 --PyGame

  • 圖形界面開發

  • 伺服器開發

  • 大數據(目前較 )《Python自然語言處理》,《利用Python進行數據分析》

這些在學習的過程中會慢慢接觸,比較推薦Django。對於API開發,比較青睞非同步網路框架tornado,對於小而美的web服務推薦flask更加pythonic.

Python學習道路平坦且遙遠,我一直在探索的道路上,一步一個腳印地去詮釋Python之美……

更新於2015/12/21

回想起來,從2013年初到現在,關於python的學習一直沒中斷,這裡再推薦一些書籍或方法。

鞏固類:《Python學習手冊(第4版)》床頭,案頭,枕頭都可必備之,基本涵蓋python相關基礎知識,對於鞏固學習是不錯之選。

python3:《Dive Into Python 3》或者看看 @廖雪峰 前輩的python3教程 Python教程 - 廖雪峰的官方網站

進階類:《Python Cookbook 中文版,第 3 版》,《Python高級編程》,還有一本法國人寫的《Python高手之路》

在進行python伺服器開發,總逃不過網路編程這個字眼,個人推薦書籍如下:

  • 《UNIX網路編程 : 第1卷:套介面API(第3版)》

  • 《Python網路編程基礎 : 使用Python構建網路程序的綜合指南》

  • 《Linux高性能伺服器編程》

個人覺得環境很重要,一個了良好的公司環境和開發環境能讓你事半功倍,多和同行交流(除了同事,大牛外,還有github, 知乎,stackoverflow等平台),切勿閉門造車。


首先我想說的是,對於想學好的編程的人來說,無論從哪一門語言開始入手,語言的本身其實並不是我們最應該的關心的,至少不是作為一個初學者首先關心的。也可以說開始讓你覺得困難的地方不一定是語言的本身(如語法syntax等),而是整個編程的思想和編程的結構。事實上你所學習的python語言的語法和操作方面,比起c/c++和java等語言來說呢,算是對於初學編程的人來說相對比較簡單的入門的了。

在學習編程之前,你的理解什麼是編程為什麼我們需要編程?了解好了我們要學習的對象我們才能知道從哪個方面下手把它學好。至於我自己的理解呢,狹義上編程其實就是對於不同語言寫出不同的代碼(什麼是編程?),而編程的目的就是通過編程語言來和計算機交流並且操控它為我們工作,實現我們需要的東西(演算法algorithm等)(為什麼我們需要編程?)。然而具體根據我們需要實現什麼來選擇編程語言,比如對於安卓來說,就是java,xml等,對於ios來說,就是object c之類的。因此正如我之前所描述的那樣,編程語言是為我們與計算機交流所服務的,就像我們學習世界上某個國家的語言是為了與某個國家的人交流,而不是為了學某種語言而學習某種語言的,語言不是我們學習編程的最終目的,恰恰是開始!

在了解了我們為什麼要需要編程以後呢,我們再來討論下該如何把它學好。其實編程的入門呢,應該是一個學習編程思想,深入理解什麼是編程的一個過程。而至於選擇什麼語言呢最開始其實並不是那麼重要,甚至可以運用偽代碼來學習,但是為了方便初學者學習,能實際實現的語言更加能夠讓初學者理解編程。這也就是說為什麼大多數學校(至少是大多數美國computer science(計算機科學)本科)的第一門課叫做intro to computer science with XXX language(用XXX語言實現的計算機科學入門)。再次不厭其煩的聲明,這裡的with也是說明了後面的xxx語言是為了輔助我們學習計算機科學入門的工具,計算機科學入門才是我們的重點,而不是叫XXX語言課。這裡也不得不吐槽,一些國內的計算機培訓機構為了能迅速培養程序員而專門鼓吹某某語言強,而只專註於培養學生編程語言學習的本身。這樣培養出來的只能是仿照他人的程序調用者,而不是自己曾經希望的計算機科學工作者。

好了,說了這麼多大話,下面來一些乾貨,讓你對計算機科學入門能夠快一點。

計算機科學入門的第一課除了我之前說的那些為什麼要學編程,什麼是編程的一些理論話以外,第一個實際的東西就是所有程序員都知道的Hello World(至少對於大多數情況下來說)。

在python中就是: print "Hello, World!"

在java就是:public class ClassName {

public static void main(String [] args) {

System.out.print("Hello, World!");

}

}

在c++就是: #include&

int main{

std::cout &<&< "Hello, World!";

return 0;

}

這三個呢其實表示的都是同一個意思,就是通過系統輸出string(一串字元串)

有輸出就有輸入,比如input() (python), cin(c++)等。輸入與輸出是幾乎每一個編程語言都具備的,也是人與計算機交流最基礎的手段之一

然後一般就會開始介紹數據類型(data type),比如int,double,long,boolean等(在python中相對簡單,因為在定義變數(variable)的時候系統能夠自動識別對變數的初始化值或者賦值值的數據類型)。這裡要強調雖然數據類型看起來很簡單,但是我們知道無論人與人交流還是人與計算機交流,信息的交換是最基礎的目的,而在計算機科學中信息的交換基於數據的交換,所以數據對於計算機科學十分重要。而隨著今後的學習,要逐漸掌握並熟練運用各數據類型,明確什麼時候運用什麼數據類型等。甚至今後還會學到抽象數據類型(abstract data type)。

緊接著就是學習一些判斷語句(if/else語句,switch語句等)和循環語句(while循環, for循環, do while循環等),這裡面呢涉及一個十分重要的數據類型(boolean布爾值),簡單地就是對和錯(truefalse)。雖然boolean的基本概念很好理解,但是boolean是布爾代數的基礎。基礎的布爾代數在離散數學中有所涉及,所以這裡強調一點,對於計算機科學學生或者想學好計算機來說,數學十分重要,尤其是離散數學。不像很多大學或者培訓機構對數學的淡漠態度,相反他們應該重視數學思想在計算機學習中的培養。離散數學是計算機科學的基礎,微積分線性代數等是離散數學的基礎,所以大學中所安排的數學課程不應該受到學生和老師的忽視。在今後無論是數據結構還是演算法的學習中,數學的基礎都能很好的幫助你學習好計算機科學。

隨後就是學習函數(function)的概念。函數本質上就是將我們與計算機交流和操作的過程抽象形成方便我們多次使用的一種方法,所以函數在編程中也叫方法(method)。可以使我們在做相同類型的操作的時候,能夠有一個類似的方法來解決,而不是每次都重複輸入大量的類似內容。在計算機科學中,化繁為簡是一個很好的習慣,而函數正是幫助我們簡化程序的一個基礎。函數通常由返回類型或者函數的數據類型(我們希望通過函數獲得的),參數我們給予函數所需的),和函數的主體函數是如何運作的)。函數也恰好體現了人與計算機交流的一種途徑,人給予函數參數,函數給予我們返回值(或者有時函數是void類型,也就是不返回任何值,但是void通常也是會完成我們需要的特定操作),也恰好是信息交換的一種方法。

在學習c++的時候還會涉及到指針(pointer)這個概念,這是在c++中一個很重要的概念,也以後需要注意的東西,等你自己學到就會明白。

在學習完我之前所提及的那些(雖然我沒有全部詳細涉及)比較基礎的計算機編程的概念後,你就會涉及OOP(object-oriented programming 面向對象的編程)在高級編程語言中大量涉及甚至是基礎,也是今後的編程趨勢。實際上只運用之前所講的東西進行編程的話,可以狹義的成為面向過程的編程。實際上OOP是在函數之後,又一個簡化我們編程的一種手段,我們將事情更加抽象但更加方便。通過定義我們自己的數據類型, 建立對象(object)來實現對數據的管理和操作。通過對象來和計算機進行深入和有目的性的交流。面向對象編程的三大核心(重要但不僅限於):封裝(encapsulation),繼承(inheritance),多態(polymorphism)。封裝就是把我們定義的數據類型組裝成一個整體,從而形成一個個可用的對象(有點像工廠流水線上的模具),繼承就是獲得某個或某些父類的一些特性在新的子類中運用(就如同子女從父母身上遺傳的一些特性),多態就是實現我們所規定的一些抽象的可以運用或者重新定義的方法(簡而言之就是一個事物可以在不同對象身上呈現的多種狀態)。

面向對象編程不僅簡化方便了我們的編程,同時保護了數據在交換過程中的隱私。類似private的,只能是自己對象才能知道和擁有(就如同自己的錢包只能自己掌控一樣),類似public的,可以展示在main函數(主函數)中為其他數據所用。由此清晰地界定了數據的使用界限,也是編程歷史上具有劃時代意義的一個進步。

說了這麼多,只是簡單的描述了計算機的入門脈絡,在以後還會學到數據結構(如何管理我們的數據),以及演算法等等。希望能對你有所幫助。

至於技巧,我覺得最重要的就是你學習編程的方法,也就是我反覆強調的,不僅僅專註於編程語言的本身,而是要隨著深入地學習,不斷掌握和理解編程的主要思想。

推薦些網站給你:

python學習網站: http://www.codecademy.com/

計算機科學入門課程:CS 61A Fall 2013: Structure and Interpretation of Computer Programs

這是加州大學伯克利分校的入門課程,開始是用python教的。


我一直反對Python作為第一門語言。

Python對有基本的程序概念的人來說很簡單,但對於新手來說真不一定算簡單。

(我說的新手,是一點點c都沒學過的,你們很多人,其實在本科是學過c的,只是你沒學會而已,但是很多東西是有概念的。)

寫起來簡單不代表概念簡單,很多我們認為理所當然的概念,一個完全沒有基礎的新手是很難理解的。比如動態類型和duck typing,很可能一個新手連數據類型概念都沒建立啊。比如自省,新手會有概念么?沒有編程經驗和數據結構概念的話會不會很難理解列表和列表解析為什麼重要、字典有什麼用?還有lambda,高階函數,generator和Python的那一套OO機制等等?

我還是覺得,入門就兩條路:一是彙編+C或Pascal之類的;二是SICP(scheme)。這兩條路,一條從計算機入門,一條從數學概念入門,踏踏實實把基礎打好,入了門之後再考慮其他的。

嗯哼~


如果你會一門編程語言。學習PYTHON幾個小時就可以拿來用了。

如果你零基礎,對編程沒概念。那麼你可能需要3~6個月才能理解什麼是編程。

對於非英語國家來說,理解編程要花更多的時間。因為編程本質上就是描述。但是非英語國家看著一堆抽象的英語字元把編程大大的神秘化了。


頂樓推薦的《dive into python》是一本很糟糕的書,時至今日,此書對初學者或其他語言程序員都已無幫助

此書成書於10年前,很多內容已經過時(當然這不是重點)

重點是這本書根本沒有為編程新手考慮過。例如本書第一個程序如下,我就不知道作者在想什麼了,反正當初我看到後就崩潰了(當然啦,人家說了是為有經驗的程序員編寫的

def buildConnectionString(params):
"""Build a connection string from a dictionary of parameters.

Returns string."""
return ";".join(["%s=%s" % (k, v) for k, v in params.items()])

if __name__ == "__main__":
myParams = {"server":"mpilgrim",
"database":"master",
"uid":"sa",
"pwd":"secret"
}
print buildConnectionString(myParams)

我真的很難想像有人能用這本書入門。

我認為面向新手比較好的書有:

《笨辦法學python》

《和孩子一起學編程》

《可愛的 Python》

歡迎補充


python還嫌難的話,你乾脆放棄吧。

如果想繼續學,入門教材很重要,這個不錯

Python 入門指南

深入 Python :Dive Into Python 中文版。


你具體覺得什麼地方難?貼出來看看,聽聽別人的建議。這樣不就容易了?


正確答案不是找個大神手把手教么…


對不起我來晚了,我第一次接觸 Python 的時候也沒覺得編程簡單。

除了大學用 C 寫過作業,Python 應該算是我接觸的第一門語言了,當時在某一家在知乎上很火的公司實習,我不說名字了,以防口水。我記得當時寫代碼覺得很困難,完全不知道怎麼下手。我估計你現在的情況跟我當時類似。然後我用了一個笨辦法,這個方法或許對初次接觸編程的人有幫助:

找一些有完整功能的代碼,把跑起來實現這個功能,然後給代碼裡面看不懂的內容插資料也好看書也好,在代碼裡面加上注釋。嗯,這樣你給幾個項目加上注釋之後,應該也就知道怎麼寫了。


同意@蕭井陌列出的書單

這本書說是給兒童設計的,所以內容比較生動。非常非常非常簡單易懂 不用花太長時間就能看下來一遍。而且裡面的例子也很有趣,不像別的書籍裡面就是單純的input一行行代碼,結果output一行行文字。

import一個easygui,初學者分分鐘做個圖形界面出來,對於初學python,成就感!!

這個系列的書也不錯,HeadFirst系列,感覺內容形式上都是很活潑生動的,適合初學者。

還有就是很多人推薦的Learn Python The Hard Way.從頭到尾把上面的任務自己來一遍也算能入個門了。

記得加州伯克利大學把他的 SICP課程(Structure and Interpretation of Computer Programs, SICP《計算機程序的構造和解釋》)由原來的Scheme改成了Python。作為美國大學生入學的基礎課程,看看那個也不錯。


如果題主真的對計算機學科一竅不通,但又想學編程的話,我先推薦個遊戲, http://www.playcodemonkey.com

這個遊戲讓你寫程序操作一個小猴子拿香蕉。它可以讓你在對計算機本身完全不了解的前提下先知道編程,面向對象,分支,循環,函數是怎麼回事。很神奇。

大概明白了讓後你要放棄猴子而轉到電腦上編程。

電腦是複雜的,什麼硅的電子特性,三極體,與非門,狀態機,加法器,寄存器,存儲器,cpu,內存,匯流排,硬體介面,編碼,這些你都得學過來。起碼我是這麼學過來的。我還用cpld做過簡易cpu這才徹底明白cpu的工作原理。

但是我想說,其實你沒必要搞清楚猴子的生理構造就能編程(如果你已經通關了的話)。神經元,血管,腦細胞,骨骼,內臟,大腦,皮膚,哪個你也沒搞清,但是你能編程!

電腦不是由一大坨硅隨便堆成的,而是抽象度由低到高有邏輯地組合而成的。比如一大堆門器件放在一起能運算能取指令時,他就是一個cpu,抽象度就上了一層,你用cpu的時候腦子裡就不用琢磨與非門了。你現在每個抽象度上,就能編符合那個抽象度的程,就能調動那個抽象度的資源。只有當你覺得那個抽象度的資源不夠用,不好用你想改進時,才需要下降一個抽象度。

純初學可以學學excel的vbs。非常弱但很實用,很直觀,立刻可以搞清楚自己在幹什麼。而且。。。還可以給公司里那些整天對著excel的小mm們寫點腳本簡化她們的工作,博得一些好感呵呵。

非要學python的話,可以參考其他答案里推薦的書。


請放棄,一個東西的難度就是用來擋住不符合規格的人的。連py都覺得難不太適合在業界混。


這語言入手最簡單了。。。

多打幾行代碼,留上手了(離會還很遠)


從SICP開始學起,這會讓你更好的理解大學中的一些數學課程,甚至對統計產生興趣....

然後你就可以丟掉Python了


求大家別推薦那些心靈雞湯一樣的書好嗎?大家拍著胸脯說,那些書真的更有利於主學會編程嗎?

題主說 Python 難,大家也不想想他為什麼覺得Python 難。他有可能是覺得 Python 語法難嗎?那不是違反常識嗎?

明顯是題主在編程的時候沒明白自己到底在做什麼。

建議題主買本小冊子,學學 C 語言。真心的。花同樣的時間學習 C 語言並不能讓你更快的做出軟體來,但是能更快的讓你了解你到底實在幹嘛。我也是半路出家學編程的,我很理解跟我一樣半路出家學編程的人最終沒學到能靠寫代碼上班的程度,不是因為智商低也不是因為記性差,而是他們沒有辦法吧代碼和現實中計算機里發生的事情對應起來。很多書籍對這種情況的解決方法是想當然的,他們認為介面封裝的越高級,語言設計的越「自然」,就越有利於學習。但實際上是,越高級的介面和語言,越有利於用戶藉由這些學習更複雜的知識,但並不有利於學習編程本身。

尤其是現在的高級語言,越是用起來簡單的,越是混合了面向對象,模板,函數式編程等高級的編程模型。這些東西往往和最基礎的東西混雜在同一本教科書里,讓新手更是一頭霧水。

題主你就去買本《The C Program Language》或者別的也行,認識一下內存和CPU,理解一下變數和變數類型是什麼,if 是怎麼回事,C語言代碼是在說什麼,編譯又是把什麼變成什麼。這些東西能給你一個整體的把握,再回頭看 Python 至少感覺上不會看一頁半頁不知道在說什麼了。當你用 C 語言寫過幾行代碼之後,你就能了解為啥會有 Python,它簡單在哪兒,為了這個簡單,它引入了什麼概念。

以及,先別管什麼面向對象,其實大部分程序員也說不明白那是個什麼。

我原來有個同事,做生產的,業餘比較愛好編程,他們部門裡內部使用的小工具都是他用 VB6 寫的。還被借調到研發來參與開發過 MIS 系統。那時候我是實習生,他其實水平比我高。有一次他要考什麼證書,有天跑來問我什麼是指針的指針……我以為他消遣我,沒想到是真不知道。

另一位前同事大哥,據說本科學軟開的,做過 java,做過.net,據說還 web,跑我們部門來寫 C++,有次出差調 bug 調到後半夜了都,我尋思著幫前輩看看問題唄,然後就赫然看到這位老人家在代碼里把 mutex 建在堆棧上想用來鎖函數……你說他不能幹嗎?挺能幹的。你說他外行?也不能算外行。但是……有些事情就是這樣,你最開始沒搞明白你在幹什麼,時間越久,麻煩就越多。


「簡明python教程」是新手入門最快的。這是一本在線文檔。為什麼適合新手,因為它把python的核心feature都講啦,但是很簡潔,一早晨就能看完。拿它入門python沒錯滴!


我推薦你在google搜索一下 「15112 cmu」 網站左邊是內容,右邊是quiz和作業,每次花四十分鐘看一節,然後花三到四小時好好做完旁邊的題目。這樣做到三次作業以上就能很快入門,我個人覺得編程入門沒有什麼太難,就是多練多寫


從c語言學,我就是學python不知所云,於是改學c,現在c學的差不多,在看python感覺就像失明的人又能看清東西了一樣。


我的學編程之路:計算機基本原理的了解,c語言,結合c語言加深對計算機原理和程序的理解,然後再學其他語言。python的列表名在直覺上處處代表了那個列表,而實際上,python的列表名是一個指針,用列表的指針給人的感覺是代表了列表。指針在python中,無處不在。要理解指針,沒有計算機內存原理和c的基礎,是很難的。

因此,根據我的親身0基礎學編程的路,我給上面推薦以c入門的答案都點了贊


python是最簡單的。其實c更簡單。c++和java是天書沒錯了(負擔太大,不適合入門)。


推薦閱讀:

Matlab, R, Python關於向量化計算和for循環的速度比較?
python中的漢諾塔遞歸演算法的具體運算過程是怎樣的?
Python 里為什麼函數可以返回一個函數內部定義的函數?
為何大量設計模式在動態語言中不適用?
python如何繪製一個橫坐標為字元串,縱坐標為數字的折線圖?

TAG:Python | 編程學習 |