经验分享:如何零基础开始自学Python编程(上)
1、明確目標
我是真正零基礎開始學Python的,從一開始的一竅不通,到3個月后成功搭建了一個動態網站(沒有用任何框架)。相比于計算機大牛,我更加知道一個小白將會遇到什么坑,遇到哪些難點。我把我的學習過程寫在下面,并附上在每個階段的學習資料,希望對零基礎的Python學習者有所幫助。
在知乎上常常看到想要轉行IT,或者是想學習編程但不知如何開始的朋友。回答這類問題的人往往只是列出書單資源然后給出一個大致的方向。有些朋友一開始就扎入了理論學習的汪洋大海,從苦讀類似《算法導論》開始,能夠堅持讀下來的寥寥無幾,學習的積極性也被不斷的挫敗感消磨的所剩無幾。
一直以來,編程對我而言是一種「黑魔法」般的存在。今年阿里月餅門,當很多人都參與到是非之爭的時候,我更加著迷于程序員區區幾行代碼的腳本所展現出的威力,對于外行而言,這是超乎他們想象之外的某種能力——為什么我守在電腦面前盯著秒針然后拼命點擊鼠標都不一定能搶到的禮物,程序員只需要提前花5分鐘寫3行代碼就輕松搞定?
所以,我的心底深處一直都想變成這樣的一位魔法師。今年的8月,剛好工作上想要開發一個基于微信的英語學習網站,借此機會,我決定好好學習一下編程。在此之前,我所有關于程序的知識僅僅來源于兩部分,一是本科時期的C語言必修課,現在已經忘的一干二凈,不過好歹我從中明白編程是怎么回事;第二部分是大概兩年前由于工作關系學的一些Python,不過只是皮毛,現在忘的七七八八。
簡單說,我的目標是建立一個網站,不過這個網站是動態的,也就是說它能識別誰登陸,然后對不同的人顯示不同的內容。而當時的現實是,我完全不明白網頁是如何顯示出來的?譬如每個人登陸知乎的時候看到的是定制化的頁面,后臺是如何基于每個ID來組織出不同的頁面的?所有我們看到的問題,回答,參與的評論在背后的服務器上是以一種什么樣的形式存在的?又比如為什么有些頁面只能在微信端打開,在電腦上就會出錯?(不知道你有沒有發現這一點)
當時我的心中充滿了無數個類似的問號?當然如果你也是小白,一定有著同樣的疑問。
好處是一開始就明確了學習的目的:Web建站。所以我的學習方案基本就是通過做項目學習,哪里不懂就解決哪里,邊做邊學習,不斷推進。另外,由于知道很多成功的網站在用Python做服務器開發,比如知乎,所以我就自然選擇了Python。
于是我就開始了我充滿著挫敗感和成就感的編程之路……
從8月到12月的四個月里,除去本來的工作,為了學習質量,我會保證平均每天4個小時的學習時間,周末也不例外。另外,所有的文檔,問答都盡量看英文的,這可以幫你剩下大量的時間。12月13日,我做的網站上線了,3天時間大概有5000人訪問了這個網站,我有時在后臺看著日志,不免有些心潮噴涌,我想把自己的經驗寫下來,希望對于那些有心學習編程但無從下手的朋友提供一些幫助和鼓勵。
2、我的自學編程之路
1)基礎
剛開始的時候,我對搭建網站一無所知。為了給自己迅速建立一個框架,我在Google上面泡了整整一天,了解了HTML,CSS,JavaScript,Ajax,jQuery,React,SQL,服務器腳本等等知識,不求精通,只是了解每一項技術是干嘛的,另一方面建立起了一個學習的roadmap,這樣大概知道做一個Web App需要哪些知識,分別學習的主次順序。
有了這個roadmap,我明白了前端三大必須掌握技能HTML,CSS和JavaScript,花了大概10天左右把W3Schools上的教程全部過了一遍,然后試著寫了幾個網頁,感覺自己寫的很沒有底氣。于是根據知乎和豆瓣上的推薦,買了《JaveScript DOM》和《Head First HTML與CSS》,邊看書邊把例子過了一遍。
前端是需要慢慢學習的,在看完上面的資料后,雖然能寫出來一些挺漂亮的頁面,但是我自己知道很多都是不符合標準的,更不要說代碼風格什么的。這只能通過不斷地積累和增加代碼量來提高。由于明白服務器端需要耗費自己大量的時間,所以在發現自己能夠按照構思勉強實現網頁之后,我就把學習中心放到了服務器端上。不過每天還是會抽空寫一寫網頁,避免手生。
2)服務器端
最先了解的是HTTP協議,也就是瀏覽器和服務器之間是如何通信的。也就是當你在瀏覽器里鍵入網址按下回車直到網頁顯示在你瀏覽器的這個過程中,瀏覽器和瀏覽器之間發生了什么事情。這是很有意思的內容,我是以讀小說的心情了解了這部分內容。了解這部分后,你就會明白類似為什么有時候會有404頁面?在百度搜索框里鍵入的搜索詞是如何提交到百度服務器的?為什么重新登錄知乎的時候就不用再輸入密碼了?之類的問題了。
了解了HTTP協議之后,我就多少有些入迷了。看似神秘難懂的現象其實原理并不復雜,你反而會被吸引。接下來就進入到我投入時間最多的部分了——后端開發。記得當時了解Web開發的MVC(Model-View-Controller)模式后,有一種心血噴涌的感覺,覺得太有意思了(程序員別噴,我就是這么沒見過世面)。
我們以知乎為例子來說明MVC是個啥:
每個人的主頁都是相同的布局和風格,例如最上面的菜單搜索欄,顏色分割,左邊顯示動態等,右邊是個人信息等,然后具體的內容卻因人而異——每個人的頭像,名字,動態都是不一樣的。那么知乎是如何保證每一個人看到的都是自己的主頁呢?
你可以把這個相同的布局想象成一個模板,里面有一個個空格子,當你用你的賬戶登陸頁面時,想象你的電腦里有無數個小人根據你的賬號從知乎后臺的數據庫里取出你的頭像,動態,認證信息等等內容,然后對應著模板上規定好的位置,把對應的內容填進去。這些小人的動作實在是太快了,以至于你覺得這是在瞬間完成的。
上面所說的模板就是MVC中的V,是View的縮寫,負責顯示。這樣做的好處在于,如果知乎有一天突然想改變一下個人主頁的風格,那么只需要改變這一個模板,然后幾千萬注冊用戶的主頁就相應的變化了,因為模板是公用的,是不是省了很多事情?(早期的Web開發可不是這樣喲,你可能要一個個用戶去改,非常麻煩。)
而這些小人除了擺放內容,它們真正負責的是業務邏輯,我們把他們叫做Controller,也就是MVC中的C。例如當你登陸的時候,這些小人要檢查你的用戶名是不是準確的,如果準確,它們要去數據庫里取出你請求的信息等,如果用戶名錯誤,它們要攔截住你的登陸。它們的職責還有很多,無法一一列舉。在實際中,這些小人做的事情其實就是Python(或者其它腳本語言)做的事情。
最后,MVC中的Model其實就是傳給View的數據,包括上面的頭像,用戶名,動態等因人而異的數據。這些數據在知乎服務器上是以數據庫表格(table)的形式存在的,你可以把它們想象成很多不同的excel表格,不同的表格儲存著不同的信息,有些記錄著知乎用戶的個人信息,有些記錄著回答,有些記錄著評論等等,而這些表格之間又彼此聯系,當你在知乎的不同網頁間跳轉的時候,上面說的那些小人就根據你的要求,組合對應的表格取出對應的數據,然后把他們放到模板對應的空格里,發送給瀏覽器。然后瀏覽器根據你寫的CSS,用不同的顏色,大小等等,將數據很漂亮的顯示出來。
總結
以上是生活随笔為你收集整理的经验分享:如何零基础开始自学Python编程(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 源码下载网址
- 下一篇: python2020安装教程_PyCha