2022年软件工程的展望

2021已经渐渐进入尾声,新冠疫情下的第二年也即将结束,现实世界发生着翻天覆地的变化,工程师的世界也在巨变。作为一个关注开发的安全工程师,最近见到两个崭新的工具,jetbrains fleet 和 github copilot,分享一下对软件工程的展望。

jetbrains fleet

jetbrains fleet ( https://www.jetbrains.com/fleet/ )是他家内测的一款全新的 IDE,特点是轻量级、多语言、分布式、在线协同,光看这个修饰词,就很令人期待了,由于我申请得太晚了,无法实际体验到,很遗憾,只能云一下了。

轻量级。众所周知啊,他家的 IDE 都是很重的,很吃 CPU 和内存。不确定它能做到哪种程度,是做到 sublime级 还是 vscode 级,能日常秒开,当个记事本,还是很舒服的,毕竟在 notepad++ 反华之后,我就再也没有用过它了。

多语言,略,谁家都有。

在线协同,略,2017 年就见过,谁家都有。

分布式

我认为分布式才是这款软件的亮点,我非常期待这个功能点。


根据设计,从2021年12月开始,JetBrains 家的 IDE全都支持前后端分离的设计了,例如本地运行 Intellij Idea 的前端,服务器运行 Intellij Idea 的后端,代码、构建流程、复杂环境全部放在服务器上,本地仅是一个瘦客户端。

如果真能做到体验和以前完全一样,那么这一设计将极大提升程序员的工作效率。

众所周知,每次重新安装系统后,都要花时间进行大量配置,每次接手新项目,经常要配置顺手的环境。

设想一下,所有的环境都被放在了远程,本地只有IDE,连上环境后可以直接开始测试,丝滑的体验,想想就很幸福。


另一方面,从节约硬盘的角度讲,JetBrains 家的 IDE 有大量的通用组件,目前本地的 Intellij、Pycharm、Clion都是独立安装、独立运行的,如果能把它们公共部分提出来,作为一个前端使用,再将各自的后端部署到 server 上,也是一种很优雅的设计。

理想情景

除了上述内容,还有 JetBrains Space 功能(https://www.jetbrains.com/remote-development/space-dev-environments/ ),集成了大量软件工程的基础功能,例如 joblist、chatroom、代码仓、CI、review、配置管理。

国内的厂商是不大喜欢这一套的,可能有了自己的解决方案,更多的是根本不遵照开发流程,Space功能有限。而对于像我这样的个人开发者,一个人自娱自乐,全都上云属于脑抽行为。

因此,我认为这种场景适用的是小型的、远程的、有正规的开发规范的公司,不会受到条条框框的影响,工程师体验一下投个票,立刻就能迁移了,管理系统全部都使用 Space,收费也算合理,体验应该还是很好的。

每次安装虚拟机时,都会因为配环境痛苦很久,相信这种云端化的趋势,docker 化的的趋势能减轻这种痛苦。今后几年,发展趋势估计还是上云、上云、上云,本地的功能逐渐变少,本地难做的跨平台、交叉编译、持续测试,全都放在服务器上,进一步解放人力。

github copilot

2021年6月,copilot 作为新一代的 AI 辅助编程工具,很多新闻都在报道,但是需要申请资格才能使用,而且只支持 VSCode;11月,支持了 JetBrains;12月,我偶然发现我的申请资格早就下来了,体验一番,它的智能程度远超我的想象。

12月12日是个周日,刚好我准备用 pandas 随便写写数据处理和绘图,我已经忘掉很多 API 了。我的目标是随便写点参数处理,随便写点统计,再绘图,功能非常基础;但它和业务强相关,列名、处理方式、处理逻辑,AI应该猜不到我想做什么,我认为这个情景很适合测试copilot 的智能程度,从编码到完成,我屡次被震惊到,心跳加快,肌肉乏力,甚至产生了恐惧。

最开始处理 sys.argv,嗯,写起来很舒服,AI 能帮忙做出长度检测、传参、情况处理,也是意料之中。

之后写 pandas,copilot 就开始离谱了,我输入 groupby,弹了月份,符合预期;回车,弹了求和,符合预期;回车,弹了求百分比,符合预期;输入井号,补全出了合理的注释,符合预期。这四行代码写下来,卧槽,这个东西也太懂我的想法了,运行一下看看,居然全都是正确的。众所周知,写 pandas 需要动脑子,写一行代码也需要思考几分钟,这个效率提升得也太巨大了。

继续回车,它开始帮忙绘图了、X轴名称、Y轴名称、对应数据、标题名称、最后show,全都是很合理的代码,我越来越害怕,仿佛见到一个深不可测的庞然大物,这也太智能了。

我想给图表换个颜色,但我忘了 API 是什么,于是在合理的地方写了一行注释,"chart color green",回车,然后它真的生成了 plt.plot(xxxx, color='green'),我又大吃一惊,根据注释都能写代码,这也太神奇了。

完成后,重新审视整份代码,虽然功能很简单,但业务逻辑是复杂的,copilot 居然帮我生成了80%的代码,剩下20%的都是简单的上下文代码,智能程度远超我的想象。

不得不说,我太佩服这款软件了,此刻最恰当的比喻,我愿意将它类比为第一次工业革命时的蒸汽机,将人类从生产过程中解脱出来,极大地提高生产力,这对人类文明是有巨大的贡献的。我一向认为自己是一名优秀的开发者,认知范围广,力图编写最优雅的代码,但我不得不承认 copilot 在一些方面是超过我的,尤其是最常见的、最基础的需求,例如开发不需要动脑子的业务代码,写写 CRUD,它一个机器就是一个团队,太强大了。举个不恰当的例子,一个资深全栈工程师加上 copilot,能吊打一个三流开发团队。

网上有讨论说,copilot 可能让部分人失业,让人恐惧;我的恐惧不是来源于此,我认为它并不会让程序员失业,因为低端程序员无法驾驭它,无法使用一个自己不了解的东西,而资深程序员可以理解它的习惯,从而提高开发效率。以前在科恩时候,吴石老板最强调的就是自动化,我深受影响,非常愿意看到有各种各样的工具可以改变我们的社会,节省人力,让人类有精力去做更深刻的探索,而 copilot,就是我心中的、对行业有巨大影响的工具。

展望

这两年疫情,国外经常远程办公,而软件工程基本是外国人在主导的, 催生了 JetBrains fleet、JetBrains Space 的快速出现。IDE领域,JetBrains 已经是一家独大了,它完全可以摆烂,维护一下 bug,支持一下新语言,靠垄断性的地位赚钱,但今年的功能让我感受到,它仍然是一个主动改变、探索新场景的企业,为提高开发效率做努力。

算力发展、机器学习火热,催生出了 github copilot,未来是否有产品可以超越它,我觉得不会有了,就好比 CodeQL 后再无 CodeQL,能够战胜它的,只有它自己。

我注重效率,注重对行业的贡献,因此我对二者报以崇高的敬意,希望未来能有更多提高程序员效率的产品出现。