最近做了挺多(随机的)遗产内容,后面有机会列一列。
本文遗产无关,也没啥特别的发帖动机,就是觉得挺好(玩)的一事。
昨天(6月30号)Github推了个vscode插件Github Copilot,原理就是从各类代码库(及方案库)中学习规律来理解你的代码上下文(引擎名为Codex,gpt-3的升级版),从而推断出你的实际业务实现,包括类似类人指令交互,就是你写一段描述业务的方法名或注释,实际实现由这个AI填入。
gpt-3的主要职能就是白话写代码,临时查了下是去年6月11号的beta,至今已不是啥新鲜事物。我印象中应该已经有不少商业网站在(尝试)消化这一技术,特别是前端领域。
有兴趣可以来OpenAI看看,很有趣的地方。当然如果你也是码农,我强烈建议试下copilot,也许可以一定程度上改变你下半生的轨迹。
我觉得以往gpt-3实现娱乐性质居多,虽然打眼一看很黑科技,但其价值潜力主要还是节约重复劳作时间,就跟流水线替代重复手工生产一样,真正的突破机遇仍取决于解放出的人类生产力能搞出啥新东西。
不过这也就是人类文明进步的本质,咱们没有能力改变自己(我感觉地球毁灭时都不一定搞得定这事儿,当然希望这是想象力限制了我的想象力),最行之有效的策略只有想法升级工具了。
可以预见copilot近期的广泛用途是省了记性不好的码农(比如我)在google/ms doc/stackoverflow花费的大把检索时间,但我对这个倒没什么特别感觉(虽然直接影响到了恰饭效率),让我觉得脑门闪亮的是这个ai代码补全。
为啥刚出一天还没摸热乎就要闪亮,主要来自于前阵子玩vs2022pr1的体验,这个貌似是6月17号发布的,早了俩星期。
这俩东西本质上并不是一类东西,copilot的核心还是经典的gpt-3实现(自然语言与编程语言的转译)顺道附赠上下文相关的代码补全,而vs2022的intellisense则是对传统代码补全的强化,范围和准度都有大幅提升,但不会帮你处理你自己不知道要怎么干的事情。
说到vs,它也许是宇宙第一IDE,但对我这样的小作坊码农真没啥优势(遗产倒是只能vs,其本身并无绑定,但我需要很多vs特性来管理这个项目),今年我的主力生产工具就是3年前买来看片的低配surface pro,一个vscode(及无限插件)解决所有需求,算力和续航也离奇的够用。
唯一缺憾就是内存太小跑本地docker有点尴尬,不过把wsl挤挤倒也跑得顺畅,毕竟2是原生linux。
我此前的必需装备是这个平板(看片),笔记本+egpu(出门)和pc(宅),今年索性把出门的装备出了,完全没装包的必要。
这中间有个事情,大概就是五六月份的事情,中间有段时间对IT相当厌恶,简单说就是觉得我特无聊,IT行业特无聊,IT从业者也特无聊,总之谁干谁无聊,一点也不好玩,也完全不想动手搞事。
不过那阵好像给遗产鼓捣了点什么东西。
两周前vs2022pr1发布,有一条更新是给intellisense加了个AI buff。鉴于我对intellisense的观感极差(C++/C#都不咋地,虽然C#的确好点),看到这里的反应大概是这样的。
事实上这东西的牛逼程度的确远不及copilot,但毕竟copilot是昨天才有的东西,所以缺乏想象空间的我上手新intellisense后的反应大概是这样的。
怎么回事。
当代IT业务,至少是我能接触到的业务大都是相当高层的实现,大量代码都是boilerplate code(真不知道这个中文叫啥,嗯查了下就是样板代码。)。
这个大量真的是遍布全球,不是找段html或是每个js module都得写一遍的import/export,也不是无限的prop(这类东西都是一套snippet解决问题)。而是你为了改动任何业务逻辑(及交互协议)时都要重复的诸如继承(主要用于协议结构管理,至少我是摆脱不了这东西),接口定义,功能实现,依赖注入,以及由路由,身份认证(包括权限控制),数据维护(包括上下串流及数据库缓存策略)以及数不胜数的杂七杂八的外部服务引用,比如支付平台和第三方认证接入啥的带来的结构耦合(接口层面的业务交互逻辑不算耦合,但在我的字典里如果A的结构改动会影响到B那么就是了!),总之你总是在为一堆结构类似的的不同业务重复敲你已经敲了八百遍的东西,而且还没什么工具可以进一步解决这个问题,毕竟实际业务(功能实现)多少有所差异,ide能给你一排待选继承或提醒你复写某个方法就算是理论到顶了。
有时候我还挺庆幸自己作坊太小不用写测试。
而这也并非我独有的矫情,我觉得这点最有力的佐证就是vim的存在。基本没人认为vim不是好东西(我也对这东西强烈依赖了),但过往的遗产经历让我有了这种(潜在)观念:如果你需要以类似的方式多次实现业务逻辑,可能你的业务逻辑设计本身就有问题。
vim就是个帮你重复干活的东西。试想如果所有类似的实现都只用做一遍,你还用不用得着。
而且我始终觉得软件工程的重点是架构而非实现,这就像是周杰伦和给周杰伦拉二胡的,你想干哪个。
当然了,遗产是个相对特殊的项目,其业务大都是单一的描述性系统(将特定格式的数据单向或双向翻译为游戏流程),基本不存在需要以类似形式实现不同系统的可能,我承认这个观念放恰饭领域有点邪道。
所以当翻来覆去在你的pattern里穿梭并庆幸于vim提高了30倍改名效率时,我总是觉得为什么我总是在搞这些小学生都嫌烦的事情,还没个头。
说实话,在摸到vs2022之前,我真不知道对本职工作的厌恶来自于这种没下限的重复,当时猜测是缘分问题,也许去端盘子啥的会更有激情。
当时摸vs2022一方面是好奇,另一方面是想拿敲了个框就没再动过的遗产社区试下.net 6后的新东西(c#9,maui,还有终于支持hot reload的blazor,虽然前几年感觉ms总弯道翻车而投靠react了),这个项目本质上和我的日常工作没啥区别。
然后就是tabtabtab。
tabtabtab。
tabtabtabtabtabtabtabtab。
目前这个新intellisense对实际业务的猜测不是很准(对我这个项目大概有3成几率,目测变量名会显著影响蒙对的几率。不过整体还是偏蠢,很多时候都完全无视上下文,感觉并没有什么分析,只是搜一行看起来接近的给你贴上),但对于上面吐槽的几乎所有重复输入的情况,其蒙对的概率至少有90%,而且大幅改善了常规代码补全后光标错位的问题(毕竟括号,逗号和分号这仨可以保证100%蒙对)。
这个功能对我脆弱的意志力的影响是巨大的。
这就像前一天你想泡澡,就得先有个浴缸,但得有个浴室放吧,从而得先有个房子,从而要先盖个房子,从而要先打地基,挖沙搞混凝土……好吧地基也许不用自己打了,但至少还得从盖房子搞起,这就很没意思,还是上广场淋雨算了。
然后第二天你发现,你只需要搞个浴缸,找个锤子四面敲敲打打,带浴室的房子就自己盖完了,因为其他人家都是这么盖的直接抄来保证塌不了,那这就有点意思,还是很有动力去搞个浴缸的。
大概就是这么个事儿,我也不知道都说了些啥,总之是件好事。生在这个大佬免费带我飞的时代,还是感觉很幸运的。