1.2 所谓编程,是做什么的
编程中总是在调用计算机的基本指令。如果完全用基础指令来说明所有的操作,代码将超乎想象的冗长。IBM前总裁小沃森的自传中就提到,他看到一位工程师想要做乘法运算,输入程序用的打孔卡叠起来有1.2米高。幸好,程序员渐渐发现,许多特定的指令组合会重复出现。如果能在程序中复用这些代码,则可以节省很多工作量。复用代码的关键是封装(Packaging),即把执行特殊功能的指令打包成一个程序块,然后给这个程序块起个容易查询的名字。如果需要重复使用这个程序块,则可以简单地通过名字调用。就好像食客在点菜时,只需告诉厨师做“鱼香肉丝”,而不需要具体说明要多少肉、多少调料、烹制多久一样。刚才提到的操作系统,就是将一些底层的硬件操作组合封装起来,供上层的应用程序调用。当然,封装是有代价的,它会消耗计算机资源。如果使用的是早期的计算机的话,封装和调用的过程会非常耗时,最终得不偿失。
封装代码的方式也有很多种。根据不同的方式,程序员写程序时要遵循特定的编程风格,如面向过程编程、面向对象编程和函数式编程。用更严格的术语来说,每种编程风格都是一种编程范式(Programming Paradigm)。编程语言开始根据编程范式区分出阵营,面向过程的C语言、面向对象的Java语言、面向函数的Lisp语言等。任何一种编程范式编写出来的程序,最终都会翻译成上面所述的简单功能组合。所以编程的需求总是可以通过多种编程范式来分别实现,区别只在于这个范式的方便程度而已。由于不同的范式各有利弊,所以现代不少编程语言都支持多种编程范式,以便程序员在使用时取舍。Python就是一门多范式语言。某一范式的代表性语言,也开始在新版本中支持其他范式。原本属于面向对象范式的Java语言,就在新版本中也开始加入函数式编程的特征。
编程范式是学习编程的一大拦路虎。对于一个程序员来说,如果他熟悉了某一种编程范式,那么他就能很容易地上手同一范式的其他编程语言。对于一个新手来说,一头扎进Python这样的多范式语言,会发现同一功能有不同的实现风格,不免会感到困惑。一些大学的计算机专业课程,选择了分别讲授代表性的范式语言,比如C、Java、Lisp,以便学生在未来学习其他语言时有一个好的基础。但这样的做法,会将学习过程拉得很漫长。在我看来,Python这样的多范式语言提供了一个对比学习多种编程范式的机会。在同一语言框架下,如果程序员能清晰地区分出不同的编程范式,并了解各自的利弊,将起到事半功倍的效果。这也是本书中想要做到的,从面向过程、面向对象、函数式三种主流范式出发,在一本书的篇幅内学三遍Python。这样的话,读者将不止是学会了一门Python语言,还能为未来学习其他语言打好基础。
学习了包括Python在内的任何一门编程语言后,就打开了计算机世界的大门。通过编程,你几乎可以发挥出计算机所有的功能,给创造力提供了广阔的施展空间。想到某个需求,比如统计金庸小说中的词频,自己就能写程序解决。有了不错的想法,例如想建立一个互助学习的网站,也可以立即打开电脑动手编写。一旦学会了编程,你会发现,软件主要比拼的就是大脑和时间,其他方面的成本都极为低廉。编写出的程序还会有许多回报。可以是经济性的回报,比如获得高工资,比如创立一家上市的互联网企业。也可以是声誉性的回报,比如做出了很多人喜爱的编程软件,比如攻克了困扰编程社区的难题等。正如《黑客与画家》一书中所说,程序员是和画家一样的创作者。无穷的创造机会,正是编程的一大魅力所在。
编程是人与机器互动的基本方式。人们通过编程来操纵机器。从18世纪的工业革命开始,人们逐渐摆脱了手工业的生产方式,开始转向机器生产。机器最开始用于棉纺工业,一开始纺出的纱线质量比不上手工纺制的。但机器可以昼夜工作,不知疲倦,产量也是惊人。因此,到了18世纪末,全球大部分的棉布都变成了机器生产。如今,机器在生活中已经屡见不鲜。人工智能这样的“软性机器”,也越来越多地进入生产和生活。工人用机器来制造手机、医生操纵机器来进行微创手术、交易员用机器进行高频的股票交易。残酷一点讲,对机器的调配和占有能力,将会取代血统和教育,成为未来阶级区分的衡量标准。这也是编程教育变得越来越重要的原因。
机器世界的变化,正在改变世界的工作格局。重复性工作消亡,程序员的需求量却在不断加大。很多人都在自学编程,以便跟上潮流。幸好,编程也变得越来越简单。从汇编语言,到C语言,再到Python语言,编程语言越来越亲民。以Python为例,在丰富的模块支持下,一个功能的实现只需要寥寥几个接口的调用,不需要费太多工夫。我们之前所说的封装,也是把功能给打包成规范的接口,让别人用起来觉得简单。编程用精准的机器为大众提供了一个规范化的使用接口,无论这个接口是快速安全的支付平台,还是一个简单快捷的订票网站。这种封装和接口的思维反映在社会生活的很多方面。因此,学习编程也是理解当代生活的一个必要步骤。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论