一門編程語言的基礎部分,往往非常簡單。如果隻考慮基本語法、數據類型、基本控制結構的話,大部分人應該一兩天就學完 Python 了吧。之後,調用幾個常用的庫,寫一些腳本,或者做爬蟲,或者做數據分析,或者做一些其它自動化工作,就可以說已經入門了。
那麼,接下來呢?當我們問如何進階的時候,我們具體問的是什麼呢?我們為什麼要追求進階,進階又是一種怎樣的狀态呢?
顯然,我們已經可以通過一些腳本解決一些簡單的問題了。大多數時候,問如何進階的人,暫時也沒有碰到什麼無法解決的問題。
但是我們知道自己掌握的還不夠,還不足以依靠這些知識進入一個開發團隊,并以這門編程語言作為主要開發語言,貢獻于整個項目——或者說,與他人協作,共同解決一個比較複雜,比較龐大的問題。
從這個角度說,編程中所謂的進階,大概是指能夠以一門語言為主,參與到一個比較大的項目中,與他人協作,解決一個相對複雜的問題。
從這個目标看,我們對進階的理解就要具體一些了。如果再分解這個目标,大概就會有以下思路:
1. 我們當然知道,解決一個比較複雜的問題,需要相當多的知識,這些知識不僅包括對計算機技術的了解,還包括對業務邏輯的理解,對商業目标的考慮等。
僅就計算機技術而言,了解一門編程語言的語法也還隻是一個開始,最多算是解決了數據處理的問題,另外還考慮考慮數據的存儲與傳輸問題。一般來說,也就是基本的 數據傳輸協議與數據庫知識 等。
2. 大部分時候,我們所要處理的問題都是常見的,前人已經處理過的,并且有優秀的開發者作出梳理和總結,提供了一些方便的框架,常見的比如 web 框架、桌面 UI 框架、數據庫操作、爬蟲、數據分析框架等。
對這些 現成框架的了解以及基本用法的掌握 ,應該也是很有必要的。
3. 對于日常的編程工作,我們可以簡單地認為,大多數時候都是在做數據處理。那麼,我們似乎有義務去考慮,如何才能讓自己的代碼在數據處理時更高效,更簡潔——對的,這個問題主要涉及數據結構和算法的設計。
但就一門具體的語言來說,還涉及 這門語言的總體生态,特别是其核心庫 。以 Python 來說,了解其基本數據結構當然很重要,但很多其它常用的數據結構和算法也都在核心庫,或者第三方庫中有實現,對絕大多數用戶來說,自己再去實現一遍,既麻煩又低效,也很容易出 Bug,是得不償失的。
4. 團隊協作的問題,當然也不能忽略。如何保證我們的代碼在嚴肅的生産環境中不會出 Bug?如何保證别人能充分地理解,方便地調用我們的代碼?如何保證我們寫的程序不會随着需求的演變變得越來越臃腫,越來越複雜?如何保證我們離開這個崗位後,接手的人可以很容易地看懂并維護我們留下的代碼?
這裡涉及的問題,就是 代碼的可讀性與可維護性,文檔與測試,設計模式與版本管理 等各方面的内容。
這裡所列的,都隻是簡單的思考方向,具體的内容,則随我們的目标而定。一般的建議是,直接去看招聘網站上的崗位要求,就能對具體目标有所了解了,這是最貼近實際的。
下一個問題是,如何進階呢?
我們首先應該會達成的共識是:作為一門技術,編程應該在實踐中學習,因此,進階一定包含大量的實踐,而不僅僅是理論的閱讀與理解。
于是,我們的問題轉換為,我們要學習哪些理論,做哪些實踐?
參考我們在上面提出的四條思路,主要涉及的理論應該包括:數據存儲與傳輸、常用框架、數據結構與算法、編碼規範、文檔、測試、設計模式與版本管理等。
在這些理論知識中,我們實踐起來最方便,教材也最豐富的,應該是各種常用框架。事實上,我們要構建一個應用,解決一個問題,一般都會借助一個成熟的框架。
那麼也就是說,可能最為常見的學習路徑,就是學習框架,通過框架搭建自己的應用,并在這個過程中系統學習,不斷引入其它各方面的理論和實踐。
舉例來說,我們可以着手學習一個 web 框架,寫一個簡單應用,在這個過程中不斷引入其它方面的内容:
總的來說,這是一個有意識地學習的過程,不斷反省自己的缺漏,不斷引入新的實踐内容。對于新人來說,開始上手都是容易的,可能比較困難的是對這些目标的持續反思,按這些規範嚴格要求自己。
除此之外呢?
任何一門編程語言,除了語言本身,都包含大量社區實踐形成的規範,或者說,經驗總結。比如 PEP8 就是 Python 社區關于編碼規範所形成的一套約定。這些經驗,也可以認為是當前被比較多人所認同的最佳實踐,我們當然有必要了解這些最佳實踐。
事實上,是否知道并采用這些最佳實踐,有時也可以作為我們判斷一位程序員是否經驗豐富的标準。
我們獲取這類最佳實踐的方法,一個是通過團隊之間的相互學習,一個是通過書籍。
比如 《Effective Python:編寫高質量 Python 代碼的59個有效方法》 就是介紹最佳實踐的書籍。裡面的内容,有些我們已經習以為常了,也有些可能不太了解。
說來慚愧,當我閱讀這本書的時候,有時心裡是很慌的。我們寫代碼,經常過一段時間,就感覺之前的代碼寫得很爛,現在寫得會好一些,于是感覺自己有點成就了,看了别人的實踐,卻發現自己的代碼依然醜陋。
所謂“獨學而無友,則孤陋而寡聞”,就是這個意思吧!
這篇文章已經比較長了,這個系列接下來的文章,會大體介紹《Effective Python》所推薦的最佳實踐,叫做 “Python進階自檢清單” 。大部分内容确實隻是把清單列出來而已,可能會涉及一些我自己的理解和補充。當然,出錯的部分都是我的問題,還請大家多多指教!
END
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!