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

这个问题的想法来自于我对“你最讨厌的语言的哪五件事?”问题的回答。我认为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个是垃圾。

斯基兹

其他回答

学校教育毁掉创造力

*“废墟”指“潜在的废墟”

当然,上学是需要的!每个人在使用之前都需要学习一些东西——然而,如果我们不小心的话,你所有关于如何为特定的业务领域采取某种策略的伟大想法都很容易被扔进我们的大脑深处。

当你学习新事物、获得新技能时,你也会把自己的思维定势限制在这些新事物和新技能上,因为它们显然是“做事的方法”。作为人类,我们倾向于听从权威——无论是老师、顾问、同事,甚至是你喜欢的网站/论坛。我们应该时刻注意我们思维运作的“缺陷”。听别人说什么,但不要认为他们说的是理所当然的。对你收到的每一个新信息都要保持一种批判的观点。

而不是想“哇,这很聪明。我从现在开始就用它了”,我们应该想“哇,这很聪明。现在,我如何在我的个人技能和想法的工具箱中使用它?”

不应该允许非开发人员管理开发人员。

更正:没有开发经验的员工不应该被允许管理开发人员。

单身人士并不邪恶

There is a place for singletons in the real world, and methods to get around them (i.e. monostate pattern) are simply singletons in disguise. For instance, a Logger is a perfect candidate for a singleton. Addtionally, so is a message pump. My current app uses distributed computing, and different objects need to be able to send appropriate messages. There should only be one message pump, and everyone should be able to access it. The alternative is passing an object to my message pump everywhere it might be needed and hoping that a new developer doesn't new one up without thinking and wonder why his messages are going nowhere. The uniqueness of the singleton is the most important part, not its availability. The singleton has its place in the world.

Web服务绝对很糟糕,也不是未来的发展方向。他们的效率低得可笑,而且他们不能保证订单交货。Web服务绝不应该在同时编写客户端和服务器的系统中使用。它们对于米老鼠混搭类型的应用程序非常有用。它们绝对不应该用于任何类型的面向连接的通信。

这种立场让我和同事们进行了一些非常热烈的讨论,因为web服务是一个非常热门的话题。任何强制使用web服务的项目都是注定要失败的,因为它显然已经从管理层那里得到了荒谬的要求。

设计模式对优秀设计的伤害大于帮助。

IMO软件设计,尤其是优秀的软件设计,变化太大,无法在模式中有意义地捕捉,特别是在人们实际能记住的少量模式中——而且它们太抽象,人们实际上只能记住少数几个。所以他们帮不上什么忙。

另一方面,太多的人迷恋于这个概念,并试图在所有地方应用模式——通常,在生成的代码中,你无法在所有(完全没有意义的)单例和抽象工厂之间找到实际的设计。