我正在对初级(也许是高级)软件工程师所犯的常见错误和错误假设进行一些研究。

你坚持时间最长、最终被纠正的假设是什么?

例如,我误解了整数的大小不是标准的,而是取决于语言和目标。说起来有点尴尬,但事实就是这样。

坦率地说;你有什么坚定的信念?你大概坚持了多长时间?它可以是关于一种算法、一种语言、一个编程概念、测试,或者任何关于编程、编程语言或计算机科学的东西。


当前回答

分析和性能分析是一回事。

然后我发现,虽然分析器总比没有强,但它包含错误的假设,比如:

只有总量才重要,细节无关紧要 统计精度是定位性能问题的必要条件 测量时间和定位不必要的耗时操作是一回事

其他回答

认为自己对编程中的某种语言/主题了如指掌。根本不可能。

我应该一直优化我的代码。这并不是说我在写之前不应该仔细考虑,而是说我应该努力思考如何从每个语句中挤出每一点性能,甚至牺牲可读性。

当然,您可以查看FindBugs和PMD,但这些是我最喜欢的陷阱和技巧(所有Java):

字段没有被覆盖,而是被遮蔽。

没有显式的super。超级访问。

未定义构造函数的类具有隐式零参数构造函数。今年我犯了一个与此相关的实际错误。

要获得对内部类的父类的引用,可以使用“Outer”语法。这“消除方法调用或同步的歧义”。

在c++术语中,类是“它们自己的朋友”,该类的任何实例的私有方法和字段都可以从同一类的任何方法引用,甚至是静态方法。这将使我早期的一些clone()和copy构造函数简单得多。

在扩展类的静态上下文中可以访问受保护的方法和字段,但前提是该类在同一个包中。我很高兴flex.messaging.io.amf不是一个密封的包。

我曾经认为我永远不会像微软开发人员那样编程,但现在我认为我可以写同样干净的代码,甚至更好。

Windows中的线程很便宜。

事实证明,这只是部分正确。线程有一定的开销,需要自己的地址空间,在那里它可以生存和快乐。因此,如果我发现自己在一个应用程序中处理数十个线程,我会问自己如何将所有内容简化并整合到更少的线程中。