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

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

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

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


当前回答

That (at least during initial design), every Database Table (well, almost every one) should be clearly defined to contain some clearly understanable business entity or system-level domain abstraction, and that whether or not you use it as a a primary key and as Foreign Keys in other dependant tables, some column (attribute) or subset of the table attributes should be clearly defined to represent a unique key for that table (entity/abstraction). This is the only way to ensure that the overall table structure represents a logically consistent representation of the complete system data structure, without overlap or misunbderstood flattening. I am a firm believeer in using non-meaningful surrogate keys for Pks and Fks and join functionality, (for performance, ease of use, and other reasons), but I beleive the tendency in this direction has taken the database community too far away from the original Cobb principles, and we jhave lost much of the benefits (of database consistency) that natural keys provided.

那么为什么不两者都用呢?

其他回答

可用性问题从来不是用户的错。

当某些用户做了一些团队中所有人都认为“只是一件愚蠢的事情”时,我无法计算问题出现的频率。像“为什么有人要这么做?”或者“为什么他不做XYZ”这样的短语经常出现。

尽管许多人已经厌倦了听我说:如果一个现实生活中的用户试图做一些事情,要么没有工作,导致一些错误或导致意想不到的行为,那么这可能是任何人的错,而不是用户的错!

请注意,我不是指那些故意滥用软件的人。我指的是软件的假定目标组。

简单Vs优化

我相信编写既简单又最佳的代码是非常困难的。

函数式编程并不比命令式编程更直观或更容易学习。

函数式编程有很多优点,但我经常听到函数式程序员说,对于没有编程经验的人来说,理解函数式编程比理解命令式编程更容易。据我所知,情况恰恰相反,人们发现琐碎的问题很难解决,因为他们不知道如何管理和重用他们的临时结果,当你在一个没有状态的世界结束时。

学校教育毁掉创造力

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

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

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

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

有时,接受一个异常是合适的。

对于UI来说,用错误消息提示用户是中断的,通常他们也没什么可做的。在这种情况下,我只是记录它,并在日志中出现时处理它。