颜林林的个人网站

来!大胆地用AI技术给自己大脑装上外挂吧!

2023-12-18 23:07
题图
(题图由AI生成)

俗话说,“工欲善其事,必先利其器”。在《我在不惑之年的扬帆启航》中我曾提到,我最近正忙于创业筹备。在这个过程中,我开始尝试诸如ChatGPT之类的AI工具,用下来感觉确实超级有用,值得单独分享推荐一下。

此外,上周朋友圈里有人问我,“ChatGPT这类AI技术对软件开发有什么影响?” 并希望我能针对软件编程新人提些建议。为此,我特意深入实践和体验了一番ChatGPT 4和GitHub CoPilot(它们都出自OpenAI),就为了补充和更新我自己的理解,以便给出更切实的个人观点。

下面,我就分享一下自己对这些工具的使用体会和看法:

  1. 文字创作

在使用ChatGPT之前,我就听说这玩意儿很善于一本正经地胡说八道,适合撰写那些充满正确废话的报告和文书。所以,我一直误以为它的用处就止于此,大概只适合对一篇基本成型的文章进行翻译和润色。没错,文字润色确实是个挺实用的功能。当我把自己写的文字扔给它处理后,它给出的润色结果(中文)好得出乎我意料,都让我有点自惭形秽。而更重要的,在用过之后,我发现它还有另一个功能,这个功能极大地提升了它在我心目中的价值,甚至成了我现在依赖它的主要原因。

我时常反思自己,或被动、或主动,这些年下来,几乎形成了一种潜意识习惯,这让我从旁观者的角度,发现自己的一些严重短板。比如说,关于写作,我就不得不承认,自己其实挺不擅长那种大篇幅、系统性的逻辑梳理和归纳总结(我甚至在考虑将来用写书的方法,来锻炼和弥补这个短板),这表现在我能在朋友圈经常发表些想法,但要把它们扩展成一篇完整文章,我就常常觉得无从下手。

最近用ChatGPT时,我换了个新招:就像随性的意识流,把突然冒出来的各种想法和点子,像跟朋友聊天似的发给ChatGPT。然后,我让它帮我把这些杂乱的点子整理出个大纲,甚至直接搞出个初稿来。这个方法真是弥补了我的大脑短板,让我不用一上来就操心整体逻辑串联,瞻前顾后,生怕遗漏了某个想表达的重要观点。如果有遗漏,我只需要再反复问问ChatGPT,它就能帮我找出来并加以组织。于是,我可以专注于头脑风暴和点子的质量甄别,而不是浪费过多时间精力在具体字词推敲细节上。更棒的是,由于思考上的负担减轻了,加上ChatGPT那种几乎是“穷举法”式的随机排列组合,反倒激发了更多新观点的火花,带来创新的可能。

去年初,我曾挑战过一段时间公众号文章日更。那时候,我得根据选择的主题,仔细构思内容,一字一句地表达,再一字一句地润色,累得要命,所以在停下来后,就不可避免地停了很久,真是典型的“三天打渔,两百天晒网”。现在有了ChatGPT的助力,无论是润色还是梳理观点,效率都大大提升了。ChatGPT不止是一只“小黄鸭”(参见“小黄鸭调试法”),它更像是一个能听懂话、且永远不嫌烦的私人助理。有了它的这些帮助,我突然就有了重新开始日更、且还能保持质量的信心。

  1. 编程实践

接下来,我再聊聊编程。

在谈编程之前,我先提一下开车。我是2013年拿到的驾照(如今也算是老司机了),当时选择的是手动档,为的是那所谓的“操控感”。而事实上,这些年我开的都是自动档车,如今已经几乎完全不会开手动档车了。编程其实也有点类似。当我们用高级语言编程,而不是一行行写汇编或机器指令,这本质上就像是从手动档换成自动档。所以我对使用各种编程“外挂”其实是非常支持的。毕竟,我们现在不是在学校里,不需要仅仅为了考试而学习种种“底层”技能(至少大多数人不需要),我们真正要做的是解决实际问题。当然,底层技能也是很有用的,比方说,假设哪天真的发生了核大战(如今世界局势动荡,还真不是完全没可能),世界退回原始社会,那时候这些“底层”技能应该就又会有用武之地了。

说回到编程本身,我早些年在Windows环境下做软件开发时,曾经特别依赖Visual Studio和Visual Assist(Tomato)这种插件。那时候Tomato对我来说简直就是神器,能够智能地提供函数名、变量名的提示,让编程效率大大提高。有了它,我就不用费劲记库函数和参数了,直接顺着思路写就行。这种方式的缺点就是,如果被要求在面试时手写代码,可能就只好接受被嘲讽和鄙视的下场了。但我个人觉得,这种面试方式其实很不合理,更像是HR找借口减轻工作量吧。

函数名和参数提示早已成为每个编程环境的标配,此类功能在提高编程效率方面,几乎不可能再有大幅提升。实际上,我们在编程过程中花费更多时间的地方,通常是在需求分析、选择合适的框架和算法上,还有就是学习如何使用各种库函数。特别是当我们不得不用一些陌生的第三方库时,学习和记忆这些库的使用细节,成了新一代程序员的巨大挑战。幸运的是,从tabnine开始提供整行甚至整段代码生成(当时这个功能相当惊艳呢)以来,类似工具就在以我们难以想象的方式快速迭代发展了。

GitHub Copilot的体验,再次彻底改变了我的编程习惯。我不再像过去那样,一开始总是从自己那可怜的记忆库里,挖掘也许能适用的算法和代码片段。现在,我只需把需求描述给Copilot,它就能自动为我生成整篇的代码,有框架、有细节。接下来,我只需进行代码审查或根据实际需求作出细微调整(很多时候,我甚至都不需修改,因为它会根据我的项目中其他代码的上下文猜出我想实现的是什么,这真是太神奇了)。这种新的工作模式让我能专注于业务本身,而不是花大量时间和精力去重复别人已做过的编码和调试工作。对于我这样已经从码农跨界到生物医药/生物信息这些新领域(相对于传统的计算机编程)的人来说,这种改变升级尤其重要,甚至必需。

  1. 其他

说了这么多AI的好,也该说说它的不足。举两个例子:其一,我曾试着拍了张数学智力题(逻辑推断类型)的照片,发给ChatGPT解答,它虽然能识别出题目的文字和内容(这已经很了不起了),但在推理方面,就开始胡言乱语,连基本的逻辑常识都保证不了。其二,为了创业,我最近在恶补财税知识,因此突发奇想让ChatGPT帮我写写会计分录,结果它连最基本的会计恒等式都对不上。

这就说明了,尽管ChatGPT在各种方面表现出神奇的智能,拥有强大的推理能力和接近无穷(“整个互联网”)的知识储备,但一旦深入到专业领域的具体问题,它就容易露出“其实并不真懂问题”的马脚,经常答非所问,甚至给出完全错误的答案。不过,这样的现状,我倒觉得是,给了我们作为初创公司的新机遇,我们完全可以积累自己在特定领域的高质量数据,借用ChatGPT类似的技术框架,来设计细分领域内的超级产品。

再回到最初的问题:ChatGPT这类AI技术对软件开发的影响。根据我个人的体验,如果我们将AI视作辅助工具,那它绝对值得我们去拥有并大量使用。为什么要把时间浪费在重复性的劳动(即使是脑力劳动)上呢?如果有工具能帮我们更高效地完成这些任务,那就大胆利用起来。反观许多算法的改进,其实也是在减少原有算法中的重复性搜索过程,实现的效率大幅提升。软件开发在现实生活中要解决的,大多是各行各业的具体业务问题。我们作为开发人员,即使要“保持技术人的身份和本色”,肯定不是脱离应用场景地“纯做技术”,而应该关注这些行业的业务逻辑,成为领域专家,不断思考怎样应用自己掌握的技术,来解决该领域的更多实际问题,以及如何更有效地解决这些问题。

我始终觉得,AI其实就是在不断推进批量化和自动化。就算现在它看起来很神奇,但其实每个环节都能对应到人类的思维或行为。这么一想,如果我们对AI的表现感到害怕,那其实我们应该反思一下:是不是我们的工作“创新度太低,重复性太高”了呢?不过,我相信无论如何,我们总能找到AI还没触及的领域,或者至少还做得不够好的地方,然后把自己安置在那儿,自然就能有所发挥了。

综上所述,从这篇文章的标题和我分享的内容来看,我应该算是一个坚定的超人类主义者(希望不会因此引来抨击)。尽管很多科幻作品都用极端的方式来恐吓我们,但我始终相信,我们总是有能力去面对未知的。焦虑不能解决问题,AI应该是一种可被任何人使用的资源。那就从现在开始,用AI技术给自己大脑装上外挂,让我们一起迎接这个新时代吧!

--- END ---

注:本文首发表于“不靠谱颜论”公众号,并同步至本站。