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

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

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

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


当前回答

640K应该足够任何人(DOS)。多年来,很多人都相信这一点。

当我第一次拥有8MB内存的系统时,我认为这远远超过了我的需求。它可以运行操作系统(Mac)以及我使用的所有应用程序(Word、Email、Firefox等)。

其他回答

@Kyralessa: It's worth noting that on most processors, in assembly/machine language, it's possible for functions to return someplace other than their caller while leaving the stack in good condition. Indeed, there are a variety of situations where this can be useful. One variation I first saw on the 6502, though it works even better on the Z80, was a print-message routine where the text to be printed immediately followed the call instruction; execution would resume after the zero terminator (or, as a slight optimization when using the Z80, at the zero terminator, since letting the zero byte be executed as a NOP would be cheaper than trying to avoid it).

有趣的是,在许多现代语言中,函数都有一个正常的退出点(将在调用之后恢复执行),但也可以通过抛出异常退出。即使在C语言中,也可以使用setjmp/longjmp来模拟这种行为。

每个人都想为一个问题写出最好的、最合适的代码……

如果我有一个像ML或Haskell中那样强大的静态类型系统,我应该使用它来编码尽可能多的不变量。只有有了经验,我才知道有时最好让不变量是动态的。

适合系统编程的语言必须支持可变变量。

当我第一次听说“鸭子打字”时,我以为它实际上是“管道打字”,类似于人们经常说的鸭子胶带。“Duck typing”听起来是错误的,而“pipe typing”则有一种奇怪的意义(拼凑的类型)。