零基础小白如何高效系统地自学Python?十年经验程序员亲授学习路径!

你是否非常想学好 Python,一方面被琐事纠缠,一直没能动手,另一方面,担心学习成本太高,心里默默敲着退堂鼓?

如果你一直想学Python,但是不知道如何入手,那就别犹豫了。这篇文章就是为你写的。

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

Python 的设计哲学之一就是简单易学,体现在两个方面:

  1. 语法简洁明了:相对 Ruby 和 Perl,它的语法特性不多不少,大多数都很简单直接,不玩儿玄学。
  2. 切入点很多:Python 可以让你可以做很多事情,科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,总有一个是你感兴趣并且愿意投入时间的。

一、Python是一门怎么样的语言,为什么很多人都推荐?

Python是一种重要的编程语言,它在数据科学,Web开发,软件工程,游戏开发,自动化等领域得到了广泛的应用。但是学习Python的最好方法是什么?

学习Python时,挑战最大的事情就是所有学习网站的枯燥生硬。比如说你想学习如何使用Python进行网站制作,但几乎每个网站都让你花很长时间学习枯燥乏味的Python语法,然后进阶到下一步。

这种不匹配使学习Python对新人来说非常令人生畏。

拿下面这个例子来说:

这段代码来自Django的教程,一个流行的Python网站开发框架。经验丰富的Python程序员会觉得这很简单啊。

但是,即使是看似简单的几行代码也会让新人明显感觉不适。例如,为什么某些行缩进?

django.http

是干嘛用的?括号中的东西又是干嘛用的?

问题在于你需要了解Python语言的构建基块才能写出有趣的东西。但大多数教程都假定您需要学习 所有的 Python语法,然后才能开始做任何有趣的事情。当您真正想做的是分析数据,建立网站或创建无人机时。这就是导致你的动机消退的原因。

所以根据我的理解,学习Python的有效方法是将学习基础知识与构建有趣事物相结合。宗旨就是花尽可能少的时间来学习基础知识,然后立即投入到自己感兴趣的事物中。

步骤1:找出促使你学习Python的动机

在开始在线学习Python之前,问自己为什么要学习它。这是因为这将是一个漫长而痛苦的过程。没有足够的动力,你可能无法坚持到最后。

弄清楚动机的好处是可以帮助你弄清楚最终目标,以及一条学习起来轻松有趣的路线。在准备学习Python时,不用有一个确切的项目,一个你感兴趣的领域就可以。例如:

  • 机器学习
  • 人工智能
  • 网站制作
  • 游戏类
  • 数据处理与分析
  • 硬件/传感器/机器人
  • 自动化工作脚本

步骤2:学习基本语法

步骤3:进行结构化项目练习

步骤4:自行探索Python发展路线

废话不多说,学会一门语言的捷径只有一个: Getting Started

二、起步阶段

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

①硬知识:

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

Python基础需要学习的内容主要包括以下几个方面:

1.Python语言基础语法:

  • 数据类型:包括整数、浮点数、字符串、列表、元组、字典、集合等。
  • 字符编码:理解ASCII、Unicode等编码方式。
  • 变量:学习如何定义和使用变量。
  • 流程控制:包括条件语句(if、elif、else)、循环语句(for、while)等。
  • 运算符:算术运算符、比较运算符、逻辑运算符等。
  • 输入输出:使用input()函数进行输入,使用print()函数进行输出。
  • 文件操作:文件的打开、读写、关闭等。

2.函数和常用模块:

  • 函数定义和调用。
  • 装饰器原理和使用。
  • 高阶函数、迭代器与生成器。
  • 常用模块如re(正则模块)、os/sys模块、subprocess模块等。

3.面向对象编程:

  • 面向对象和类介绍。
  • 创建类、经典类与新式类。
  • 面向对象的三大特性:封装、继承、多态。
  • 类的成员:字段、方法、属性等。

4.网络编程基础:

  • Python模块SocketServer使用和源码剖析。
  • GIL(Global Interpreter Lock,全局解释器锁)内部机制。
  • 线程锁、事件、生产者消费者模型等。

5.数据库、缓存、队列:

  • Python操作数据库,如MySQL的基本使用,包括创建数据库、增删改查等。
  • 缓存技术,如Redis、Memcache的基本使用。
  • 消息队列,如RabbitMQ的基本使用。

6.环境搭建和入门工具:

  • 安装Python环境,配置环境变量。
  • 使用Python自带的IDLE编辑器或其他集成开发环境(IDE),如Sublime Text、PyCharm等。

7.其他基础知识点:

  • 字符串格式化。
  • 三元运算。
  • 集合运算(交集、并集、差集等)。
  • 列表推导式、字典推导式等。

如果你是刚开始学习编程的新手,一本可靠的语法书是非常重要的。它看上去可能非常枯燥乏味,但对于建立稳固的编程思维是必不可少。

下面列出了一些适合初学者入门的教学材料:

Python 的哲学:

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

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

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

②软知识:

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

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

很多“大牛”都会告诫初学者,用这个用那个,少走弯路,这样反而把初学者推向了真正的弯路。
还不如告诉初学者,学习本来就是个需要你去走弯路出 Bug,只能脚踏实地,没有奇迹只有狗屎的过程。

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

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

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

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

因此,不要担心自己走错路误了终身,坚持并保持进步才是正道。

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

三、发展阶段

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

没错,你的怀疑是非常正确的。要让 Python 发挥出它的价值,当然不能停留在语法层面。
发展阶段的核心任务,就是“跳出 Python,拥抱世界”。

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

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

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

类库方面:

「Awesome Python 项目」:vinta/awesome-python · GitHub
这里列出了你在尝试解决各种实际问题时,Python 社区已有的工具型类库,如下图所示:

vinta/awesome-python

你可以按照实际需求,寻找你需要的类库。

至于相关类库如何使用,必须掌握的技能便是阅读文档。由于开源社区大多数文档都是英文写成的,所以,英语不好的同学,需要恶补下。

书籍方面:

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

科学和数据分析:

❖「集体智慧编程」:集体智慧编程 (豆瓣)
❖「数学之美」:数学之美 (豆瓣)
❖「统计学习方法」:统计学习方法 (豆瓣)
❖「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 等等。在它们的源代码中淘金,也是个不错的选择。

五、自学编程需要注意的问题

很多人都推荐小白第一门语言选Python,因为语法简单。这句话只说了一半,Python确实容易上手,对初学者的门槛很低。

但我发现,对于小白真正的门槛在于系统知识,这就和用什么语言完全没有任何关系了。

例如很多人学完了Python的语法,觉得确实简单,但是转头去用Python标准库的时候,却发现自己连文档都看不懂。标准库提供了Python和其它系统功能的接口,最终实现了Python和系统之间的互动。

读标准库需要系统知识,比如操作系统,数据库,进程和线程,socket编程,网络协议等等,这些对于编程小白来才构成很高的门槛,但是只有学会这些,才能真正发挥出Python的威力来。

这也是我觉得自己的经历对小白是有价值的一个原因。因为设计一个动态的网页是一个很不错的练手Project。

建立网页(Web App)会逼迫你了解从你在浏览器里键入地址按下回车到网页显示在浏览器的过程中,浏览器,网络,服务器都干了些什么。具体到技术上面,你不得不去学习前端的HTML,CSS和JavaScript,后端的脚本,数据库,操作系统等。

也就是说,这个过程能够促使你去主动学习上面提到的系统知识,如果你再做另外一个项目,你就不会像现在这样无从下手,而有能力去进行一些技术性的探讨,所以我认为这是一个非常好的练手项目。

1)一定要空出时间补充理论知识

很多人会强调learn by doing,边做项目边学习,这也是我自己采用的方式。在这种方式中,你不断犯错,改正……学习效率非常高。但是,很多人走了极端,最后的结果就是不注意理论知识的学习。你会发现自己Google的能力越来越高,但是真实的编程能力并没有得到提升。如果有这种情况,你需要反思一下。

一种可能是你太过于依赖各种成熟的框架,结果编程就变成了用「胶水」去粘合不同的框架完成需求。就好比你的Web App用了SQLAlchemy,虽然自己不太懂SQL,但是网站跑的也还不错。这时候如果数据库出现了问题,那你就只能跪了。

另外一种可能是你完全沉浸在做项目中,忽略了学习理论知识。做项目虽然充满困难,但回报是强烈的成就感,很容易沉浸其中。我觉得这是极其错误的。首先半路出家的程序员都没有经过系统的学习,没有形成自己的知识体系,如果你不懂数据结构,算法复杂度,操作系统这些理论,那么你能达到的高度就极其有限。所以,在每天做项目的同时,一定要保证抽出一定的时间,恶补理论知识。这部分的书单在豆瓣和知乎上都有很多总结,可以自行搜索。

2)不要太纠结于无意义的问题

比如什么框架好,XX语言比XX语言好啦这种问题。前期确定了练手项目,就去专心积累代码量,积累基础知识。那些你现在还看不懂的炫酷技术你慢慢也就能明白是怎么回事了,反而没有基础,再炫酷的框架对你而言都是天书。

3)学会发问

好问题是建立在你自己已经实践或者思考的基础上问出来的,这是对自己的负责,也是对别人的尊重。不要一遇到困难就喜欢直接上网搜索:「这个问题是怎么回事啊?」,「我不明白你能不能帮我看看……」。

4)学好英语

最后的话:

每个人学编程的道路都是不一样的,其实大都殊途同归,没有迷路的人只有不能坚持的人!

希望想学 Python 想学编程的同学,不要犹豫了,看完这篇文章,

Just Getting Started !!!

六、关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。

如果你也想自学Python,可以关注我。我会把踩过的坑分享给你,让你不要踩坑,提高学习速度,还整理出了一套系统的学习路线,这套籽料涵盖了诸多学习内容:开发工具,基础视频教程,项目实战源码,51本电子书籍,100道练习题等。相信可以帮助大家在最短的时间内,能达到事半功倍效果,用来复习也是非常不错的。

学习获取方式:↓↓↓↓
1.关注公众号:萧晓编程百事通
2.在后台发送:“学习” 即可免费领取

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值