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

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

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

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


当前回答

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]

其他回答

To Be A Good Programmer really requires working in multiple aspects of the field: Application development, Systems (Kernel) work, User Interface Design, Database, and so on. There are certain approaches common to all, and certain approaches that are specific to one aspect of the job. You need to learn how to program Java like a Java coder, not like a C++ coder and vice versa. User Interface design is really hard, and uses a different part of your brain than coding, but implementing that UI in code is yet another skill as well. It is not just that there is no "one" approach to coding, but there is not just one type of coding.

微软Windows是软件开发的最佳平台。

推理: 微软用优秀而廉价的开发工具,平台和API都有良好的文档记录,平台正在快速发展,这为开发者创造了很多机会,操作系统拥有庞大的用户基础,这对于明显的商业原因很重要,有一个庞大的Windows开发者社区,我还没有因为选择微软而被解雇。

良好的性能VS优雅的设计

它们并不相互排斥,但我不能忍受过度设计的类结构/框架,它们完全不了解性能。我不需要有一个字符串的new This(new That(new Whatever());创建一个对象,它会告诉我现在是凌晨5点哦,顺便说一下,距离奥巴马的生日还有217天,还有两天就是周末。我只是想知道健身房开门了没有。

保持两者之间的平衡是至关重要的。当您需要将所有处理器抽出来做一些密集的事情(比如读取tb级的数据)时,代码就会变得令人讨厌。把优雅留给那些消耗10%资源的地方,这可能超过90%的代码。

对象不应该处于无效状态

不幸的是,许多ORM框架要求所有实体类都使用零参数构造函数,使用setter填充成员变量。在这些情况下,很难知道为了构造一个有效的对象必须调用哪些setter。

MyClass c = new MyClass(); // Object in invalid state. Doesn't have an ID.
c.setId(12345); // Now object is valid.

在我看来,一个对象不可能发现自己处于无效状态,类的API应该在每次方法调用后主动强制它的类不变量。

构造函数和突变方法应该原子地将对象从一种有效状态转换为另一种有效状态。这个好多了:

MyClass c = new MyClass(12345); // Object starts out valid. Stays valid.

作为一些库的使用者,在尝试使用一个对象之前跟踪是否调用了所有正确的setter是一件非常痛苦的事情,因为文档通常没有提供关于类契约的线索。

人们抱怨将“goto”从语言中移除。我碰巧认为任何类型的条件跳转都被高估了,而“if”“while”“switch”和通用的“for”循环也被高估了,应该非常谨慎地使用。

每次进行比较和条件跳转时,都会增加一点点复杂性,一旦调用堆栈达到几百个条目,这种复杂性就会迅速增加。

我的第一选择是避免条件,但如果不实用,我的下一个选择是在构造函数或工厂方法中保留条件复杂性。

显然,这对于许多项目和算法(如控制流循环)来说并不实际,但这是我喜欢推动的事情。

瑞克