这绝对是主观的,但我想尽量避免它变成争论。我认为如果人们恰当地对待它,这将是一个有趣的问题。

这个问题的想法来自于我对“你最讨厌的语言的哪五件事?”问题的回答。我认为c#中的类在默认情况下应该是密封的——我不会把我的理由放在这个问题上,但我可能会写一个更完整的解释来回答这个问题。我对评论中的讨论热度感到惊讶(目前有25条评论)。

那么,你有什么有争议的观点?我宁愿避免那些基于相对较少的基础而导致相当宗教的事情(例如,大括号放置),但例如可能包括“单元测试实际上并没有多大帮助”或“公共字段确实是可以的”之类的事情。重要的是(至少对我来说)你的观点背后是有理由的。

请提出你的观点和理由——我鼓励人们投票给那些有充分论证和有趣的观点,不管你是否恰好同意这些观点。


当前回答

这种最佳实践是一种危险,因为它们要求我们用口号代替思考。

其他回答

罗布·派克写道:“数据占主导地位。如果你选择了正确的数据结构,并且组织得很好,算法几乎总是不言而喻的。数据结构,而不是算法,才是编程的核心。”

由于现在任何重要的数据都在数百万条记录中,我认为良好的数据建模是最重要的编程技能(无论是使用rdbms还是sqlite或amazon simpleDB或谷歌appengine数据存储)。

当所有的数据都存储在这样的数据存储系统中时,就不再需要花哨的搜索和排序算法了。

你的工作就是让自己失业。

当您为您的雇主编写软件时,您所创建的任何软件都应该以这样一种方式编写,即任何开发人员都可以使用它,并且可以用最少的努力理解它。它设计良好,编写清晰一致,格式化干净,在需要的地方有文档记录,按照预期每天构建,检入存储库,并进行了适当的版本控制。

如果你被公共汽车撞了,被解雇了,被解雇了,或者离开了工作岗位,你的雇主应该能够在片刻的通知中取代你,下一个人可以接替你的角色,拿起你的代码,最多在一周内启动并运行。如果他或她不能做到这一点,那么你就失败了。

有趣的是,我发现有了这个目标,我对雇主来说更有价值了。我越努力成为可有可无的人,我对他们就越有价值。

编写小方法。程序员似乎喜欢编写冗长的方法,在这些方法中他们可以做多种不同的事情。

我认为应该在任何可以命名的地方创建方法。

在开始构建电子系统之前,每个开发人员都应该花几周甚至几个月的时间来开发基于纸张的系统。他们还应该被迫使用他们的系统。

开发一个好的基于纸张的系统是一项艰苦的工作。它迫使你考虑人性(繁琐的过程会被忽略,过于复杂的过程往往会崩溃),并教会你欣赏简单的价值(新工作放在这个托盘里,QA工作放在这个托盘里,存档放在这个盒子里)。

一旦你弄清楚如何在纸上构建一个系统,构建一个有效的计算机系统通常会容易得多——一个人们实际上想要(并且能够)使用的系统。

我们开发的系统并不是由一群训练有素的自动机控制的;真实的人使用它们,真实的人由经理培训,经理也是真实的人,没有太多的时间浪费在培训他们如何跳过你的圈子。

事实上,关于我的第二点:

每个开发人员都应该被要求进行交互式培训课程,向用户展示如何使用他们的软件。

最好的代码通常不是你写的。作为程序员,我们希望通过编写一些很酷的方法来解决每个问题。任何时候,我们都能在解决问题的同时满足用户80%的需求,而无需引入更多代码进行维护和测试,我们已经提供了更多的价值。