这些天,一直在批改学生交上来的Java结课设计作业,随手写些点评和感想。
今天介绍一下班上的姚雨森同学,他混合使用Java/Python/CSharp三种编程语言,写了一个集成了诸多工具的PC维修实用工具箱,在编写Kernel时与Windows“斗智斗勇”,实现了硬件信息监视、一键激活Windows、一键进入BIOS、解锁BitLocker、重置代理、修复网卡代码56错误、快捷进入CLINIC_OP工具等电脑诊所常用的实用功能,在技术上颇具深度和亮点。
让我感叹,这小伙子在技术上真能折腾,探索劲头十足。
顺便说一下,姚雨森同学早在高一就已经学习了Java,已经在翻《Java核心技术》这种砖头书了。以下是文档中他对自己学习过程的自述:
=======================
非常幸运,我在高一时处于机缘巧合,接触到了编程,第一门语言便是Java。一经入门,我就喜欢上了这种创造的感觉。到了高二,我尝试用学到的知识开发一个背单词的项目。当时还没有AI,我不认识能请教的高手,也看不懂英文的论坛。每逢遇到技术问题,就只能在中文论坛里细细搜寻有用的信息,或者逐字逐句地翻看我的两本《Java核心技术》,一点一点反复尝试。每当代码终于跑通,我就能获得一种强烈且持久的快乐。转眼一看已经凌晨两点,第二天因为语文课上睡着被班主任制裁。
随着接触到的技术越多,我越认为自己会的太少,我不想只是写程序,我更想了解它们背后的原理,也就立下了想要探索更深入的计算机科学的志向。因此可以说Java是我的“母语”,为我打开了这伟大的计算机科学的大门。后来我在软件开发方面学习了C和Rust,还学习了设计模式之类的知识。上大学后我又自学了C++和Python,浅薄地了解了计算机组成原理和算法的知识,我还在网协学到了电脑的硬件组成和维修知识。
===============================
点评:由此可见啊,“兴趣”是最好的老师。“兴趣驱动下的主动学习”,是开发高手的标配。计算机这玩意儿吧,早点接触,早点学,会有先发优势。
智能时代吧,怎么离得开AI?
以下是他文档中有关AI部分的内容(我一字未改),其中的他对于“Vibe Codeing”的观点,对于代码及AI的思索,也颇值一读。
============================================
第6章 本项目中AI技术及工具应用情况的介绍
本项目全部核心Java代码、Python代码均为我自行设计、编写的,使用了Github Copilot 的行内补全功能。C#代码来源于开源项目fan-control1,我进行了少量修改。
项目中关于寻找外部工具路径相关代码为GPT5.2生成的。
我在四个场景下使用AI工具,为了节省了大量在次要问题上耗费的时间。
第一是使用AI工具帮助我快速了解不熟悉的技术和项目,节省了极大的搜索和学习开源项目的时间。比如,我借助ClaudeSonnet4.5学习fan-control的wrapper的工作原理和工作流,从而确定了这个wrapper能够满足我的开发需求;借助Claude Sonnet 4.5 给出 MAS_AIO.cmd 的启动参数,从而快速将其运用到项目中。
第二是在开发Desktop时,我使用AI设计出美观的界面,节约了调整组件样式的时间,提升了界面的美观度。Desktop中的全部fxml文件都是使用GPT5.2生成的。
第三是使用AI进行需要大量重复且技术难度极低的工作。如在为Desktop进行国际化适配时,我使用GPT5.2为每个带文字的组件生成id和在国际化配置文件中的对应文本。
第四是使用AI配置项目的构建方法。本项目的配置文件是GPT5.2完成的,节省了不必要的学习Kotlin和配置Gradle的时间。另外打包后的代码在其它电脑上无法运行,也是让GPT5.2进行修改的。
在本项目前,我在AI的辅助下开发了另一个项目。在使用AI编辑代码时,我的确被其强大的上下文阅读和编码能力所震撼。但是另一方面,我发现AI的debug以及对项目总体的设计能力普遍较弱。AI不能打断点,也没有分析变量运行时值的意识,只会按照推理改几行代码后检查最终的运行结果,实际上给自己构造一个黑箱。这种方式导致其难以定位问题根源,有时我使用debug工具仅需十分钟即可定位的问题,AI需要反复尝试半小时以上,对于复杂的问题更是无能为力。
因此,我认为当前的AI更加适合作为辅助工具,帮助开发者处理琐碎的技术细节、编写脚本和样板代码,但完全不能胜任开发、维护大型项目的工作。
当今打着“仅需几行提示词便能生成一个项目”的AI大行其道,吸引无数对计算机科学和软件开发知之甚少的vibecoder生成大量项目,一次commit就将几万行代码一并上传。但这些项目完全是刻板的流水线产品,既没有符合人类阅读、学习的开发流程,也没有凝结个人的思考和技术能力,不会产生任何独特的思考和创造,其本身又难以理解、难以维护,不断地使人心愈发浮躁、不断地污染着开源环境。就像是RobPike所说的“spendingtrillionsontoxic, unrecyclable equipment while blowing up society(耗费无数的金钱,向社会投送有毒的垃圾)”。
其实,代码不仅是一种工具,更是一种语言。就像每位作家有其独特的笔风一样,每位开发者也会有其独特的代码风格——怎样分隔功能?按照什么逻辑排列函数?按照什么规则分隔代码?面对某种情况使用什么设计模式?使用简单激进还是冗长稳重的代码实现?这都体现着开发者本人的审美志趣和思想哲学。
AI或许可以替代网页设计和软件开发的工作,但绝不可能替代系统内核或编译器等的开发工作。因为前者只需要依赖现有的框架和大量文档照猫画虎,是单纯的“体力活”。而后者却蕴含着人类独有思考的能力,是人类智慧和创造力的结晶。AI的确会逐步替代技术含量不高的开发岗位,但无论其如何进步,终究只能,也应当成为发明家们愈发趁手好用的工具,而不是成为发明家本身。
对于熟练的开发者,应该更多关注核心技术的设计以及重要的细节。比如某个函数应该做怎样的功能,用什么技术实现。借助充足的代码编写经验,这时开发者能在脑中看到将要编写的代码,就可以交由AI完成实际代码编写,自己只需对与想象不符的部分加以修改即可。对于我们这样软件开发的初学者,不仅应该练习设计程序的能力,也需要练习实际编写代码的能力。此时AI应当作为为我们答疑解惑,避免走太多弯路的助手。
总而言之,对AI的使用不能超出个人理解能力的范围。
==================================
点评:
优秀的研究者和工程师,都具有一种不盲从的批判性思维——我不管你说得如何,只看你做出了什么东西,你的成果,能否通过实践的考验;你说的对不对,也得经过我的独立思索与分析,并且最终,观点的正确与否,是由实践与客观事实决定的。
“实事求是”,是基本的要求。
发布于 北京
