我正在研究初级(或高级)软件工程师的常见错误和错误的假设。
您最长久的假设最终被纠正了什么?
例如,我误解了整数的大小不是标准的,而是取决于语言和目标。有点尴尬地说,但是确实如此。
坦率地说; 您有什么坚定的信念,大概维持了多长时间?它可能与算法,语言,编程概念,测试有关,或者与编程,编程语言或计算机科学有关。
我正在研究初级(或高级)软件工程师的常见错误和错误的假设。
您最长久的假设最终被纠正了什么?
例如,我误解了整数的大小不是标准的,而是取决于语言和目标。有点尴尬地说,但是确实如此。
坦率地说; 您有什么坚定的信念,大概维持了多长时间?它可能与算法,语言,编程概念,测试有关,或者与编程,编程语言或计算机科学有关。
Answers:
很长时间以来,我一直以为其他所有人都精通所有编程概念(设计模式,最新的新语言,计算复杂性,lambda表达式,随便命名)。
阅读博客,Stack Overflow和编程书籍似乎总是让我感到自己在所有程序员都必须凭直觉知道的事情上走在后面。
随着时间的流逝,我意识到我正在有效地将自己的知识与许多人(而不是一个人)的集体知识进行比较,这对任何人来说都是一个很高的标准。现实世界中的大多数程序员都拥有完成其工作所需的知识储备,并且拥有不胜枚举或完全不了解的多个领域。
人们知道他们想要什么。
在最长的时间内,我以为我会与人们交谈,他们会描述一个问题或工作流程,然后将其放入代码中并使之自动化。事实证明,每次发生这种情况时,他们认为自己想要的实际上并不是他们想要的。
编辑:我同意大多数意见。这不是一个技术性的答案,并且可能不是发问者想要的。它不仅适用于编程。我敢肯定,这也不是我最长久的假设,但这是我在这样做的短短十年中学到的最惊人的东西。我确信这纯粹是天真的,但是我的大脑被束缚了,进入商业世界之前的教学和经验使我相信我会做我所回答的。我将能够使用代码和计算机来解决人们的问题。
我猜这个答案与Robin关于非程序员理解/关心我在说什么的答案类似。这是关于学习业务的敏捷,迭代,交互过程。这是要学习成为编程代码猴子和成为软件开发人员之间的区别。这是关于意识到两者之间存在差异,并且要在该领域中做到真正的出色,这不仅仅是语法和键入速度。
编辑:这个答案现在是社区Wiki,以安抚人们对此答案感到不安的情况。
我知道性能问题不在哪里
我应该只有一个函数/方法的退出点。
那些非程序员理解我在说什么。
那个没有错误的软件是可能的。
私有成员变量是实例私有的,而不是类私有的。
我以为静态输入正静静地放在您的键盘上。
在开始开发之前,您可以完全理解问题。
聪明人永远比我聪明。
当我犯错并且经常因自嘲而被告知时,我真的可以打败自己。我曾经敬畏地看着很多开发人员,并常常认为,由于他们在X上比我了解更多,所以他们比我了解得多。
随着我不断获得经验并结识更多的人,我开始意识到,虽然他们在某个特定主题上比我了解更多,但他们不一定比我/您聪明。
故事的寓意:永远不要低估可以带来的收益。
在最长的时间里,我认为不良编程是偶然发生的事情。.正确地做事是常态。这些天我不太天真。
我认为我应该尽可能地抽象。因为太多的功能交织在一起,我在这个专业中受到打击。
现在,我尝试使事情保持简单和分离。重构以使事物抽象起来比预测我需要如何抽象事物要容易得多。
因此,我从开发所有规则的框架转变为完成任务的功能片段。永远不要回头,除非当我想到那段时间时,我天真地以为我会成为开发下一件大事的人。
女人觉得计算机程序员很性感...
(几乎)所有语言都是平等的。
在很长一段时间里,我发现选择的语言并没有真正改变开发过程的难度和项目成功的潜力。绝对不是这样。
为工作选择正确的语言与其他任何单个项目决策一样重要/至关重要。
那种编程是不可能的。
我不是在开玩笑,我一直认为编程是一些不可能学习的东西,而且我始终远离编程。当我接近代码时,我永远无法理解它。
然后有一天,我坐下来阅读了一些基本的初学者教程,然后从那里开始了自己的工作。今天,我以程序员的身份工作,我喜欢其中的每一分钟。
另外,我认为编程并不容易,这是一个挑战,我喜欢学习很多东西,没有比解决一些编程问题更有趣的了。
“ On Error Resume Next”是某种错误处理
该编程软件需要具备较高的数学基础。
在开始编码的多年之前,我总是被告知,要成为一名优秀的程序员,您必须精通高级代数,几何,微积分,三角函数等。
十年后,我只需要做八年级学生不能做的任何事情。
优化==用汇编语言重写。
当我第一次真正了解汇编语言(来自BASIC)时,似乎使代码运行更快的唯一方法是在汇编语言中重写它。花了很多年的时间才意识到编译器可以非常擅长优化,尤其是在具有分支预测功能的CPU等方面,它们可以做得比人类在合理的时间内做得更好。同样,花时间在优化算法上可能比花时间将语言从高级转换为低级语言更好。同样,过早的优化是万恶之源。
我要说的是,将日期的年元素存储为2位数字是一个困扰整个开发人员的假设。Y2K上的钱真是太恐怖了。
除了插入/冒泡排序之外,其他任何事情都只是黑魔法。
该XML将是一种真正可互操作且人类可读的数据格式。
C ++本质上比所有其他语言都要好。
我在大学毕业几年前就从一位朋友那里得到了这笔钱。我让它呆了很长时间(我现在脸红了)。直到使用它大约两年之后,我才能看到它们的本质。
没有人-没什么-完美,总有改进的余地。
我相信创建程序就像在课堂上教的一样……您与一群人坐下来,讨论问题,提出解决方案,等等。等等,真实世界是“这里是我的问题,我需要解决它,然后继续”,十分钟后您又遇到了另一个问题,因此您没有实时的时间来有效地计划解决方案。
我将主流设计模式引入CS课堂后,认为它们很棒。在那之前,我已经将大约8年编程作为业余爱好,但实际上我对如何创建良好的抽象没有深刻的了解。
设计模式就像魔术一样。你可以做得很整洁。后来我发现了函数式编程(通过Mozart / Oz,OCaml,后来的Scala,Haskell和Clojure),然后我了解到许多模式只是样板程序或其他复杂性,因为该语言的表达能力不足。
当然,几乎总是存在某种模式,但是在表达性语言中它们处于较高水平。现在,我一直在用Java做一些专业的编码,当我不得不使用诸如访问者或命令模式之类的约定而不是模式匹配和高阶函数时,我真的感到很痛苦。
在开始编程的最初几年中,我并没有意识到1 KB从技术上来说是1024字节,而不是1000字节。我总是感到困惑,因为我的数据文件的大小似乎与我预期的略有出入是。
该条件检查如下:
if (condition1 && condition2 && condition3)
以未指定的顺序执行...