我说的是,这种表面的技术问题,根源是人。
一次性学很多语言是极端情况。
但大部分人长期没选型决策权,没余裕在项目需求上推三阻四拒绝学习新技术(语言是其显著代表),不管技术上是不是合理的(不用就得润),结果就习惯要么固守个别领域,要么就被随意差遣,更加对这方面事务没话语权。结果莫名其妙拱手放弃了支配自身技术发展路线的权力。
即便一次就学一个新的,时间长了项目多了迟早等效:学习开销不随工程经验丰富而下降,收益却因为越来越有能力发现“新”语言的弱点而下降。越来越难发现好到值得投入学的语言,认真了反而像是给人免费当苦力推广;即便是发现坑为项目避雷,对个人生涯来讲也是净亏。
破解无谓超额成本做法有两个:一是愿意同流合污,打不过就加入,有饭一起恰;二是自己开宗立派,取而代之。
我这么点明了,自然一般人都想做后者。但这比把持选型决策权还难;而且被技术视野不够高的决策者支使惯了,需要独立思考的时候就躺了;所以现实大多会怂。
更何况现实很少有人自己独立发现这层利害关系,就算想到了更加寄了。
OP 和一些回复背后隐含类似的焦虑算是比彻底躺了的孺子可教,但脱离具体场景泛泛而谈个别缺点格局仍比较水,这是我说比较无聊的一个原因。
只有对选择第二条路的人,考虑具体技术问题才有实用意义。
不过说实话,我就感到这几十年还真是阿猫阿狗也敢整活了。
有的大约就是单纯用的不被大众所知,但我还是嫌多了碍眼。比如 Squirrel 的实现连 REPL 的 EOF 都处理不对,这样的素质也敢有厂商搞当工业语言用。当然,小圈子语言嘛,跳出坑就行,比较容易逃避。
有的是盲目从众。这时候上梁不正的后果就是灾难行的,比如 TC39 和 Guido van Rossum 连 proper tail call 都欠教育的水平。这是大部分人逃不过的部分,因为想要逃离毒害差不多是转行。
至于 Go 是什么档次呢?
设计 OS 水平先不论(虽然也存疑),Ken Thompson 在搞语言这块嘛,是个连什么叫 nominal typing 都没概念的(
lambda-the-ultimate.org/node/4554#comment-71474 ),这样的水平能指望啥呢?
另一方面,golang 的 spec 里把原来 C 叫 object 的东西硬是叫 variable 这样的原则上技术氵 13 问题到处都是,就更不说整个核心“社区”的质量了。
写起来恶不恶心反倒是次要的,足够圣母觉得有救的用户,可以自己加个 pp phase 之类,多造半个语言改正缺陷或者适应需求变化(如 C→C++→C++/CLI )。而要是 spec 从根上整个没得救,连会设计语言的人士都不觉得魔改的必要,那就真寄了。
当然不是说水平高见识多的屁股就一定正确,也可能一堆私货;比如 Robert Harper ( cf.
github.com/JuliaLang/julia/issues/6113 ;
https://github.com/FrankHB/pl-docs/blob/master/zh-CN/typing-vs-typechecking.md )。
大部分用户在这种层次的问题上,仍然逃离不了被大手子当放大观点的工具人使的命运。
独立思考是不可能独立思考的,这辈子大约都不行了。
现状就这样,不是照顾外行,golang 不值单独拎出来一提。其实这种 dssq 很多领域到处都是,也犯不着对某种语言的流行特别少见多怪了。这是我说无聊的另一个原因。