1. 什么是進階?
一門編程語言的基礎部分,往往非常簡單。如果只考慮基本語法、數據類型、基本控制結構的話,大部分人應該一兩天就學完 Python 了吧。之后,調用幾個常用的庫,寫一些腳本,或者做爬蟲,或者做數據分析,或者做一些其它自動化工作,就可以說已經入門了。
那么,接下來呢?當我們問如何進階的時候,我們具體問的是什么呢?我們為什么要追求進階,進階又是一種怎樣的狀態呢?
顯然,我們已經可以通過一些腳本解決一些簡單的問題了。大多數時候,問如何進階的人,暫時也沒有碰到什么無法解決的問題。
但是我們知道自己掌握的還不夠,還不足以依靠這些知識進入一個開發團隊,并以這門編程語言作為主要開發語言,貢獻于整個項目——或者說,與他人協作,共同解決一個比較復雜,比較龐大的問題。
從這個角度說,編程中所謂的進階,大概是指能夠以一門語言為主,參與到一個比較大的項目中,與他人協作,解決一個相對復雜的問題。
從這個目標看,我們對進階的理解就要具體一些了。如果再分解這個目標,大概就會有以下思路:
1. 我們當然知道,解決一個比較復雜的問題,需要相當多的知識,這些知識不僅包括對計算機技術的了解,還包括對業務邏輯的理解,對商業目標的考慮等。
僅就計算機技術而言,了解一門編程語言的語法也還只是一個開始,最多算是解決了數據處理的問題,另外還考慮考慮數據的存儲與傳輸問題。一般來說,也就是基本的 數據傳輸協議與數據庫知識 等。
2. 大部分時候,我們所要處理的問題都是常見的,前人已經處理過的,并且有優秀的開發者作出梳理和總結,提供了一些方便的框架,常見的比如 web 框架、桌面 UI 框架、數據庫操作、爬蟲、數據分析框架等。
對這些 現成框架的了解以及基本用法的掌握 ,應該也是很有必要的。
3. 對于日常的編程工作,我們可以簡單地認為,大多數時候都是在做數據處理。那么,我們似乎有義務去考慮,如何才能讓自己的代碼在數據處理時更高效,更簡潔——對的,這個問題主要涉及數據結構和算法的設計。
但就一門具體的語言來說,還涉及 這門語言的總體生態,特別是其核心庫 。以 Python 來說,了解其基本數據結構當然很重要,但很多其它常用的數據結構和算法也都在核心庫,或者第三方庫中有實現,對絕大多數用戶來說,自己再去實現一遍,既麻煩又低效,也很容易出 Bug,是得不償失的。
4. 團隊協作的問題,當然也不能忽略。如何保證我們的代碼在嚴肅的生產環境中不會出 Bug?如何保證別人能充分地理解,方便地調用我們的代碼?如何保證我們寫的程序不會隨著需求的演變變得越來越臃腫,越來越復雜?如何保證我們離開這個崗位后,接手的人可以很容易地看懂并維護我們留下的代碼?
這里涉及的問題,就是 代碼的可讀性與可維護性,文檔與測試,設計模式與版本管理 等各方面的內容。
這里所列的,都只是簡單的思考方向,具體的內容,則隨我們的目標而定。一般的建議是,直接去看招聘網站上的崗位要求,就能對具體目標有所了解了,這是最貼近實際的。
2. 如何進階?
下一個問題是,如何進階呢?
我們首先應該會達成的共識是:作為一門技術,編程應該在實踐中學習,因此,進階一定包含大量的實踐,而不僅僅是理論的閱讀與理解。

于是,我們的問題轉換為,我們要學習哪些理論,做哪些實踐?
參考我們在上面提出的四條思路,主要涉及的理論應該包括:數據存儲與傳輸、常用框架、數據結構與算法、編碼規范、文檔、測試、設計模式與版本管理等。
在這些理論知識中,我們實踐起來最方便,教材也最豐富的,應該是各種常用框架。事實上,我們要構建一個應用,解決一個問題,一般都會借助一個成熟的框架。
那么也就是說,可能最為常見的學習路徑,就是學習框架,通過框架搭建自己的應用,并在這個過程中系統學習,不斷引入其它各方面的理論和實踐。
舉例來說,我們可以著手學習一個 web 框架,寫一個簡單應用,在這個過程中不斷引入其它方面的內容:
首先是 編碼規范 ,最為基礎,內容也很少。就 Python 而言,可以先看一遍 PEP8 的建議,然后在 IDE 中引入一些檢查插件,就可以按照規范進行編碼了。第二個可以很快學會的是 版本管理工具 ,只需要花幾個小時了解一下基本命令,就可以在之后的編程實踐中用起來了。文檔與測試,相對來說也比較容易上手,自然也可以緊接著引入自己的實踐中。數據存儲與傳輸、數據結構與算法、設計模式 等內容,相對地需要一定的系統學習,市面上也有豐富的材料,只要有一個整體的計劃,在學習的過程中不斷地與自己的實踐相參照,自然可以融會貫通。
總的來說,這是一個有意識地學習的過程,不斷反省自己的缺漏,不斷引入新的實踐內容。對于新人來說,開始上手都是容易的,可能比較困難的是對這些目標的持續反思,按這些規范嚴格要求自己。
3. 除此之外呢?
除此之外呢?
任何一門編程語言,除了語言本身,都包含大量社區實踐形成的規范,或者說,經驗總結。比如 PEP8 就是 Python 社區關于編碼規范所形成的一套約定。這些經驗,也可以認為是當前被比較多人所認同的最佳實踐,我們當然有必要了解這些最佳實踐。
事實上,是否知道并采用這些最佳實踐,有時也可以作為我們判斷一位程序員是否經驗豐富的標準。
我們獲取這類最佳實踐的方法,一個是通過團隊之間的相互學習,一個是通過書籍。
比如 《Effective Python:編寫高質量 Python 代碼的59個有效方法》 就是介紹最佳實踐的書籍。里面的內容,有些我們已經習以為常了,也有些可能不太了解。
說來慚愧,當我閱讀這本書的時候,有時心里是很慌的。我們寫代碼,經常過一段時間,就感覺之前的代碼寫得很爛,現在寫得會好一些,于是感覺自己有點成就了,看了別人的實踐,卻發現自己的代碼依然丑陋。
所謂“獨學而無友,則孤陋而寡聞”,就是這個意思吧!
這篇文章已經比較長了,這個系列接下來的文章,會大體介紹《Effective Python》所推薦的最佳實踐,叫做 “Python進階自檢清單” 。大部分內容確實只是把清單列出來而已,可能會涉及一些我自己的理解和補充。當然,出錯的部分都是我的問題,還請大家多多指教!
END
評論前必須登錄!
立即登錄 注冊