工程师眼中的Python,和非工程师眼中的Python,几乎是完全不同的东西。
作为一个政治学出身的文科 Python 开发工程师,我在下面的回答中,会尝试穿插着从「非工程师」和「工程师」两个身份去理解Python这门语言。
Python是什么样的计算机语言?
首先,Python 是一门「高级」语言。这个「高级」指的不是「优于其他低级语言」的意思,而是指语言本身具备一定的「智能性」,很多细节已经帮用户处理好,例如不用处理内存等。这一点对于 Python 来说极其重要,它抹平了学习门槛,让用户不再需要大量的计算机系统理论作为前置知识,而能够以纯零基础背景进入 Python 的生态。这是 Python 得以流行的最重要前提之一。
其次,Python 是一门「解释型」语言。计算机在执行代码的时候,往往要将代码「编译」为二进制代码(0和1),然后才能执行。Python 则不同,不需要用户手动编译,会自行转换为字节码。相比其他编译型语言,用户不用操心编译过程中的各种问题。这一点大幅降低了使用门槛。 />
最后,Python 极度强调可读性。在 《Zen of Python》(Python之禅)中,明确提到了「Readability counts」。在 Python 本身被设计的过程中,「高可读性」是极为重要的设计原则,同样这也是 Python 用户应该坚持的原则。《计算机程序的构造和解释》(简称为 SICP ) 这本书提到,代码是写给人看的,不是写给机器看的,只是顺便计算机可以执行而已。二者的哲学思想不谋而合。Python 代码往往和英语差别不大,即便不会写代码的人,看 Python 代码也不会像读天书。这一点,使得 Python 的学习成本、工程师之间的沟通成本进一步大幅降低。
比起其它计算机语言,「Python」有何优劣势?
目前 Python 已经在事实上成为了全球最流行的编程语言,同时也拥有规模最大的「非专业编程者」,是大量需要科学计算的学生和科学家、需要自动化办公的白领、需要批量处理各类事务的互联网从业者的首选工具……一门编程语言,能史无前例的如此流行起来,必然有一个明显区别于其他语言的核心优势——
我给出的答案,是「生态」。
从工程师角度,Python 在技术上的特点非常多,当然也存在很多劣势(例如当使用 Python 建构大型项目的时候,其动态语言的特点往往让代码规范更加困难,同时 Bug 隐藏的更深等)。但极其丰富的生态也给工程师带来的无与伦比的便利,完全可以弥补其技术劣势。大量现成的成熟轮子可以直接拿来主义,而无需DIY,对于讲究「快速迭代」「敏捷开发」的互联网工程来说,几乎是最大福音。(本文中不再讨论 Python 是否适合大型项目等万年口臭话题)
从非工程师角度,Python 的「生态发达」,直接决定了这门语言能否直接应用于自己的领域。大多数非专业编程者的水平,仅限于「使用」类库而不是「开发」类库,而 Python 无敌的生态系统,给这些用户提供了大量开箱即用的实用功能,将「计算机」这个人类有史以来发明过的最伟大的工具、由全社会各个领域的工作者们亲自编写程序、然后直接应用于自己的工作之中,这在计算机发展史上都是开天辟地的。
我称之为「编程技术的第一波民主化浪潮」。
能与此相提并论的,我目力所及之内,就只有由 iPhone 开创的、强大不可摧毁的生态所带来的「移动互联网浪潮」。
如热带雨林一样丰富的 Python 生态,实现了大至Web工程框架、小至字符串处理、上至人工智能、下至爬虫脚本的全方位覆盖。这些功能,其他语言固然也能实现,但从宏观上将至统一到同一个生态之下、同时容纳如此多的不同领域不同水平的编程者,Python 算是绝无仅有了。
因此,已经枝繁叶茂、同时还在迅速生长的强大生态,才是当下 Python 最核心的优势。
Python 的前景如何?
如上文所述,Python 生态的雪球已经滚动起来。在工程领域,技术选型更多考虑与业务场景、架构的适配,Python 非常适合快速开发,但远远达不到支配地位;在非工程领域,「便捷」几乎是所有编程者的最大诉求——语法简单、使用便捷、生态丰富——而这一点,目前除了 Python 没有任何一门语言可以做到。
根据马太效应,强者更强,弱者更弱,以 10 年为单位计量,Python只怕在下一个 10 年会变的更加火热。可以参见曾经也很红火的 R 语言和 Ruby on Rails,由于其适用范围过窄(R仅限科学计算,而Ruby则更多用于 Web 开发),即便拥有优良的语言特性,依然逐渐冷却。
对于职业软件工程师,如果已经熟悉了一门脚本语言,再多学一门 Python 可能带给自己职业生涯带来的增益将很有限。
但对于非专业编程者,学会 Python,将见到一个完全不同的世界,会给自己的工作与生活带来「创世纪」般的巨大影响。不仅仅是会写脚本处理几个文件,更能从亲手操纵计算机开始,正式迈入计算机领域,了解这个寻常肉眼不可见的领域背后的逻辑。曾经,人们「开眼看世界」的途径是读书和出国,现在,在不可逆转的即将变得更加智能化、电子化的未来,编程将成为每个人了解世界的刚性需求,Python 则是最能满足这个需求的编程语言。
编程是通往未来世界的桥梁之一,会写 Python 还远远不是终点。在这个「未来」里,人人都是程序员,每个人都懂得和机器交流的方法,技术、信息、算力,将前所未有的普及到每个人。我很乐观的看待技术发展,技术可能会用于恶,但最终还是向善的。
希望更多的朋友加入到 Python 编程者的行列之中,一起享受这个令人愉悦的生态。