原文链接:The best approach to software development

文章的前半部分提到了许多的名词,数量之多让人肝疼。后半部分则话锋一转,告诉大家软件开发没有所谓的最佳方法(银弹),并解释了为什么。


……

Dogmatism, religion, context, curiosity, inquiring mind and pragmatism

教条主义、宗教、场景、好奇心、探索精神和务实主义

……

My main criticism here is about how the vast majority of developers react to all these things. It is not just because someone, somewhere wrote a book, recorded a video or gave a talk in a conference about something that it will make that thing right, in all contexts. Quite often, we fail to question things just because the people promoting it are relatively well known. We fail to understand the context where a methodology, technology or technique should be best suitable for. We fail, quite often, to use our own judgement because of the fear to be ridiculed by our colleagues. We should stop being dogmatic and religious about things. This just leads to stupid decisions. Doing things for the sake of doing or because someone else said so is just plain wrong and stupid. 

对此我主要的批评是大量的开发者对这些东西的反应。不能仅仅因为某人在某处写了一本书、录了一个视频,在某个研讨会上做了一次演讲,就让这样东西合适于所有的场景。很多时候我们不去质疑这些东西只是因为推广它们的人相对知名。我们不能理解一个方法学、技术或技巧最适用的场景。因为害怕被同事们嘲笑,我们常常不能应用自己的判断力。我们应该不再严守教条或虔诚于这些东西。这只会导致愚蠢的决定。仅仅为了做某事而做,或者因为别人这么说而做,是完全错误的,而且愚蠢。

Being a good developer means to be inquisitive, curious and pragmatic. Never religious. Never dogmatic. Curious means that we should be eager to learn about all the things mentioned above and many many more. Inquisitive means that we should investigate and question all the things we learn. Pragmatic means that we should choose the right tools, being technologies, methodologies or techniques, for the job.

一个好的开发者意味着喜欢提问、有好奇心并且务实。从不虔诚、从不教条。有好奇心意味着我们应该渴望学习上面提到的所有东西,以及更多其它的东西。喜欢追问意味着我们应该调查和质疑所有我们学习的东西。务实意味着我们应该为了工作选择正确的工具 —— 技术、方法学或技巧。

Context matters.

场景很重要。

Whenever you see people saying that we should or shouldn’t do something, ask them why. Ask them about the context where they tried to do (or not to do) what they are saying.

无论你何时见到人们说:“我们应该或不应该做某事。” 问问他们为什么。问问他们所说的尝试去做的(或者尝试避免的)所处的场景。

Software development is not the same thing of producing cars. Once the car is ready, you don’t go back to the manufacturer and ask them to add another wheel or put the engine somewhere else. Developing software for expensive hardware is not the same thing as developing a simple web application with two pages. Hardware has an specification that you need to code against. Quite often, you don’t even have access to the hardware because it is just not built yet. The cost of a bug in production is not the same for all applications. The cost of a few bugs in a social networking or cooking website can be very different from the cost of a few bugs in a trading or financial system processing millions of transactions per day. Working with a small team, every one co-located and with easy access to customers is very different from working on a project with 10+ teams spread in 5 countries and different timezones.

软件开发不同于造车。车辆一旦造好,你不会回到生产商那里要求他们加一个轮子或者把发动机放在别的地方。为昂贵的硬件开发软件也不同于开发简单的两个页面的网络应用。硬件有你需要针对其编码的规格。通常因为硬件还没造出来,你都无硬件可用。产品环境中一个故障的代价对于应用程序也是不同的。社交媒体或烹饪网站中几个故障的代价,和每天处理数百万次事务的交易或金融系统中几个故障的代价差别很大。在小型团队、所有人在一起办公、方便联系客户的项目中工作,和在拥有分布于五个国家不同时区的十余个团队的项目中工作差别很大。

Read and learn as much as you can. However, don’t assume that everything you read or watch applies in every context. Make informed decisions and trust your instincts.

尽可能多阅读和学习。但不要假设你读到和看到的每样东西适用于所有的场景。根据掌握的信息做决定,并且相信你的直觉。

The bad news is that there is no best approach to software development. Maximum we could say is that there are certain technologies, methodologies and techniques that are more suitable to a specific context.

坏消息是软件开发没有最佳的方法。我们最多能说一些特定的技术、方法学、技巧更适合于特定的场景。