一個合格的 Python 程序員應該具備怎樣的基本能力?包括哪些具體方面?

如題


一百多人關注這個問題,沒有一個人來回答。給了我一個拋磚引玉的機會。

首先一個合格的 Python 程序員是一個很模糊的概念,並沒有一個量化的標準可以檢測每個人的技能水平,每個人對於合格的定義也不一樣,我自己心裏面也沒有對合格有一個準確的標準。我大概說下自己對於 Python 技能成長的階段吧,因為是從創宇出來的,所以其實也是拾人牙慧,從老楊那邊偷來的。

0. 聽說過 Python。

聽說過 Python 這門語言,知道哪些公司(Google,Dropbox,Douban)在用他,可以用 Python 做哪些東西(Web開發,科學計算,日誌處理,平時的腳本)。

1. 用過 Python

使用 Python 寫過一些簡單的東西,比如寫一個簡單爬蟲,爬取自己想聽的音樂。

大概的標準就是寫過一些小工具,但是對於 Python 還不是特別熟悉,參考文檔能寫寫東西。

2. 會用 Python

對一個項目,能夠用 Python 快速完成,在上一個(用過 Python)基礎上,使用 Python 的次數有一個增加,可以說成是會用 Python。

對於 Python 的常用庫都有一定的了解,對於 Python 的一些缺陷能夠了解並且避免。比如被人詬病的多線程,在什麼情景下可以使用 Python 的多線程?

比如列表的性能開銷略大,有些時候可以用數組來代替?

比如操作dict 的時候盡量用迭代器?

3. 熟悉 Python

熟悉 Python,了解 Python 的缺陷,並且知道為什麼有這種缺陷。

熟悉 Python 大概就是在`會用 Python` 的基礎上,不僅僅是 `know how`,還要 `know why`。

對 Python 的運行機制更加了解,為什麼 CPython 被人說慢,而 PyPy 更快?

為什麼使用 list 對內存開銷那麼大?

了解 Python 的內存管理以及垃圾回收的細節?

4. 精通 Python

接觸的人中,我認為可以說是精通 Python 的真是少之又少。Q.yuhen 算是一個。

所以這一部分沒法寫,我得等我敢跟人吹牛說自己精通 Python 的時候,再回來補充一下什麼叫精通。

先寫到這裡,要幹活了。

按照上面說的達到
會用 Python 大概可以稱之為一個合格的 Python 程序員。

-----------------------------------------------------------------------------------------

到家之後給貓洗了個澡,太殘忍了。

上面列出的僅僅是對於 Python 的進階,但是在正常的工作過程中,僅僅專註於一門編程語言而不了解其他的東西,很難完成日常的工作,所以一個合格的 Python 程序員,除了在對於 Python 的了解比其他的要更好之外,還需要掌握其他的技術:

  • 操作系統
  • TCP/IP 等網路協議知識
  • 資料庫
  • 演算法
  • 等等等等

上面羅列出來僅僅是我想到,覺得自己需要去完善的知識面,至於一個 Python 是不是要全部了解,我也不能給出合理的說法,畢竟每個人的工作場景不同。還是希望有前輩或者後浪,來給出一個精彩的答案。


python應用這麼廣,每個領域都要求不一樣。對於數據挖掘、機器學習這塊,pandas、numpy這麼優秀的文檔至少要讀過幾遍,groupby、apply、merge總要會用,處理數據的時候能少寫多少個for。進一步,sklearn的文檔寫的圖文並茂,讀起來通俗易懂(統計藍,表示R的文檔看的我心傷~)。說這些都沒啥用,趕緊做個東西,入坑先。


The Hitchhiker』s Guide to Python!


能完成任務,能完成需求,能提出解決方案並實現完成,這個是一個程序員應該具備的基本能力

Python程序員也不能例外


給你一個通用性的參考。

首先是硬知識:


語言應用要熟練,特別是調試和排錯。這是寫代碼的基礎。


類庫的選擇和可用性判斷要有經驗,這是加速開發,偷懶的關鍵。


OS相關的文件系統,UI知識要熟悉,這是做UI和部署等基礎。


網路相關知識要精通,現在大部分軟體都和網路有關,不懂不行。

接著就是團隊合作,學習能力這些軟實力了。


高大上的東西,留給別人說吧,我就說幾個小點吧。

  1. 不這麼寫:

    from xxx import *

  2. 多用iterator、generator
  3. 會用 List Comprehensions,但是不濫用
  4. 會用Virtualenv
  5. 會用pip
  6. PEP8

(有空再補充)


用Python通關(或暫時通關)幾個OJ,絕對是精通使用Python的最快路徑.

逼著你去竭盡全力優化代碼效率,完善程序結構,無盡的NA嘗試可以讓你把python的內部原理都猜個八九不離十

另一方面,OJ可以把Python運行效率低下的缺點暴露出來,比如同樣一個沒經過優化的演算法,用C/C++,可以在700ms內跑完通過OJ,但如果是Python來做會需要更多的時間比如5s,於是超時TLE,Python不得不尋求更快的演算法來AC,所以用Python也是提高演算法水平的最好選擇。由於人的惰性,用C的普通演算法過了OJ就不去考慮優化和改進原先的演算法,這樣會就錯失很多提升演算法水平的機會。


一眼看出行縮進值


最起碼要有一把尺子……


推薦閱讀:

C++ 有哪些缺點?
if嵌套的代碼風格哪種好?
你有哪些想要分享的 PyCharm 使用技巧?
你見過哪些令你瞠目結舌的 Python 代碼技巧?
Windows 的 file handle 為什麼譯為「文件句柄」?

TAG:程序員 | Python | 編程 | 計算機 | 信息技術IT |