「人生苦短,我学 Python」是众多和计算机科学有些接触的同学耳熟能详的段子,不过最近这一风潮有了蔓延的趋势。11 月 14 日,著名房地产商、SOHO 中国董事长潘石屹在微博上发表了一段宣言:
潘石屹的大名常会出现在很多新闻报道中。在 2019 年福布斯全球亿万富豪榜上,张欣、潘石屹家族排名第 107 位,财富值 215.7 亿元人民币。年过 50 的房地产老总,现在也要搞人工智能了吗?这一消息迅速引来人们的关注和转发。
或许是为自己学习 Python 的行为进行充分解释,又或许是想号召更多人加入这一行列。在发出「我要学 Python」这条微博一天以后,潘总又为学习 Python 找到了一些理由。
潘石屹认为 Python 是计算机语言里「进化最好的一种」。
很多人都知道,随着人工智能和数据科学的快速发展,Python 正在成为计算机领域里最流行的编程语言。在今年 9 月 IEEE 最新发布的编程语言排行榜中,Python 在趋势、开源、职位需求等方面均排在第一。
当然,Python「职位需求大」显然跟潘总没什么关系。在知乎上,人们对于这一事件展开了讨论,有人指出在地产行业里,收集、分析数据正在变得越来越重要。使用 Python 语言进行爬虫、数据分析、机器学习算法预测是非常重要的技能。至少在学会这门编程语言后,潘总可能就不再会那么容易被 ppt 上的数字骗了。
潘石屹曾经研究过摄影、木工,如今又开始进入编程领域,其背后肯定有着很深的思考。
人生苦短,我用 Python
潘石屹大佬都选择学习 Python,究竟为什么有这么大的魔力?与其他一些编程语言相比,Python 语言又具备哪些显著的优势呢?
Python 语言简单易用、逻辑明确并拥有海量的扩展包,因此不仅成为机器学习与数据科学的首选语言,同时在网页、数据爬取可科学研究等方面成为不二选择。此外,很多入门级的机器学习开发者都是跟随大流选择 Python。
具体而言,与其他编程语言相比,Python 具有以下几方面的特征:
其一,Python 相对易于学习。我们都清楚,编程很难,因此从绝对意义上来说,除非你已经拥有编程经验,否则编程语言难以学习。但相对而言,Python 的高级属性、语法可读性和语义直白性使得它比其他语言更容易学习。Python 社区非常强调遵循样式规定和编写「Python 式的」代码,这意味着相比使用其他语言的程序员而言,Python 程序员更倾向于使用一致的命名规定、行的长度、编程习惯和其他许多类似特征,它们共同使别人的代码更易阅读。
其二,Python 是一种高级语言。与其他许多语言相比,Python 是一种相对「高级」的语言:它不需要(并且在许多情况下,不允许)用户担心太多底层细节,而这是其他许多语言需要去处理的。此外,Python 倾向于隐藏需要在底层语言中明确表达的各种死记硬背的声明。这使得我们可以编写非常紧凑、清晰的代码。
其三,Python 是一种通用语言。根据设计,Python 是一种通用的语言。也就是说,它旨在允许程序员在任何领域编写几乎所有类型的应用,而不是专注于一类特定的问题。在这方面,Python 可以与(相对)特定领域的语言进行对比,如 R 或 PHP。这些语言原则上可用于很多情形,但仍针对特定用例进行了明确优化。
其四,Python 是一种(相对)快速的语言。从表面上看,Python 是一种快速语言的说法看起来很愚蠢。因为在标准测试时,和 C 或 Java 这样的编译语言相比,Python 通常会卡顿。毫无疑问,如果速度至关重要,Python 可能不会成为你最优选择的语言,甚至不会是第二好的语言。但在实际中,许多科学家工作流程中的限制因素不是运行时间而是开发时间。一个花费一个小时运行但只需要 5 分钟编写的脚本通常比一个花费 5 秒钟运行但是需要一个礼拜编写和调试的脚本更合意。
其五,Python 是天生面向对象的。即使你正在做的只是编写一些简短的脚本去解析文本或挖掘一些数据,Python 的许多好处也很容易领会到。在你开始编写相对大型的代码片段前,Python 的最佳功能之一可能并不明显:Python 具有设计非常优雅的基于对象的数据模型。事实上,如果你查看底层,你会发现 Python 中的一切都是对象。甚至函数也是对象。
最后,很多人选择 Python 是冲着 Python 社区的。在这里,Python 学习者既可以自由地获得服务和 Python 资源,相互之间也可以进行自由的互动和交流。
Python 入门:把大象装进冰箱总共分几步?
既然 Python 是一门非常重要的编程语言,那么入门它有多难?在很多人看来,Python 是一门用较短时间就能掌握的编程语言。至于学习 Python 的时间,有人说是一个月,有人说是一周,还有人说一天就行。当然,学习 Python 也需要一点计算机理论知识和编程实践经验作为基础,但一天之内上手 Python 的人确实不在少数。
这里介绍一种「一个月从入门到精通」的学习方法。看似天数不多,但如果每天都拿出 6-7 个小时认真学习,也是能精进不少的,而且能够有一个比较扎实的基础。
首先你要确定好目标,第一个月的目标最好不要太过「沉重」,比如:
熟悉基本概念(变量,条件,列表,循环,函数)
练习超过 30 个编程问题
利用这些概念完成两个项目
熟悉至少 2 个框架
开始使用集成开发环境(IDE),Github,hosting,services 等
然后我们应该把这个月度计划细化为周计划,再将周计划拆分为天计划,这样才能更好地落实:
第一周:熟悉 Python
第一天:基本概念(4 小时):print,变量,输入,条件语句;
第二天:基本概念(5 小时):列表,for 循环,while 循环,函数,导入模块;
第三天:简单编程问题(5 小时):交换两个变量值,将摄氏度转换为华氏温度,求数字中各位数之和,判断某数是否为素数,生成随机数,删除列表中的重复项等等;
第四天:中级编程问题(6 小时):反转一个字符串(回文检测),计算最大公约数,合并两个有序数组,猜数字游戏,计算年龄等等;
第五天:数据结构(6 小时):栈,队列,字典,元组,树,链表;
第六天:面向对象编程(OOP)(6 小时):对象,类,方法和构造函数,面向对象编程之继承;
第七天:算法(6 小时):搜索(线性和二分查找)、排序(冒泡排序、选择排序)、递归函数(阶乘、斐波那契数列)、时间复杂度(线性、二次和常量)。
在第一周的学习结束后,千万不要急着安装 Python 环境,因为很多人都在语言工具包和 IDE 安装失败后逐渐失去了学习欲望。你可以使用几个安卓 App 来继续探索,比如编程英雄或者在线代码游乐场、 Repl等等
第二周:开始软件开发(构建项目)
如果你在第一周已经夯实了基础,那么第二周就可以朝着软件开发任务进军了:
第一天:熟悉一种 IDE(5 小时): IDE 是你在编写大型项目时的操作环境,所以你需要精通一个 IDE。在软件开发的初期,我建议你在 VS code 中安装 Python 扩展或使用 Jupyter notebook;
第二天:Github(6 小时):探索 Github,并创建一个代码仓库。尝试提交(Commit)、查看变更(Diff)和上推(Push)你的代码。另外,还要学习如何利用分支工作,如何合并(merge)不同分支以及如何在一个项目中创建拉取请求(pull request);
第三天:第一个项目——简单计算器(4 小时):熟悉 Tkinter,创建一个简单的计算器;
第四、五、六天:个人项目(每天 5 小时):选定一个项目并完成它;
第七天:托管项目(5 小时):学习使用服务器和 hosting 服务来托管你的项目。创建一个 Heroku 设置并部署你构建的应用程序。
在第二周接触项目是为了让你独立思考,学会将课程中的理论转化到实际应用当中去。
第三周:让自己成为一名程序员
第 3 周的目标是熟悉软件开发的整体过程。这个阶段不用掌握所有的知识,但是应该初步了解一些常识:
第一天:数据库基础(6 小时):基本 SQL 查询(创建表、选择、Where 查询、更新)、SQL 函数(Avg、Max、Count)、关系数据库(规范化)、内连接、外连接等
第二天:使用 Python 数据库(5 小时):利用一种数据库框架(SQLite 或 panda),连接到一个数据库,在多个表中创建并插入数据,再从表中读取数据;
第三天:API(5 小时):如何调用 API。学习 JSON、微服务(micro-service)以及表现层应用程序转换应用程序接口(Rest API);
第四天:Numpy(4 小时):熟悉 Numpy并练习前 30 个 Numpy 习题:https://github.com/rougier/numpy-100/blob/master/100_numpy_excercises.md;
第五、六天:作品集网站(一天 5 小时):学习 Django,使用 Django 构建一个作品集网站(https://realpython.com/get- start-with-django -1/),也要了解一下 Flask 框架;
第七天:单元测试、日志、调试(5 小时):学习单元测试(PyTest),如何设置和查看日志,以及使用断点调试。
第四周:认真考虑工作(实习)问题
第 4 周的目标是认真思考如何用 Python 拿到 offer。即使你现在不想找工作,你也可以在这个过程中思考出很多有价值的结论。
第一天:准备简历(5 小时):制作一份一页的简历。把你的技能总结放在最上面,必须在写项目的同时附上 Github 链接;
第二天:作品集网站(6 小时):写几个博客,将它们添加到你之前开发的作品集网站中;
第三天:LinkedIn 简介(4 小时):创建一个 LinkedIn 个人简介,把简历上的所有内容都放到 LinkedIn 上;
第四天:面试准备(7 小时):准备一些谷歌常见的面试问题,练习白皮书中的 10 个面试编程问题。在 Glassdoor、Careercup 等网站中查看前人遇到的面试问题;
第五天:社交(~小时):走出房门,开始参加聚会、招聘会,与其他开发人员和招聘人员见面;
第六天:工作申请(~小时):搜索「Python Job」,查看 LinkedIn Job 和本地求职网站。选择 3 个工作岗位并发送工作申请。为每个工作定制你的简历。在每个工作要求中找出 2 到 3 件你不知道的事情,并在接下来的 3-4 天里学会它们;
第七天:在拒绝中学习(~小时):每次你被拒绝的时候,找出两件为了获得这份工作你应该知道的事情,然后花 4-5 天 的时间来掌握它们。这样,每次拒绝都会让你成为更好的开发人员。
以上是一个非常完美的学习周期,时间是 28 天。如果你是名课程繁重的学生、或者是需要花很多精力去参加社会活动的职场人士,抑或你和潘石屹一般今年也已经 56 岁了——这个学习周期也可以拉长,但是要记住,不能半途而废。