我正在对初级(也许是高级)软件工程师所犯的常见错误和错误假设进行一些研究。
你坚持时间最长、最终被纠正的假设是什么?
例如,我误解了整数的大小不是标准的,而是取决于语言和目标。说起来有点尴尬,但事实就是这样。
坦率地说;你有什么坚定的信念?你大概坚持了多长时间?它可以是关于一种算法、一种语言、一个编程概念、测试,或者任何关于编程、编程语言或计算机科学的东西。
我正在对初级(也许是高级)软件工程师所犯的常见错误和错误假设进行一些研究。
你坚持时间最长、最终被纠正的假设是什么?
例如,我误解了整数的大小不是标准的,而是取决于语言和目标。说起来有点尴尬,但事实就是这样。
坦率地说;你有什么坚定的信念?你大概坚持了多长时间?它可以是关于一种算法、一种语言、一个编程概念、测试,或者任何关于编程、编程语言或计算机科学的东西。
当前回答
面向对象不一定比非面向对象好。
我认为OO总是更好的。然后我发现了其他技术,比如函数式编程,并意识到OO并不总是更好。
其他回答
我通过阅读K&R自学了C。不幸的是,我没有逐字逐句地读,肯定漏掉了一些东西。我编写了我自己的malloc和calloc版本,我在不同的工作中都随身携带,因为我不知道你可以只链接现有的库。我这样做了好几年,直到最后有人问我为什么要带着这些东西到处走,“嗯……你知道你可以直接链接现有的库,对吧?”
不是持有时间最长的,但在某一时刻,有几年的时间,我:
以为微软Windows是世界上唯一的操作系统(那是1992年) 了解DOS对于拥有“高级”操作系统知识已经足够了。
这就是为什么我在高中没有选择“计算机课程”。我以为我对计算机已经了解得够多了。
后来在大学里,出于我的错误:
我认为UNIX操作系统/程序是完美的,DOS/Windows永远不会接近它(那时候看起来很真实,我猜Linus也是这么想的,这就是为什么Linux和UNIX如此相似,而不是。其他操作系统)
最后,在很长一段时间里,我想:
只有我的软件很糟糕,而商业软件是完美无缺的,因为……它是“商业”软件 美国的软件/工程师/产品是优秀的同义词,其他的都只是糟糕的尝试。
假设我把代码写得很好,尽可能没有错误,这就是我能做的最好的事情。事实证明,有时候经理们更喜欢那些努力成为他们最喜欢的人,而不是把工作做好的人。
我想说的是,将日期的year元素存储为2位数字是一种困扰整个一代开发人员的假设。在千年虫问题上浪费的钱是相当可怕的。
当主流设计模式在计算机科学课上被引入时,我认为它们很棒。在此之前,我有8年的编程经验,对于如何创建好的抽象概念,我真的没有扎实的理解。
设计模式就像魔法一样;你可以做一些很棒的事情。后来我发现了函数式编程(通过Mozart/Oz、OCaml、后来的Scala、Haskell和Clojure),然后我明白了许多模式只是样板,或者额外的复杂性,因为语言表达能力不够。
当然,几乎总是有某种模式,但它们在表达性语言中处于更高的层次。现在我一直在用Java进行一些专业编码,当我不得不使用访问者或命令模式等惯例而不是模式匹配和更高阶函数时,我真的感到很痛苦。