接受我作为千禧一代软件工程师的命运

2020-09-04 05:22:00

我过去常常对我是如何在计算机科学的游戏中这么晚才出生感到相当不安的。我的意思是,看看它,我们在学校里学到的所有涉及计算机科学基础的最酷的东西都是发明出来的-编程语言、操作系统、数据结构和算法、存储系统、密码学、计算机图形学、万维网等等。我们的日常工作包括利用其他聪明人开发的这些出色的工具,然后用if/Else语句将它们缝合在一起。一切都变成了一个黑匣子,而这些黑匣子只会变得越来越大。

由于抽象的堆积如山,根本无法理解一切。因此,我们别无选择,只能使用懒惰评估方法-在这种方法中,我们信任系统和工具正常工作,只有当系统和工具不起作用时,我们才会开始深入抽象层,试图理解和解决问题。如果我们幸运的话,我们可以一直挖到问题的根源。其他时候,它是一个真正的黑匣子(无论是由于精神上的限制,比如神经网络,我们的大脑根本没有那种处理所有信息的能力;或者是由于物理上的限制,比如云产品,源代码被锁定为商业秘密),我们所能做的就是反复试验-我们形成一个任意的假设,对这个盒子运行它,然后检查它的输出是否与假设相符。也许有了这个新得出的确认偏差,我们解决了这个问题,但我们仍然没有完全理解这个盒子,所以我们留下了一丝悲伤的迹象。从理论上讲,我们可以从头开始建设一切,但在这个行业工作意味着生产力为王;如果我们坚持这样做,我们肯定不会在我们的工作岗位上呆很长时间。

我的自我花了一段时间才接受这个现实。但一旦我这么做了,我就意识到:我的头脑多么狭隘,以为所有最酷的东西都已经发明了!发明的意义在于它还不存在。因此,认为所有最酷的东西都已经发明出来的假设是荒谬的(也是自大的)。取而代之的是,创新的领域只是在抽象层向上移动,而我却勉强留在下面。我学会了惊叹于我们已经拥有的系统和工具现有的健壮性和复杂性,同时试图从中吸取教训,试图找出差距,进一步改善生态系统。

今天从更高的层面考虑,我的脑海中有如此多潜在的改进领域(从基础设施工程师的角度来看,因此这些想法的范围相当有限):

为什么最流行的编程语言仍然是为单台机器设计的,并且必须依赖建立在应用程序协议之上的库来在机器之间通信?我可以想象在不久的将来分布式+声明式编程语言的兴起,它们将所有这些都抽象出来。

为什么我们仍然停留在HTTP/FTP等应用协议上呢?我可以想象更高级别的协议,用更少的代码/数据进行更多的通信。

为什么我们要在这么多异构存储系统上复制数据,以便针对不同的使用模式进行优化。我可以想象,未来会有一个适用于多个人的数据库,它只存储一次数据,但利用机器学习针对不同的使用模式进行优化。

总而言之,我已经接受了自己作为千禧一代软件工程师的命运,我站在巨人的肩膀上,将他们的工作缝合在一起,因为我意识到,我们之前的巨人也没有什么不同-他们也在他们之前已知的工作之上构建抽象层。只要下定决心,创新总是有空间的。这就是我喜欢这一领域工作的地方--形成想法,然后通过代码将它们具体化。