初學python可以閱讀哪些代碼?讀代碼時要做些什麼工作幫助提高?

沒有編程經驗,零基礎

嘗試讀過django,但是感覺沒有上下文讀起來很吃力,總是一頭霧水,怎樣解決?


我覺得LZ沒搞懂 書、文檔、源碼的區別。

書,是用來入門/拔高,大部分書籍都是給初學者一個整體的框架,以及語法基礎,幫你把知識串聯起來

文檔,是在有了一定基礎,隨時翻著看的。(不排除有其他語言經驗的人選擇直接掃文檔)

源碼,是用來拔高。包括了解語法知識,開始了解實際用法、經驗等等

至於你說的django,你在閱讀源碼前,你看過django書籍嗎?你看過django官方的tutorial 1~4了嗎?

所以,樓主你給我的感覺就是學習不踏實,太浮躁。

這是所有學習的忌諱!


(Thank you so much @SusanChul for an awesome translation!)

我實在無法用語言描述我對Codecademy的熱愛,如果你對編碼毫無經驗,亦或者是想要再次溫習提升這一技能,在這個網站中的互動課程可以切實且按部就班地幫助你。

Python | Codecademy

如果你遇到一些問題(卡住了)不知道如何解決,可以點擊疑難解答討論專區(QA Forum)這一標籤,人們會在其中詢問一些常見的問題(比如如何關閉引號)。

Codecademy中的一些課程已經被翻譯成了中文,但是我依然呼籲並期待著是否有人能夠做一個中文版的Codecademy來幫助更多的人!

- - - - -

Python | Codecademy

Man oh man, how I love Codecademy! If you have no experience with code, or just want to review your skills, the interactive lessons take you step-by-step!

If you get stuck, click the "QA Forum" button. People will ask about the common mistakes (such as forgetting to close the quotations marks).Some of the lessons are translated into Chinese, but still, can somebody please make a Chinese Codecademy already!


基於題主的基礎——"沒有編程經驗,零基礎",我覺得題主不太適合看源碼,應該系統性的學習Python。如果題主又想看代碼,又想學Python,我想你可能需要這個Python Cookbook (豆瓣)

Python Cookbook (豆瓣)裡面有很多很有用的code snippet,雖然簡單,但是實用。大部分情況都是先提出一個問題,然後用Python解決。題主可以一邊學Python,一邊看代碼,肯定比你看開源項目源碼爽。

如果題主要看web框架的源碼,不推薦看django,可以看看flask,也可以看看我這篇博客 Flask源碼剖析


手頭有這麼幾本:

1、《簡明 Python 教程》(Swaroop, C. H. 著,沈潔元 譯)

2、《Python入門》(原著 Guido van Rossum,翻譯 李東風)

3、《Python 語言參考手冊》(Guido van Rossum)

4、《深入Python (Dive Into Python)》(Mark Pilgrim著,limodou譯)

5、《Python v3.0c1 documentation》(官方手冊,有中譯)


大一的時候就思考如何讀一份陌生的代碼。最近有一些想法。

從github上獲得原代碼。

看git歷史

拖進source tree,查看提交代碼的歷史更改。

一定要跑起來

想辦法運行。不運行起來的代碼,並不能看懂。

找合適的代碼

找到合適的代碼。如果直接看nginx應該看不懂,如果看一個幾十行的http server,卻是可以看懂的,是可以讓人理解的。最重要的一點是理解代碼的歷史,理解代碼的發展過程,從小到大的過程,理解功能為什麼一步一步的添加。

代碼指紋,聯繫作者

代碼指紋,代碼不是憑空變出來的,寫代碼的人會在博客和書上留下痕迹,留下思路,留下的論文。聯繫方式,其實解決很多疑惑的辦法是直接聯繫作者。

一定要會調試

單步調試,調試列印變數。寫python,寫Objective-C很重要的一點是調試好。

畫UML

UML圖不只是沒用的圖,他們是告訴你代碼如何分析的方面,畫UML類圖。動態圖,靜態圖,類圖,部署圖,用例圖。。。。。。。。

唯物主義辯證法

唯物主義辯證法分析法。聯繫的觀點看代碼,發展的觀點看代碼,矛盾的主要方面的看代碼。詳細見唯物主義辯證法。

仿寫

這個耗費時間比較長。但是照著寫一遍,一步一步是最有益處的。

上班法

學生黨應該找個地方上班去,去找自己想做的東西的公司。

買書

知識比錢知值錢,時間比錢值錢。書可以節約很多時間。


到github上看python開發的項目

https://github.com/languages/Python

選擇哪個項目可以參照以下幾點:

1. watch和fork的次數多

2. 代碼量較少

3. 自己比較感興趣(比如我很少看web和gui的項目)


最早接觸的編程語言是Python(大學開學前的假期自學的MIT公開課),工作中用得最多的也是Python,同時又是職場新人,我覺得我還是可以回答一下這個問題的。

首先,你在什麼都不明白的情況下嘗試去讀Django源代碼,是幾乎沒有什麼效果的,反而適得其反。

學習任何一門編程語言,都應該遵循這麼一個步驟:

0. 從網上教程中學習最基本的syntax,然後寫小程序練手,達到熟練的目的;

1. 學習各種常用的庫的使用。對Python來說,就是常見的sys,os,re,urllib,socket等這類的自帶庫。而像socket這樣的庫,可能還需要你對網路有一個基本的了解,不過既然你都開始看Django了,的確應該去了解一下。在此期間,依舊需要不斷的練習。

2. 在上述兩點做到之後,你應該已經可以獨立完成一份較為複雜,能夠解決一些問題的程序了,例如寫一個爬蟲,一個CLI之類的小工具。那麼接下來,你就可以去研究Django框架,學慣用Python寫一個網站了。

3. 等你熟練掌握Django之後,就可以開始閱讀源代碼了。當然,我不建議初學者上來就研究Django這種大項目的源代碼。可以先挑一些比較簡單的,比如bottle和flask。這兩個web框架屬於典型的小而精,最早的版本可能只有區區500行,閱讀起來毫無壓力,並且能夠對你理解web框架的實現有較大提高。

結合一下我自己的經歷。在開始實習之前,我曾經在一家很小的基金公司當過臨時工,並用Python開發了公司的報表系統,算上前端整個實現大概用了幾千行代碼。因為公司只有兩個dev,老闆又不是技術出身(槽點挺多的一家公司,在此不表),所以code review幾乎是沒有的。我那時候寫的程序,不說編碼風格難看,和Pythonic完全沾不上關係,很多地方都是用近乎於「hack」的手法完成的,不穩定,也沒有什麼擴展性。同時,注釋風格又不統一,很多該有注釋的地方也沒有。那時候的我大概屬於step 2的完成階段左右。

之後開始實習,我才發現 ——— 自己之前寫的Python實在是TM太丑了。於是把公司筆記本帶回家,晚上用公司VPN上bitbucket上的team repository看幾個senior寫的Python,同時閱讀了bottle和requests的源代碼,並將在裡面學到的東西在自己的實習項目里付諸實踐。那也是我成長最快的一個階段。不到這一步,我根本不知道什麼叫「寫出工業級的代碼」。

現在已經工作了,依舊在堅持讀source code,每次讀都能學到新東西。一點個人的經驗之談:讀碼,尤其是Python的碼,主要看三個東西:exception是如何處理的,注釋風格,對edge cases的處理(如果有的話)。這三樣東西對寫出健壯、高效的Python代碼來說至關重要。

這裡推薦一下@7sDream的 https://github.com/7sDream/zhihu-oauth。代碼寫的很驚艷,能夠學到很多東西。如果實在沒時間讀requests的話,一定要抽時間讀讀這個。


零基礎的話我實在不建議你開始就讀源代碼,python基本的語法和很多語法糖都沒有掌握的話看起來會很費勁的,我建議你先把基礎打紮實了吧,具體看什麼書可以參考quora上面的答案:http://www.quora.com/Python-programming-language-1/How-can-I-learn-to-program-in-Python?__snids__=71567478__nsrc__=1


推薦閱讀:

編程之前是否一定要寫好偽代碼?
如何看待程序員不寫注釋?
你見過哪些令你瞠目結舌的Perl代碼技巧?
為什麼有些程序員不願意縮進代碼?
CodeBlock安裝後無法運行為什麼?無法找到編譯器?

TAG:程序員 | Python | 代碼 | 學習方法 |