Python工程師進階之道

這是the5fire總結出來的Python程序員或者程序員的進階之道——零到入門,入門到初級,初級到中級,中級到高級。僅供參考

前言

上次在群里有同學又在問基礎的問題,我不反感基礎問題,就是比較反感不動腦子就貼圖出來求解答的問題。有時我乾脆不說話,有時我會給個地方讓他去搜索。前兩天突然冒出個想法,始終有一部分人會花費大量時間在低水平的重複上,得不到進階的法門。於是我冒出一句:「Python進階最簡單的方式:搞清楚你所寫代碼文件的每一行,每一個字元的意義。」

相對於推薦幾本進階的書籍(Python基礎看完了?來兩本進階書)來說,能夠自行且有效的去找「食物」是更為重要的事情。

理論

在the5fire剛來北京,還是一個人住的時候,每次搬家到一個新的地方,都會在下班之後或者周末的時候,徒步把周圍轉上一轉(溜達溜達)。然後看看地圖。對自己所在的方位有一個大概的印象。有時候一轉就是幾個小時。溜達的目的很簡單,我需要了解我周圍的生活設施,環境,各種方位的路線。另外還有一個點就是滿足我的好奇心,那些未知的地點和環境,總比已知的來的有趣。

現在我就在想,如果把這個類比到Python的學習中或者任何語言/技能的學習中,是不是合理。

拿Python來說,假設我是個新手。剛看了《Python基礎編程》或者任何其他的基礎書籍,然後能把書上的代碼敲下來(注意!是敲下來,不是找個地方copy下來),運行了一下,發現能輸出結果,跟書上一樣。那麼ok,這本書你熟悉的書就是你的「新家」,首先要做的事是熟悉你的「新家」。the5fire在很多文章中都說過,基礎的書籍看完一本,然後就做練習,寫代碼。再看其他的基礎書籍是無益的。所有的練習都是為了讓你掌握書中的知識,掌握書上提到的,只是剛開始。

比方說,書上說了,敲下如下代碼到hello.py文件中,然後python hello.py,得到正確的輸出,說明你熟悉了print用法了。

# coding:utf-8nprint(u你好世界)n

然後你開始看下一章。練習for循環的使用,輸出10此「你好世界」:

for i in range(10):n print(u你好世界)n

報錯了。然後截圖貼群里。迎接你的可能是石沉大海。對比下來你可能會發現只是少了第一行的# coding:utf-8,那麼,這是為什麼呢?

實際上,在寫多個代碼的時候,我們應該意識到自己在寫的是什麼東西,我們往某個文件里寫上一些文字/字元,然後用python <文件名>,剛好能跑,好巧!那我再寫下一個文件,剛好出錯。

所以我說:進階最簡單的方式,就是搞明白你寫的每個字元的意義/作用。那怕只是一個helloworld.py,你搞明白這一些後,會比那些已經學到了文件操作部分的人更了解Python,並且在後面會踩更少的坑。

好了,the5fire來總結下理論部分:從熟悉的地方中找到陌生的東西,然後搞懂,慢慢往外延伸,可能會比較吃力,但是哪有好走的捷徑?

下面分階段來說下

the5fire根據自己經驗總結,僅供參考

這裡只說初學者和工作一兩年的同學

初學者

初學者指剛看了些語法,讓程序碰巧可以跑起來的那些人。看了一些書,寫了一些程序,但是實際經驗缺乏。

對於這個階段的同學來說,最好的進階之道就是自己仔細review下你寫的所有項目,找出一個覺得比較有意思的,研究透。比方說那本基礎教程中的十個例子(其中有一些比較老,可以忽略),把所有涉及的內容都看下,還是那句話,了解作者/你自己寫的每行代碼的含義,之後嘗試把項目擴展,看能不能讓別人使用。

這個時候,你會開始考慮,怎麼合理的把代碼打包,然後發給室友或者朋友,讓你的代碼跑在他們的機器上?你可能會去搜索:如何打包python項目,或者如何把python項目打包成exe(如果你用windows的話,當然,我是不建議一直在windows學Python的,這樣會找不到工作的)。

搞定打包之後,室友說你這個程序太垃圾,一運行就掛。這時你可能會想「我要怎麼記錄程序運行到哪了掛了呢」,你會找到logging模塊的使用方法。

以此類推吧。你知識的邊界僅僅通過一個項目就可以擴展的很大,大到能夠滿足你去找一份工作。

初級工程師

工作一兩年的同學,暫且定為初級工程師吧。當然,我了解的實際情況是,始終會有人即便工作(正式使用Python討飯吃)時間不長,在意識上也能夠領先那些工作多年的人很多。人跟人的情況還是不同的。

這個階段的同學,在生產環境中用了Python很久了,熟悉每天的日常工作。每天都想搞點事情出來,然後在github上賺star。(好吧,我承認我是在說我自己)。

初級工程師的工作一般是上級分派下來的,一個系統的某個模塊。一開始很happy的coding,然後提交代碼,被review,被吐槽———— 長此以往,終於提交代碼時不再需要重新改很多次了。慢慢的,覺得不就是幾個億訪問量的系統嗎,你看,我也在維護呢,沒讓它掛過。然後沉溺在自己的熟悉的代碼中。

對於這個階段的工程師來說,進階的方式很簡單,因為Ta已經在生產環境中了,是其中的一個環節(其實理解為一個螺絲釘也未嘗不可),Ta需要做的事情是熟悉自己每天維護的項目中從來不屬於自己的部分。很多人都不願意去開發、維護不是自己做的東西,除非那個同事離職,然後把項目交接給Ta。

日常工作中,我們經常能看到這樣的例子,同一時間進入公司的兩個人或者幾個人,剛來的時候技術都差不多,但是過段時間你就會更想把重要的活兒派給其中一個。

作為一個螺絲釘,就得有螺絲釘的覺悟,知道自己的可替代性。我把所有的系統都比喻做數據的搬運工/整理員,你需要了解你所處理的數據的上下游,還有整個系統的全貌。

精通你現在維護的系統,以及上下游,是這個階段進階的更好的方式,當然也不是說不要搞業餘的項目,主要看你側重點在哪。

在工作多年後,我曾經回顧過我在工作兩年的時候所做的一些事,要是能有人給我講這些,我可能會成長的更快。

總結

就寫這些吧,其他的幾個階段都是一樣,從熟悉的地方出發,看看未知的環境。開闊下自己的視野,擴展下自己的知識邊界。

《道德經》中講:道生一,一生二,二生三,三生萬物。所有的事物/系統都不是一蹴而成的,經過不斷的演變,呈現現在的樣子。但是原理/理論是相通的。

----EOF-----

掃碼關注,或者搜索微信公眾號:碼農悟凡
推薦閱讀:

整理貴在真實,貴在不斷調整
有哪些話從前不以為意,如今卻句句戳心

TAG:Python | 个人成长 |