最近专注于 Coding,好久没更新了,今天更新一波。
在 Quora 上看到一个问题:
Why is there not a single programming language for all purposes?
为什么没有一种通用的编程语言?
其实关于这个问题,我有时也感到抓狂,要是这个世界上只有一门编程语言,该省了程序员多少事啊。。。
最近在做项目的过程中,因为需要用到很多种不同的语言、不同的框架,时不时会深感头痛。语言太多,技术也太多,以人类有限的时间和精力,恐怕是一辈子不停的学习都学不完了,因为等你学完了一门,过两年还会有新的东西出来。
更别说,你还得留有技术之外的时间,坐电脑前不停的 Coding 并不是一个好的生活状态。
抱怨归抱怨,可还是得理性的看待这个问题。
来看下这个问题的最高赞回答,我翻译出来,分享给大家。
有啊。
汇编,C,看你如何定义了。
但是,很多时候人们并不愿意这么去用。
Why?
颗粒度问题。
想象一下,你有一些小方块(or 小石子),然后用它们来建造东西。
这些小方块足够小,用它们你可以完美的建造任何你想要的物体。
任何形状和纹理,乃至米开朗琪罗的大卫的蛋蛋(认真,别笑),都可以完美的构建出来。
接下来,你可能会说:
太好了,有了这些小方块,我就可以做任何东西了。
那么问题来了。
你必须把每一个小方块合理归位,当你要做的是一个大工程的时候,这将花费巨大的时间和精力。
比如你想建造一个奇丑无比的水泥房子,建这个房子并不需要知道很多的细节,只把混凝土板一层层堆砌在一起就好了。
这种情况下,如果你还是一个一个的去码这些小石子的话,那么我估计你很快就会疯掉的。
那怎么办呢?
好办。
可以把这些小方块以某种形状组合在一起,然后每次直接复用这些新的组合即可。比如,把两个小方块放一起,它们就变成了一个矩形,每次使用这些矩形就好了。
用这个方法,将会大大加快开发流程,缩短开发时间,一栋房子在很短的时间内就可以建好。
当然,不限于矩形,你还可以把小方块任意组合成三角形、球形等。
它们就类比于计算机世界中的库(Library),而组合的过程就是抽象(Abstraction) 。
再比如,你有个朋友,叫 Jim, 他想造的东西不是房子,而是刀、叉这些餐具。
他根本不需要用到矩形、三角形这种混凝土块,他需要的是细长的把手、弯曲的头、锯齿状的刀片。所以,Jim 只好自己去做这些了。
而你呢?或许永远不可能用到 Jim 所用的那些东西,同理,JIm 也不可能用到你的混凝土块。
此时,你跟 Jim 就使用各自独立的库, 互不干扰。
在制作刀叉的过程中,为了提高效率,Jim 发明了一台可以快速制作曲面的机器。
在这台机器上,只要输入曲面方程,不久,一个曲面物体就能被制作出来。
这台机器对 Jim 来说,非常有用,然而,对你来说,却没什么卵用。
这台机器你可以看作是 Jim 所用的编程语言的一部分。
它是基于你用的同一种编程语言开发出来的,但是,你却用不到如此高级 ( high level ) 的语言。
在制作物体的过程中,你们都用到了抽象 (Abstraction),不同的是,你把物体抽象成矩形、三角形的水泥板,Jim 却发明了一台新的机器。
这台机器可以说是节省了 Jim 大量的时间和精力,但是对你毫无用处。可以把它想象成你们使用的是不同的编程语言。
使用低级语言,再额外加一些库,对你就基本够用了。
Jim 也使用库,但是他还需要一种更为高级的语言。
或许还有一个叫 Mary 的人,要制作非常非常小的玩意儿,人家压根就不需要用到库,仅仅用小方块,就可以拼装成任何她想要的东西。
实际上,她需要的正是如此小的颗粒度,这样的颗粒度对她来说,刚刚好。
最后,结论是什么呢?
小颗粒度意味着工作量大,但同时,也有更强的控制力。
使用小颗粒度的编程语言,你几乎可以做任何事情。但是,用它来构建高级别的软件时,往往比较费时,而且更容易出错。
基于此,人们创造了 Libraries,Frameworks, 甚至还有新的编程语言。
在实现某些高级系统的时候,使用它们,意味着用比较大的颗粒来完成工作,显然可以大大加快开发进度,省了不少精力,但自由度或者说控制力就会因此有所损失。
尤其是,当你有特定需求的时候,可以在 Libraries,Frameworks,编程语言等层面选择定制,各取所需,各取所长。可以肯定的是,这将带来更好更快的开发体验。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!