长期的,错误的编程假设
我正在对一些初级(也许是高级)软件工程师所犯的常见错误和错误假设进行研究。
最长的假设是什么最终得到了纠正?
例如,我误解了一个整数的大小不是一个标准,而是取决于语言和目标。 有点尴尬的状态,但它是。
坦率地说; 你有什么坚定的信念,大概多长时间你保持这个假设? 它可以是一个algorithm,一种语言,一个编程概念,testing,或者其他关于编程,编程语言或者计算机科学的东西。
很长一段时间以来,我认为其他人都拥有所有编程概念(devise模式,最新的新语言,计算复杂性,lambdaexpression式,你的名字)的超级掌握。
阅读博客,堆栈溢出和编程书籍似乎总是让我觉得我是在所有程序员必须直观地了解的东西的曲线背后。
我已经意识到,随着时间的推移,我将我的知识与许多人的集体知识进行了有效比较,而不是一个人,这对任何人都是一个相当高的标准。 现实世界中的大多数程序员都有一定的知识点,他们需要完成他们的工作,并且有不止一个领域,他们不是很弱或者完全不知道。
人们知道他们想要什么。
我想我会和人们交谈的时间最长,他们会描述一个问题或工作stream程,我会把它放到代码中并自动化。 每当发生这种情况,他们认为他们想要的东西实际上并不是他们想要的。
编辑:我同意大部分意见。 这不是一个技术性的答案,可能不是提问者所期待的。 它不仅适用于编程。 我敢肯定,这也不是我最长期的假设,但这是我在这十年中所学到的最引人注目的事情。 我敢肯定,这对我来说纯粹是天真的,但是我的大脑是如此的有线,我进入商业世界之前的教学和经验使我相信我会做我所做的。 我将能够使用代码和计算机来解决人们的问题。
我想这个答案与罗宾关于非程序员理解/关心我在说什么的类似。 这是关于将业务学习为一个敏捷的,迭代的,交互式的过程。 这是关于学习编程代码猴子和软件开发人员之间的区别。 这是要意识到两者之间有所不同,而且在这个领域真的很好,这不仅仅是语法和打字的速度。
编辑:这个答案现在是社区维基来安慰人们在这个答案给我代表不安。
我知道性能问题没有分析的地方
我应该只有一个函数/方法的出口点。
非程序员明白我在说什么。
这个无bug软件是可能的。
私有成员variables对于实例而言是私有的,而不是类。
我以为静态打字就坐在你的键盘上。
在开始开发之前,您可以充分了解问题。
聪明人永远比我聪明。
当我犯错的时候,我真的可以打垮自己,而且经常因为自嘲而被告知。 我曾经对许多开发人员敬畏,因为他们比X知道的更多,所以他们知道的比我更多。
随着我不断地积累经验,结识更多的人,我开始意识到,虽然他们在一个特定的领域里比我更了解他们,但他们并不一定比我们更聪明 。
故事的道德: 永远不要低估你可以带来的东西。
最长的一次,我认为糟糕的编程是在边缘发生的事情。做正确的事情是常态。 这几天我并不那么天真。
我以为我应该尽可能地去抽象。 由于太多的function交织在一起,我受到了主要的打击。
现在我尽量保持简单和分离。 重构抽象的东西比预测我需要抽象的东西容易得多。
因此,我从开发规范它们的框架转向了完成工作的function片段。 从来没有回头,除了当我想到我天真以为我会成为下一个大事情发展的时候。
那些女性觉得电脑程序员性感…
软件的质量将导致更大的销售。 有时它会但不总是。
所有语言(大部分)都是平等的。
很长一段时间以来,我认为select的语言在开发过程的难度和项目成功的潜力方面并没有太大的差别。 这绝对是不正确的。
select合适的工作语言与其他单个项目决策一样重要/关键。
一个大的评论/代码比是一件好事。
我花了一段时间才意识到代码应该是自我logging的。 当然,如果代码不能更清楚,或者有什么重要的原因,那么这里和那里的评论是有帮助的。 但是,一般来说,花这个注释时间重命名variables会更好。 它更干净,更清晰,评论不会与代码“不同步”。
那编程是不可能的。
不是在开玩笑,我一直认为编程是一些不可能学的东西,我总是远离它。 当我接近代码时,我永远无法理解它。
然后有一天,我坐下来阅读一些基本的初学者教程,并从那里开始工作。 而今天我作为一名程序员工作,我爱每一分钟。
另外,我不认为编程很容易,这是一个挑战,我喜欢学习更多,没有什么比解决一些编程问题更有趣的了。
“在错误恢复下一步”是某种error handling
该编程软件需要更高的math基础。
在我开始编程之前的几年中,我总是被告知要成为一名优秀的程序员,你必须擅长高级代数,几何,微积分,触发等等。
十年后,我只有一次不得不做任何八年级学生不能做的事情。
在汇编语言中优化==重写。
当我第一次真正理解程序集(来自BASIC)时,似乎让代码运行得更快的唯一方法是在程序集中重写它。 花了好几年的时间才意识到,编译器可以很好地优化,特别是CPU和分支预测等,他们可能会做得比人类在合理的时间内做得更好。 此外,花在优化algorithm上的时间可能会比从高级语言转换到低级语言花费更多时间。 此外,这种过早的优化是所有邪恶的根源。
- 公司高pipe关心代码的质量。
- 更less的线路更好。
我想说将一个date的年份元素存储为2位数字是一个折磨整整一代开发者的假设。 在2000年爆炸的钱是非常可怕的。
除了插入/冒泡sorting以外的任何事情都是非常黑暗的魔法。
这个XML将是一个真正的可互操作和可读的数据格式。
C ++在本质上比所有其他语言都好。
这是我在大学前几年从朋友处得到的。 我把它放在一个令人尴尬的很长时间(我现在脸红)。 只有经过两年左右的工作,才能看到他们所在的裂缝。
没有人 – 也没有 – 是完美的,总有改善的余地。
我相信创build程序就像在课堂上教过的一样……你和一群人坐下来,解决问题,提出解决scheme等等。相反,现实世界是“这是我的问题,我需要解决,去“十分钟后,你会得到另一个,让你没有真正的时间来有效地计划你的解决scheme。
我认为主streamdevise模式在CS类中引入时非常棒。 在此之前,我已经编程了大约8年的业余爱好,对于如何创build出色的抽象概念我确实没有很好的理解。
devise模式感觉像魔术; 你可以做很干净的东西。 后来我发现了函数式编程(通过Mozart / Oz,OCaml,后来的Scala,Haskell和Clojure),然后我明白许多模式只是样板,或者是额外的复杂性,因为语言不够expression。
当然,几乎总是有某种模式,但在performance语言中却处于较高水平。 现在我已经在Java中做了一些专业的编程,当我必须使用访问者或命令模式等惯例,而不是模式匹配和高阶函数时,我真的感到痛苦。
在编程的头几年,我没有注意到,1千字节在技术上是1024字节,而不是1000字节。我总是有点困惑,因为我的数据文件的大小似乎与我预期的略有差异是。
该条件检查如下:
if (condition1 && condition2 && condition3)
以未指定的顺序执行…
如果我单独执行,我的编程会更快更好。