房地产大佬潘石屹,突然决定学Python了。
「人生苦短,我学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。在软件开发的初期,我建议你在VScode中安装Python扩展或使用Jupyternotebook;第二天:Github(6小时):探索Github,并创建一个代码仓库。尝试提交(Commit)、查看变更(Diff)和上推(Push)你的代码。另外,还要学习如何利用分支工作,如何合并(merge)不同分支以及如何在一个项目中创建拉取请求(pullrequest);第三天:第一个项目——简单计算器(4小时):熟悉Tkinter,创建一个简单的计算器;第四、五、六天:个人项目(每天5小时):选定一个项目并完成它;第七天:托管项目(5小时):学习使用服务器和hosting服务来托管你的项目。创建一个Heroku设置并部署你构建的应用程序。在第二周接触项目是为了让你独立思考,学会将课程中的理论转化到实际应用当中去。
第三周:让自己成为一名程序员
第3周的目标是熟悉软件开发的整体过程。这个阶段不用掌握所有的知识,但是应该初步了解一些常识:
第一天:数据库基础(6小时):基本SQL查询(创建表、选择、Where查询、更新)、SQL函数(Avg、Max、Count)、关系数据库(规范化)、内连接、外连接等第二天:使用Python数据库(5小时):利用一种数据库框架(SQLite或panda),连接到一个数据库,在多个表中创建并插入数据,再从表中读取数据;第三天:API(5小时):如何调用API。学习JSON、微服务(micro-service)以及表现层应用程序转换应用程序接口(RestAPI);第四天: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),如何设置和查看日志,以及使用断点调试。第四周:认真考虑工作(实习)问题