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

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

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

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


当前回答

手动停止程序是一种有效的、经过验证的查找性能问题的方法。

可信吗?对大多数人来说并非如此。真的吗?绝对的。

程序员的判断比必要的要多得多。

看看这些帖子中所有被认为是“邪恶”或“可怕”的事情吧。

程序员喜欢数据结构。

见证所有关于类、继承、私有与公共、内存管理等以及如何分析需求的讨论。

其他回答

大多数程序员都不擅长编程

(你刚才说“有争议”)

我坐在家里的办公室里思考一些编程问题,最后我看着书架上的“完整的频谱ROM拆卸”,心想:

“现在有多少程序员能写出Spectrum ROM中使用的代码?”

Spectrum,对于那些不熟悉它的人来说,有一个基本的编程语言,可以在16K的Z80代码(一个< 5Mhz的8位处理器,没有FPU或整数乘)中完成简单的2D图形(线,曲线),文件IO排序和浮点计算,包括传递函数。今天的大多数毕业生都很难编写一个这么小的“Hello World”程序。

我认为问题在于,能够做到这一点的程序员的绝对数量几乎没有变化,但作为一个百分比,它正在迅速接近于零。这意味着,随着越来越多不合格的程序员进入这个领域,所编写的代码的质量正在下降。

Where I'm currently working, there are seven programmers including myself. Of these, I'm the only one who keeps up-to-date by reading blogs, books, this site, etc and doing programming 'for fun' at home (my wife is constantly amazed by this). There's one other programmer who is keen to write well structured code (interestingly, he did a lot of work using Delphi) and to refactor poor code. The rest are, well, not great. Thnking about it, you could describe them as 'brute force' programmers - will force inappropriate solutions until they work after a fashion (e.g. using C# arrays with repeated array.Resize to dynamically add items instead of using a List).

现在,我不知道我目前所在的地方是否具有代表性,尽管从我以前的职位来看,我认为它是典型的。事后来看,我发现一些常见的模式对任何项目都没有帮助(比如缺少代码的同行评审)。

所以,7个程序员中就有5个是垃圾。

斯基兹

单元测试不会帮助你写出好的代码

进行单元测试的唯一原因是确保已经工作的代码不会崩溃。首先编写测试,或者为测试编写代码都是荒谬的。如果在编写代码之前编写测试,您甚至不知道边界情况是什么。您的代码可能通过了测试,但在不可预见的情况下仍然会失败。

此外,优秀的开发人员会保持较低的内聚性,这将使新代码的添加不太可能对现有内容造成问题。

事实上,我将进一步推广,

软件工程中的大多数“最佳实践”都是为了防止糟糕的程序员造成太大的破坏。

他们的作用是指导糟糕的开发人员,防止他们犯愚蠢的错误。当然,由于大多数开发人员都很糟糕,这是一件好事,但优秀的开发人员应该得到通过。

不断测试

您必须编写测试,并且必须首先编写它们。编写测试会改变编写代码的方式。它会让你思考你想要它实际做什么,然后再开始写一些东西,它能做所有事情,除了你想要它做的。

它也给你目标。看着你的测试变绿会让你有额外的信心,因为你完成了一些事情。

它还为您为边缘情况编写测试提供了基础。由于您一开始就针对测试编写代码,因此您的代码中可能有一些用于测试的钩子。

没有理由不测试你的代码。如果你不这样做,那你只是懒惰。我还认为您应该先进行测试,因为这样做的好处超过了编写代码所花费的额外时间。

我有一些…凡事都有例外,所以这些并不是一成不变的,但它们确实适用于大多数情况

没有人关心您的网站是否经过验证、是否严格遵守XHTML、是否符合标准或是否有W3C标记。

It may earn you some high-fives from fellow Web developers, but the rest of people looking at your site could give a crap whether you've validated your code or not. the vast majority of Web surfers are using IE or Firefox, and since both of those browsers are forgiving of nonstandards, nonstrict, invalidated HTML then you really dont need to worry about it. If you've built a site for a car dealer, a mechanic, a radio station, a church, or a local small business, how many people in any of those businesses' target demographics do you think care about valid HTML? I'd hazard a guess it's pretty close to 0.

大多数开源软件都是无用的、过于复杂的垃圾。

Let me install this nice piece of OSS I've found. It looks like it should do exactly what I want! Oh wait, first I have to install this other window manager thingy. OK. Then i need to get this command-line tool and add it to my path. Now I need the latest runtimes for X, Y, and Z. now i need to make sure i have these processes running. ok, great... its all configured. Now let me learn a whole new set of commands to use it. Oh cool, someone built a GUI for it. I guess I don't need to learn these commands. Wait, I need this library on here to get the GUI to work. Gotta download that now. ok, now its working...crap, I can't figure out this terrible UI.

sound familiar? OSS is full of complication for complication's sake, tricky installs that you need to be an expert to perform, and tools that most people wouldn't know what to do with anyway. So many projects fall by the wayside, others are so niche that very few people would use them, and some of the decent ones (FlowPlayer, OSCommerce, etc) have such ridiculously overcomplicated and bloated source code that it defeats the purpose of being able to edit the source. You can edit the source... if you can figure out which of the 400 files contains the code that needs modification. You're really in trouble when you learn that its all 400 of them.

关系数据库是在浪费时间。改用对象数据库!

关系数据库供应商试图欺骗我们,让我们相信世界上唯一可扩展的、持久的和安全的存储就是关系数据库。我是一个认证的DBA。你是否曾经花了几个小时试图优化一个查询,却不知道哪里出了问题?关系数据库不允许您在需要时创建自己的搜索路径。你把应用速度的控制权拱手让给了素未谋面的人,他们并不像你想象的那么聪明。

当然,有时在维护良好的数据库中,他们会为复杂的查询提供快速答案。但你为此付出的代价太高了!每次要读取数据项时,都必须选择编写原始SQL,这是很危险的。或者使用Object关系映射器,这会增加更多的复杂性和超出你控制的事情。

更重要的是,你被禁止提出智能搜索算法,因为每次该死的往返数据库花费你大约11毫秒。这太过分了。想象一下,您知道这个超级图算法,它将回答一个特定的问题,这个问题甚至可能无法用SQL表达!,在适当的时候。但是,即使您的算法是线性的,而有趣的算法不是线性的,也不要将它与关系数据库结合起来,因为枚举一个大表将花费您数小时!

将其与SandstoneDb或Gemstone for Smalltalk进行比较!如果你喜欢Java,试试db4o吧。

因此,我的建议是:使用对象- db。当然,它们并不完美,有些查询速度会比较慢。但是你会惊讶的发现很多人会更快。因为加载对象不需要在SQL和域数据之间进行所有这些奇怪的转换。如果您确实需要某个查询的速度,对象数据库有您应该信任的查询优化器:您的大脑。