search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

編程老司機的筆記,帶你系統學Python

在我剛學Python的時候,每天除去白天上班,為了保證學習質量,我會每天花三四個小時來學習,天天如此。所有的文檔資料,問答我都盡量去看英文版,這可以省下大量時間。在我做的網站上線后,3天大約有9000多人訪問了這個網站,我在後台看著日誌的時候,內心不免有些激動,我想將自己的經驗寫下,希望幫助鼓勵到那些想學習Python但無從下手的朋友。

我的自學編程之路1、基礎

剛開始我對搭建網站一臉懵逼。為了給自己快速建立一個框架,我在電腦面前呆了整整一天,了解了HTML,CSS,JavaScript,Ajax,jQuery,React,SQL,伺服器腳本等等知識,不奢望說要全學會精通,只是了解每一項都是用來幹嘛的,然後建立起了一個學習路線圖,這樣就知道做一個Web App大概需要哪些技能知識,安排好學習的規劃順序。小編在這裡推薦兩個資源:

Python基礎知識:笨方法學Python

Web App基礎知識:張秋怡的答案寫的通俗易懂

有了這個學習路線圖,我了解了前端三大必備技能HTML、CSS、JavaScript,大概花了10天的樣子把W3Schools上的相關內容都看了一遍,然後寫了幾個網頁,感覺自己寫的很摳腳。於是我根據知乎豆瓣上的推薦,購買了《JaveScript DOM》、《Head First HTML與CSS》兩本書,邊看邊把案例過了遍。

W3Schools: www.w3schools.com

JavaScript:JavaScript DOM編程藝術

HTML、 CSS: Head First HTML與CSS

前端需要我去慢慢學習,看完那些資料后,雖然我能寫出還不錯的頁面,但我知道很多都不符合標準,更別說代碼風格啥的。這些只有在自己不斷地積累和增加代碼量中來提高。我明白伺服器端需要耗費太多時間,所以發現我能夠按構思勉勉強強來實現網頁后,我就專心學伺服器端去了。但是每天還是會抽時間寫一寫網頁,免得手生了嘛。

2、伺服器端

首先要了解什麼是HTTP協議,就是伺服器和瀏覽器之間是如何通信的。比如當你在瀏覽器里輸入網址按回車一直到網頁在你瀏覽器顯示的這個過程期間,瀏覽器和瀏覽器之間發生了什麼事情。這是非常有意思的內容,了解這些內容之後,你就會知道像有時候為什麼會有404頁面?在搜索引擎搜索框里輸入的關鍵詞是怎麼提交到百度伺服器的?為何很多網站重新登錄就不用輸入密碼?等等相關的問題了。

在了解過HTTP協議后,我就開始入迷了。很多看似晦澀難懂的現象其實原理很簡單,然後你會被吸引。之後就開始到我花時間最多的部分——後端開發。還記得當時在了解 Web開發的 MVC(Model-View-Controller)模式后,有一種灰常激動的感覺,感覺太有意思了(大家別噴哈,年輕人沒見過世面)。

我們每個人的主頁都是差不多的布局風格,比如菜單搜索欄、左邊顯示動態、顏色分割等,右邊是個人信息等,具體的內容卻因人而異——每個人的名字、頭像、動態都是不一樣的。那麼問題來了,知乎是怎樣保證我們每個人所看到的都是自己的主頁呢?

你可以把這個相同的布局想象成一個模板,裡面有一個個空格子,在你登陸頁面的時候,想象一下你電腦里有無數個小人根據你輸入的賬號從知乎後台資料庫里取出你的填寫過的所有信息,然後對應模板規定好的位置,把相應內容填進去。這些小人動作很快,以至於讓你感覺這是瞬間完成的。

之前說的模板是 MVC 中的 V(View),它負責顯示。這樣做好處在於如果知乎有一天突然想改變個人主頁風格,那就只要改這一個模板,然後所有的註冊用戶其主頁就相應變化了,模板是公用的,省了很多事情?(早期的Web開發還需要一個個用戶去改,超級麻煩)

這些小人除去擺放內容,它們主要負責業務邏輯,一般叫做 Controller,也就 V(View);比如在你登陸時,這些小人需要檢查你的用戶名是否準確,準確的話它們要去資料庫中取出你的請求信息,錯誤的話它們要攔截你的登陸。它們的職責太多無法一一去列舉。而在實際中,這些小人做的事情就是Python做的事情。

MVC 中的 Model 就是傳給 View 的數據,包括用戶名、頭像、動態等數據。這些數據在伺服器上以資料庫表格的形式存在,我們可以把它們想象成許多不同的excel表格,每個表格儲存著不同的信息,如用戶個人信息,回答,評論等等,而這些表格之間卻又彼此聯繫,當你在跳轉知乎中不同網頁的時候,那些小人就會根據你的需求,組合對應表格取出對應數據,把他們放到模板對應空格中,發送給瀏覽器。瀏覽器再根據你寫的CSS,用不同的大小、顏色等等,將數據非常漂亮的顯示出來。

這樣做有什麼好處呢?雖然最終在瀏覽器看到的是一個完整頁面,但在後端邏輯上它們是區分開的——視圖(V)、模型(M)和控制器(C)他們的區分就保證了非常高的可維護性——我隨時可以修改主頁顯示看到效果,我還可以隨時加入一些業務邏輯。

當你的學習堅持到這裡了,那麼我要恭喜你。可能你知道一些成熟常用的Django,Flask等Python Web框架了,可能你看到一些小白教程直接教你使用,可能大部分人會覺得沒有必要重複造輪子。

原本為了省事,我準備直接用框架。但是我在設計資料庫時,那時候在看SQLAlchemy文檔,覺得自己的項目SQLAlchemy太複雜了,所以我決定寫自己的ORM,當時對我來說是一件非常有難度的事。於是乎我投入了大量精力每天看關於SQL和Python的教程資料,《Python核心編程》給予我很多啟發。在完成了ORM后,又去寫URL處理函數,沒有去用現成的Web框架。

如今回頭去看,我覺得這段時間的造輪子是我提升編程能力最快的時期。像為了寫ORM,就得去花大量時間學習SQL,了解Python裡面的metaclass,要是我用一個現成的框架,很有可能就偷懶不去關注很多小細節。不出問題的話還好,出問題就GG。造輪子讓我在一開始就必須去構思整個框架,我必須要考慮到所有情況,就只能不斷的強迫自己去完善知識體系,跟別人的代碼對比來精進自己的,儘管這個過程中充滿了挫敗感,但是所獲得的成就和快樂卻是無可比擬的。

在這過程中還牽涉到部署,我的網站是在Linux上跑的。部署的話可以在網上搜一下教程。這裡我就不多說了。這些是我大概的學習路線,過程中充滿磕磕絆絆,網站雖然上線了,運行還算比較順利,但以一個程序員的標準要求自己的話,自己還是非常菜鳥的。但我不像以前那樣懼怕技術了,就比如你明白魔術的原理之後,就會更多去的思考這個原理本身。

自學編程需要注意的問題

現在很多人都推薦將Python作為第一門入門語言,因為其語法簡單。不過這話只說了一半,Python雖然容易上手,對初學者沒什麼門檻。但是對於小白最大的門檻在於系統知識,這個就跟你用什麼語言沒有任何關係了。就像很多人看完Python語法,感覺好簡單,但轉頭在用Python標準庫時,才發現自己看文檔都看不懂。標準庫提供了Python和其它系統功能的介面,最終實現了Python和系統之間的互動。讀標準庫需要很多系統知識,如:操作系統、資料庫、socket編程、進程和線程、網路協議等等,而這些東西對編程小白構成了比較高的門檻,但只有學會這些東西,你才能真正釋放出Python的真正的威力。

這是我覺得自己的經歷對編程小白有價值的原因之一。設計一個動態的網頁是非常不錯的的練手Project。建立網頁(Web App)會讓你自己了解從在瀏覽器輸入地址回車到網頁顯示在瀏覽器的過程中,瀏覽器,伺服器,網路都做了些什麼。具體到技術層面,迫使你不得不去學前端的HTML,CSS和JavaScript,後端的操作系統,腳本,資料庫等等。在這個過程中可以促使自己主動學習上面那些系統知識,等再做下一個項目,就不會像現在這樣不知道怎麼下手,有能力來進行一些技術性的探討,所以說我覺得這是一個非常好的練手項目。

1、一定要多補充理論知識。大多數人會強調邊做項目邊學習,這也是我使用的學習方式。在這種方式中,我們不斷犯錯,然後去改正……學習效率確實高。但很多人卻走了極端,不注意理論知識的學習。最後發現自己去百度的能力超級厲害,然而真正的編程能力沒有一點提升。出現這種情況,你就需要反思一下了。原因大概就兩點:

①、太依賴各種成熟的框架,結果編程變成了用「膠水」去粘合不同的框架來完成你自己的需求。比如你的Web App用了SQLAlchemy,自己雖然不太懂SQL,但網站跑的還行。但是這時候資料庫出現問題,你怎麼辦呢?GG吧

②、你可能沉浸在做項目的快感中無法自拔,卻忽略了學習理論知識。做項目過程中雖然很困難,但是強烈的成就感讓你很爽,沉浸其中。我覺得這是非常愚蠢的。半路出家的程序員沒有系統的學習過,沒有形成一個自己的知識體系,假如你不懂演算法複雜度,數據結構,操作系統這些理論,那註定你所能達到的高度非常有限。所以我們在每天做項目的同時,一定一定要保證抽出時間,來惡補一下理論知識。這些書在知乎豆瓣都太多總結,可以去搜搜看。

2、別去糾結那些毫無意義的問題,像哪個框架好,某某語言比某某語言好呢這種沒營養的問題。前期確定好練手項目后,就專心去積累代碼量基礎知識。那些你現在還看不懂感覺超級吊的技術慢慢的就能明白原理做法了,沒有基礎,再炫酷吊的不要不要的框架對你而言都是天書,從小就學的萬丈高樓平地起都被拋之腦後了。

3、學會去問。好問題建立於你已經實踐過或者思考過之後再問出來的,這不僅是對自己的一種負責,也是對他人的一種尊重。別有問題就百度或者直接甩給別人:「這個問題是怎麼回事啊?」,「我不明白你能不能幫我看看……」。

4、最後有條件盡量學好英語,這樣看一些官方文檔,國外網站都很方便,也可以及時學到國外一些新技術。

原文來自:http://www.linuxprobe.com/programming-python.html



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦