当前位置: 首页 > 科技观察

六年后:回到底层编程

时间:2023-03-21 17:15:05 科技观察

一个月前,我进入了我在ThoughtWorks的第7个年头。我不想花时间再写一篇关于它的文章。只是最近发生的一些事情,可能与每一个IT人都息息相关。所以我想,花点时间想一想:我们的行业和它背后的IT系统。在某种程度上,我更可能是在弥补一个重要的短板——第一,我没有从事相关领域;第二,我在平时的开发中确实用的比较少。Web开发的核心:CRUD?在我之前的文章《项目初期的最优技术实践》中,我将产品开发的生命周期分为:技术准备期业务补货期增长优化期如果我们从技术维度来看,我们会发现随着时间的推移,整个项目对人的能力要求会越来越低,直到人人都成为CRUD、Copy/Paste程序员。唯一经常提到的难点就是:数据库的各种优化,或者遗留系统的迁移,或者某个开源软件的优化。所以,我们听到有人提到大公司技术发展的一条清晰路径:成为技术+业务专家。回过头来看,事实是一样的——在大多数公司,成为技术专家是一件高投入低回报的事情。对于个人来说,可能没有足够的回报,可能没有发挥作用的地方,也可能找不到匹配的工作;对于组织来说,很难创造更高的价值。但是什么?对于大多数人来说,他们真的是技术专家吗?如果不写代码,他们只是一个技术决策者,技术决策者和技术专家是两条不同的发展路径。有些事情是重叠的。因此,除了CRUD,我们的重点之一就是优化基础设施,而这些基础设施大部分都是开源的。开源正在扼杀技术创造力吗?免费软件和开源软件运动解放了我们整个行业的生产力。以前我们关注的是如何实现某个功能,现在可以转向对某个业务的具体实现。不可避免的是,在国内的一些大公司,一个训练有素、编程能力强的程序员,变成了会写代码的业务专家。他们带领着一大批中等水平的外包程序员,编写出具有巨大商业价值的低质量代码。这一切看似十分合理,但整个行业的创造力却在下降。特别是如果中国的IT企业在开源领域的影响力太小,整个市场就会充斥着平庸的程序员。那么,这样一来,我们就不得不考虑另一个问题,开源是不是在不断降低组织的技术创造力?对个人来说,学造轮子就能提高,但是对组织呢?阅读源码精髓:解析字符串?这一年里,受项目和公司老板的影响,我开始寻求半自动化的方式理解代码。这个过程的产品之一是古柯和查比。往往经过反复练习,对类似任务的自动化有了更好的把握。在机器执行一段代码之前,我们需要进行一系列的前端转换:词法分析、句法分析、语义分析、中间代码的生成,然后交给后端的编译器进行处理,直到目标程序。对于人类来说,我们理解的过程是类似的,只是生成的中间代码是人类语言,稍有不同。对于一个新的项目,我们要做的就是把理解整理成架构图,或者说他们之间的调用关系。因此,Coca和Chapi被用来自动化这部分工作——解析字符串。所以,一直想写一个自动生成不同语言代码结构的工具。只是一直缺乏明确的用户场景。有了理论和技术,没有人付钱。可执行文件的背后:二进制?一开始因为之前做完一个Todo列表,开始折腾写一个TLV编码器和解码器。TLV,即标识域(Tag/Type)+长度域(Length)+值域(Value),是通信协议中使用的一种编码格式。然后,我开始尝试解析Java生成的类文件。嗯,我发现我做的和TLV解析很像,或者说Coca做的语法解析。毕竟Java的.class文件有固定的格式,所以比直接处理字符串要简单。紧接着,我继续扩展自己对Java虚拟机的理解,试图模仿一个简单的JVM来理解整个Java应用程序是如何运行的。直到现在,我发现了一个新的领域:Android对Java二进制的各种操作:class转dex,dex的优化,dex转oat二进制...。生活是如此的有趣。走吧,Rust成为编程语言的新希望?作为一个浪漫的程序员,我们总是想着创造一种新的语言/DSL来丰富自己的业余时间,调整复制/粘贴的繁琐。我正在陆续学习Go和Rust,并使用它们创建了一系列工具。我对创建特定领域的语言有一定的理解——在合适的时间和合适的场景,很容易产生适合的语言。一种特定的语言解决了一类特定的问题。当然,新的编程语言还是需要有一定规模的公司来支持。然而,不需要特定领域的语言,你可以很容易地开始做你想做的事情。回到底层编程和基础设施所以,因为大多数Web开发都是重复的CRUD。然后回过头来做底层编程,系统编程,偶尔做个系统软件,还是挺不错的。特别是当前,整体市场环境对基础设施的需求不断提升。创造和学习是一种快乐。好吧,我打算在业余时间编写低级代码进行系统编码。本文转载自微信公众号「phodal」,可关注下方二维码。转载本文请联系phodal公众号。