首頁 > 俗語

如何逐步突破,成為Python高手?

作者:由 湖湘約 發表于 俗語日期:2023-01-31

python容易上手嗎

工作中,我總聽到很多程式設計師抱怨,說現在的計算機程式語言太多了,學不過來了。一些人 Java 用了很多年,但是最近的專案突然需要用 Python,就會不知所措,壓力很大。

眾所周知,Facebook 的主流語言是 Hack(PHP 的進化版本)。不過,我敢拍著胸脯說,就剛入職的工程師而言,100 個裡至少有 95 個,以前都從未用過 Hack 或者 PHP。但是,這些人上手都特別快,基本上一兩週後,日常程式設計便毫無壓力了。

他們是怎麼做到的呢?

事實上,他們遵循的,正是我在開篇詞中提到的方法,也是本專欄學習的中心觀點:“從工程的角度去學習 Python”。那麼具體來說,到底要怎麼學,學習的過程中又要特別注意哪些地方呢?

不同語言,需融會貫通

其實,如果你在學一門語言的時候多閱讀、多練習、多思考,你就會發現,不同語言都是類似的。程式語言本就是人類控制計算機的指令,語法規則等方面自然大同小異。

而在原有基礎上,學習一門新的程式語言,其實也沒有那麼難,你首先要做到的是明確區分。比如,在學習 Python 的條件與迴圈語句時,多回憶一下其他語言的語法是怎樣的。再如,遇到 Python 中的字串相加時,你能分析出它的複雜度嗎?再聯想到其他語言,比如 Java 中字串相加的複雜度,它們之間有什麼相同點、又有什麼區別呢?

除了能夠明確區分語言的不同點,我們還要能聯絡起來靈活運用。比如,最典型的“程式語言兩問”:

你瞭解你學過的每種程式語言的特點嗎?

你能根據不同的產品需求,選用合適的程式語言嗎?

舉個例子,Python 的優點之一是特別擅長資料分析,所以廣泛應用於人工智慧、機器學習等領域,如機器學習中 TensorFlow 的框架,就是用 Python 寫的。但是涉及到底層的矩陣運算等等,還是要依賴於 C++ 完成,因為 C++ 的速度快,執行效率更高。

事實上,很多公司都是這樣,伺服器端開發基於 Python,但底層的基礎架構依賴於 C++。這就是典型的“不同需求選用不同語言”。畢竟,你要明白,哪怕只是幾十到幾百毫秒的速度差距,對於公司、對於使用者體驗來說都是決定性的。

唯一語言,可循序漸進

當然,如果 Python 是你學的第一門程式語言,那也不必擔心。我們知道,雖然同為人機互動的橋樑,Python 語言比起 C++、Java 等主流語言,語法更簡潔,也更接近英語,對程式設計世界的新人還是很友好的,這也是其顯著優點。這種情況下,你要做的就是專注於 Python 這一門語言,明確學習的重點,把握好節奏循序漸進地學習。

根據我多年的學習工作經驗,我把程式語言的學習重點,總結成了下面這三步,無論你是否有其他語言的基礎,都可以對照來做,穩步進階。

第一步:大廈之基,勤加練習

任何一門程式語言,其覆蓋範圍都是相當廣泛的,從基本的變數賦值、條件迴圈,到併發程式設計、Web 開發等等,我想市面上幾乎沒有任何一本書能夠羅列完全。

所以,我建議你,在掌握必要的基礎時,就得多上手操作了。千萬不要等到把教材上所有東西都學完了才開始,因為到那時候你會發現,前面好不容易記住的一堆東西似乎又忘記了。計算機科學是一門十分講究實戰的學科,因此越早上手練習,練得越多越勤,就越好。

不過,到底什麼叫做必要的基礎呢?以 Python 為例,如果你能夠理解變數間的賦值、基本的資料型別、條件與迴圈語句、函式的用法,那麼你就達到了第一步的底線標準,應該開始在課下多多練習了。

比方說,你可以自己動手程式設計做一個簡易的計算器,這應該也是大多數程式設計師實操的第一個小專案。使用者輸入數字和運算子後,你的程式能夠檢查輸入是否合法並且返回正確的結果嗎?

在做這個小專案的過程中,你可能會遇到不少問題。我的建議是,遇到不懂的問題時,多去Stack Overflow上查詢,這樣你還能閱讀別人優秀的程式碼,借鑑別人的思路,對於你的學習肯定大有幫助。當然,實在解決不了的問題,也可以寫在留言區,我們一起來解決。

第二步:程式碼規範,必不可少

誠然,學習程式設計講究快和高效。但是,與此同時,請一定不要忽略每一種語言必要的程式設計規範。在你自己剛開始寫程式碼練習時,你可以不寫單元測試,但總不能幾百行的程式碼卻沒有一個函式,而是從頭順序寫到尾吧?你可以省略一些可有可無的註釋,但總不能把很多行程式碼全部併到一行吧?

比如,我們來看下面這行程式碼:

如何逐步突破,成為Python高手?

顯然,這樣寫十分不科學,應該把它拆分成多行:

如何逐步突破,成為Python高手?

再比如,變數和函式的命名雖有一定的隨意性,但一定要有意義。如果你圖省事,直接把變數依次命名為 v1、v2、v3 等,把函式依次命名為 func1、func2、func3 等等,不僅讓其他人難理解,就算是你自己,日後維護起來都費勁兒。

一名優秀的程式設計師,一定遵守程式語言的程式碼規範。像 Facebook 的工程師,每次寫完程式碼都必須經過別人的 review 才能提交。如果有不遵守程式碼規範的例子,哪怕只是一個函式或是一個變數的命名,我們都會要求原作者加以修改,嚴格規範才能保證程式碼庫的程式碼質量。

第三步:開發經驗,質的突破

想要真正熟練地掌握 Python 或者是任何一門其他的程式語言,擁有大中型產品的開發經驗是必不可少的。因為實戰經驗才能讓你站得更高,望得更遠。

比如我們每天都在用搜索引擎,但你瞭解一個搜尋引擎的伺服器端實現嗎?這是一個典型的面向物件設計,你需要定義一系列相關的類和函式,需要從產品需求、程式碼複雜度、效率以及可讀性等多個方面考慮,同時,上線後還要進行各種最佳化等等。

當然,在專欄裡我沒辦法讓你完成一個上億使用者級的實踐產品,但是我會把自己這些年的開發

經驗傾囊相授,並透過量化交易這個實戰案例,帶你踏入“高階戰場”,幫你掌握必要的開發知識。

最後,我專門為你繪製了一張 Python 學習的知識圖譜,裡面涵蓋了 Python 最高頻的核心知識,大部分內容我在專欄中都會講到。你可以儲存或者打印出來,作為學習參考。

如何逐步突破,成為Python高手?

今天,我跟你分享了 Python 的學習方法和注意事項,其實這些觀點不只適用於 Python,也能幫助你學習任何一門其他計算機程式語言,希望你能牢記在心。在接下來的課程裡,我會帶你逐步突破,最終成為一名 Python 高手。

那麼,對於學習 Python 或者是其他程式語言,你有什麼困擾或是心得嗎?歡迎在留言區與我交流!