如何系统地自学 Python?

  是否很是想学好 Python,一方面被杂事纠缠,一直没能动手,另外一方面,担忧学习成本过高,内心默默敲着退堂鼓?python

  幸运的是,Python 是一门初学者友好的编程语言,想要彻底掌握它,你没必要花上太多的时间和精力。程序员

  Python 的设计哲学之一就是简单易学,体如今两个方面:正则表达式

  语法简洁明了:相对 Ruby 和 Perl,它的语法特性很少很多,大多数都很简单直接,不玩儿玄学。算法

  切入点不少:Python 可让你能够作不少事情,科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,总有一个是你感兴趣而且愿意投入时间的。编程

  废话很少说,学会一门语言的捷径只有一个: Getting Started安全

¶ 起步阶段

  任何一种编程语言都包含两个部分:硬知识和软知识,起步阶段的主要任务是掌握硬知识。网络

°1 硬知识

  “硬知识”指的是编程语言的语法、算法和数据结构、编程范式等,例如:变量和类型、循环语句、分支、函数、类。这部分知识也是具备普适性的,看上去是掌握了一种语法,实际是创建了一种思惟。例如:让一个 Java 程序员去学习 Python,他能够很快的将 Java 中的学到的面向对象的知识 map 到 Python 中来,所以可以快速掌握 Python 中面向对象的特性。数据结构

  若是你是刚开始学习编程的新手,一本可靠的语法书是很是重要的。它看上去可能很是枯燥乏味,但对于创建稳固的编程思惟是必不可少。框架

  下面列出了一些适合初学者入门的教学材料:数据结构和算法

  1「笨方法学 Python」:http://learnpythonthehardway....

  这本书在讲解 Python 的语法成分时,还附带大量可实践的例子,很是适合快速起步。

  2「廖雪峰的 Python 2.7 教程」:Home - 廖雪峰的官方网站

  Python 中文教程的翘楚,专为刚刚步入程序世界的小白打造。

  ❖「The Hitchhiker’s Guide to Python!」:The Hitchhiker’s Guide to Python!

  这本指南着重于 Python 的最佳实践,无论你是 Python 专家仍是新手,都能得到极大的帮助。

  3「Python 官方文档」:Our Documentation

  实践中大部分问题,均可以在官方文档中找到答案。

  4 辅助工具:Python Tutor

  一个 Python 对象可视化的项目,用图形辅助你理解 Python 中的各类概念。

  Python 的哲学:

  用一种方法,最好是只有一种方法来作一件事。

  学习也是同样,虽然推荐了多种学习资料,但实际学习的时候,最好只选择其中的一个,坚持看完。

  必要的时候,可能须要阅读讲解数据结构和算法的书,这些知识对于理解和使用 Python 中的对象模型有着很大的帮助。

°2 软知识

  “软知识”则是特定语言环境下的语法技巧、类库的使用、IDE的选择等等。这一部分,即便彻底不了解不会使用,也不会妨碍你去编程,只不过写出的程序,看上去显得“傻”了些。

  对这些知识的学习,取决于你尝试解决的问题的领域和深度。对初学者而言,起步阶段极易走火,或者在选择 Python 版本时徘徊不决,一下子看 2.7 一下子又转到 3.0,或者徜徉在类库的大海中没法自拔,Scrapy,Numpy,Django 什么都要试试,或者参与编辑器圣战、大括号缩进探究、操做系统辩论赛等无心义活动,或者成天跪舔语法糖,老想着怎么一行代码把全部的事情作完,或者去构想圣洁的性能安全通用性健壮性所有满分的解决方案。

  不少“大牛”都会告诫初学者,用这个用那个,少走弯路,这样反而把初学者推向了真正的弯路。

  还不如告诉初学者,学习原本就是个须要你去走弯路出 Bug,只能脚踏实地,没有奇迹只有狗屎的过程。

  选择一个方向先走下去,哪怕脏丑差,走不动了再看看有没有更好的解决途径。

  本身走了弯路,你才知道这么作的好处,才能理解为何人们能够手写状态机去匹配却偏要发明正则表达式,为何面向过程能够解决却偏要面向对象,为何我能够操纵每一根指针却偏要自动管理内存,为何我能够嵌套回调却偏要用 Promise...

  更重要的时,你会明白,高层次的解决方法都是对低层次的封装,并非任何状况下都是最有效最合适的。

  技术涌进就像波浪同样,那些陈旧的封存已久的技术,消退了早晚还会涌回的。就像如今移动端应用、手游和 HTML5 的火热,某些方面不正在重演过去 PC 的那些历史么?

  所以,不要担忧本身走错路误了终身,坚持并保持进步才是正道。

  起步阶段的核心任务是掌握硬知识,软知识作适当了解,有了稳固的根,粗壮的枝干,才能长出浓密的叶子,结出甜美的果实。

¶ 发展阶段

  完成了基础知识的学习,一定会感到一阵空虚,怀疑这些语法知识是否是真的有用。

  没错,你的怀疑是很是正确的。要让 Python 发挥出它的价值,固然不能停留在语法层面。

  发展阶段的核心任务,就是“跳出 Python,拥抱世界”。

  在你面前会有多个分支:科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,这些都不是仅仅知道 Python 语法就能解决的问题。

  拿爬虫举例,若是你对计算机网络,HTTP协议,HTML,文本编码,JSON一无所知,你能作好这部分的工做么?而你在起步阶段的基础知识也一样重要,若是你连循环递归怎么写都还要查文档,连 BFS 都不知道怎么实现,这就像工匠作石凳每次起锤都要思考锤子怎么使用同样,很是低效。

  在这个阶段,不可避免要接触大量类库,阅读大量书籍的。

°1 类库方面

  「Awesome Python 项目」:vinta/awesome-python · GitHub

  这里列出了你在尝试解决各类实际问题时,Python 社区已有的工具型类库,以下图所示:

  你能够按照实际需求,寻找你须要的类库。

  至于相关类库如何使用,必须掌握的技能即是阅读文档。因为开源社区大多数文档都是英文写成的,因此,英语很差的同窗,须要恶补下。

°2 书籍方面:

  这里我只列出一些我以为比较有一些帮助的书籍,详细的请看豆瓣的书评:

科学和数据分析:

  ❖「集体智慧编程」:集体智慧编程 (豆瓣)

  ❖「数学之美」:数学之美 (豆瓣)

  ❖「统计学习方法」:统计学习方法 (豆瓣)

  ❖「Pattern Recognition And Machine Learning」:Pattern Recognition And Machine Learning (豆瓣)

  ❖「数据科学实战」:数据科学实战 (豆瓣)

  ❖「数据检索导论」:信息检索导论 (豆瓣)

爬虫:

  ❖「HTTP 权威指南」:HTTP权威指南 (豆瓣)

Web 网站:

  ❖「HTML & CSS 设计与构建网站」:HTML & CSS设计与构建网站 (豆瓣)

  ...

  列到这里已经不须要继续了。

  聪明的你必定会发现上面的大部分书籍,并非讲 Python 的书,而更多的是专业知识。

  事实上,这里所谓“跳出 Python,拥抱世界”,实际上是发现 Python 和专业知识相结合,可以解决不少实际问题。这个阶段能走到什么程度,更多的取决于本身的专业知识。

¶ 深刻阶段

  这个阶段的你,对 Python 几乎了如指掌,那么你必定知道 Python 是用 C 语言实现的。

  但是 Python 对象的“动态特征”是怎么用相对底层,连自动内存管理都没有的C语言实现的呢?这时候就不能停留在表面了,勇敢的拆开 Python 的黑盒子,深刻到语言的内部,去看它的历史,读它的源码,才能真正理解它的设计思路。

  这里推荐一本书:

  「Python 源码剖析」:Python源码剖析 (豆瓣)

  这本书把 Python 源码中最核心的部分,给出了详细的阐释,不过阅读此书须要对 C 语言内存模型和指针有着很好的理解。

  另外,Python 自己是一门杂糅多种范式的动态语言,也就是说,相对于 C 的过程式、 Haskell 等的函数式、Java 基于类的面向对象而言,它都不够纯粹。换而言之,编程语言的“道学”,在 Python 中只能有限的体悟。学习某种编程范式时,从那些面向这种范式更加纯粹的语言出发,才能有更深入的理解,也能了解到 Python 语言的根源。

  这里推荐一门公开课

  「编程范式」:斯坦福大学公开课:编程范式

  讲师高屋建瓴,从各类编程范式的表明语言出发,给出了每种编程范式最核心的思想。

  值得一提的是,这门课程对C语言有很是深刻的讲解,例如C语言的范型和内存管理。这些知识,对阅读 Python 源码也有大有帮助。

  Python 的许多最佳实践都隐藏在那些众所周知的框架和类库中,例如 Django、Tornado 等等。在它们的源代码中淘金,也是个不错的选择。

¶ 最后的话

  每一个人学编程的道路都是不同的,其实大都异曲同工,没有迷路的人只有不能坚持的人。虽然听上去有点鸡汤,可是这是事实。

相关文章
相关标签/搜索