David Heinemeier Hansson解释如何编写伟大的代码

2020-06-22 01:56:46

David Heinemeier Hansson是Ruby on Rails的创建者,Basecamp的联合创始人兼首席技术官,畅销书作家,勒芒班级获奖赛车手,居家男人,经常播客和励志会议演讲者。

Ruby on rails是David在2003年创建的。从2008年Evrone成立之日起,我们每天都在使用Rails开源Web框架。它已经帮助我们为我们的项目编写了数千次真正漂亮的代码。除了创建软件开发中最有用的工具之一,大卫还完成了许多其他令人印象深刻的壮举,从写书不一定要在工作中疯狂、返工和远程:不需要办公,到参加国际汽联世界耐力锦标赛。2014年,他在勒芒24小时赛跑中获得全班第一名,勒芒是世界上最负盛名的跑车耐力赛。同年,他还获得了GTE-Am类别的WEC锦标赛冠军。

2020年,我们邀请David在RubyRussia上发言,这是Evrone第11届莫斯科年度编程大会。在活动之前,我们有机会与David谈论软件开发领域以及他编写非凡代码的方法。

埃弗隆:嗨,大卫,很高兴今天能和你谈话。让我们开始面试吧。对于普通开发人员来说,决定他们是需要从低JavaScript方法开始并在以后发展他们的应用程序,还是需要从一开始就使用ANGLE、REACTION或VUE,最好的方法是什么?你会推荐什么决策策略?

大卫:如果你正在开发一些看起来或尝起来像香草网络应用的东西,比如Basecamp、GitHub、Shopify等等,那么我认为Minimal-JS是个不错的选择。这不是没有JS,只是最低限度的。如果你正在构建互动性很强的东西,比如游戏、照片编辑应用程序,或者其他更像是单屏幕的东西,那么研究一下全SPA是有意义的。

Evrone:随着代码库和团队规模的扩大,您会推荐将典型的Rails应用程序的哪些部分转移到微服务中?考虑到企业需要一个良好的代码开发组织,但是从头开始重写整个产品不是一种选择。

大卫:这是一种错觉,认为如果你第一次写的软件不够好,不会把事情搞得一团糟,那么第二次你就会做得更好。你必须学会新的习惯,然后把它们应用到你生活的地方。萨拉·梅(Sarah Mei)在2018年铁路大会上就此做了精彩的演讲。她说代码库已经不再是我们建造的东西了。代码库是我们居住的地方,我们的目标是让它适合我们自己和所有住在那里的人居住。当我们编写代码时,我们的目标不是完成它然后继续前进,我们的目标是使它可持续,对居住在其中的团队来说是宜居的。

你可以做所有你想做的重写,但是如果你不改变最初让你走到这一步的小东西,你最终只会得到一个错综复杂的微服务网络,就像你的巨石中有一个错综复杂的类定义网络一样。您的代码实际上是一个内部空间,由人占据。软件的重要部分是系统。这是代码和人在一起,他们是密不可分的。我们越能把软件看作是代码和人的相互联系的系统,我们就越接近突破。我们越接近一场革命,越接近范式转变。对我们来说,最重要的可能是,我们越接近能够构建让我们感到兴奋的代码库。

埃夫隆:哇,这听起来太令人兴奋了,我们意见完全一致!在猴子打补丁和其他代码组合模式之间进行选择时,您会推荐哪种方法?我们应该考虑什么,才不会把自由修补变成一堆相互冲突的超越?

大卫:自由补丁是用来创建语言的通用方言的。积极支持充满了自由补丁。它不是用来创建特定于应用程序的更改的。

Evrone:你肯定见过很多Ruby代码。在您个人看来,是什么让代码变好还是变差?有没有什么乍一看对你来说很明显的事情?

大卫:如果代码写得很差,通常在你检查逻辑之前就会有异味。缩进是关闭的,样式是混合的,根本没有显示出细心。除此之外,学习如何编写伟大的代码是毕生的追求。正如我在我的铁路会议2014主题演讲中所说,我们不是软件工程师,我们是软件作者。“写作”比“工程”更适合用来比喻我们大部分时间所做的事情。写作就是要清晰,并以清晰易懂的方式呈现信息,以便任何人都能理解。

没有可以教给某人的原则和实践的清单,然后他们每次都会自动写出清晰的文字。如果你想成为一名优秀的作家,光背字典是不够的。仅仅知道您可以使用的词语,了解开发模式并不能使您成为一名优秀的开发人员。你得练就一双眼睛。您必须决定,对您的系统来说,最重要的事情是清晰度。当你决定这样做的时候,你就可以开始长眼睛了。

成为一名优秀程序员的唯一途径就是阅读大量软件并编写大量软件。根据定义,我将优秀程序员定义为能够清晰地编写软件的人。

埃夫龙:那绝对是真的。你知道,通常情况下,运营公司的非程序员很难理解技术债务、架构以及为了获得更好的代码而多次重写同一个应用的想法。作为一名程序员和商人,您建议如何向没有编程背景的商人推销这些想法?

大卫:几乎在任何情况下,出于技术原因,我都不赞成重写应用程序。莎拉·梅(Sarah Mei)的主题演讲阐明了其中的原因。但是,当您希望应用程序做一些根本不同的事情时,我确实相信重写。我在美国软件商业会议的一次演讲中谈到了很多这一点。

我们一直在重写Basecamp的代码,不止一次,甚至不会重写两次,推出了Basecamp的新版本。当然,和你的客户一起变老是很美好的。这有很多好处,也有很多缺点。你必须有某种形式的更新,因为事情停止了变化,在某一点上,你只有一个非常老的客户基础,一个非常萎缩的新客户基础,以及“一个桶”。客户离开了他们的工作,他们离开了你的软件。

问题是,如果你不倒入新的水,最终桶里的水就会所剩无几。你必须趁形势好的时候做出改变,这是做出改变可能最困难的时候。

没有人会永远对一如既往地贯彻他们15年前的想法感兴趣。事情并不是那样发展的。但是,如果你继续更新它,如果你继续让你最好的想法有一个出口,以它们纯粹的形式,你就可以拥有一片新的绿色田野,你可以在上面拥有你美丽的小房子,一切都很棒。所以请重写你的软件。

埃夫龙:这是我们的签名“时空旅行”问题!如果您有机会回到您开始从Basecamp提取Rails的地方,您会给年轻时的自己提供什么技术建议呢?

我们非常高兴地欢迎David在2020年的RubyRussia大会上发言。我们在Evrone的团队也期待Basecamp的继续发展,当然还有Ruby on rails。框架变得越强大,我们就能为我们的客户和合作伙伴提供更好的解决方案。如果您对某个项目有想法,并且对使用Ruby on rails感兴趣,我们的开发人员总是很乐意与您讨论各种可能性。无论您处于项目开发的哪个阶段,请随时给我们留下您的联系信息,我们将很快与您联系,看看如何帮助您实现您的目标。