从简陋QuickQR的脱离
QuickQR Enhanced,终于完成了。
说起原来的QuickQR,外观简陋,功能只是把文本转换成二维码,简直是"能用就行"精神的化身般的工具。
但这次,随着网站改版的流程,“既然如此就把外观弄漂亮,功能也扩展一下”——以轻松的心情着手,结果成了噩梦的开始。
结果,搭载了WiFi设置、联系人、事件、位置信息、批处理、预设管理、历史管理、相机读取、打印功能,成了远超当初设想的高功能工具。
与AI讨论让功能增殖
“如果能做WiFi设置的二维码就方便了” “也想对应联系人的vCard” “位置信息二维码应该很有趣” “如果能批处理就高效了”
与AI讨论时,想法不断涌现,不知不觉功能就增殖了。
生成AI不断提议"这样的功能怎么样?",我就不由得说"那也不错!"。简直是功能的通货膨胀状态。
1000行的壁垒 - 感受到AI极限的瞬间
最初500行左右很顺利。AI输出的代码几乎一次就能运行,我想"这很轻松啊"。
但是超过1000行后情况就完全变了。
- 代码输出耗时异常(能泡好一碗方便面的程度)
- 输出的代码无法运行
- 请求微调却破坏了别的部分
- 交流增多,修正的修正的修正…
“啊,这是AI的极限”——感受到的瞬间。
大规模代码库时,AI也无法完全掌握整体。就像人类一样,撞上了复杂性的墙。
AI时代设计阶段的革命 - 看到的新方法论
这次经验让我再次感受到设计阶段的重要性。不,不仅仅是重要性。是生死攸关的程度。
传统开发中,“先做出能动的东西,之后重构"的方法也可以。但对AI就不行。
准备八分,AI一二分?
自古有"准备八分"的说法,但AI开发时代可能已经是**“准备九分”**了。
从这次经验中看到的,是需要以更高的分辨率描绘到达开发完成目标的剧本。
具体来说:
❌ 不好的例子:"添加WiFi功能"
⭕ 好的例子:"用WiFiForm类管理SSID/密码/安全设置,
向QRGenerator类传递字符串,以WIFI:T:WPA;S:...格式生成"
对AI说"添加WiFi功能”,它会迷失在如何嵌入现有代码的哪里。但如果事先明确接口和责任范围,AI就能毫不迷茫地实现。
依赖关系的可视化是生命线
特别是松耦合的设计。需要减少功能和代码的依赖,构建一个变更不会影响其他部分的结构。
这次深刻体会到,AI不擅长把握依赖关系。人类能直觉地知道"啊,改了这里会影响那里",但AI看不到。
最终,切换到了分割文件、逐步固化能确实运行的部分的策略:
core_utils.js- 基本工具(不依赖其他)ui_manager.js- UI相关(仅依赖core_utils)data_manager.js- 数据管理(仅依赖core_utils)qr_generator.js- 二维码生成逻辑(完全独立)
就像这样。让各个部分独立运行,明确接口。正是松耦合的方法。
AI共存的新方法论
这方面从这次经验中隐约看到了一些东西,但今后需要确立好的方法。
这大概会成为在代码生成AI共存中新诞生的方法论。
在传统设计手法之外:
- AI容易理解的模块边界设计
- 考虑上下文量的功能分割
- 掌握AI能保持输出质量的代码规模
- 人类最后能保证质量的粒度设计
虽然还在摸索,但能确定的是**“AI变聪明了所以设计可以随便"是大错特错**。
反而相反,正因为与AI协作,更需要精密的设计。
1000行的教训 - 与AI上下文限制的相处之道
“AI不是万能的"虽然脑子知道,但通过1000行的壁垒亲身体会了。
人类也有一次能掌握的信息量的极限。AI也一样。不,某种意义上比人类限制更严格。
因此,将问题分解为AI一次能处理的粒度的技术变得重要。这与传统的"关注点分离"稍有不同,可以称为**“AI上下文分离”**的新观点。
关于这方面的发现和方法论,想在别的机会详细谈谈。AI时代的工程,还有大量未开拓的领域。
名为坚持的时间小偷
最终完成了令人比较满意的东西,就"算了"吧。
但回顾起来,一旦开始坚持就总是适得其反的性格。
打印功能,说实话是"谁会用啊?“级别的功能却花了最多时间。因为是休息日,就在没人用的功能上热情投入的愚蠢者。
// 创建打印用HTML文档
const printHTML = `
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>二维码打印</title>
<style>
@page {
margin: 2cm;
size: A4;
}
// ... 延绵不断的CSS
但是,偶尔这样认真制作的时间也很重要吧。平时都是效率优先快速制作,但有时也需要坚持到满意为止的时间。
对二维码的感谢和尊重
这次重做QuickQR时,再次实感到二维码技术的出色。
二维码是1994年由日本汽车零件制造商电装(现电装波)的原昌宏先生及其团队发明的。
从电装现场诞生的技术
开发的契机是电装制造现场的迫切要求。
当时,为了部件管理要并排读取10个左右的条形码,作业效率非常差,现场作业人员提出"太累了"“不能读取得更快吗?“的不满和要求。
原昌宏先生从1992年开始从事条形码扫描仪和光学字符识别(OCR)装置的开发,但接到现场的呼声后,着手开发"能容纳比条形码更多信息的码”。
来自围棋棋子的灵感
有趣的是,二维码的位置检测图案(那个方形标记)的想法来自围棋的棋子。
原先生在午休时下围棋,发现"黑白比率为1:1:3:1:1的图案在自然界几乎不存在”,并将其应用于位置检测。
正是从玩心和观察力诞生的发明。
专利无偿开放的英明决断
而且最出色的是,电装将二维码的专利无偿开放了。
通常使用他人的专利需要许可,但电装波明言"对于规格化的二维码不行使权利”。
根据原先生的说法,这个决定的理由是:
“即使做出再好的码,如果周边设备等基础设施没有整备,也无法自由安心地使用。通过开放专利让其他公司也推进基础设施整备,考虑尽快普及二维码”
“希望更多人使用二维码”
开发者这种纯粹的想法,实现了二维码的全球普及。
世界性评价和获奖
这一功绩也得到了世界认可,2014年获得欧洲发明家奖的"Popular Prize”,2023年也获得了日本学士院赏·恩赐赏。
现在,二维码在全世界使用,特别是随着智能手机的普及,在支付、信息共享、认证等各种场合被活用。
原先生说"在支付中使用是意料之外的”,但技术超越设想发展,也是因为开放了专利。
作为工程师的感谢
这次制作QuickQR Enhanced时,再次感受到二维码这项技术的恩惠。
- 能轻松共享WiFi设置
- 联系人交换变得顺畅
- 能瞬间传达位置信息
- 不需要手动输入URL
这一切都是由30年前在日本诞生的技术,以及将其无偿提供给世界的工程师的志向实现的。
想向原昌宏先生和电装团队的各位致以衷心的感谢和尊重。
总结 - 对技术的爱与传承
通过QuickQR Enhanced的开发,实感到技术进步是许多人的积累。
有二维码这样出色的基础技术,有无偿提供它的前辈,现在的我们才能制作新工具。
虽然有时会过于坚持而花费太多时间,但那也许是对技术的爱的体现。
而且最重要的是,即使在AI时代,工程师的设计能力和洞察力也不可或缺,这一点我切身学到了。
不过是二维码生成工具,但也是二维码生成工具。
即使是小小的工具,也蕴含着技术历史和许多人的想法。
QuickQR Enhanced: https://aoiroinc.com/zh/tools/quick-qr/
参考文献·出处
关于二维码的历史·开发经纬: