国内网上关于Python语言的起源说的神乎其神,有的说"因为作者不喜欢花括号,于是发明了python",有的说是“作者为了打发无聊的圣诞之夜,发明了Python",真的看不下去了,太浮夸了。这是对Python发明创作过程的断章取义,给人感觉发明一种编程语言十分随意、毫不费力,这是将当下天天加班熬夜的程序员智商置于何地,给奋斗中的程序员造成多大的心里阴影面积。

你只有十分努力,才能看起来毫不费力。不管有没有花括号、不管有没有圣诞节,Python都一定会出现。Python的创作是作者深思熟虑的结果,在圣诞节前他已经思考良久,他对当时很多编程语言了如指掌,他80年代初就在参与编程语言编写——ABC编程语言,由于当时ABC并没有广为流传,日积月累,作者越来越渴望创作一个能被当时Unix/C程序员广接受的编程语言——ABC的下一代语言。这个想法逐渐酝酿成熟,于是在1989年圣诞节来临之际,作者Guido van Rossum利用假期开始写编译器,并怀着略有调侃的心情用Python作为项目的标题,开启了编程之旅(Ps:Python是蟒蛇,Montl Python是他的喜欢的剧团)。

作者在《Python Programming》(1996年)写的前沿中讲述了Python的创作过程。现将其主要内容翻译如下:

作为Python的创建者,我想对它的起源说几句话,添加一些个人理念。

六年前的1989年12月,我正寻找一个“业余爱好”的编程项目,能让我在圣诞节前后的一周里保持忙碌。我的办公室(阿姆斯特丹的一个政府管理的研究实验室)将关闭,但我有一台家用电脑,手头没有其他东西了。我决定为我最近一直在考虑的新脚本语言编写一个解释器:ABC的后代,它会吸引Unix/C黑客。我选择了Python作为这个项目的工作标题,感觉心情有点不敬(我也是Monty Python's Flying Circus的忠实粉丝)。

这一切起源于ABC语言,这是我在80年代初帮助创作的一种很棒的教学编程语言。这是一种针对非专业程序员的,极其优雅而强大的语言。然而,尽管ABC有其优雅、强大的功能以及免费实现的可用性,但它从未在Unix/C世界中流行起来。其原因我只能猜想,但最可能的一个是:增加新的基础操作到ABC里的困难。这是一个封闭的单片机,只带有最基础的I/O操作:从控制台读一个字符串和写一个字符串到控制台。我下决心绝不在Python中重复这一错误。
除了这一目的外,我还有很多其它改进ABC的想法,而且非常渴望实现他们。比如,ABC强大的数据类型比我们希望的效率低。过于强调理论上的算法优化,而对常用场景关注不足。同时,我觉得ABC面向新手程序员的特性,对富有经验的Unix/C程序员没什么吸引力。例如:ABC的语法(所有大写关键字!);一些术语(例如“如何”而不是“过程”)和集成的结构化编辑器,这些都是其用户几乎普遍讨厌的。因此,我想Python将更多地依赖Unix基础设施和约定,而不受Unix的约束。
现在,事实证明,Python完全摆脱了传统语言的很多麻烦。这可能是因为我选取了很多例子,除了ABC外,我的主要影响来自于Modula-3。这是另一种非常优雅而强大的语言,是一个小而精的团队所做。想象一下,如果我根据Unix shell和C来建模的话,那么Python是什么样子?(当然,为了讨好Unix/C用户,我也向C借了一些东西,但仅限于哪些最无争议的功能。)。
任何个体的创造都有它的特质,有时它的创造者必须证明这些特质是正确的。也许Python最有争议的特性是它使用缩进来进行语句分组,这直接源于ABC。但这是我本人心里最真爱的的特性之一。这使Python具有可读性更高,可以从两方面来说。第一,使用缩进仅少了视觉上的混乱且是程序变得更简洁,因此减少了需要放在代码基本单元上的注意时间。第二,它允许程序员有更少的格式化自由,因此式样是更统一,这使得阅读他人的代码更容易。(相比较而言,例如C允许有3个或4个大括号的约定,然而每种都有强烈的支持者。)
强调可读性并非偶然,作为一种面向对象的语言,Python的目的是鼓励代码重用。即使我们所有人一直都编写完美的文档,若代码不可读也难以做到代码可重用。除了空格缩进外,Python还有很多特性都是意图让Python代码具有高可读性。这反映了ABC的理念,他希望以最纯粹的形式教授编程,因此很注重清晰表达的价值。

可读性经常通过减少不必要的可变性来增强。如果可能,用一个单一的、显而易见的方式来编码特殊的结构。这会减少程序员面码中面临的选择,并且增加了第二个程序员熟悉代码的机会。对Python可读性的另一个贡献是,选择最常用的方式使用标点符号。大多数操作对任何一个对高中数学有模糊印象的人来说都很熟悉,不需要学习新的含义。
        另外,我很乐意承认Python不是最快的运行脚本语言。尽管它是个好亚军。随着硬件速度的不断提高,与编写和调试程序所需的时间相比,程序在其生命周期内的累积运行时间通常可以忽略不计。因此,这才是真正的节省。虽然很难客观的评估,但是Python被很多试过的人认为是节省编程时间的赢家。此外,许多人认为使用Python是一种乐趣——很难想象会有更好的建议。
        我为Python的有点和缺点负全责,尽管有些代码是其他人写的。Python的成功是一个社区的产物,这始于早期的采用者,他们在我第一次在网络上发布Python时就开始使用它,并在他们自己的环境中传播关于它的信息。他们通过电子邮件向我发送了他们的赞扬、批评、功能请求、代码贡献和个人想法。他们愿意通过我刚建立的邮件列表跟我讨论关于Python的各方面,并教育我或推动我朝着正确的方向前进,而那会让我通过最初的直觉行事失败。
原文来自:https://www.python.org/doc/essays/foreword/

结论

只有十分努力,才能看起来毫不费力

Python的成功来自于作者的专业

社区是创新的培养皿

Python的创作起源,成功是必然的相关推荐

  1. python编程制作_一种Python编程创作平台的制作方法

    本发明涉及在线浏览器技术领域,特别涉及一种Python编程创作平台. 背景技术: 目前项目整体使用javascript+html+css实现,用户界面编写上使用react框架.具体实现上是将pytho ...

  2. 使用Python创建excel文件成功后报错打不开

    使用Python创建excel文件成功后报错打不开 使用xlwt创建一个新的excel文件,代码执行成功,但文件报错打不开 修改代码将.xlsx后缀改成.xls即可,或者将你本地用代码新建的xlsx文 ...

  3. python可以这样学豆瓣_豆瓣程序员如何利用Python开发出这么成功的社区?

    image 豆瓣网对互联网用户来说是知名的Web 2.0社区,但对开发者而言,更重要的是一个应用Python打造的非常成功的Web 2.0站点.豆瓣网已经达到了300万注册用户,另外还有千万级的非注册 ...

  4. python执行ping并输出,python 执行ping 返回成功与否

    怎样实现在python中ping域名并返回ip 怎样使用python来ping 需求python实时返回ping回包,怎么写 python实现批量ping 如何去写 新建两个文本文件,一个保存为tes ...

  5. pip安装了 但是python找不到_解决python明明pip安装成功却找不到包的问题

    解决python明明pip安装成功却找不到包的问题 如下所示: 原因1:版本不对,如用环境变量设置的python3.7路径,那么用的就是3.7的pip.exe安装了包.却用的是2.7的python运行 ...

  6. 传腾讯拟入股绝地求生开发商;刘若英回应《后来》退票异常;蓝色起源成功发射火箭丨价值早报...

    第[938]期早报由[周三]赞助播出 01 今日头条 贝索斯旗下蓝色起源公司成功发射火箭 系2018年首次发射 北京时间4月30日凌晨,世界首富贝索斯的太空公司蓝色起源成功发射并回收了"新谢 ...

  7. 蓝色起源成功完成“新谢泼德号”飞船第17次发射

    8月27日消息,据国外媒体报道,在将创始人杰夫·贝佐斯送入太空一个月后,蓝色起源在当地时间周四成功完成"新谢泼德号"飞船的第17次发射,该飞船进行了亚轨道无人试飞. 此次发射是&q ...

  8. python程序运行不出来_python实战演练2:python可执行文件运行不成功怎么办

    要谈到这个话题,我们首先对如何将python文件制作成exe文件做简单介绍:众所周知,python语言作为一种脚本语言,本身是无法自己转化成可执行文件的,需要借助第三方工具才能将其转化为可执行文件(. ...

  9. python显示邮件发送成功失败_python stmp module 163邮箱发送邮件不成功

    问 题 http://blog.csdn.net/lucahan/... 我照着这个的教程试了下,就卡在connect服务器上,一直连不上,我上网没有问题. 求教是什么原因! 解决方案 因为这很多教程 ...

最新文章

  1. C/C++中未定义行为
  2. hdu1428(记忆化搜索)
  3. 谁更了解你,是女朋友吗。不,是这些推荐算法。
  4. python----面对对象三大特征2
  5. Oracle结构设计技巧(访问数据库象访问内存一样 快)
  6. Spring Boot中使用模板引擎引用资源
  7. 红橙Darren视频笔记 App保活-双进程守护与JobService
  8. Spring : Spring Boot 自定义PropertySourceLoader
  9. 滚动后mouseleave失效_滚动直线导轨副用钳制器可靠性试验设计
  10. GitHub 上排名前 100 的 Objective-C 项目简介
  11. [转载] Python中关于字符串的使用演示
  12. getElement四种方法返回的不同
  13. PostgreSQL(2)常用命令(附教程)
  14. monkey命令常用参数与monkey事件百分比
  15. 记录CheckBook状态:SharedPreferences存储器
  16. gitlab太占内存怎么办?一招帮你解决这个问题
  17. Apache DolphinScheduler 2.X保姆级源码解析
  18. sourceTree 问题解决
  19. python多久可以入门_python自学要多久能学会
  20. 线性代数:第五章 相似矩阵及二次型(2)二次型及其标准型 配平方法 合同变换法 正定二次型

热门文章

  1. 文件上传与下载----上传
  2. mysql 数据库视图,Mysql数据库中的视图
  3. 学生上课睡觉班主任怎么处理_学生上课睡觉怎么办
  4. NAND Flash系列之NAND与NOR Flash
  5. Extmail修改模板
  6. 组态王与网络mysql数据库通过ODBC连接
  7. 微信小程序 - 云开发data exceed max size 解决方案
  8. 论文发表查重率要小于多少?
  9. RIKIBOT-FX4多线激光雷达与LIO-SAM算法构建三维地图
  10. 关于ESM Flag问题