1.1 认识Python
当读到这本书时,想必你已经对编程有所了解,同时已经选择了Python作为你此时的学习语言。在本节,我们将重新认识编程,了解Python语言的产生,还将探讨Python有什么特点、我们为什么选择学习Python,以及如何学好Python。了解这些内容对你以后的学习是至关重要的。
1.1.1 什么是编程
计算机是20世纪最伟大的发明之一,它对人类的生产和生活产生了极其重大的影响。计算机程序通过调度复杂的指令,来完成人们预期要执行的工作内容。计算机并不“聪明”,但它“勤奋”,它可以不间断地重复执行我们想要的操作。
计算机集成了一系列指令,能够让人们通过发出指令来完成相应的操作,这些指令就是所谓的机器语言。为了使程序员更加简单、准确地发出指令,人们开发了一系列从不同层面对计算机进行操作的编程语言。这些语言会让代码更加符合人类的表达习惯,能够清晰地表达功能意图、操作逻辑和控制流程,这样程序员就不用在理解和修改代码上花费大量的时间,编程的门槛大大降低了。
基于以上目标,编程语言朝着更加符合自然语言、代码更加短小、逻辑封装更好、命名规范更有约束力等方向发展。同时,倾向于用一种语言解决更多的问题,而不是只解决特定的问题,这也是C、Java、Python、JavaScript等语言在近些年大行其道的原因。
更严格地讲编程应该称为程序设计,它是人类进行的创造活动,人们设计出精妙的逻辑来解决现实中复杂的问题。我们再来讨论一下程序到底做了什么。
程序会根据我们编写的源代码顺序执行,在执行过程中会自己产生或者从外部读取数据,这些数据遵循程序语言规定的数据结构要求,在你设计的需要判断的地方做出条件判断,通过判断跳转到指定的地方继续执行,如此反复循环运行。一个程序在相同的环境下,能够以相同的方法执行,得到相同的结果,从而达到稳定输出的目的。
程序解决的是现实生活中的问题,它对现实中的问题进行抽象,建立一个解决问题的模型。不同的语言在抽象问题、解决问题时的思路是不一样的。有的语言把解决问题的方法抽象为一个工具,你只要给这个工具输入相应的数据和命令就能得到解决后的结果;有的语言把问题抽象为一个对象或者物体,为它赋予生命,使它有相关的属性和功能,解决问题时执行这个对象相应的功能即可。
1.1.2 Python的诞生
1989年的圣诞节期间,在荷兰数学和计算机科学研究学会工作的吉多·范罗苏姆(Guido van Rossum)为了打发百无聊赖的时光,寻找一个“课余”的编程项目。
吉多1956年生于荷兰,他热爱数学与编程。1974年,他在国际数学奥林匹克竞赛中获得铜牌。他于1982年从阿姆斯特丹大学获得数学和计算机科学硕士学位后,一直在研究机构工作。
在那个年代,IBM和苹果推出了个人计算机,掀起了个人计算机的浪潮。但当时的计算机配置非常低,为了让程序正确、流畅地运行,程序员需要像计算机一样思考,尽可能让代码与硬件底层交流,使计算机少花时间和资源理解代码。虽然许多研究机构开发出了众多性能非常出色的编程语言,但其学习和理解难度让个人计算机用户望而却步。
吉多也为上述问题苦恼,于是在ABC语言的启发下,他打算开发一门新的编程语言。ABC语言是当时吉多供职的机构研发的,他也曾参与开发。ABC语言的设计目标是教学和创建程序原型,它有良好的可读性。当然,ABC语言存在着扩展性差、功能残缺、设计激进、安装困难等问题。
随着技术的不断迭代,更好的中央处理器、更加直观的视窗操作系统得到普及,程序员们开始关注编程语言的易用性。
在吉多的设想中,新的语言应该像C语言一样功能全面,同时像ABC等指令式语言一样易读易写,从而能够激发人们学习编程的兴趣。
他将这门新语言命名为Python,这个名字取自他喜欢的《蒙提·派森的飞行马戏团》(Monty Python’s Flying Circus),这是英国BBC播出的电视系列喜剧。虽然后来Python的官方标识采用的元素是单词python的原意“蟒蛇”,但它不是Python名称的起源。
经过一年多的开发,1991年2月吉多发布了版本号为0.9.0的初版代码,直到1994年1月他才发布1.0版本。2.0版本于2000年10月16日发布,之后Python由个人开发转向社区开发,依靠社区力量发展壮大。
Python 3.0于2008年12月3日发布,这个版本进行了大刀阔斧的改进,不再兼容2.0版本的代码,同时提供了一系列代码转换兼容方案。对Python 2.7的支持于2020年1月1日结束,2.7开发分支的代码也随之冻结。2.0的最后版本2.7.18于2020年4月20日发布,包括对关键Bug和阻塞问题的修复,这标志着Python 2的生命终结。2022年3月14日发布的相关版本中已彻底移除Python 2。
2021年10月4日Python 3.10版本发布,2022年10月Python 3.11版本发布。未来,Python将每年发布一个包含新特性的版本,Python依然在发展进化。
1.1.3 Python的特点
Python在创立之初,就确定了“优雅、明确、简单”的设计哲学。Python的语法简洁,代码像纯英文一样让人容易理解,代码逻辑层次没有采用传统的括号组织,而是选用了缩进,显著提高了代码的可读性。它学习借鉴了众多优秀的语言,对于一些新的编程思想和理念、新的特性则与时俱进地接受和采纳,同时给出自己更优的解决方案。Python甚至把这些哲学写到了代码里,让无论是语言的开发者还是使用者都能遵守这些规范,这就是Python社区大名鼎鼎的“Python之禅”,在Python解释器中运行import this便可以看到。在“Python之禅”中我们可以看到这样的表述:
优美优于丑陋,明了优于隐晦。
简单优于复杂,复杂优于凌乱。
扁平优于嵌套,稀疏优于稠密。
可读性很重要。
Python倡导做一件事只有一种最合适的方法,这显然与其他语言不同。如果你在编写代码时有很多方法,那么你应该选择明确而没有歧义的方法。每件事Python都给出了最佳的实现方案。即使Python自身没有给出,人们可以对它进行扩展,以第三方库的形式为Python增加能力,所以我们看到,各个领域均有Python第三方库成为解决某类问题的事实标准。
Python是开放的,作为一个开源项目,Python语言本身由社区共同开发,它网罗了异常优秀的人才,他们在各自领域都是佼佼者,同时也是一线的Python使用者。Python有成百上千个内置的类和函数,这足以满足我们大部分的日常需求。
在不同的应用领域,比如网站开发、数据分析、人工智能、语音识别、游戏开发等领域,均有人在Python的基础上开发第三方代码库,Python的第三方代码库网站https://pypi.org上的项目已经有38万之多,每天仍然有大量新的解决方案产生。Python使用者能轻松地安装这些第三方代码库来解决自己同样类型的问题,而不用自己重复写代码,甚至你可以根据需要修改这些代码。而这些,连同Python本身都是免费的。
Python是跨平台的,它几乎可以在任何操作系统上运行,比如流行的Windows、macOS和Linux/UNIX,因此我们编写代码时不用把很多的精力放在不同平台的兼容支持上。
其他Python的特点,我们将在学习中慢慢体会。
1.1.4 为什么选择Python
TIOBE是一家专门评估和跟踪软件质量的公司,它每月会更新所有编程语言的排名,以展示不同编程语言的受欢迎程度。这份榜单非常有影响力,堪称编程语言界的“奥斯卡”。2022年5月开始Python取代擂主C语言成为排名第一的编程语言。在TIOBE每年公布的年度语言中,Python更是分别在2007、2010、2018、2020、2021等多个年份摘得此殊荣。
Python已经成为许多领域事实上的标准编程语言,在Web开发、大数据、数据分析、人工智能、运维、软件测试、爬虫、量化交易、嵌入式、办公自动化、少儿编程、桌面GUI、游戏开发等各个领域都可以看到Python的身影,近些年Python更是在数据科学、Web开发、自动化测试、办公自动化等领域独占鳌头。
当然,当前Python也有一些短板,主要在需要高性能的场景和前端领域。高性能瓶颈正在由多个项目进行攻关,比如由微软赞助的Faster-Cpython项目的首要任务是提升语言的执行效率,这个项目将分阶段地把Python的性能提升5倍。在前端方面,现在PyScript项目正在让Python代码可以在HTML中执行,将Python的程序运行在浏览器中。未来,Python将是前后端大一统语言的最有力竞争者。
2017年,山东省在小学信息技术教材中加入了Python编程的内容,将Python纳入信息技术教育体系。同年,浙江省新高中信息技术教材改革时,将编程语言换为Python。随后多个省份印发通知,建议在中小学开设相关课程,培养编程思维。2018年3月起,Python被列入了全国计算机二级等级考试。
“人生苦短,快用Python”是在程序员中流传甚广的一句话,它也说明了Python的地位。Python的高效优雅得到了商业公司的追捧,YouTube、Google、Facebook、NASA在大量地使用Python构建应用程序。国内的知乎、豆瓣、腾讯、百度、新浪等公司均用Python开发相关服务,几乎所有的互联网头部公司都在用Python实现算法模型,使业务得到长足发展。在财务、金融、办公等领域,用Python做业务分析、量化交易、自动化办公已经成为常态。
越来越多的人都在学习Python这门语言,除了带来实用的价值外,在学习过程中建立的编程思维更像一个火种,给了人们无形的思考力量。学习编程会让你的思维方式产生微妙的变化,激发无限的想象力,这种想象力和那种天马行空的想象不同,它建立在严密的逻辑推理之下,如稍加积极地行动,更容易成为现实。
1.1.5 如何学习Python
在思考如何学习Python之前,我们先要克服心理障碍。编程是对现有问题的抽象,和我们的生活息息相关,并不是什么不可触及的事物。在Python的产生过程中我们可以看到,无数社区开发者在努力让编程这件事变得更加简单,Python的目标用户就是像你我这样千千万万没有任何编程基础的人。那么,如何学习Python呢?
第一,学习Python,不应该从“基础”开始。这里说的基础是计算机原理、编程语言设计、程序设计思想等内容,这些内容对于非专业的人群来说过于艰深晦涩。计算机经过漫长的发展,从硬件、软件到理论体系,其复杂性远超人们的想象,除非从事相关研究,或者编程水平达到一定层次,大多数人甚至专业的程序员可能永远不会接触到这些内容,更何况不懂这些内容并不会影响你写出好的代码。
第二,学习编程一开始就要动手写。编程是一个技能,判断你会不会编程的唯一标准是你能不能写出代码来,如果一直在不停地看书、刷视频教程,而从不上手编写,那都是徒劳的。刚开始时,可以照着学习材料的代码抄写,试着执行得到同样的结果,然后对他人的代码稍加改动,执行得到不同的结果,并思考这是为什么。遇到不理解的地方再去看书,看视频,请教别人。随着学习的深入你可以试着用Python解决你自己的问题了,接着你可以帮助解决别人的问题,也可以尝试教身边的人学习Python,这样逐渐积累的成就感,便会推动着你进步。
第三,要确立学习目标,将学习聚焦到自己要解决的问题上来。比如你要用Python做一个网站,那么就要规划好学习路线,比如要学习哪些前置知识、哪些第三方库等,将这些内容一一攻克。这里初学者常犯的一个错误是花费大量的时间学习Python基础内容、高级内容,而没有快速切换到特定的领域。对于自己当前用不着的内容,可以先搁置,等到有需要的时候再系统学习。
第四,注重培养自己解决问题的能力。如同从母体出生成为婴儿一样,我们总要独立前行,人生遇到的问题千千万万,无法枚举,但其中解决问题的能力我们是可以建立的。Python代码执行错误会有报错,在搜索引擎中查询报错信息会得到很多答案,找到能够解决自己问题的答案,慢慢地就会对此非常敏感。还可以建立自己的代码库,以便在解决相同的问题时复用之前的代码逻辑。
第五,如果有条件,可以找一个身边的老师。他可以随时解答你的疑问,帮你排查问题,用生活化的语言为你讲解原理,这是学习Python最为高效的办法。
1.1.6 小结
目前,我们还没有开始编程。本节的内容试图告诉你编程的意义,如何看待编程这件事,选择Python是选择了什么,我们该如何学习Python。“凡事预则立,不预则废。”我们要做好心理建设,打有准备的仗。试想,拥有编程技能,是不是一件很酷的事呢?
那么,我们马上开始!