系统复杂性的增加是无情的,令人压迫的,最终是残酷的。对于我作为老一辈的程序员来说,这也令人非常失望。
我从事编程已经40多年了,用50-100种不同的语言或方言编写了代码,并成为5-10的专家。我之所以能说很多的原因是,大多数情况下它们只是同一种语言,但有一些调整。这些调整增加了复杂性,使每种语言都略有不同。
我已经实现了无数次相同的算法:收集,转换,排序和搜索,编码/解码,格式/解析,缓冲区和字符串,算术,内存,I / O。每个新的实现都会增加复杂性,因为每个实现都有点不同。
我想知道Web框架和移动应用程序的高飞空中飞人艺术家创造的魔力,如何在如此短的时间内产生如此美丽的东西。然后,我意识到他们不知道多少,他们将需要多少知识来学习数据或通信,测试或线程,或者在它们变得有用之前需要做什么。
我在第四代语言时代学到了我的手艺,我们真正地相信我们会产生一系列越来越高级的语言,以逐步捕获越来越多的写作软件的重复部分。那么结果如何呢?
微软和IBM通过返回C语言为Windows和OS / 2编写应用程序来终结了这个想法,而dBase / Foxpro甚至Delphi都陷入了困境。然后,网络再次使用其最终的三大汇编语言:HTML,CSS和JavaScript / DOM再次实现了这一目标。从那里到那里都是下坡路。总是会有更多的语言,更多的库,更多的框架和更多的复杂性。
我们知道我们应该做不同的事情。我们了解CoffeeScript和Dart,了解Less和Sass,了解避免编写HTML的模板。我们知道,而且我们还是这样做。我们拥有我们的框架,充满了抽象的漏洞,我们看到了那些学习奥秘咒语的少数人可以做些什么,但是我们和我们的程序被过去的决策所困。它太复杂了,无法更改或重新开始。
结果是,由于复杂性,本来应该容易的事情并不容易,而应该可能的事情几乎是不可能的。我可以估算进行更改以在已建立的代码库中实施新功能的成本,并且确信我会做对的。我可以估算,但是我不能证明或解释它。它太复杂了。
在回答您的最后一个问题时,我强烈建议年轻的程序员尽可能地从高层次开始,并仅在需求和欲望提供推动力时才跳到较低层次。我的首选语言是没有循环,几乎没有分支或没有显式状态的语言。Lisp和Haskell浮现在脑海。在实践中,我总是以C#/ Java,Ruby,Javascript,Python和SQL为结尾,因为这就是社区所在的地方。
最后一句话:复杂性是最终的敌人!击败它,生活变得简单。