选择编程语言的思考

选择编程语言的思考

语言是个工具。理论上他们是等价的,实际上选错了,你到达不了目标。

到底是坐拖拉机去拉萨,还是做高铁去。体验非常不同。

一、本质上资源决定语言选择

编程语言其实是分层的。如何理解这句话?首先编程语言的抽象程度不同,底层、高级负责的事情不同。灵活程度不同,决定了个人还是多人合作。使用的场景不同,比如嵌入式,Web 开发,游戏开发。总之每种语言特点是不同的。

你有多少人、多少时间、多少资源,平台,还有你要做什么。决定了你要选择何种编程语言。

语言是一种朴素的工具,工具能做和擅长做,这之间差距可能非常大。这种跨度是否可以被一个人有限的资源和时间填平,这将会影响结果是否成功。

如果底层的条件无法满足,项目必定失败。这是内因。

1.底层语言:

C :简洁、灵活,容易实现解释器。他是实战派 的胜利者。从众多竞争者中被自然选择出来。从而成为事实标准。他是操作系统、底层库的语言。C 现在成了一种标准。所有厂商都会迎合和接受这个标准,来接入目前生态。

C 不适合开发原型。他适合学习、研究。因为灵活,所以对人要求非常高。需要非常有经验。

C 往往被当作一个优化性能的手段,来替换掉项目中有瓶颈的部分(往往是其他语言项目)。

C 完全取决于设计者的经验和学识,你需要在混乱没有标准的底层世界中,寻找自己的坐标,构建软件。总之,我觉得在想到这里再去构建软件,不容易。这是属于刀根火种的时代。了解和欣赏就可以了,现代的人们应该往上走。别浪费时间。

2.高级语言:

每种高级语言都为了不同目的设计,有的强调性能,有的强调灵活。

但是有约束语言的不可得三角(我总结的) :

功能 体积 速度

三者不可得,最多满足其二。所以所有语言都有达不到的短板。

有的语言为了安全性设计的极为繁琐。有的语言为了速度,兼容更少的系统。有的语言极富表现力,代价就是非常的缓慢。

总的来说,每种特点都有。

对于个人来说,个人拥有的时间、耐心、资源都极其有限。

选一个 表现力强的,构建原型。是非常合适的。 获得成功之后,再选择性能强的精耕细作。

我始终觉得,个人软件和大公司软件,使用的技术其实是不同的。各种定位也不应该相同。如果能够跳出来思考。选择什么,更像是资源约束下决定的。

动态语言是构建原型的首选。既是相比静态语言速度慢,对于 90% 的情况也足够了。况且现代动态语言也越来越快了。

JavaScript、Python、Ruby 都可以。在事情成功,发展壮大之前。你的程序应该很难够到现在的计算机硬件的天花板。

毕竟在他们刚出来的时候,应该还不如今天,依然有很多软件获得了成功。

后面也许省资源会考虑 Go,安全部分会考虑 Rust,企业的成熟可靠,用工性价比高,也许会选择 Java。

总的来说,这些前期都不需要考虑。

二、宏观和微观思考

1.本质上都一样

MacOS、Linux、Windows 在打包二进制的时候,只是 ELF 文件描述有点差异。

他们遵循的基本原理都一样。

不同语言,最终都直接或者间接的来自于 C。

所以不必有选择困难症,他们本质上是一样的。

遇到瓶颈,可以尝试用更高性能的语言替换掉。FFI 调用之类的。

遇到瓶颈是成功的。

2.生命周期

实际上大多数软件,没有办法被人看到。甚至都无法继续维护下去。被人看到是成功的,有一天要用别的语言替换掉心爱的语言重写,是成功的烦恼。

成功是少数。成功需要运气。大多数的软件被人偶尔执行。一旦写出来基本就不变了。一周后就被丢弃。一个月后就会被忘记。

聚光灯下从来是少数,二八定律永恒生效。

3.语言/技术也有生命周期

语言、框架、系统,都是有生命周期的。MacOS 每个大版本都不兼容。 Windows 也在组件淘汰。曾经叱咤风云的 smalltalk、VB、dolphin 今天只能留在维基百科和计算机历史故事里。

当年天才云集、如日中天的 Sun 公司,因为资金链断裂,倒闭之后,也只留下 Java 作为遗产。

工具发展是个动态的过程。

不必太完美主义,或者细节。一切都是动态的混沌。世界的进化有时候跟你也没什么关系。

程序的编写,更多是你一个人的事情。你熟悉就是最好的。

之于这些工具的宿命,可能维护者失业、去世、公司倒闭、裁员。某个技术就戛然而止。

所以一切不必较真,乐在其中更重要。

三、最终的选择

前期当然不应该人云亦云,甚至应该多多尝试。

最后选择一个喜欢的,能让你在三分钟热度内搞定的。

选择一个不混乱的,内部自洽和谐的。

选择一个对于你容易的、顺眼的、符合你思考方式的。

选择一个你喜欢的特点,胜过其他的。

选择一个成熟的,而不是时髦的,这会让你后面更顺畅一点。你没那多时间陪它们成功。

每个人的选择,都会是不同的。这很正常。每个人的思维习惯不同。但是他们本质上是一样的,最终会条条大路通罗马。

因为不可得三角,你一定会需要很多语言,帮助你实现目标。

文章来源:

Author:Mark24
link:https://mark24code.github.io/程序思考/2024/05/29/选择编程语言的思考.html