随着数据科学概念的普及,Python 这门并不算新的语言火得一塌糊涂。因为写了几篇用 Python 做数据分析的 文章,经常有读者和学生在留言区问我,想学习 Python,该如何入手?我经常需要根据他们的不同情况,提出对应的建议。这样针对性虽强,但效率不高。这个问题,我还是写出来,让更多的人一同看到吧。
有几位出版社的编辑,给我发私信,鼓励我赶紧写一本 Python 教材出来。我暂时还没有写 Python 基础教程的计划。因为在我看来,现有的学习资源已经足够好了。
但是,有这么多现成的资源和路径,为什么许多人依然在为学 Python 犯愁呢?因为学习有个效率问题。Python 语法清晰明快,简单易学,这是 Python 如此普及的重要原因。但是,选择合适的 Python 学习方式,需要跟你自身的特性相结合。
人群划分的标准是什么?不是你是否计算机相关专业,也不是你是否已经工作,而是一个重要的指标——你的自律能力。
你可能觉得我说的话没有信息含量。自律能力强,学得更好,地球人谁不知道?可是,自律不够强的人,难道就注定什么也不能学了?当然不是。
每个人的性格都有不同的特点,没有绝对的高下之分。不信你听听刘宝瑞先生的相声《日遭三险》,就明白了。自律能力也是这样。只要你能清楚认识自己,就能以更高效的方法来学习新知识和技能。
下面我们分类探讨一下,不同自律能力的人,该如何学 Python,才能更高效。我为大家准备了三种完全不同的路径,相信你能找到适合你的那一种。
路径 I:适合自律能力最差的人
咱们先从自律能力最差的人说起。
这样的同学,往往是三分钟热度。偶然受到了刺激,发奋要学习 Python,以便投入数据科学的事业中。他会立即跑到图书馆或者书店抱回来一本《X 天从入门到精通 Python》的书开始啃。结果 X 天还没到,就顺利跑完了从入门到放弃的全过程。
你没能坚持下来,自己肯定是有责任的。但是问题,在于过度高估自己的自律能力。这样的同学,我推荐你到 Coursera 平台上,按部就班学习一门非常好的 MOOC——Programming for Everybody。
推荐这门课,是因为课程质量真是太好了。首先是教材好。这本教材的来源是有故事的。先是 Allen B. Downey 写了一本开放书籍 Think Python: How to Think like a Computer Scientist。
这本书在Amazon上的评价是这样的:
Charles Severance 觉得这本书写得太好了,想把它作为教材。于是征得作者同意,大篇幅借鉴了这本书的内容架构,编写了一本 Python for Informatics。
Charles 写作这本书的时候,同时开放推出了 iBooks 格式,里面就包含了自己的授课视频,供学生直接观看学习。
后来,Charles 用这本书扩展,做成了一门 MOOC。2015年上线不久,硅谷资深工程师就都争相学习。
Charles 深谙课程迭代的技艺。他不断添加内容,完善课程体系,将一门课发展成一个专项课程(Signature Track),并且将教材升级为 Python for Everybody: Exploring Data In Python 3。
在目前全球 MOOC 口碑榜上,Charles 的这门课一直名列前茅。
这个专项课程深入浅出讲解 Python 本来就很简单的语法,而且还用数据科学的一些基础工作任务,带动你去使用 Python 语言写简单项目。这种扎实的训练过程可以增强你的信心,激发兴趣。
对于自律程度低的同学来说,下面这个特性更重要:一切工作都有时限。
Coursera 上的课程,每周的任务很明确。练习题正确率如果不能达到 80%,就不能过关。到了截止日期,如果你不能完成全部练习和课程项目,就拿不到证书。
老师在前面引领你,助教在旁边督促你,平台用时间表提醒你,论坛上的同学们在用同侪压力推挤你……想偷懒?想三天打鱼两天晒网?很难。
路径 II:适合自律能力中等偏上的人
如果你的自律能力中等偏上,那么你可以选择的面就宽了。
这里我给你推荐另一个MOOC平台,叫做 Datacamp。
我第一次接触 Datacamp,是在 2015 年初。那时我在 Coursera 上选修杜克大学的统计学课程「Statistical Inference」,配套的练习就在 Datacamp 上。
当时这个平台就给我留下了非常深刻的印象,因为代码的运行都采用了云环境。学习者不需要在本机安装任何环境,一个支持 HTML5 标准的浏览器就能带给你完整的学习体验。
对初学者来说,这种入门方式太好了。要知道,许多人的学习热情,就是被环境配置和依赖软件包安装的坑埋掉的。
两年之后,Datacamp 已经迭代得更为强大。你可以打开首页的 Data Scientist with Python 这个学习路径,查看其中已经提供的 20 门课程。
这些课程涵盖了从 Python 基础,到数据处理,直至人工智能和深度神经网络的方方面面。
所有的课程设计,都是短小精悍的。一般不超过 4 个小时,就可以完成某一主题的学习。这样你学起来毫不费力,可以在相当短的时间内获得反馈(练习题自动评分)和成就感(证书)。
这个平台的课程,进度完全由学习者自己掌控。所以我把它归纳为适合有一定自律能力的学习者。它既可以给你即时的回馈,让你时刻了解自己所处的位置进度,不会迷失方向,又能充分体验自主学习的乐趣。
Datacamp 的课程,一般都是第一部分免费开放。后面部分购买后才能解锁学习。如果你对自己的学习能力和毅力有信心,可以购买一个完整时间段(例如一年)的课程。在此期间,所有平台上的课程,你都可以学习,并且可以在通过后获取证书。这样的购买方案本身已经有优惠,而且每年都会有特定时段的大幅打折促销,非常划算。建议放到购物车里面多关注。
这是我在 Datacamp 拿到的深度学习框架 Keras 课程证书,确实只需要几个小时的时间就能学完,成就感还是蛮强的。
路径 III:适合自律能力强的人
前面提到的课程费用不菲。Coursera 上每门课平均价格在 49 美元左右。对来自发展中国家的学生群体,Coursera 可以提供助学金。你可以根据自己的需求如实填写申请表,来获得资助。
对于自律能力强的同学来说,你的选择可以变得非常简单直接——可以用最受推崇的教材,自己看书学习。
最受推崇的教材,其实是没有的。正如西谚有云:
One man’s meat, is another man’s poison.
这个世界上,就没有哪件东西大家都说好。但口碑非常好的教材是存在的,例如这本起了个怪名字的《笨办法学Python》(Learn Python the Hard Way)。
千万不要被名称迷惑,望文生义觉得这是一本糟糕的 Python 入门教程。恰恰相反,这本书的设计,非常适合人们的认知规律。
我们学东西,由浅入深,由易到难,逐步递进。如果一味追求新知,那么之前学的东西会很快遗忘。如果总是原地打转,会带来枯燥和无聊的感觉。还记得高三做的那一年卷子吧?
好的教科书,应该在每一个章节给学习者提供新的知识和内容,提出足够的挑战。但是挑战性不能高到让学习者产生挫败感而放弃。同时也不能忽视在后续内容中把前面所学知识改换面目不断螺旋上升式重复出现。只有这样才能巩固所学,让学习者感受到基础知识的作用,增强学习的愉悦感。
这么说有些抽象,实际上有一本英语教材非常符合上述认知规律,就是我在课堂上和文章里反复推荐过的这一套教材:
《笨办法学Python》也是一本这样的书。你需要做的就是把书打开,同时打开一个好用的代码编辑器,开始按书中要求敲代码、运行代码、改代码……
下图是我当初学习时,照着这本书敲的代码。
书中对 Python 基础内容训练的完备性,至今无出其右者。顺便说一句,这本书有中文版哦。所以如果你英语不好,完全不用担心。
嘱咐一句,英语真该好好学。拓宽的不仅是你的眼界,也增加了你可能获得的机会。考虑到仔细阅读这部分的读者都是自律性很强的人,我就不用多说了。
挑战
三条基本的 Python 入门路径讲完了。通过对自己自律能力的清晰理解,相信你可以找到一种适合自己逐渐学习和掌握 Python 的方式。
但是完成了读书和听课,是不是就完事大吉了?当然不是。
许多人在这里犯了错误。他们以为拿到了证书,或学完了教材,就算是真正掌握 Python。然后把这门语言丢弃在一旁,去刷美剧和小说了。相信我,你会遗忘的。如果你对于长期不接触的东西从不遗忘……去医院检查一下吧。大部分人的记忆模式,都是这个样子的:
若不加以干涉,不出一个星期,你就能把学到的新知识几乎忘光。如果你不希望自己辛苦学来的 Python 知识被如此轻易浪费掉,怎么办?
实践
你应该实践。
实践 Python 技能,未必一定要找个世界 500 强企业的核心技术部门,「996」工作 N 年才能完成。你可以从生活中寻找各种有趣的问题,然后思考能否用 Python 编程来解决它。
我真正觉得自己初步掌握了 Python,就是在完成了我的第一个 Github 项目之后。
项目非常简单,就是用 Python 作为胶水语言,把一系列工具连接在一起。可以把 Markdown 撰写的内容随心所欲一键变化成各种格式。
格式包括而不限于:
PDF/LaTeX;
Word;
Bitcron 文稿;
MarkEditor 文稿;
MWeb 文稿;
Bear 文稿;
TextBundle(可以导入 MindNode, Ulysses 等);
Reveal.js 幻灯;
发布版本 Markdown(图片一键至七牛图床);
本地版本 Markdown(简书等远程 Markdown 同步图片至本地);
Day One 日记。
其中部分功能我正陆续发布在 Github 公开项目中,地址在 这里。
这个小项目,我从 2014 年开始做。实话实说,现在回头看当时的代码,简直惨不忍睹。但是如果你逐渐对自己你可以从生活中寻找各种有趣的问题,然后思考能否用 Python 编程来解决它。你可以从生活中寻找各种有趣的问题,然后思考能否用 Python 编程来解决它。你可以从生活中寻找各种有趣的问题,然后思考能否用 Python 编程来解决它。你可以从生活中寻找各种有趣的问题,然后思考能否用 Python 编程来解决它。你可以从生活中寻找各种有趣的问题,然后思考能否用 Python 编程来解决它。你可以从生活中寻找各种有趣的问题,然后思考能否用 Python 编程来解决它。的代码有了这种感觉,证明你在进步。
不要指望自己一出手就能写出完美的代码,要把「迭代」两个字时刻装在心里。这样你才能容忍自己的笨拙,不断提高。正如古人说的那句:
勤学似春起之苗,不见其增,而日有所长。
我在做这个项目的过程中,曾经遇到了中文编码、隐私信息存储、文件名空格处理、绝对与相对路径、发布流程划分、功能解耦合、Web 图片地址附带参数……等等一系列的问题。
通过回顾用 Git 版本控制工具记载下来的日志,以及版本对比功能,你可以清楚看到自己是在何时利用什么方法解决了这些问题。然后别忘了,给自己工具箱里的新增小技能打个勾。
一个个小问题逐渐被你攻克的时候,你才能真正感受到所学技能的价值,并且点滴积累自信。