高級的python 後端程序員, 應該掌握哪些技能點 ?

本人是一個工作經驗有2.5年的python後端程序員。

目前在離職中,因為之前工作存了一點錢,所以暫時不急著找工作,而是想用一兩個月,休整自己,並重新系統學習一次,再去找工作。

所以問題來了 -- 成為一個高級的python 後端程序員,需要掌握哪些技能點?(請詳細到具體關鍵詞,比如RabbitMQ)

=== 這是我本人目前能用的關鍵詞 (不敢說熟練精通,怕被揍): ===

1. 資料庫:MySQL , Redis, MongoDB ( Progress ,Sqlite 也會用,但不多)

2. 運維技能:Docker , Nginx, Apache (主要在Linux 系統,常用Debian 或者 Ubuntu)

3. 後端web框架: Flask , Tornado, Django, Bottle (主要 flask, 看過flask 的源代碼,其他的也能用)

4.前端技能: html, css, js, jquery 等
(Pure.css,Bootstrap ,RequireJs ,Jcrop, CodeMirror, Layerui 等都能用起來, 能自己寫輪播圖)

5. 爬蟲技能:lxml,Scrapy, BeautifulSoup, PyQuery 都能用起來(爬過不少數據(百度 ,淘寶, 天貓,京東, 谷歌,bing, pinterest, instagram 等),也會做分散式爬蟲系統。)

6. 其他:Elasticsearch, Zabbix , chrome 瀏覽器插件等

=======

我對好工作的定義是:不僅僅是解決經濟問題,還可以讓職員和公司雙贏的工作。


我覺得下面幾個點可供你深入

1. Python元編程

可以通過多看一些優秀開源代碼來學習,比如sqlalchemy,gunicorn等

2. Cython

不是CPython解釋器,而是一種用python語法生成C extension的工具,常被用於解決各種性能問題,也常見於各種開源項目

3. C

Python用的多了你會發現,本質上解決更深層的問題,C是逃不了的(比如看一些Python底層庫的實現,源碼分析等)。推薦一本不錯的書《Python源碼剖析》,當然,沒有C基礎你是看不了的,這就是為什麼說C很重要。

4. PEP8

不知道你的Code Style怎麼樣,但作為一個優秀的Python工程師,標準還是要熟悉一下的。這方面也不會花很多時間。

5. Design Pattern以及Python中對應的實現方法

建議找一本Java的書,因為講的最好,建議自己動手寫Python,因為這樣才記得住。

6. 學院派:《編譯原理》《計算機網路》《數據結構與演算法》

當然,很多人認為這些沒有用,我也並不想跟你們爭論。

最後一點私貨:

1. 這一兩個月可以試著刷刷題,脫離IDE,因為很多公司會看白板編程能力。

2. 了解一下社保中斷對你是否有影響,比如落戶、購房、購車等。

3. Gap儘可能短,我相信你不會想去跟HR解釋這段時間幹什麼去了。同時,我建議難得的Gap,陪家人或朋友出去旅個游可能是最佳的選擇。

4. 儘早確定下一份工作,我看過很多像你一樣想法最後荒廢的人,沒有惡意,只是警示一下。


一個正在進化的python後端程序員來答一發:

1、首先python技能需要紮實,可以看看Effective Python

2、對於後端用的框架要熟悉,起碼做到,給出任意需求都能完成/都知道如何完成/有什麼輪子的地步

3、對軟體架構和設計有一定了解,有良好的代碼風格

4、了解軟體工程相關理論

5、了解正規軟體開發相關流程

6、學習常用工具(docker、github、ci之類)

7、學會自己寫一個網站並成功部署到伺服器上

8、學習操作系統相關原理

9、學習unix/linux常用命令和運維方法

10、學習TCP/IP等網路相關知識

11、學習分散式系統

暫時想到這些,想到了再補充。

————————————————————————————————————————

2017年4月12日更新:

評論區有回復說這只是入門級,答主表示確實是的。但是更加深入的內容會因為各個領域和各個行業所需的技能樹不同而有差異,答主也並不是精通各技能的大牛,所以就不在此胡亂作答誤導大家了。

答主感覺做到了這些,很多的接下來的技能點就是系統設計相關的了,比如如何去設計一個大型或者巨型系統,如何提高代碼質量,如何減少bug之類。

做到了這些,之後就只是師父領進門,修行靠個人了。

當然,如果大家有覺得可以補充的技能點,歡迎在評論區提出,答主會儘快補充完整。


講真,其實發展到高階後,決定一個程序員的身價的,可能不僅僅局限於語言了吧。

一.語言篇

@風之小祈

前輩其實已經講得很不錯了。Python 的玩法其實很多,很黑。基本要是不斷的閱讀代碼來提升熟練程度。

在他/她的答案上,我的建議是,閱讀 CPython 代碼,但是可以規避 AST 語法樹生成的部分,主要去針對 Python 的內存管理,垃圾回收,和一些 Features 的實現。同時安利《辣雞回收演算法》一書,可以至少幫助我們去了解目前業界通行的垃圾回收演算法的機制。

同時,建議去熟練掌握 Python C/C++ API ,畢竟越往後走,某些時候,對於單節點性能有要求的場景來說,可能利用 C/C++ 寫 module 會是日常。

二.工具篇

其實我覺得可能還是要對常見開源組件的實現原理做更多的了解吧。比如 zookeeper 中分布一致性演算法,Redis 中的內存管理策略,MySQL 索引的實現等等,不過這些感覺就要和學院派的書配合起來看了,《演算法導論》,《現代操作系統》你值得擁有。

三.白板編程

@風之小祈

前輩說的很吼啊,白板編程賽高吧。常見演算法題,還是要去刷一刷的,一些基礎實現還是要自己裸寫一遍的(比如讓你自己實現一個類似於 Threading.Local 的線程隔離的東西),然後更為好玩的東西,自己還是要思考下,有個實現思路的(比如實現一個ORM)

大致就是這些吧..好了...菜雞不裝逼了,睡覺!


一個高級的Python後端程序員,不在乎你熟悉多少關鍵字。

那些新技術反而不那麼重要,等要用的時候再去學一點都不晚。不用時學了也很快就忘了。真正決定你高度的是那些最基礎的知識。

比如: HTTP協議,Web伺服器、框架都是對HTTP協議的實現。自己寫個簡單的Web Server試試。

再比如:資料庫原理,你使用的MySQL、Oralcle基本原理大相庭徑,了解索引的原理,掌握基本的數據結構和演算法,如 二叉樹、平衡二叉樹、哈希函數等等,分散式原理。

再再比如:程序語言的的垃圾回收機制是什麼樣的,各種回收演算法有什麼區別,為什麼python用引用計算演算法,循環引用怎麼解決的。

再再再比如:掌握一點密碼學的基礎,至少做到HTTPS為什麼安全,每天接觸公鑰私鑰是什麼?

編程語言只是個一個工具,但程序員只掌握一個工具顯然是沒有競爭力的,所以除了深入之外,別讓了廣度的發展。

最後,非要對Python深入理解的話,建議讀一讀《Python源碼剖析》,嘗試自己實現一個Python解釋器看看


高不高級不是看python


那些工具你都使用得差不多了。黃哥建議你該補補這些知識。

Python 可以擼web.py requests的源代碼學習,讀牛逼人的代碼。

1、數據結構和演算法

Problem Solving with Algorithms and Data Structures using PythonProblem Solving with Algorithms and Data Structures using Python

2、軟體工程

3、其它tcp/ip 演算法導論、重構,網路編程等等。


你寫的這些,其實已經很厲害了。而且你能主動看源碼。接下來就是向著架構師邁進的路了,無所謂語言。

「請詳細到具體關鍵詞,比如RabbitMQ「

—— 你為什麼要用rabbitmq?性能是否穩定,文檔是否齊全,後期維護是否容易,團隊學習曲線是否高?項目中是否需要?什麼場景下需要?可否用資料庫或持久化存儲代替?可否用緩存代替?宕機如何容錯?如何重複獲取隊列?如何解決分布的一致性?

如果讓我面試我就會這麼問。哈哈,其實你比我厲害


首先,自認為自己是高級程序員是沒有意義的。只有別人認為你是高級程序員你才是高級程序員。極端一點,你什麼都會了,別人認為你是垃圾,那你就是垃圾,你什麼都不會,別人認為你是高級程序員,那你就是高級程序員。

知道的比別人更多並不是更好的選擇,除非你已經到了融會貫通的程度。不然別人就問一些在你看來細枝末節根本不重要的東西,你還不如整天就只看看網上的面試題的人答的好。就好像十年前,都要你會用什麼LVS,LVS當然是個好東西,但是你跟他們說沒必要用什麼LVS,x86上有了IOMMU之後,也是可以直接在用戶態進程里直接mmap網卡對應的PCI內存區域的,這麼做代碼熱更新也方便,他們肯定當你是痴人說夢。

我認為成為高級程序員最重要的是有蜜汁自信。你不看看那個啥都不懂,連工作都找不到的不擼兔子,一天連50行C++都寫不出來,就敢黑有成百上千萬行C++代碼經驗的,一天隨便寫寫就不止500行C++的輪子哥。雖然黑他的人不少,可是還是有人捧啊。整天就只會抱怨什麼學歷歧視。他那點三腳貓的水平,根本就沒資格抱怨學歷歧視。比如關於Python,他就只會吹吹什麼用END_FINALLY實現GOSUB之類的東西。坦率的說,我司是有一點學歷歧視的,但是即便如此,也有好幾位Python程序員學歷不怎麼樣的,有專科的,有高中輟學的,有報個培訓班就轉行過來的,基礎不知道比他紮實到哪裡去了,給一段簡單的RPython的代碼,要求寫出把一個變數分別設置為red variable和green variable,JIT編譯後的彙編代碼分別是什麼,都能在15分鐘內完成啊。什麼七歲小朋友比他寫完代碼就覺得是值得大書特書的經歷。他就只會用用現成的isl庫,我們這附近的幼兒園小朋友個個都比他會的多,一個星期就能寫出GPU加速的isl。他根本就做不出全新的東西,只知道東抄抄西抄抄,抄還抄不像樣,在知乎上不照樣能騙上百的贊。還好知乎及時把他封號了,不然任由他繼續吹,遲早會有人上當,給他工作機會的。


分散式 rpc zookeeper elk kafka


高級後面不該帶語言吧。高級應該是基於設計來講的,而設計是跟語言無關的,最終還是根據設計和以及設計需要用到的開源環境來


學造輪子,然後造更高級的輪子。


推薦閱讀:

美拍為什麼這麼火?
什麼叫做"有網感"?
如何理解「客戶」與「用戶」的區別?
如何評價李佳佳主持的《佳訪》這檔訪談節目?
如何利用android手機遠程控制另一個android手機?

TAG:Web開發 | 互聯網 | 程序員 | Python | 後端技術 |