00:00
大家好,今天我们将一起探索软件设计的奥秘,接下来的内容将彻底改变你对编程的认知,让我们开始这段精彩的旅程吧。想象一下,你正在看一个系统,慢慢变得混乱,这就像温水煮青蛙一样,复杂性不是一夜之间出现的。每次我们添加一个小功能,增加一个特殊情况,系统就变得更难理解。一点点认知负担让我们的大脑超载、变更、放大,让小修改产生意外后果。而最可怕的是那些未知的未知,你不知道还有什么地方需要修改。这3个症状告诉我们,复杂性已经成为我们最大的敌人。但是既然我们知道了敌人是谁,就有办法对付他。接下来,我们来看看复杂性是如何在我们不知不觉中悄悄渗透进来的。你身边有这样的同事吗?他们编程速度超快,功能上限神速,管理层都夸他们是10倍工程师。但是等等几个月后,你会发现维护他们的代码就像拆炸弹一样惊心动魄,每次修改都可能引爆新的问题。其他团队成员都在默默承受着这种痛苦。
01:05
这就是我们说的战术龙卷风现象,他们看起来很厉害,实际上却在破坏整个系统的长期健康。更可怕的是,在AI工具普及的今天,每个人都能快速生成代码,如果我们只关注速度而忽视质量,人人都可能无意中成为战术龙卷风。那么,什么才是真正的好设计呢?这里有一个革命性的概念深度拈。想象一下苹果手机的充电器,你只需要插上就能充电,不需要了解里面复杂的电压转换电路,这就是深度拈的精髓。简单的接口下隐藏着强大的功能。深度拈就像一个魔法盒子,外表简洁优雅,内部却蕴含着巨大的力量。而浅层拈呢,就像一个花哨但没用的小工具,看起来复杂,实际功能却很有限。Unix系统中的文件IO接口就是深度拈的典型例子,只有几个简单的函数,却能处理各种复杂的存储操作,记住这个比例关系。
02:04
功能越强大,接口越简单,这就是我们追求的设计理想。让我告诉你一个斯坦福大学的真实故事,这教授发现,那些最聪明的学生往往有一个致命弱点。他们太相信自己的第一直觉了,因为他们从小到大都是学霸,第一个想法总是足够好,所以从来没有养成深入思考的习惯。但是当面对真正困难的问题时,第一个想法往往只是局部。最优解教授经常对学生说。假设我禁止你使用刚才的方案,你还能想出什么啊?神奇的事情发生了,第二个方案几乎总是更好。这不是偶然,而是因为强迫自己跳出思维定势,才能看到更广阔的解决空间。只需要花费项目1%~2%的时间来思考替代方案,却能获得设计质量的巨大提升。记住,智慧不在于快速得出答案,而在于愿意挑战自己的第一直觉。现在让我颠覆你对错误处理的认知。大多数程序员都在想。
03:04
我该如何优雅的处理这些异常?但是真正的高手在想我怎样设计才能让这些错误根本不会发生?看左边的代码,满屏的track catch像在玩俄罗斯轮盘赌,而右边的代码呢?通过巧妙的设计,输入总是有效的,操作总是成功的。这不是逃避现实,而是重新定义现实。就像飞机的设计,与其在飞机失控时教乘客如何应对,不如从一开始就设计一架不会失控的飞机。当然,这需要极其谨慎的思考。不是所有错误都能被定义为不存在,但是当你做到这一点时,系统的复杂性会显著降低。记住,最好的错误处理就是不需要处理错误。我们正站在一个历史转折点上,AI工具正在革命性的改变编程世界,但这对我们意味着什么?让我们分析一下。AI现在已经能够生成相当不错的低层次代码,自动补全越来越智能,甚至能够帮我们快速搭建原型。但是,AI能做架构设计吗?能在复杂的业务约束下做出权衡决策吗?答案是还不能。这里有个有趣的现象,当AI帮我们处理越来越多的编码工作时,剩下的工作就越来越偏向于设计和架构思考。
04:21
换句话说,软件设计将从一部分工作变成主要工作,这对我们是巨大的机遇,那些掌握了设计思维的工程师将变得更加稀缺和宝贵。但遗憾的是,大学里几乎没有专门的软件设计课程,所以投资于设计能力的提升就是为未来的自己做最好的准备。现在,让我们来打破一些神话。在软件开发社区里,有些实践被捧上了神坛,但真相往往更复杂。先说TDD测试驱动开发,听起来很高大上,对吧?但想想看,如果你总是先写一个小测试,再写一点代码来通过测试,你永远不会停下来思考整体架构。就像拿着放大镜看森林,你能看清每片叶子,却看不到森林的全貌。
05:06
再看方法长度。大家都说方法越短越好,但是过度分解会让你的代码变成乐高积木。每个积木都很小,但你需要理解它们是如何拼接在一起的。最后是注释,有些人坚持代码及文档,但代码永远无法表达设计意图和权衡考虑。就像一幅画,你能看到画面,但看不到艺术家的创作思路。记住,任何好的原则被推向极端,都会变成有害的教条。好了,理论讲的够多了,现在来点实用的干货。如何成为设计大师呢?首先,你需要培养复杂性雷达,每做一个决策都要问自己,这会让系统更复杂还是更简单?其次,要学会换帽子思考,一会儿当设计者,一会儿当用户,从不同角度审视自己的设计。还要养成记录设计决策的习惯,因为未来的你很可能忘记当初为什么这样做。代码审查不是找茬,而是集体智慧的体现,最重要的是要有重构的勇气,发现设计问题时不要得过且过,立即修正。记住,设计不是一次性的活动,而是贯穿整个开发过程的持续思考。你的目标很简单,让6个月后的自己看到代码时会说啊。
06:19
这个设计真棒,而不是这是谁写的垃圾代码。感谢大家耐心听完这场分享。我们今天的旅程从复杂性怪兽开始,学会了用深度拈这把利器对抗它,掌握了设计两次的智慧,明白了如何将错误定义为不存在,也掌握了AI时代设计师的美好未来。更重要的是,我们学会了质疑那些看似正确的教条,找到了平衡的艺术。软件设计不止是技术活,更是一门关于复杂性管理的哲学。希望今天的内容能够启发你在日常编程中多思考一分钟,多考虑一个方案,多站在用户角度想一想。记住优秀的代码不仅要能运行,更要能让人理解、修改和扩展。愿你的代码如诗般优雅,如山般稳固。
07:05
让我们一起在AI时代做最有价值的设计师吧。
我来说两句