Python 正在吞噬世界...

2023-05-16

Python is eating the world.

这篇关于Python长文火了。

从Python的创建过程,到Python成为一个无所不在的语言,究竟经历了一个怎样的过程?

美国科技媒体ZDNet记者Nick Heath,详细呈现了Python作为一款风靡全球的编程语言的发展历程及其背后的故事。

真正体现了一个追求极致的程序员,单枪匹马变革世界的理想主义精神。

不到一天时间,这篇文章就在Hacker News上获得了800多热度以及800多评论。

从评论区中,也能看出人们对Python这一编程语言的态度,可以说是又爱又恨。

爱在于,其适用性极强,能够简单、快速地帮助自己完成任务。现在,无论是Web开发,操作系统、运维、数据开发、机器学习等等,都离不开Python。

恨在于,功能还有不完善之处,主要还是希望Python十全十美,真正成为最好的语言。

总之,从来没有一款编程语言,能像Python这样,引起程序员心底的爱恨纠缠。

但这一切归根溯源,还要从20世纪80年代末说起。

Python那些年

自创编程语言的念头,来源于Guido van Rossum对主流编程语言的不爽。当时,Guido正在CWI(荷兰数学与计算机研究所)研究Amoeba分布式计算系统,使用C和Unix shell。

C不仅要求开发人员努力对付手动管理内存的复杂性,时时注意潜在错误的雷区,还缺少用于日常开发任务的可重用代码库,开发人员不得不重复造轮子。

而Unix shell的问题在于,它的本质是调用命令,而不是真正的语言,运行速度太慢,无法处理复杂的逻辑。

1989年圣诞节期间,不想再忍受当时编程语言的不足,也为了打发假期时光,Guido下决心开展一个业余项目——开发一个新的脚本解释程序。

创建自己的编程语言就像是从零开始造火箭,好在早先Guido就参加设计了一种教学语言——ABC。

Guido认为ABC优美而强大,是专门为非专业程序员设计的。但ABC并没有成功,Guido将其没有成功的原因归结为互联网时代前的非开放。

在ABC诞生的年代,Guido和他的CWI同事们想要推广这一种新的解释型编程语言,得挨家挨户地分发磁带。

幸运的是,到80年代90年代之交,互联网已经蓬勃地发展了起来。Python有机会避开这个坑了。

我想,“好吧,为什么我不创造自己的语言”,从ABC“窃取”idea,就可以把项目规模从三年压缩到我自己一个人就可以完成的量,变成一个三个月的skunk works(臭鼬工程)。

就这样,Python诞生了。

Python这个英文单词的意思是蟒蛇,但编程语言Python名字的由来,并不是Guido对这种生物有什么特殊的偏爱。

之所以给自己的编程语言取名为Python,是因为Guido是BBC电视剧蒙提·派森的飞行马戏团(Monty Python’s Flying Circus) 的忠实爱好者。

Python从ABC发展而来,并结合了Modula-2,Unix shell和C语言的习惯。

1991年,Guido发布了第一版Python,从那时起,Python就奠定了开放的基调。

Guido认为,与新兴Python社区的互动,让他意识到自己创造了一些可以成功的东西。

Python杀出重围

不仅仅是Python,Perl、Tcl等编程语言也同样诞生于80年代后期,但是却只有Python缔造了时代神话。

Python为什么能杀出重围?

Guido认为,首先,Python天生能吸引开发人员,因为它就是为此而生的。在创造Python的过程中,Guido特意关注了语言易用性和能力之间的平衡,这种平衡正是开发者所期待的。

同时,Python十分易于阅读。它强调可读性和简洁的语法,倡导用更少的代码来表达清晰的想法,它让编程语言与开发人员的“思想交流”变得更加容易。

并且,从早期的版本开始,初中数学辅导Python就提供了一系列内置功能,被称为“Battery Included(内置电池)”,拥有极其强大的标准库,这一下子就让它从众多编程语言中脱颖而出。

而这也正得益于Python开放易拓展的属性,整个社区的共同努力让Python越来越强大。

还有一点也非常重要,那就是Python的源代码是很容易维护的。

像Perl让人诟病的一点,就是它过于灵活,源代码常常难以阅读,甚至被称作write-only语言。当代码量达到成百上千行的规模,想在Perl中进行维护,就需要大量的纪律约束。

而在Python中就没有这个烦恼,显得尤为优美。

说起来,Python毕竟是把编程哲学嵌进灵魂的语言啊。

△Python之禅
管理的正式化

突出重围之后,Python的用户越来越多,社区用户显著增长。

随之而来的则是语言管理问题。

当时只有Guido一个人在管理Python,使用这一语言的开发者们一直担心,哪天他被车撞了怎么办,Python是不是就就完了?

这不是开玩笑,1994年的时候,真有人在社区发帖提出了这个问题。

之后,Python语言管理开始正式化:Python软件基金会(PSF)的前身建立;更多的人加入了管理团队,Python开发者放心了。

在1995年4月加入“美国国家研究推进机构”(CNRI)之后,Guido领导了一个小型开发团队,开发Knowbot程序,一个广泛分布式系统(如Internet)的移动代理。

当时业界知名的开发者如Jeremy Hylton、Roger Masse、Barry Warsaw、Ken Manheimer和Fred Drake等加入其中,这些人后来在Python社区中发挥了重要作用。

这一团队创建了python.org网站,包括管理核心代码库更改的CVS服务器,以及用于改进和维护Python语言的Python特殊兴趣组的邮件列表。

1994年开始的两年一度的Python研讨会,也逐渐演变成更大的年度活动,最终成为PSF的年度PyCon,如今仍然非常活跃。

在过去的几十年里,Guido一直在Python的改革过程中扮演着核心角色,被大家叫做“仁慈的独裁者”。

但是现在Python的管理方式已经发生了重大改变。去年,Guido辞去了领导职务,因为公众对分配表达式引入该语言有了分歧。

虽然Python管理者的目的是编写更有效的代码,但Guido在网上遭到了那些反对变革的人的严厉批评,有些人认为他们这样做会使代码的可读性降低,难以维护。

这件事让Guido认为,像改进Python功能这种事很难达成共识。他会选择某种做法,而不去管别人同意不同意。

之后,每次新的Python功能发布后,指导委员会都会进行新的选举。更多的Python核心开发人员社区也欢迎设立指导委员会。

一位核心开发人员认为此举意味着Python朝着正确的方向迈出了一步。她说:“让委员会做决定比一个人做决定更好。”

随着管理团队不断完善,Python的发展有了稳固的大本营。

随之而来的便是——

吞噬世界的“巨蟒”

2003年以来,Python一直在TIOBE排行榜重最受欢迎的编程语言的前十位。

截至2018年12月,它是第三种受欢迎的语言,仅次于Java和C。

Python在2007年、2010年和2018年分别3次获得了TIOBE年度最佳编程语言奖。该奖项是根据TIOBE指数,授予全年受欢迎程度最高的编程语言。

不仅是受个人开发者欢迎,Python也受到大公司青睐:包括Google、Facebook、亚马逊在内的诸多知名公司都在使用它,包括Instagram、YouTube在内的大型应用,都是出自Python。

科研机构NASA还用Python来简化航天飞机的任务流程设计,去探索太空。

Python的强大也离不开各种第三方软件库的支持,像NumPy、SciPy和Matplotlib这样的库允许用户在Python中进行科学计算。

Python本身并不是为数值计算而设计的,但是因为有了这些软件库加入,Python可以替代Matlab甚至做得更好,而且这些软件是完全开源免费的。

在科研领域,越来越多的人用Python来处理数据,最近发布的黑洞照片就是用Python编写的算法进行拼接合成的。

Python不仅赶上了90年代末期互联网崛起的第一波发展浪潮,近年来也是机器学习这一热门领域的宠儿。

谷歌的TensorFlow使用的就是Python。Facebook更直接,从PyTorch的名字来看就知道它和Python密不可分的联系。

此外还有Keras、Scikit-learn等机器学习框架也都是用Python。

这些框架的支持下,甚至只用6行代码,就能够写出一个机器学习程序。

目前主流的几种操作系统,比如Linux、macOS、FreeBSD等都在系统中包含了Python组件。

连一向封闭的微软态度也逐渐软化,今年他们在软件商店中加入了Python安装程序,并且给用户提供从命令行安装的快捷入口。

虽然Python越来越受欢迎,但也有不少隐忧。

Pythonの挑战

现在,Python已经成为开发者群体中最热门的语言,甚至出圈成为业余爱好者学习的首要编程语言。

但它吞噬世界,仍旧是正在进行时,它的覆盖空白区、其未能吞噬之处——移动计算领域——重要性越来越强。

2016年,Guido在接受媒体采访时,也承认了这一点。在他看来,移动仍是Python很难啃下来的平台。

但他也给出了解决方案:找到懂得构建移动版本Python的人就行了。

因为标准的CPython源代码,几乎可以编译成能在安卓和iOS系统中运行的二进制文件。

而且Python社区中,已经有很多人在朝这方面努力。但3年后,依旧不容乐观。

今年的Python语言峰会上,BeeWare联合创始人Russell Keith-Magee再次提出了警告,如果对移动和新Web平台的支持没有改善,那么Python将面临“存在风险”。

他设想了这样的一个场景:当iPad成为主流,笔记本电脑不过是细分设备时,Python会发生什么?

吞噬远未成功,大家仍需努力。

而且,时变境迁,起于20世纪80年代的Python,在新的运行环境中,逐渐变得力有不逮。

为了修复缺陷,更好地适应新环境,让Python更有生命力,Python社区做了一个非常有决断的动作:

推出Python 3,不向后兼容。

这背后长痛不如短痛的想法,轻装前行的理念等等, 大部分开发者都理解。

但版本割裂带来的阵痛,还是成为了Python被诟病的一大重点。

2008年Python 3问世之时,给Python 2.7定下的Deadline是2015年。

因为担心大量现有代码无法迁移到Python 3,这一时间又推迟到了2020年。

这12年中,Python也发布了程序,帮助开发者更好地将Python 2代码转换为Python 3。

但这也让不少人纠结与徘徊。

现在,Python 2大限将至,跃迁将要完成,可局势也变了。

遭遇强敌

在这期间,有不少新的编程语言出现,分食Python的领地。

比如谷歌2009年正式推出的Go,更是“明目张胆”地抢人——开发一款从Python 2.7到Go语言的编译器。

而且,这一语言因为其开发速度、更加便捷、部署简单、更好并行等方面的特性,赢得越来越多开发者青睐,在2016年被评为“TIOBE最佳语言”。

2019年,程序员社交平台HackerRank发起的一项调查结果显示,Go是程序员最想学习的编程语言,而Python只排第三。

不少公司,也开始用脚投票。比如知乎,就舍弃了Python而用Go重构推荐系统。

还有Julia。这一源自MIT的新编程语言,创建于Python 3发布第二年,2012年公开发布。

截止2018年底,已经有300多万下载量。

过去一年的时间中,Julia在GitHub上的标星在过去一年增长了一倍。也被Jeff Dean批注为“Julia +TPUs =快速且易于表达的机器学习计算”。

来势汹汹,可见一斑。

根据Julia最新发布的官方报告,其主要的应用领域为数据分析、机器学习、物理学、数学、人工智能、信号与图像处理等等。

而这些,当下都是Python发挥作用、面向未来的核心阵地。

不过,Python也没有停下来发展的脚步,也在不断推陈出新,面向未来编程。

比如PyPy的不断优化,SciPy和NumPy的不断完善等等,都在放大Python的能量。

这个起于20世纪80年代一个业余项目的语言,到现在仍旧具备超强生命力,兼容并包,成为开发者手中的利器,不断吞噬世界。

越来越多人开始认为:Python才是世界上最好的编程语言。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 正在吞噬世界... 的相关文章

  • ROS OpenRAVE 常用逆解库 ikfast (应用于UR机械臂)

    ArmKine cpp include 34 armKine h 34 include lt math h gt include lt stdio h gt include lt corecrt math defines h gt defi
  • Fast and High Quality Image Denoising via Malleable Convolution阅读笔记

    论文 xff1a Fast and High Quality Image Denoising via Malleable Convolution arXiv xff1a https arxiv org abs 2201 00392 Abst
  • 浅谈java继承机制——通过super调用父类方法

    最近在看代码的时候遇到一个天坑 xff0c 由于习惯性思维 xff0c 可能大部分人都会掉近这个坑 xff0c 所以拿出来记录一下 子类使用super调用的父类方法里 xff0c 再调用父类的方法 先来看一段代码 xff08 该段代码只是作
  • ORB_SLAM2运行KITTI数据集

    在前文我们已经安装运行了ORB SLAM2 xff0c 下载和编译 xff08 包括报错 xff09 在文章 xff1a ORB SLAM2下载编译及运行EuRoC数据集 浅梦语11的博客 CSDN博客 euroc数据集下载 并且我们使用运
  • 嵌入式学习札记(基于STM32L431) 一、ARM Cortex-M4微处理器

    ARM Cortex M4微处理器 写在前面ARM Cortex M4微处理器简介ARM Cortex M4微处理器内部结构概要位数总线结构中断控制存储器保护低功耗内部寄存器 寻址方式与机器码获取方法指令保留字简表与寻址方式指令保留字简表寻
  • 嵌入式 Linux平台 C程序 交叉编译技术

    嵌入式Linux平台C程序交叉编译技术 一 实验目的和任务 本实验要求复习和掌握Linux平台的C程序开发过程 本实验要求掌握嵌入式开发板的操作方法 本实验要求掌握Linux平台交叉编译方法和程序运行方法 二 实验设备介绍 B703实验室是
  • MapReduce编程综合应用

    MapReduce编程综合应用 实验环境 VMware虚拟机 xff08 CentOS 7系统 xff09 Hadoop 数据 现有一份汽车销售记录 xff0c 销售记录 包括时间 地点 邮政编码 车辆类型等信息 xff0c 每条记录信息包
  • MySQL报错1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated 解决方法

    1 问题复现 xff1a 今天在进行数据迁移时 xff0c 使用Navicat连接数据库进行连接时 xff0c 由于 SQL语句中使用了 group by分组函数 xff0c 结果报了如下错误 xff1a 2 产生原因 产生原因说是 xff
  • deepin linux 安装配置

    开启root权限 span class token function sudo span span class token function su span root 开启root权限 linux安装curl span class toke
  • 解决Ubuntu1804安装后不能使用root用户远程登录

    解决Ubuntu1804安装后不能使用root用户远程登录 root用户密码正确无法远程 解决方法 1 为root用户设置密码 span class token function sudo span span class token fun
  • git 删除本地/远程分支

    1 删除本地分支 git branch d 本地分支名A 注意 xff1a 需要切换到其他分支下才能删除 xff0c 处于分支A的时候 xff0c 无法删除分支A 切换分支git checkout 本地分支名B 如果本地分支A下有未合并的更
  • RTD\RTK\PPK\PPP\DGPS\地基增强系统\星基增强系统

    xff08 一 xff09 RTD xff08 Real Time Differential xff09 xff1a 实时动态码相位差分技术 RTD计算的是伪距 xff0c 根据基准站已知坐标和各卫星的坐标 xff0c 求出每颗卫星每一时刻
  • NVIDIA JETSON TX2 介绍及上电、刷机全纪录

    一 TX2相关 1 1 图片 1 2 TX2介绍 xff1a NVIDIA Jetson TX2 嵌入式领域的AI超级电脑 它是一台基于NVIDIA Pascal 架构的AI单模块超级计算机 它性能强大 xff0c 外形小巧 xff0c 节
  • 小白控制算法之自抗扰调参经验总结

    最近做的项目用到了自抗扰 xff0c 尝试联系一些相关领域的老师 xff0c 无奈似乎有所保留 xff0c 只得自己从头研究起 讲道理 xff0c 无论是复杂的系统 xff0c 还是超过9个参数的调节 xff0c 整个调程序和调参的过程都不
  • DS001-测试冒泡排序的运行时间

    本程序演示如何测试一段程序的运行时间 以冒泡排序算法为例 include 34 time h 34 与时间相关的函数 include 34 stdlib h 34 rand 函数在此库中 include 34 stdio h 34 输入输出
  • 嵌入式开发,裸机开发,中断,按键控制蜂鸣器。

    0 前言 最近想体验一下面试 xff0c 真正收到公司通知又有点无从下手 xff0c 没有做准备 但是反手一想 xff0c 既然是想体验 xff0c 锻炼而已 xff0c 干就完了 推荐一首歌 Timber MattyBRaps xff0c
  • 到底什么是MCU、MPU、CPU,和芯片是什么关系?区别又是什么?

    目录 0 前言 1 芯片 2 CPU 3 MPU 4 MCU 5 总结 0 前言 更新的是有点慢 xff0c 从这周开始吧 xff0c 应该会快一点 推荐一首歌 你到底有没有爱过我 蓝波 xff0c 额 xff0c 怎么说呢 xff0c 大
  • 从SLAM到视觉识别、VIO,大牛分享!

    用户分享汇总目录 01 双目惯性模组的初探与实践02 通过驱动字写数据采集程序03 INDEMIND双目惯性相机运行MSCFK04 利用开源识别算法进行车牌检测05 双目惯性模组导航项目分享项目简介 xff1a 车体结构 xff1a 技术简
  • zxing的使用及优化

    二维码介绍 zxing项目是谷歌推出的用来识别多种格式条形码的开源项目 xff0c 项目地址为 https github com zxing zxing xff0c zxing有多个人在维护 xff0c 覆盖主流编程语言 xff0c 也是目
  • INDEMIND带你玩转OpenCV4.0(一):DIS光流算法解析

    文章目录 一 xff0e OpencCV 4 0 新特性介绍首先是OpenCV完全支持了C 43 43 11DNN xff08 深度神经网络 xff09 模块是目前OpenCV更新最重要的模块G API 为算法的硬件优化加速提供计算图支持O

随机推荐

  • STM32 SWD烧录一次后J-LINK设备消失的问题

    偶然遇到移植程序时烧录一次后无法烧录的问题 如果用的时CUBEMX 应该马上检查SWDIO SWCLK的配置问题 如果无误 那就检查时钟问题 时钟问题有可能导致该问题的发生 看到有其它用户说在标准库的配置中添加 RCC AHB1Periph
  • IIC通讯详解笔记

    IIC概述 IIC总线是一种串行半双工两线总线 一根是双向的数据线SDA xff0c 另一根是时钟线SCL 所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上 xff0c 各设备的时钟线SCL接到总线的SCL上 硬件拓扑如下图所示
  • 关于Gitee的介绍和使用

    Gitee Gitee是开源中国 xff08 OSChina xff09 推出的基于Git的代码托管服务 Gitee xff08 码云 xff09 是开源中国社区推出的代码托管协作开发平台 xff0c 支持Git和SVN xff0c 提供免
  • webpack postcss-loader自动添加前缀版本问题

    报错 xff1a 问题所在 xff1a postcss loader版本问题 xff0c 用了5版本会报错 解决 xff1a 将postcss loader降低到4版本就解决此问题
  • 使用数据表反向生成以及出现问题汇总

    什么是正向以及反向生成 正向生成 xff0c 指的是先创建model py文件 xff0c 然后通过django内置的编译器 xff0c 在数据库如mysql中创建出符合model py的表 反向生成 xff0c 指的是先在数据库中crea
  • 解决svn文件图标不显示

    1 首先检查svn设置中是否设置图标显示 2 win 43 R xff0c 输入regedit xff0c 调出注册表信息 xff0c 按下Ctrl 43 F 在注册表里搜索 ShellIconOverlayIdentifiers 查看是否
  • vue父组件传值给子组件不生效

    先上代码 父组件 lt hj subjects v if 61 34 showHjSubect 34 list 61 34 subjectsList 34 64 getHjSubjects 61 34 getHjSubject 34 gt
  • vue下载pdf为空问题解决

    后端返回文件流 xff0c vue下载到本地 请求时需要设置responseType blob 否则下载pdf文件打开会为空 下载方法代码如下 xff1a url请求参数 params请求参数 filename文件名称 span class
  • vue使用iframe嵌入html

    1 本地html文件的存放 在根目录下找到public文件夹 xff0c 在public文件夹下创建static文件夹 xff0c 把html文件放入static文件夹中 2 使用iframe标签引入html文件 span class to
  • 解决Android运行过程中出现的NoClassDefFoundError

    1 先说一下出现上述问题的经过 出现这个问题是集成一个aar之后 xff0c 编译过程中没有问题 在安装运行的时候出现上述错误 然后百度各种解决办法都无济于事 但是有了一点思路 报错位置 在自定义的application中初始化的aar导致
  • 前端将base64图片格式转化为文件流并传给后端

    base64图片格式 xff1a base64图片格式转化为文件流代码 xff1a data base64图片格式字符串 filename xff1a 文件名称 base64toFile span class token punctuati
  • IP地址分类

    一 xff1a IP地址 1概念 xff1a a IP地址是指互联协议地址 xff0c 又译为网际协议地址 b IP地址是提供的IP协议一种统一地址格式 xff0c 它为互联网上的每一个网络和每一台主机分配一个逻辑地址 xff0c 以此来屏
  • vue项目打包npm run build报错

    报错如下图 xff1a 删除根目录下的package lock json和node modules文件 xff0c 再运行npm i命令 npm i命令运行完成后 xff0c 再输入npm run build命令 命令执行成功后 xff0c
  • SpringBoot运行报o.s.b.d.LoggingFailureAnalysisReporter

    报错截图 xff1a 报错原因 xff1a 从上图Description中可以看出 xff0c 报错原因是端口被占用 报错解决方法 xff1a 找到application yml文件 xff0c 修改端口为8081 xff08 或者关闭80
  • ROS教程 Gazebo仿真(3)-摄像头

    接上一篇 ROS教程 Gazebo仿真 2 激光雷达 https blog csdn net weixin 43928944 article details 115904044 配置摄像头 camera sensors xacro span
  • Ubuntu18 远程桌面 VNC-Server 配置[亲测]

    安装vino sudo apt update sudo apt install vino 设Enable VNC 服务 sudo ln span class token operator span s span class token pu
  • redis redisson 集合使用示例(RList、Rset、RMap)

    redis redisson 集合操作 相关类及接口 Rlist xff1a 链表 public interface RList lt V gt extends List lt V gt RExpirable RListAsync lt V
  • Python数据分析、挖掘常用工具

    Python语言 xff1a 简要概括一下Python语言在数据分析 挖掘场景中常用特性 xff1a 列表 xff08 可以被修改 xff09 xff0c 元组 xff08 不可以被修改 xff09 字典 xff08 lt k v gt 结
  • 17个新手常见Python运行时错误

    对于刚入门的Pythoner在学习过程中运行代码是或多或少会遇到一些错误 xff0c 刚开始可能看起来比较费劲 随着代码量的积累 xff0c 熟能生巧当遇到一些运行时错误时能够很快的定位问题原题 下面整理了常见的17个错误 xff0c 希望
  • Python 正在吞噬世界...

    Python is eating the world 这篇关于Python长文火了 从Python的创建过程 xff0c 到Python成为一个无所不在的语言 xff0c 究竟经历了一个怎样的过程 xff1f 美国科技媒体ZDNet记者Ni