Terry 谈为什么 DHH 是他的偶像,一是 DHH 作为 Ruby on Rails 的发明者为他提供了工作机会,二是 DHH 的 “Getting Real” 的实用主义思想,强调在现实场景中解决实际问题,而不是追求理论上的完美,让他避免陷入过度工程化的陷阱。
David Heinemeier Hansson(DHH)是我人生中唯一一个能称得上偶像的人,这有多方面原因。他对我的影响,最直接的是他做了Ruby on Rails,我前几年工作吃饭就靠这个。这种影响是必然的,都把你养活了。
从思想上的影响有很多。第一,他的"Getting Real"思想对我影响非常大。做软件后,你会看到很多争论,包括当时在Ruby on Rails社区里的争论。我把那帮人叫OO党、Java党或咨询师党——这帮人是流动的,以前在Java,RoR火了就来RoR。他们会对架构问题做challenge,特别是OO党:这个不是single responsibility吗?要不要拆开?要不要有service层?隔离力度要细到什么程度?你会看到很多关于软件架构和思想的争论。
当时作为新手,我也在这个流派上走了很远。从理性推断,他们很多话都有道理。但我记得DHH在Ruby论坛里舌战群雄,一个人对一堆OO党。争论很简单,Rails用了大量继承,而OO理论说不应该用继承,应该用组合;是不是应该抽取胖model?是不是应该有service层?DHH一个个反驳。
反驳的核心不是说他们不对,而是什么叫Getting Real——你的东西针对谁?解决什么人的问题?Rails的设计,包括现在最新版本,它是从一个人的框架到IPO。那时候还没有GitHub、Shopify这么大规模的Rails项目。它就是给一个人的框架,让你一个人明天就能做创业,把东西做出来。所以用OO党那些东西去challenge它是不合适的。
如果你陷入理性讨论,抛开场景去讨论好坏,很容易落入陷阱。我也陷入过,因为我做过软件咨询师。用各种best practice去打别人时,你有种优越感。Ruby做得最夸张时,恨不得一个函数只干一件事。久了之后回看,其实也不一定对。
所以DHH给我最大的思想就是Getting Real——你一定要在现实环境中,真的去做软件,有现实压力,在这个环境下做最优解。所以后来有句话:抛开场景聊方案都是耍流氓。如果只是俏皮话,你听不进去。但当你观察一个欣赏的人做这些决策时,就会特别有感触。
还有一点,他没有把东西做得那么分离,把所有武器都拿在手上。举个例子,Rails出现之前写Java时,MVC每一层都有框架,Hibernate做ORM,controller有一层,每个都有框架。他把所有武器全部拿在手上,做全栈式设计。包括他和OO党辩论时做的抉择,对我有很大冲击。
这是他的Getting Real让我没有掉入OO党那条路。虽然我看了很多那方面的东西,但那个党派现在已经去JavaScript了——他们一般是什么火去哪儿。
往后我从他那还得到一些东西:这个世界噪音远远多于信息。当然这和他公司名字(37signals)有关。有经历的人应该能早点明白这个道理。Remote这个概念我也是从那里来的。
David Heinemeier Hansson(DHH)是我人生中唯一一个能称得上偶像的人,这有多方面原因。他对我的影响,最直接的是他做了Ruby on Rails,我前几年工作吃饭就靠这个。这种影响是必然的,都把你养活了。
从思想上的影响有很多。第一,他的"Getting Real"思想对我影响非常大。做软件后,你会看到很多争论,包括当时在Ruby on Rails社区里的争论。我把那帮人叫OO党、Java党或咨询师党——这帮人是流动的,以前在Java,RoR火了就来RoR。他们会对架构问题做challenge,特别是OO党:这个不是single responsibility吗?要不要拆开?要不要有service层?隔离力度要细到什么程度?你会看到很多关于软件架构和思想的争论。
当时作为新手,我也在这个流派上走了很远。从理性推断,他们很多话都有道理。但我记得DHH在Ruby论坛里舌战群雄,一个人对一堆OO党。争论很简单,Rails用了大量继承,而OO理论说不应该用继承,应该用组合;是不是应该抽取胖model?是不是应该有service层?DHH一个个反驳。
反驳的核心不是说他们不对,而是什么叫Getting Real——你的东西针对谁?解决什么人的问题?Rails的设计,包括现在最新版本,它是从一个人的框架到IPO。那时候还没有GitHub、Shopify这么大规模的Rails项目。它就是给一个人的框架,让你一个人明天就能做创业,把东西做出来。所以用OO党那些东西去challenge它是不合适的。
如果你陷入理性讨论,抛开场景去讨论好坏,很容易落入陷阱。我也陷入过,因为我做过软件咨询师。用各种best practice去打别人时,你有种优越感。Ruby做得最夸张时,恨不得一个函数只干一件事。久了之后回看,其实也不一定对。
所以DHH给我最大的思想就是Getting Real——你一定要在现实环境中,真的去做软件,有现实压力,在这个环境下做最优解。所以后来有句话:抛开场景聊方案都是耍流氓。如果只是俏皮话,你听不进去。但当你观察一个欣赏的人做这些决策时,就会特别有感触。
还有一点,他没有把东西做得那么分离,把所有武器都拿在手上。举个例子,Rails出现之前写Java时,MVC每一层都有框架,Hibernate做ORM,controller有一层,每个都有框架。他把所有武器全部拿在手上,做全栈式设计。包括他和OO党辩论时做的抉择,对我有很大冲击。
这是他的Getting Real让我没有掉入OO党那条路。虽然我看了很多那方面的东西,但那个党派现在已经去JavaScript了——他们一般是什么火去哪儿。
往后我从他那还得到一些东西:这个世界噪音远远多于信息。当然这和他公司名字(37signals)有关。有经历的人应该能早点明白这个道理。Remote这个概念我也是从那里来的。