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

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

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

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


当前回答

我认为Java应该通过精简的本地库包装器来支持特定于系统的特性。

换句话说,从几乎所有人的角度来看,我认为Sun决定要求Java只支持可移植特性是一个巨大的错误。

无数年之后,SWT出现并解决了编写可移植的本机小部件UI的基本问题,但那时微软被迫将Java派生为c#,并且已经编写了大量原本可以用文明Java完成的c++。现在世界运行在c#、VB、Java、c++、Ruby、Python和Perl的混合语言上。除了SWT程序外,所有Java程序的外观和操作都很奇怪。

如果Java在本机库的基础上提供了薄包装器,那么人们就可以完全用Java编写swt等效程序,并且随着事情的发展,我们可以用Java开发可移植的明显的本机应用程序。我完全支持可移植应用程序,但如果这种可移植性是在中间件UI(和其他特性)库的开放市场中实现的,而不是通过简单地将用户菜单减少为垃圾或用Swing伪造UI,那就更好了。

我猜想Sun认为ISV会受到Java的限制,然后世界上所有新的PC应用程序都会神奇地在Sun上运行。不错的尝试。他们最终没有得到应用程序,也没有让语言起飞,直到我们可以将其用于仅逻辑的服务器后端代码。

如果事情做得不一样,也许本地应用程序就不会死掉。

其他回答

意见:不应该有任何编译器警告,只有错误。你应该总是使用-Werror编译你的代码。

原因:要么编译器认为这是一个应该被纠正的错误,要么它不需要修复,在这种情况下编译器应该直接关闭。

默认情况下,数组应该基于1,而不是基于0。系统实现语言不一定是这样,但是像Java这样的语言吸收了更多C语言的奇怪之处。“元素1”应该是第一个元素,而不是第二个,以避免混淆。

计算机科学不是软件开发。毕竟,你不会雇佣一个只学过物理的工程师。

尽可能多地学习数学。您不会使用大部分的知识,但是您需要能够以这种方式思考才能擅长软件。

目前标准化的唯一最好的编程语言是Common Lisp,尽管它很冗长并且有从零开始的数组。这很大程度上是因为它被设计成一种方式 来写计算,而不是抽象的冯·诺依曼机器。

至少90%的对编程语言的比较批评可以归结为“语言A有C特性,而我不知道如何在语言B中实现C或类似的功能,所以语言A更好。”

“最佳实践”是我所见过的“平庸”最令人印象深刻的拼写方式。

编程是如此简单,一个五岁的孩子都能做到。

编程本身并不难,这是常识。你只是在告诉计算机该做什么。你不是天才,别自以为是了。

编程还处于初级阶段。

尽管编程语言和方法已经发展了很多年,但我们还有很长的路要走。迹象很明显:

语言文档在互联网上随意传播(stackoverflow在这里有所帮助)。 语言在语法上的进化必然会破坏之前的版本。 调试仍然经常使用printf完成。 语言库或其他形式的大规模代码重用仍然相当罕见。

显然,所有这些都在改善,但如果我们都能同意这是开始而不是结束就好了=)。

学校教育毁掉创造力

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

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

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

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