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

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

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

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


当前回答

不会编码的架构师是无用的。

这听起来有点苛刻,但并非不合理。如果你是一个系统的“架构师”,但对所使用的技术没有一定的实际参与,那么你如何获得开发团队的尊重呢?你如何影响方向?

架构师需要做更多的事情(与利益相关者会面,与其他团队谈判,评估供应商,编写文档,进行演示等等)但是,如果您从未看到架构师签入代码……小心!

其他回答

可读性是代码最重要的方面。

甚至比正确性更重要。如果它是可读的,就很容易修复。它也很容易优化,容易改变,容易理解。希望其他开发者也能从中学到一些东西。

不断测试

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

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

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

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

观点:数据驱动的设计本末倒置。它应该立即从我们的思想中消除。

绝大多数软件不是关于数据的,而是关于我们试图为客户解决的业务问题。它是关于一个问题域的,涉及对象、规则、流程、案例和关系。

当我们从数据开始设计,并根据数据和数据之间的关系(表、外键和x-to-x关系)对系统的其余部分建模时,我们将整个应用程序限制为如何在数据库中存储数据和如何从数据库中检索数据。此外,我们将数据库体系结构公开给软件。

数据库模式是一个实现细节。我们应该可以自由地改变它,而不需要对我们的软件设计进行任何显著的改变。业务层不应该知道表是如何设置的,或者是从视图中提取还是从表中提取,或者是从动态SQL或存储过程中获取表。这种类型的代码永远不应该出现在表示层中。

软件是用来解决业务问题的。我们要处理用户、汽车、帐户、余额、平均值、摘要、转账、动物、消息、包裹、购物车、订单和其他各种真实的有形对象,以及我们可以对它们执行的操作。我们需要根据需要保存、加载、更新、查找和删除这些项。有时候,我们必须以特殊的方式来做这些事情。

But there's no real compelling reason that we should take the work that should be done in the database and move it away from the data and put it in the source code, potentially on a separate machine (introducing network traffic and degrading performance). Doing so means turning our backs on the decades of work that has already been done to improve the performance of stored procedures and functions built into databases. The argument that stored procedures introduce "yet another API" to be manged is specious: of course it does; that API is a facade that shields you from the database schema, including the intricate details of primary and foreign keys, transactions, cursors, and so on, and it prevents you from having to splice SQL together in your source code.

把马放回马车前面。思考问题领域,并围绕它设计解决方案。然后,从问题域导出数据。

如果你知道如何编程,你就不适合在表单上放置按钮

这有足够的争议吗?;)

不管我们多么努力,我们几乎不可能对53岁的Doris产生适当的同情,她必须使用我们的订单输入软件。我们根本无法掌握她想象的计算机内部正在发生的事情的心智模式,因为我们不需要想象:我们知道正在发生什么,或者有一个非常好的想法。

交互设计应该由非程序员来完成。当然,这永远不会发生。相反,我对此很高兴;我喜欢UI设计,尽管内心深处我知道我并不适合它。

欲了解更多信息,请阅读《囚犯们在管理精神病院》这本书。请注意,这本书让我心烦意乱,很无礼;如果你是一个关心用户体验的开发人员,这是一篇很难读懂的文章。

Tcl/Tk是有史以来最好的GUI语言/工具包组合

它可能缺少特定的小部件,外观也不如新产品好看,但它的模型很优雅,而且易于使用,因此通过交互式输入命令可以比使用可视化界面构建器更快地构建工作gui。它的表达能力是无与伦比的:其他解决方案(Gtk、Java、. net、MFC……)通常需要10到100个LOC才能得到与Tcl/Tk一行程序相同的结果。所有这些都不会牺牲可读性和稳定性。

pack [label .l -text "Hello world!"] [button .b -text "Quit" -command exit]