我老爸曾经常说一句话:“慢点来,孩子,这样你才能更快地完成工作。”
我已经在旧金山海湾区的许多高科技初创公司里工作过了。今年我52岁,我缓慢地、充满思考地编程。我有点像是一个写代码的设计师,如果你继续读下去,会发现这点真的很明显。
当我最近开发的一个项目中有一群信仰快速、细微迭代改变代码的年轻程序员时,慢速编程对我来说成了一个问题。在工作中,我们在同一个代码库下开发,好像这就是一大锅汤,我们只需要不断且费力地搅动它,一个神奇完整的东西就会出现了。
这真的没什么用。
这些开发者中的很多人都很相信一个谬论:所有的工程师都是可以被替代的,所以不该有人为某一段特定的代码负责,任何程序员在任何时候都能改变任意部分的代码。毕竟,我们有像Github(看看这个《14个最佳免费Hithub开发者工具》、《你不可不知的10个Github功能》)这样极好的服务来管理和融合来自很多程序员的很多不同步的代码改变。只要每人都不断地提交代码,同时不造成破坏,一切都会变好的。
这纯粹是胡说八道!
你不能期许没有设计过程就开始编程。设计在人类文明刚出现是就已经存在了。当下最新较好用的开发工具,不论有多好用,都不能替代建立大教堂、铁路和长篇电影的最佳实践和现实生活中的合作。
任何数量的编程也不能生成一种工具来减少软件开发时间,开发速度快到连猴子都能完成团队代码的速度。
节律异常
在一群快速开发的程序员中做一名慢速程序员的意外事故是我变得节律异常了,这样我的编程节奏就通过其他程序员连续不断地快速机器迭代给打断了。我的编程风格是由不同的尺度和时间表的有机弧线来定义的,每条弧线都从探索、尝试、出错、创造性地解决问题和临时变量开始。基本上就是大量的脚手架之类的搭建工作,这样一幅画就开始成形了。然后,我再回头做些修修补补的细节工作。每条弧线的末端就像是快要完成的代码。我为代码贡献的开发弧线就等同于一个策略、设计方案和体系结构的出现。
有时候,一个成熟的生物出现后,我会回到原点重新开始,因为我想到了一个怎么去做的更好方法。有时候我错了,有时候我是对的。在这个生物完全成形并开始盯着我看之前,真的没办法知道该怎么做。
无论如何,回到熬大锅汤的程序员话题。问题是:在整个软件生态系统中都没有停滞,没有平静的过程来获得牵引力和应用设计过程,这样一个开发者,即使是一个快速程序员,怎么能做出好的设计呢?
任何说快速编程跟慢速编程一模一样(除了速度之外)的程序员,都没有理解设计流程。出于同样的原因,很多神经系统科学家现在相信贯穿整个大脑的诸如流体之类的神经元放电的“涌流”(相当于我们所说的“状态”来了)有一个时间上的反射过程,这个反射过程与思想和意识有紧密的联系,所以说,好的设计需要时间。
慢速编程运动
根据维基百科描述:“‘慢速编程运动’是‘慢速运动’的一部分,它是一个强调细致设计,高质量代码,软件测试和思考的软件开发哲学。它致力于避免拼凑代码,有漏洞的代码以及过度快速的发布周期。”
维基百科上还提到这个与“慢速软件运动”有关的内容:“作为敏捷软件开发的一部分,全世界成群的开发者们都在寻找更有先见性的项目,这是为了一个更可持续发展的职业生涯,并达到工作和生活的均衡。他们建议做些像结对编程、代码审查和代码重构之类的实践,这些都会让你获得可靠而强健的软件应用程序。”
在旧金山海湾区的风险投资支持的软件开发正处于间距短到发烫的快轨上。资金动态在过程中提出反常的需求,那这个过程***留给设计演变的自然昼夜节律。快并不总会更好。实际上,更慢点有时候真的意味着更快,尤其是当一切都讨论过并做过的时候。
还有另外一个问题:对技术近乎宗教般的痴迷,以及对工具有着恋物癖一样的爱(看看这些好用的工具《你应当知道的7个Java工具》、《提高程序员工作效率的5个工具》)。人们想知道为什么软件写的很烂,软件很烂是因为纸上谈兵。快速程序员建立解决问题的工具来解决能帮他们写代码的工具的问题。
这就我我一直认为我们需要年龄较大的人们:女人,教育工作者,和艺术家参与软件开发周期的原因。更多的人与人之间的联系,更少的物与人之间的联系。我不是说在开发团队之外,坐在帮助台前或者做些UI花朵之类的安排工作,我的意思是就让他们在软件开发团队内部,以确保软件能在***程度上与人性共鸣。
很高兴我不是一个摸到键盘就不会思考的程序员
我的一个朋友是个成熟的女性软件工程师,他做了一个有趣的小测试:“软件编程不是敲代码”。每个人都明白这点,但并没有什么疼痛能经常的点醒我们。Brendan Enrick讨论了这个问题。我们程序员花时间将我们的手指戳到键盘上的事实让这项体力活动看起来等同于编程,但编程实际上是把思想、设计、语言、逻辑和精神构建变成一种能存储在电脑内存中的形式的行为。
我妻子经常走到院子里来问我:“你在编程么?”通常我的回答就是“是的,我在编程”。这时候一般我都在拿着一把园艺剪在修剪枝枝丫丫或者在为院子里的花草树木施肥。
植物、灰尘、剪刀跟编程的关系就好像键盘和发着辉光的屏幕之间的关系一样紧密。
我们正在从一个工业时代和被增长率定义的经济时代过渡到可持续发展时代。是的,新软件和新业务都需要增长。但为了持续发展,他们需要带着爱心的关怀缓慢地增长。就像一杯好酒,像一个婴儿一样。
原文:The Case for Slow Programming
译文:http://www.php100.com/html/it/focus/2014/1202/7955.html
(翻译:PHP100_Alex)