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

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

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

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


当前回答

...“澄清想法”不应该是开发者的唯一责任……是的,XKCD让我用了那个特定的短语…

我们经常会收到一些项目,这些项目都是在伪元类型特定的“代码”中指定的,如果你愿意这样称呼它的话。经常有产品经理为一个项目制定初始需求,并执行接近0%的基本逻辑验证。

我并不是说技术方法不应该由架构师制定,或者具体的实现不应该是开发人员的责任,而是说它应该是产品经理的需求,以确保他们的需求在逻辑上是可行的。

就我个人而言,我参与过太多“简单”的项目,这些项目在这里或那里遇到了一些范围渐变,然后遇到了与之前的需求相矛盾的“小”更改或功能添加——无论是含蓄的还是明确的。在这种情况下,要求做出近乎不可能的改变的人很容易对开发人员无法实现他们的梦想感到愤怒。

其他回答

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

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

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

我坚信非托管代码不值得这么麻烦。与查找内存泄漏相关的额外维护性开销(即使是最好的程序员偶尔也会引入这种开销)远远超过从c++这样的语言获得的性能。如果Java, c#等不能得到你需要的性能,买更多的机器。

C必须死。

当另一种语言(比如D)可用时,自愿用C编程应该因疏忽而受到惩罚。

如果你只知道一种语言,无论你多么精通,你都不是一个伟大的程序员。

似乎有一种态度认为,一旦你真的擅长c#或Java或其他你开始学习的语言,那么你就只需要这些。我不相信——我学过的每一种语言都教会了我一些关于编程的新东西,我能够把这些东西带回到我的工作中。我认为任何把自己限制在一种语言上的人都永远不会达到他们本可以达到的水平。

对我来说,这也表明缺乏好奇心和实验意愿,这并不一定符合我期望在一个真正优秀的程序员身上找到的品质。

如果语言已经公开了实际类型,就不要为基本类型使用关键字。在c#中,这将指bool (Boolean), int (Int32), float (Single), long (Int64)。'int', 'bool'等不是语言的实际部分,而只是实际类型的'快捷方式'或'别名'。不要使用不存在的东西!在我看来,Int16, Int32, Int64,布尔值等比'short', 'long', 'int'更有意义。