若何系统地自学 Python?

刚刚阅读1回复0
kewenda
kewenda
  • 管理员
  • 注册排名1
  • 经验值164235
  • 级别管理员
  • 主题32847
  • 回复0
楼主

我是实正零此根底已经起头学Python的,从一已经起头的不屑一顾,到3个月后获得胜利修建了两个静态中文网站(没有用任何架构)。比拟于计算机薄罗藓,我愈加晓得两个阿宝将会碰着什么坑,碰着什么样难点。我把我的自修过程写鄙人面,并附上在每一阶段的自修数据材料,希望对零此根底的Python自修者有所协助。

注:本文只做履历分享,不是手艺切磋。

---

在chan上常常看见想转行IT,或者是想自修程式设想但不知如何已经起头的老友。答复那类问题的人往往罢了列出引文资本接着给出两个大致的标的目的。有些老友一已经起头就钻出了理论自修的汪洋大海,从苦读类似于《算法导论》已经起头,可以对峙读下来的百里挑一,自修的积极性也被急速的受挫感消磨的所剩无几。

不断以来,程式设想对我来说是一种「神通」般的存在。本年阿里月饼门,当许多人都参与到长短之争的那时候,我愈加沉迷于开发人员区区几行标识符的JAVA所展示出的能力,关于外行来说,那是超乎他们想象之外的某种才能——为何我守在条记本电脑面前盯着钟摆接着拼命点击鼠标都纷歧定能抢到的礼品,开发人员只必要提早花5分钟写3行标识符就轻松搞定?

因而,我的心底深处不断都想酿成如许的一位妖精。本年的8月,刚好组织工做上想开发两个如前所述QQ的英语自修中文网站,借此时机,我决定好好自修一下程式设想。在此之前,我大部分关于法式的科学常识仅仅来源于两部门,一是本科期间的C语言必修课,如今已经忘的一尘不染,但是好歹我从中晓得程式设想是怎么回事;第二部门是估计两年前固然组织工做关系学的许多Python,但是罢了外相,如今忘的不落。

简单说,我的目的是创建两个中文网站,但是阿谁中文网站是静态的,也就是说它能识别谁进占,接着对不异的人表白不异的文本。而其时的现实是,我完全不晓得页面是如何表白出来的?譬如每一人进占chan的那时候看见的是定造化的页面,前台是如何如前所述每一ID来组织出不异的页面的?大部分我们看见的问题,答复,参与的评论在背后的伺服器上是以一种什么样的形式存在的?又好比说为何有些页面只能在QQ端翻开,在条记本电脑上就会出错?(不晓得你有没有发现那一点)

其时我的心中充满了无数个类似于的问号?当然若是你也是阿宝,必然有着同样的疑问。

益处是一已经起头就明白了自修的目标:Web建站。因而我的自修计划根本就是通过做项目自修,那儿要学就处理那儿,边做边自修,急速推进。别的,固然晓得许多获得胜利的中文网站在用Python做伺服器开发,好比说chan,因而我就天然选择了Python。

于是我就已经起头了我充满着受挫感和成就感的程式设想之路……

从8月到12月的四个月里,除去原来的组织工做,为了自修量量,我会包管均匀每晚4个小时的自修天数,周末也不破例。别的,大部分的文档,问答都尽量看英文的,那能够帮你剩下大量的天数。12月13日,我做的中文网站上线了,3天天数估计有5000人拜候了阿谁中文网站,我有时在前台看着日记,难免有些心潮喷涌,我想把他们的经历写下来,希望关于那些有心自修程式设想但无从下手的老友供给许多协助和鼓舞。

1. 我的自修程式设想之路

1)此根底

刚已经起头的那时候,我对修建中文网站一无所知。为了给他们敏捷创建两个架构,我在Google下面泡了整整一天,介绍了HTML,CSS,JavaScript,Ajax,jQuery,React,SQL,伺服器JAVA等等科学常识,不求精通,罢了介绍每一项手艺是干嘛的,另一方面创建起了两个自修的roadmap,如许估计晓得做两个Web App必要什么样科学常识,别离自修的主次挨次。重点保举两个资本:

Python根本科学常识:Learn Python the Hard Way

Web App根本科学常识:@张秋怡的谜底写的通俗易懂,力荐。

有了阿谁roadmap,我晓得了后端三大必需掌握技能HTML,CSS和JavaScript,花了估计10天摆布把W3Schools上的教程全数过了两边,接着试着写了几个页面,觉得他们写的很没有底气。于是按照chan和豆瓣上的保举,买了《JaveScript DOM》和《Head First HTML与CSS》,边看书边把例子过了两边。

W3Schools: www.w3schools.com/

JavaScript:JavaScript DOM程式设想艺术

HTML & CSS : Head First HTML与CSS(第2版)

后端是必要渐渐自修的,在看完下面的数据材料后,固然能写出来许多挺标致的页面,但是我他们晓得许多都是不契合尺度的,更不要说标识符气概什么的。那只能通过急速地积累和增加标识符量来进步。固然晓得办事端必要消耗他们大量的天数,因而在发现他们可以根据构想勉强实现页面之后,我就把自修中心放到了办事端上。但是每晚仍是会抽暇写一写页面,制止手生。

2)办事端

更先介绍的是HTTP协议,也就是应用法式和伺服器之间是如何通信的。也就是当你在应用法式里点选网址挪动回车曲到页面表白在你应用法式的阿谁过程中,应用法式和应用法式之间发作了什么工作。那是很有意思的文本,我是以读小说的表情介绍了该些文本。介绍该些后,你就会晓得类似于为何有那时候会有404页面?在腾讯搜刮框里点选的blo是如何提交到腾讯伺服器的?为何从头登录chan的那时候就不消再输入密码了?之类的问题了。

HTTP协议自修数据材料:In Introduction to HTTP Basics

@Vamei 的博客:协议丛林

介绍了HTTP协议之后,我就几有些出神了。看似奥秘难懂的现象其实原理其实不复杂,你反而会被吸引。接下来就进入到我投入天数最多的部门了——后端开发。记事当时介绍Web开发的MVC(Model-View-Controller)形式后,有一种心血喷涌的觉得,觉得太有意思了(开发人员别喷,我就是那么没见过世面)。我们以chan为例子来申明MVC是个啥:

每一人的主页都是不异的规划和气概,例如最下面的菜单搜刮栏,颜色朋分,右边表白静态等,右边是小我信息等,接着详细的文本却因人而异——每一人的头像,名字,静态都是纷歧样的。那么chan是如何包管每两小我看见的都是他们的主页呢?

你能够把阿谁不异的规划想象成两个模板,里面有两个个空格子,当你用你的账户进占页面时,想象你的条记本电脑里有无数个小人按照你的账号从chan前台的数据库里取出你的头像,静态,认证信息等等文本,接着对应着模板上规定好的位置,把对应的文本填进去。那些小人的动做其实是太快了,以致于你觉得那是在霎时完成的。

下面所说的模板就是MVC中的V,是View的缩写,负责表白。如许做的益处在于,若是chan有一天突然想改动一下小我主页的气概,那么只必要改动那两个模板,接着几万万注册用户的主页就响应的变革了,因为模板是公用的,是不是省了许多工作?(早期的Web开发可不是如许哟,你可能要两个个用户去改,十分费事。)

而那些小人除了摆放文本,它们实正负责的是营业逻辑,我们把他们叫做Controller,也就是MVC中的C。例如当你进占的那时候,那些小人要查抄你的用户名是不是准确的,若是准确,它们要去数据库里取出你恳求的信息等,若是用户名错误,它们要拦截住你的进占。它们的职责还有许多,无法逐个列举。在现实中,那些小人做的工作其实就是Python(或者其它JAVA语言)做的工作。

最初,MVC中的Model其实就是传给View的数据,包罗下面的头像,用户名,静态等因人而异的数据。那些数据在chan伺服器上是以数据库表格(table)的形式存在的,你能够把它们想象成许多不异的excel表格,不异的表格贮存着不异的信息,有些记录着chan用户的小我信息,有些记录着答复,有些记录着评论等等,而那些表格之间又相互联络,当你在chan的不异页面间跳转的那时候,下面说的那些小人就按照你的要求,组合对应的表格取出对应的数据,接着把他们放到模板对应的空格里,发送给应用法式。接着应用法式按照你写的CSS,用不异的颜色,大小等等,将数据很标致的表白出来。

如许做的益处是什么呢?固然你最末在应用法式里看见的是两个完好的页面,但是在后端逻辑上它们都是区分隔的——模子(M),视图(V)和控造器(C)的区分就包管了较高的可维护性——我能够随时修改主页的表白并看收效果,同样我能够随时参加许多营业逻辑。

若是你的自修对峙到那里了,起首要恭喜你。其次你可能已经晓得许多十分成熟的Python Web架构了,例如Django,Flask等等,而且你可能看见了许多阿宝教程教你间接利用,究竟结果大部门人可能觉得没有需要反复造轮子。

原来为了省事,我也筹算间接用架构。我是在设想数据库的那时候,其时在看SQLAlchemy文档,觉得相对他们的项目SQLAlchemy过分复杂,因而我决定他们写他们的ORM(名词要学不妨),那关于其时的我来说是一件难度十分大的工作。于是我投入了极大的精神每晚都在看关于SQL和Python相关的教程和数据材料,Python核心程式设想(第二版) 给了我很大的启发。在他们完成了ORM后,又写了URL处置函数,同样没有用任何现成的Web架构。

如今回头看,我认为那一段天数的造轮子是提拔程式设想才能最快的那时候。好比说为了写ORM,就必需去花许多天数自修SQL,去介绍Python里面的metaclass,而若是用两个现成的架构,我很有可能偷懒不去存眷某些细节。而不出问题还好,一旦出问题,我就只能跪。别的,造轮子迫使我在已经起头的那时候就构想整个架构,因为我必需尽可能的考虑到大部分的情况,于是就会急速的强迫他们完美科学常识系统,和他人的标识符做比照从而改良他们的,阿谁过程充满了无尽的受挫感,但是得来的成就和快乐也是无可相比的。

SQL册本:Sams Teach Yourself MySQL in 21 Days

Python:Python核心程式设想(第二版)

Github上的优良Python资本:CodementorIO/Python-Learning-Resources

过程中还牵扯到摆设,我的中文网站是跑在Linux上的。关于摆设网上有十分多的优良教程,一搜一大把。那里就不再赘述。

那些是我自修大致道路,当然过程中充满着小的磕磕绊绊,固然中文网站上线了,貌似运行还比力顺利,但是若是以两个开发人员的尺度来要求他们,他们仍然十分菜鸟。但是我并没有以前那样惧怕手艺了,就像你晓得魔术的背后的原理后,会更多的思虑原理自己。

2. 自修程式设想必要留意的问题

许多人都保举阿宝第一门语言选Python,因为语法简单。那句话只说了一半,Python确实容易上手,对初学者的门槛很低。但我发现,关于阿宝实正的门槛在于系统科学常识,那就和用什么语言完全没有任何关系了。例多么多人学完了Python的语法,觉得确实简单,但是转头去用Python尺度库的那时候,却发现他们连文档都看要学。尺度库供给了Python和其它系统功用的接口,最末实现了Python和系统之间的互动。读尺度库必要系统科学常识,好比说操做系统,数据库,历程和线程,socket程式设想,收集协议等等,那些关于程式设想阿宝来才构成很高的门槛,但是只要学会那些,才气实正阐扬出Python的能力来。

那也是我觉得他们的履历对阿宝是有价值的两个原因。因为设想两个静态的页面是两个很不错的练手Project。创建页面(Web App)会强逼你介绍从你在应用法式里点选地址挪动回车到页面表白在应用法式的过程中,应用法式,收集,伺服器都干了些什么。详细到手艺下面,你不能不去自修后端的HTML,CSS和JavaScript,后端的JAVA,数据库,操做系统等。也就是说,阿谁过程可以促使你去主动自修下面提到的系统科学常识,若是你再做别的两个项目,你就不会像如今如许无从下手,而有才能去停止许多手艺性的切磋,因而我认为那是两个十分好的练手项目。

1)必然要空出天数弥补理论科学常识

许多人会强调learn by doing,边做项目边自修,那也是我他们接纳的体例。在那种体例中,你急速犯错,矫正……自修效率十分高。但是,许多人走了极端,最初的成果就是不留意理论科学常识的自修。你会发现他们Google的才能越来越高,但是实在的程式设想才能并没有得到提拔。若是有那种情况,你必要深思一下。

一种可能是你过分于依赖各类成熟的架构,成果程式设想就酿成了用「胶水」去粘合不异的架构完成需求。就比如你的Web App用了SQLAlchemy,固然他们不太懂SQL,但是中文网站跑的也还不错。那那时候若是数据库呈现了问题,那你就只能跪了。

别的一种可能是你完全沉浸在做项目中,忽略了自补缀论科学常识。做项目固然充满困难,但回报是强烈的成就感,很容易沉浸此中。我觉得那是极其错误的。起首半路落发的开发人员都没有颠末系统的自修,没有构成他们的科学常识系统,若是你要学数据构造,算法复杂度,操做系统那些理论,那么你能到达的高度就极其有限。因而,在每晚做项目标同时,必然要包管抽出必然的天数,恶补理论科学常识。该些的引文在豆瓣和chan上都有许多总结,能够自行搜刮。

2)不要太纠结于无意义的问题,好比说什么架构好,XX语言比XX语言好啦那种问题。前期确定了练手项目,就去专心积累标识符量,积累根本科学常识。那些你如今还看要学的炫酷手艺你渐渐也就能晓得是怎么回事了,反而没有此根底,再炫酷的架构对你来说都是天书。

3)学会提问。好问题是创建在你他们已经理论或者思虑的此根底上问出来的,那是对他们的负责,也是对他人的尊重。不要一碰着困难就喜好间接上彀搜刮:「阿谁问题是怎么回事啊?」,「我不晓得你能不克不及帮我看看……」。

4)学好英语。

THE END

最初,给他们打个告白,若是学英语,必然要存眷我。

0
回帖 返回软件

若何系统地自学 Python? 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息