2023-05-10 14:56:27
本期节目参考文章 What Instrument is Your Programming Language? 点击原文链接阅读.
Hello World. 大家好, 我是 pshu. 今天是码农英语课堂的第八期了.
程序员之间最能引起战争的就是"哪种编程语言是最好?",那今天我也要想讲一下语言的"优劣", 但是是从把语言比作乐器的角度. 为了避免引起没有必要的撕逼,我先把本期的主题先讲一下:没有最好的语言,只有最适合的语言.
如果所有的语言都看做乐器的话,那每种乐器都有他擅长演奏音乐类型,也有它不擅长演奏曲的. 当然任何一种乐器都能演奏任意的音乐类型,只演奏出来的效果好不好听了。而好不好听的话完全是看个人的喜好了
卡祖笛: kazoo
这边可以举个例子. 就是在美国非常流行的一种小乐器,叫做卡祖笛。 这里有一段卡祖笛演奏世界名曲卡的例子,演奏的前半段的表现还是比较有欣赏性的,但是到高音部分,卡祖笛那种发出来的高音(破音),就感觉让我感觉非常的不适。 但是这点一点也不妨碍,卡祖笛是在美国的小孩子非常喜欢的乐器.
第一个要讲的语言Ruby,它相当于现在非常流行的小清新乐器:乌克丽丽 ukulele。 当年Ruby出现在大众视野的时候,像乌克丽丽一样清新脱俗,不知道多少人还记得当年那个令人震撼的Ruby on Rails 10分钟构建一个博客系统的视频.
ukulele 的 E 和弦的三种按法
乌克丽丽是虽然看起来是个简单的乐器,但是实际演奏的时候有很多技巧,同样一个 E 和弦 (E Chord)就有三种不同的按法(语音中说成了四种). 在 Ruby 的世界里面也一样, 同样的问题有各种实现方式(奇技淫巧).
虽然Ruby中同一件事情会有不同的实现方法,但是每种实现方法看起来好像都不错,简洁,清晰. 一个 E 和弦有各种各样的不同的按法,不同的按法有错吗?并没有,只是说在不同演奏的音乐类型和音乐环境下需要表现出不同的效果来。编程也一样.
15 ways to sum an array in Ruby
https://gist.github.com/ProfAvery/1777634
Python,它是一个非常适合初学者的语言,那么在乐器里面它相当于鼓。虽然鼓是一个非常简单容易上手的乐器,基本上鼓这个乐器大家拿到手就会敲. 如果跟着音乐的节奏敲敲,还看起来有模有样的. 同样如果你的鼓敲的没有在点子上,也马上会露出破绽.
这点就和 Python 语言要求的强制对齐非常像,你稍微有点差错就报错提醒你了. 我觉得这也是 Python 适合初学者的原因之一吧,你一旦犯错就马上给你反馈; 而且给你一个非常严格的规范,让你尽量少犯错.
鼓上手虽然容易, 但要达到炫技时爆炸的效果不仅需要鼓技本省够硬,还是要有其他音乐元素的配合.
罗小白 <青春修炼手册>
到了 pshu 的主技术栈语言 JavaScript了. 按照 JavaScript 现在的流行程度,它非常像一电吉他 electric guitar. 各种流行音乐的视频中,不管是吉他的华彩独奏,还是潇洒的扫弦, 都会让喜欢音乐的骚年心中燃起学一学电吉他的冲动.
现在的 JavaScript, 或者说 node.js 真的是备受各种规模的公司的青睐.
在这篇文章里面还暗讽了一下 node.js 的两个梗, 第一个就是 node_modules文件夹巨大的例子. 说你的项目要跑起来的话,你需要安装非常多的依赖,随便跑一个简单的项目,你的依赖就将近一千多兆。
就像电吉他要上台演奏,需要各种外围设备的辅助,比如音响,放大器,效果器等等. 加加起来比吉他本省重了一千多磅.
第二个讽刺的例子就是2016的left-pad事件,起因就是NPM中的一个作者 Azer (https://github.com/azer) 把他之前发布的包都删了,包括只有只有17行代码的left pad这个包,删掉之后能导致当时node.js生态圈里面的很多大型开源项目(比如babel)不能正常安装。虽然leftpad 等一些列包通过 un-unpublish 机制恢复了, 就此 NPM 还改变的 unpublish 的机制.
虽然 JavaScript 在大多数的人眼中只是一个"玩具"语言,也有种种问题; 就像电吉他一样在传统音乐领域不受待见的乐器.(参考知乎乐器的鄙视链: https://www.zhihu.com/question/28648778 ) 好在 JavaScript 语言本身和社区欣欣向荣,所以我个人觉得学习 JavaScript 是投入产出还是很高的.
那接下来再说就是一个殿堂级的语言就是c语言.
C语言相对应的乐器就是钢琴的. 那不管是从编程还是音乐入门来说,他们两个都是入门的好工具。
在功能方面,C语言可以实现什么? 基本计算机领域的每一个角落都有它的身影:操作系统,虚拟机,科学计算什么都可以实现. 那钢琴能够演奏什么样的音乐作品呢?它能表现的音乐类型也非常的广泛,像知乎的那个帖子里面说的给京剧伴奏都行.
C语言和钢琴一样,你需要掌握的东西太多,学习曲线非常的陡峭,需要长时间的练习和实践. 如果你只是掌握了一些皮毛的话就去动那些内部的东西的话,钢琴的琴弦可能弹起来把你崩死,那你写的c语言,因为一些技巧(比如:指针)掌握不好的,你的程序非常容易就挂掉了。
当然 C 语言出神入化的大神(比如 云风大神: https://github.com/cloudwu )随便写点东西,你能给的就是贡献你的膝盖.
讲了 C语言就一定要提一提 C++了
C++部分的话,原文作者就说了一个简单的笑话,就是说C++语言模仿了C语言,钢琴和手风琴都有大量的琴键,但是不断的往上面加琴键,强类型,面向对象,函数式等等. 你要使用手风琴的话,不仅要像钢琴一样按黑白琴键,还要控制那些小圆点的按钮(学名: Register,用来控制手风琴里面的振动的数量),更要命的是你还得边拉边弹.
所以 C++ 是一个比较难以"精通"的语言. 记得我还听说过这么一个梗, 只要简历里面说自己精通 C++ 的都以"简历不实"淘汰掉. 其实无论什么语言对应编程人员来说都是不太可能完全的掌握的,如果按照掌握语言的本身来衡量技术的话就有点刻舟求剑. 因为我们想要的是好的音乐而不是冷冰冰的乐器.
Go语言和之前的说的 Node.js 一样也是非常"网红"的语言. 它所对应的乐器就是电子小提琴. 那 GO 和电小提琴共通在哪里呢? 首先他们都是和之前的乐器比较类似,Go 书写的时候比较类似 C 语言,垃圾回收比较像 Java. 那小提琴加了"电"就更好了吗? 也不一定. 但是因为电的加入,带来了各种可能性.通过添加周边的设备完成更加炫酷的功能和音乐. 最关键的一点是 go 和 小提琴一样非常的轻巧便携(lightweight and portable)
这个街头艺人 Bryson 电子小提琴的表演确实人感受到了这个中"可能性"带来的震撼. 这种炫酷的感觉的 GO 也是这种感觉.
PHP vs Voice
世界上最好的语言 php 对应的却是人声. 其实很多人对 PHP 存在误解.其实现在全球80%的网站使用的都是 php 的.而且基于 PHP 的 CMS 长期处于增长的趋势. 用人声来比喻 PHP 的比较贴切的一点就是,每个人的声音都有好有坏,但是很多人都联合起来合唱的话效果和气势就会非常的宏大. 就像现在 PHP 有如此宏大的生态和积累.
厦门六中阿卡贝拉社表演 (公众号文章中视频数量有限制(3个), 只能提供链接了)
https://v.qq.com/x/page/r0604t6fgtj.html
Java 对应的乐器是风管琴, 风管琴我还是通过<名侦探柯南>的剧场版<战栗的乐谱>知道的. 风管琴和 Java 是一样, 是一种非常庞大的乐器,它是世界上最大的乐器.它的风管是安装在教堂的墙上的, 所以它要和教堂一起建造起来的;当然如此庞大演奏起来的音乐也是非常宏大. 如果大家想了解下管风琴的话,非常建议去某酷网站看看这集剧场版的柯南.
Java 语言一直被诟病的就是语言的臃肿. 但是 Java 能把大教堂中的教会管理的井井有条. 现在 Spring Boot 和 Spring Cloud 的也让 Java 开发变得非常方便快捷, 所以对语言不要保留成见,世界唯变不变,语言也一样.
当然讲到 Java 就必须提一下,它可能是最昂贵的语言了.为什么这么说呢? 持续长达8年之久的 Oracle 和 Google 就 Android 系统中使用 Java API 是否侵权的案件, 现在又有了新进展,
3月27日,,谷歌在 Android 上使用了大量 Java 代码,侵犯了 Oracle 的版权; 需要向 Oracle 支付 88 亿美元(8.8 billion)的赔偿。
Java 也可能成为世界上最贵的语言了.
说到 oracle vs google 这个案件,很多人都会跳出来说要站队 google 了. 这样的话又陷入了我之前提到的思维陷阱:"面对一个复杂问题(Java 案的双方)用一个简单问题(支持谁)来替代回答." Java 案足足打了8年,本身就说明了案件的错综复杂. 到底判决合法不合法 (法律正义) 和 是否符合开源精神(事实正义) 都是很难说清楚的.
不过 pshu 可以在这边给两个视角.
当年 Sun 公司开发 Java 秉承着 "write once , run everywhere"的理念, 但也一样押宝在嵌入式移动设备,当初一个产品形态就是 J2ME. 这个ME 就是 mobile edition 的简写. 当时的手机大厂Nokia Motorola 都是和 Sun 签订过授权协议的. 所以早在 sun 公司时代, 还没被 Oracle 收购之前就是需要平台方是需要收费使用 Java 的.
另外的一个视角就是: 在 Android 公司被 google 收购之后,当时的 google 的执行主席 Eric 就找过 Sun 公司的 CEO Jonathan 谈过授权的事情. 但是 Sun 开出的授权费用是 3000万 到 5000万美元之间. Google 当时是拒绝的,原因并不是在于这个价格, google 不缺钱,而是 Sun 除了授权费, 还要求占一部分的 Android 的股份. Google 为了能够对 android 代码100%的控制, 就没有答应当时的条件. 也正是这个原因他们开始开发了一个全新的 Java 标准库,也就是后来的 Dalvik 虚拟机.
因此从案件的双方来看, Sun 或者 Oracle 从一开就有要而且应该收授权费的; 第二 google 也知道自己要付授权费的. 当然了我这只是从个人的视角来看两家巨头公司这个,至于案件到底应该如何宣判才符合法律的公平和公正这就不是我能说清楚的了.
语言和乐器的类比就讲到这边, 因为个人知识有点不能列举所有的乐器. 如果你有更好的类比,欢迎留言告诉我你的类比.
如果你喜欢本文章,欢迎转发关注.
最后祝大家 happy coding, happy music!