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

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

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

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


当前回答

编码不是打字

编写代码需要时间。大多数时候,在编辑器窗口中,您只是查看代码,而不是实际输入。虽然不是经常,但你经常会删除你所写的内容。或者从一个地方搬到另一个地方。或重命名。

如果你长时间敲击键盘,那你一定做错了什么。

推论:每天写的代码行数并不是一个程序员生产力的线性衡量标准,一天写100行的程序员很可能比一天写20行的程序员更好,但一天写5000行的程序员肯定是坏程序员

其他回答

我有争议的观点:面向对象编程绝对是软件工程领域发生过的最糟糕的事情。

面向对象编程的主要问题是完全缺乏一个每个人都能认同的严格定义。这很容易导致实现中存在逻辑漏洞,或者像Java这样的语言坚持这种关于OOP含义的奇怪的宗教教条,同时迫使程序员做所有这些扭曲和“设计模式”,只是为了绕过特定OOP系统的限制。

因此,OOP欺骗程序员,让他们认为他们正在获得这些巨大的生产力收益,OOP在某种程度上是一种“自然”的思考方式,同时迫使程序员输入大量不必要的样板文件。

然后,由于没有人知道OOP的真正含义,我们浪费了大量的时间在争论语言X或Y是否“真正的面向对象”,什么奇怪的语言特性对于一种语言被认为是“真正的面向对象”是绝对“必要的”。

与其要求这种语言或那种语言是“真正的面向对象的”,我们应该看看实验显示了什么语言特性,以实际提高生产力,而不是试图强迫它成为某种想象中的理想语言,或者强迫我们的程序符合某种“真正面向对象的程序”的柏拉图式理想。

与其坚持我们的程序符合“真正面向对象”的柏拉图式理想,不如我们专注于坚持良好的工程原则,使我们的代码易于阅读和理解,并使用一种语言的高效和有用的特性,而不管它们是否足够“面向对象”。

1. 你不应该一直遵循网络标准。

2. 你不需要注释你的代码。

只要陌生人能听懂就行。

代码的重用与其“可重用性”成反比。因为“可重用的”代码更复杂,而快速的hack更容易理解,所以它们被重用。

软件故障应该使系统崩溃,以便对其进行检查和修复。试图处理失败条件的软件通常比崩溃更糟糕。也就是说,是在崩溃后重新设置系统更好,还是应该因为失败处理程序有一个错误而无限期地挂起系统?

最佳实践则不然。

清理和重构在(团队)开发中非常重要

A lot of work in team development has to do with management. If you are using a bug tracker than it is only useful if someone takes the time to close/structure things and lower the amount of tickets. If you are using a source code management somebody needs to cleanup here and restructure the repository quite often. If you are programming than there should be people caring about refactoring of the lazy produced stuff of others. It is part of most of the aspects some will face while doing software development.

大家都同意这种管理的必要性。而且它总是被跳过的第一件事!