281

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

你坚持最久但最终得到纠正的假设是什么?

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

坦率地说; 你有什么坚定的信念,你大概维持了多久?它可以是关于算法、语言、编程概念、测试或任何关于编程、编程语言或计算机科学的内容。

4

195 回答 195

545

很长一段时间以来,我一直认为其他人都对所有编程概念(设计模式、最新的新语言、计算复杂性、lambda 表达式,应有尽有)都有这种超级掌握。

阅读博客、Stack Overflow 和编程书籍似乎总是让我觉得我落后于所有程序员必须凭直觉知道的事情的曲线。

随着时间的推移,我意识到我正在有效地将我的知识与许多人的集体知识进行比较,而不是单个人,这对任何人来说都是一个相当高的标准。现实世界中的大多数程序员都拥有完成工作所需的知识库,并且有很多他们薄弱或完全不了解的领域。

于 2009-05-21T00:34:41.183 回答
308

人们知道他们想要什么。

在很长一段时间里,我以为我会与人交谈,他们会描述一个问题或工作流程,然后我会将其放入代码中并使其自动化。事实证明,每次发生这种情况时,他们认为自己想要的实际上并不是他们想要的。

编辑:我同意大部分评论。这不是一个技术性的答案,也可能不是提问者想要的。它不仅适用于编程。我敢肯定,这也不是我坚持时间最长的假设,但这是我在这短短的 10 年里学到的最引人注目的事情。我确信这纯粹是我的幼稚,但我的大脑是/被连接的方式以及我进入商业世界之前的教学和经验让我相信我会做我所回答的;我将能够使用代码和计算机来解决人们的问题。

我想这个答案类似于罗宾关于非程序员理解/关心我在说什么的。它是关于将业务学习为一个敏捷、迭代、交互式的过程。这是关于学习成为编程代码猴子和成为软件开发人员之间的区别。这是关于意识到两者之间存在差异,并且要在该领域真正出色,不仅仅是语法和打字速度。

编辑:这个答案现在是社区维基,以安抚人们对这个答案感到不安,给我代表。

于 2009-05-20T14:28:24.730 回答
292

我知道性能问题出在哪里而无需分析

于 2009-05-20T15:50:32.660 回答
232

我应该只有一个函数/方法的退出点。

于 2009-05-20T17:17:12.113 回答
228

非程序员理解我在说什么。

于 2009-05-20T14:25:42.240 回答
219

那个没有错误的软件是可能的。

于 2009-05-20T14:25:12.520 回答
199

私有成员变量是实例私有的,而不是类私有的。

于 2009-05-20T14:26:10.537 回答
166

我认为静态打字在你的键盘上非常安静。

于 2009-05-20T16:27:16.737 回答
162

在开始开发之前,您可以完全理解问题。

于 2009-05-20T20:25:27.693 回答
158

聪明的人总是比我聪明。

当我犯错时,我真的可以打败自己,并且经常因为自嘲而被指责。我曾经敬畏地看着很多开发人员,并且经常认为,由于他们在X上比我了解更多,所以他们比我了解更多。

随着我不断地积累经验和结识更多的人,我开始意识到,虽然他们在特定学科上的知识比我多,但他们不一定比我/你聪明。

故事的寓意:永远不要低估你能带来什么。

于 2009-05-21T07:31:14.333 回答
131

在很长一段时间里,我认为糟糕的编程只是发生在边缘的事情……正确地做事是常态。这几天我没那么天真了。

于 2009-05-20T18:58:41.410 回答
113

我想我应该尽可能地抽象。由于太多交织在一起的小功能,我因此受到了打击。

现在我尝试让事情尽可能简单和解耦。重构以使某些东西抽象比预测我需要如何抽象某些东西要容易得多。

因此,我从开发管理所有这些的框架转移到完成工作的功能片段。从来没有回头,除了当我想到我天真地认为我会成为开发下一件大事的人的时候。

于 2009-05-20T15:52:26.637 回答
103

女人觉得计算机程序员很性感……

于 2009-05-21T07:52:44.897 回答
100

软件的质量将导致更大的销售。有时会,但并非总是如此。

于 2009-05-20T15:37:51.843 回答
82

所有语言(大部分)都是平等的。

很长一段时间以来,我认为选择的语言并没有真正对开发过程的难度和项目成功的潜力产生太大影响。这绝对不是真的。

为工作选择正确的语言与做出的任何其他单个项目决策一样重要/关键。

于 2009-05-20T14:28:15.573 回答
81

大的注释/代码比率是一件好事。

我花了一段时间才意识到代码应该是自我记录的。当然,如果代码不能更清晰,或者如果有重要原因导致某事被完成,那么这里和那里的评论会很有帮助。但是,一般来说,最好将评论时间花在重命名变量上。它更干净、更清晰,并且注释不会与代码“不同步”。

于 2009-05-23T01:29:24.823 回答
66

这种编程是不可能的。

不是开玩笑,我一直认为编程是一件不可能学的东西,我总是远离它。当我接近代码时,我永远无法理解它。

然后有一天,我只是坐下来阅读了一些基本的初学者教程,并从那里开始工作。今天我作为一名程序员工作,我喜欢它的每一分钟。

补充一点,我认为编程并不容易,这是一个挑战,我更喜欢学习,没有什么比解决一些编程问题更有趣的了。

于 2009-05-20T14:23:45.050 回答
65

“On Error Resume Next”是某种错误处理

于 2009-05-20T15:21:20.553 回答
64

该编程软件需要强大的高等数学基础。

在我开始编码之前的几年里,我总是被告知要成为一名优秀的程序员,你必须擅长高级代数、几何、微积分、三角函数等。

十年后,我只需要做一次八年级学生做不到的事情。

于 2009-05-20T21:16:33.330 回答
63
  • 公司高管关心代码的质量。
  • 行数越少越好。
于 2009-05-20T17:40:22.970 回答
63

那优化==用汇编语言重写。

当我第一次真正理解汇编(来自 BASIC)时,似乎使代码运行得更快的唯一方法就是在汇编中重写它。花了好几年的时间才意识到编译器可以非常擅长优化,特别是对于具有分支预测等功能的 CPU,它们可能会在合理的时间内比人类做得更好。此外,与花时间从高级语言转换为低级语言相比,花时间优化算法可能会给您带来更好的胜利。此外,过早的优化是万恶之源……

于 2009-05-20T15:25:51.433 回答
58

我会说将日期的年份元素存储为 2 位数字是困扰整整一代开发人员的假设。Y2K上花的钱非常可怕。

于 2009-05-20T19:08:36.257 回答
57

除了插入/冒泡排序之外的任何东西都是非常简单的黑魔法。

于 2009-05-20T14:27:31.410 回答
50

XML 将是一种真正可互操作且人类可读的数据格式。

于 2009-05-20T22:21:04.870 回答
48

C++ 在本质上比所有其他语言都要好。

这是我在大学几年前从一个朋友那里收到的。我把它随身携带了很长时间(我现在脸红了)。只有在使用它 2 年左右之后,我才能看到它们的裂缝。

没有人——也没有什么——是完美的,总有改进的余地。

于 2009-05-20T15:13:01.833 回答
47

我相信创建程序会和课堂上教的完全一样……你和一群人坐下来,讨论一个问题,想出一个解决方案等等。相反,现实世界是“这里是我的问题,我需要解决,去吧”,十分钟后你又得到了另一个,让你没有时间有效地计划你的解决方案。

于 2009-05-20T15:04:46.000 回答
42

当主流设计模式被引入 CS 课程时,我认为它们很棒。在那之前我已经编程了大约 8 年的业余爱好,我真的对如何创建好的抽象没有扎实的理解。

设计模式就像魔术一样;你可以做非常整洁的事情。后来我发现了函数式编程(通过 Mozart/Oz、OCaml、后来的 Scala、Haskell 和 Clojure),然后我明白许多模式只是样板,或者额外的复杂性,因为语言不够表达。

当然,几乎总是有某种模式,但它们在表达语言中处于更高的水平。现在我一直在用Java做一些专业的编码,当我不得不使用诸如访问者或命令模式之类的约定,而不是模式匹配和高阶函数时,我真的感到很痛苦。

于 2009-05-20T16:29:31.430 回答
38

在我编程的最初几年里,我没有意识到 1 Kbyte 在技术上是 1024 字节,而不是 1000 字节。我总是对我的数据文件的大小似乎与我预期的略有不同这一事实感到有些困惑。是。

于 2009-05-20T14:29:33.060 回答
36

该条件检查如下:

if (condition1 && condition2 && condition3)

以未指定的顺序执行...

于 2009-05-20T14:27:24.250 回答
35

如果我单独执行,我的编程会更快更好。

于 2009-05-20T16:23:59.567 回答
31

“该项目将在 2 周内完成”

“这将需要 2 个小时来实施”

于 2009-05-21T14:25:38.723 回答
30

我可以在没有注释的情况下理解我自己的代码!!!

于 2009-06-21T14:32:06.640 回答
28

我以为我会需要它。

于 2009-05-21T05:39:42.553 回答
25

像 Python 或 Ruby 这样的动态类型语言在某种程度上不太适合用于大型项目。

于 2009-05-21T14:14:23.847 回答
25

那时我作为菜鸟的一个假设是,在该领域工作多年的人自然会成为更好的开发人员。

于 2009-05-27T11:48:07.020 回答
24

这很尴尬,但是很长时间以来我并没有真正掌握引用类型和值类型之间的区别。我认为您必须使用 ref 关键字以不同的方法更改对象。

这是我应该知道的 C# 最基本的概念之一。

于 2009-05-20T15:39:20.717 回答
22

这真的很尴尬,但是当我开始学习如何编程时,没有什么能让我满意。我想写电子游戏。不是所有这些书要我写的琐碎的小程序。所以我决定我可以轻松地跳过 10 章而忽略基础知识。

所以我基本上忽略了变量!

问题是我没有从约定中识别关键字:

Car car = new Car(); //good
Car test = new Car(); //wrong must be lowercase car!

for (int i = 0; i < 10; i++) //good
for (int test = 0; test < 10; test++)//wrong must be i

我这样做了一年多,甚至做了一个 3000 行的井字游戏!那时我为自己的出色表现而激动不已,直到我在 Internet 上的 150 行中找到了一个井字游戏。然后意识到我是个白痴,然后重新开始。

于 2009-05-25T09:43:30.993 回答
20

那个编程很简单。

于 2009-05-20T14:24:56.377 回答
20

Unix 和 Linux 操作系统设计得很好......我可能应该限定这个(!)

首先,这种观点得到了以下反真理的强化:

  • 随后开发的每一个操作系统最终都对 Unix 进行了糟糕的重新设计(也有人提到 Lisp,在这方面更真实)。
  • 构成“Unix哲学”的规则列表。并不是它们错了,而是 Unix 本身紧跟它们的暗示。

说它们设计很好/做得很好可能更真实,当然它们的一部分是,但即使这也只是相对于某些糟糕版本的 Windows 的相对判断。以下是一些做得不好的事情的例子:

  • 配置一团糟,临时平面文件配置不好
  • C 编程语言应该在很久以前就已经被替换了(被D之类的东西)
  • shell 脚本是精神分裂症。它不适合开发,因为它是为快速打字而设计的速记。
  • 目录结构命名错误
  • GNU 工具链不必要地晦涩难懂
  • 普遍目的总是胜过特殊目的的信念

总体而言,它们需要不必要的专业知识来操作。或者更确切地说,只有适度理解的大量知识。

这并不全是坏事。Linux 在政治上更好,并没有被业务需求所破坏,但遗憾的是,在很大程度上,很多技术高地已经失去了。

于 2009-05-20T22:06:25.617 回答
19

当我从大学毕业后第一次开始工作时,我希望更多的高级开发人员会知道他们在做什么。男孩是我错了....

于 2009-06-19T12:47:15.823 回答
19

好的,我很早就学会了编程。我14岁左右。我持有各种疯狂的信念,但不要问我确切的时间,因为那是……很久以前。

  • 好的,所以,我有一段时间相信,如果您在 Java 中使用术语同步,那么 Java 会为您解决这个令人讨厌的同步问题

  • 至少有半年甚至更长时间,我都相信静态类型会提高性能。

  • 我相信释放某些东西会将内存返回给操作系统。

  • 我相信 malloc 调用归结为检查操作系统上是否有足够的可用空间,因此 malloc 会很便宜。

  • 很长一段时间以来,我一直认为 Java 在构建时考虑了其他语言的所有优点和缺陷,是一种“完美融合”,可以吸收其他语言的最佳属性并拒绝错误。

  • 我大大高估了 LinkedLists 优于 ArrayLists 的案例数量。

  • 我认为 NP-hardness 证明了没有 INSTANCE 可以有效地解决,这在一段时间内是非常错误的。

  • 由于“旅行推销员问题”,我以为在旅行社网站上找到最佳飞行计划需要很长时间,因为我自豪地对我的亲戚笑了(当我很小的时候,好吗?!)

可以想出更多。不知道我坚持了多久。对不起。

PS:
啊,好吧,这个清理得不是那么慢,但是我看到新手经常这样做,所以我想你可能会感兴趣:我还认为要存储不确定数量的东西,你需要为每个声明一个新变量。所以我会创建变量 a1, a2, a3, ...,而不是使用一个变量 a,我会声明它是一个向量。

于 2009-05-20T15:23:05.603 回答
18

这是朝九晚五的工作

于 2009-05-22T18:11:06.020 回答
18

我曾经认为应用程序的大部分工作实际上是编程。我确信这在某些情况下是正确的,但根据我的经验,我花在研究、记录、讨论和分析上的时间比实际编码要多。(我的工作是运行基于激光的传感器的软件,确定如何最好地控制硬件比编写代码更具挑战性。)

我还曾经认为,程序员可以回头向旁边的人(通常)提问的开放环境是程序员团队敲定解决方案的最佳环境。事实证明,一个黑暗的孤独房间更有效率,有团队或没有团队。

当我毕业时,我认为专业编程就像在大学里编程,这意味着我会得到输入和预期输出,并要求我填写进行转换的黑匣子。实际上,我必须弄清楚输入、输出和黑匣子。

我以前不认为营销和销售人员是人类的祸害,如此幼稚。

于 2009-05-20T19:13:56.493 回答
17

在上线之前没有缺陷是可能的。

这绝对不是真的,即使是 P2 缺陷有时也会被打开。

于 2009-05-20T14:26:30.023 回答
17

代码审查是浪费时间。

从一家完全可选的公司搬到一家强制性(甚至经过审计)的公司后,我开始了解它们的用处。对代码进行第二次观察,即使是最琐碎的部分,也可以:

A ) 当你搞砸一些琐碎的事情时,让你避免尴尬(例如,在我以前的工作中,一次琐碎的代码审查会阻止我们向客户发送数百封垃圾邮件)

B)可以教你一开始不知道的东西(我在目前的工作中一直在学习新的库——不可避免地在一家大公司,有人已经偶然发现了你遇到的问题并在解决问题方面做得更好它 - 这只是知道在哪里看的问题)

C ) 至少要确保除了你自己之外的其他人知道事情是如何运作的。

最后,我在这里提交的代码比我以前的工作更快乐,尽管那时我以为我什么都知道:)

于 2009-05-21T07:30:52.837 回答
16

与 UNIX 相比,NT 操作系统的设计存在缺陷。事实证明,NT 内核和设计决策与任何现代 UNIX 类系统非常相似,并且您在内核中遇到的大多数问题都是由有缺陷的公司编写的第三方有缺陷的驱动程序造成的。

于 2009-05-21T10:14:49.603 回答
16

如果每行都评估条件,并且如果您编写如下代码:

Dim a as Boolean = True
If a Then
    Console.WriteLine("1")
    a = False
    Console.WriteLine("2")
Else
    Console.WriteLine("3")
End If

那么输出将是:

1
3
于 2009-05-20T18:58:37.120 回答
15

我是一个优秀的程序员!

于 2009-05-27T20:05:34.003 回答
15

.NET 结构(C# 和 VB.NET)是引用类型,就像类一样。

在 .NET 1.0 出现之前或之后不久,我“收到”了那条智慧(我不知道从哪里来,它可能完全从我的脑海中冒出来,就像宙斯额头上的雅典娜),并且一直保留到大约 4 个月前 Jon Skeet 放弃了这个概念。

谢谢乔恩。

PS 与编程无关,但我还相信(直到大约 5 分钟前)“阿波罗完全从宙斯的额头上跳了出来”。

于 2009-05-20T15:06:47.290 回答
15

字节和字符实际上是相同的——“ASCII”只是将字节值映射到屏幕上的字形的一种方式。

阅读Unicode真的让我大开眼界(尽管我还没有完全理解它)。

于 2009-05-22T18:00:44.787 回答
14

我曾经认为编写 Win32 应用程序就足够了。

此外,每个程序都必须带有 GUI,因为命令行是“过时的”。

于 2009-05-20T14:27:56.820 回答
14

那一天,我有一个现实的想法,即构建一些重要的代码/系统/任何东西需要多长时间。

于 2009-05-27T04:50:59.837 回答
14

我可以阅读 SO 并完成任何工作。

于 2010-07-08T19:57:06.150 回答
13

面向对象始终是设计源代码的最佳方式,而且永远都是。

于 2009-06-08T11:51:41.107 回答
13

我认为提高数据库性能所需要做的就是将数据库置于第 3 范式。

于 2009-05-20T18:55:51.680 回答
12

That this:

SomeClass object(initialValue);

and this:

SomeClass object = initialValue;

were guaranteed to be equivalent in C++. I thought the second form was guaranteed to be interpreted as if it had been written as the first form. Not so: see C++ Initialization Syntax.

于 2009-05-20T18:41:06.187 回答
11

我仍然遇到的一些问题是以下误解——即使我知道得更清楚,我仍然会努力坚持下去:

  • 所有的利益相关者都会客观地做出关于软件设计的决定。那些没有参与编写代码的人会完全基于对我们开发人员并不总是有意义的情感做出各种决定。
  • 项目预算总是有意义的——我见过一些公司很乐意多年来每月减少 [例如] 50,000 美元,而不是支付 250,000 美元在 6 个月内完成一个项目。如果政府不花钱,他们的年度预算就会失去——所以他们会花钱的,不管是地狱还是高水位。让我吃惊的是,有多少项目资金被浪费在了这样的事情上。
  • 您应该始终为正确的工作使用正确的工具——有时这个决定不在您的手中。有时它从高处下来,“你应该为这个项目使用X技术”,让你想“WTF!谁想出了这个荒谬的想法?”......支付你的薪水的人,就是那个人,现在完成它.
  • 编程思想是第一位的,其他一切都是次要的。 实际上,需要满足最后期限和业务目标才能获得薪水。有时你会做出最糟糕的决定,因为你只是没有时间以正确的方式去做……就像有时那个词就在你的舌尖上,但回忆起来的那一刻会让你选择一个不同的、更少的理想的词。并不总是有时间把事情做好,有时只有时间去做——不管怎样。因此,所谓的经验丰富的开发人员经常使用反模式,他们必须在明天交付给您最好的客户的软件的演示截止日期前 10 分钟敲出问题的解决方案。
于 2009-05-20T19:39:11.547 回答
11

当我在 TI-83 上编程时,我认为你不能为自己分配一个变量。所以(忽略这是 C 代码,而不是 TI-BASIC)而不是编写

c = c + 1;

我会写

d = c + 1;
c = d;

当我了解它时+=++它让我大吃一惊。

于 2009-05-20T20:49:01.483 回答
11

IDE 会变得更快。

于 2009-05-23T13:08:35.263 回答
10

我应该始终优化我的代码。这并不是说我不应该在写它之前考虑它,而是我应该认真思考如何从每个语句中挤出每一点性能,甚至到牺牲可读性的地步。

于 2009-05-20T17:10:56.947 回答
9

XML 名称空间(或更糟糕的是,格式良好)在某种程度上比尝试不使用它们更困难。

一个非常常见的错误,即使在 W3C!

于 2009-05-20T14:32:57.873 回答
9

当有人说服我相信会有一台能够在 3 秒内运行无限循环的计算机时,我想我是 10 岁。

于 2009-07-29T09:39:40.493 回答
9

我的错误假设:虽然总有一些改进的余地,但就我而言,我几乎是一名优秀的程序员。

当我刚从大学毕业时,我已经做了 6 年的 C 编程,对“结构化编程”了如指掌,认为“OO”只是一种时尚,并认为“伙计,我很好!!”

10 年后,我在想“好吧,那时我远没有我想象的那么好……现在我明白了多态性以及如何编写干净的 OO 程序……现在我真的很棒了” .

所以不知何故,我总是很好,但也总是以前好得多。

在那之后不久,一分钱就掉了下来,我终于有了“一些”谦逊。总是有更多的东西要学(还没有用像 Haskell 这样的纯函数式语言编写合适的程序)。

于 2009-05-21T08:56:23.787 回答
8

在 C++ 中,很长一段时间以来,我一直认为编译器在为虚方法定义时会拒绝您。

当我意识到我错了时,我很惊讶。

很多时候,当我告诉其他人为其抽象类提供其纯虚拟析构函数的默认实现时,他/她睁大眼睛看着我。而且我从这里知道接下来将进行长时间的讨论......这似乎是一种普遍的信念,在 C++ 初学者中有些传播(我也认为自己......我目前仍在学习!)

维基百科链接到 c++ 的纯虚方法

于 2009-05-20T18:18:54.047 回答
8

至少 6 年来,我一直坚信每个问题都只有 1 个解决方案。

完全不知道具有不同复杂性、空间/时间权衡、OOP 与功能与命令、抽象级别和不可判定问题的多种算法。当这种幸福的天真打破时,它打开了一个充满可能性的世界,并关上了简单地坐下来建造东西的大门。我花了很长时间才弄清楚如何选择一个并使用它。

于 2010-06-07T03:33:43.210 回答
7

天,

我只是设计和编写代码。

没有需求收集、文档或支持。

干杯,

于 2009-06-19T12:47:51.127 回答
7
  • 我的同事正在/正在编写所谓的错误代码,因为他们很烂/很烂。我花了一段时间才知道我应该首先检查到底发生了什么。大多数时候,糟糕的代码是由于缺乏管理、客户不想检查他们真正想要的东西并开始改变主意,比如没有明天,或者其他任何人无法控制的情况,比如经济危机。
  • 客户要求“昨天”的功能,因为他们很愚蠢:不是真的。这是关于沟通。如果有人告诉他们一切都可以在 1 周内完成,你猜怎么着?他们会在 1 周内想要它。
  • “永远不要更改有效的代码”。这不是一件好事IMO。您显然不必更改真正有效的方法。但是,如果您从不更改一段代码,因为它应该可以工作并且更改起来太复杂,那么您最终可能会发现该代码并没有真正做到它应该做的事情。例如:我看到一个销售佣金计算软件在两年内计算错误,因为没有人愿意维护该软件。销售人员没有人知道这件事。这个公式太复杂了,他们真的不知道如何检查数字。
于 2009-06-19T14:36:14.060 回答
7

作为一个老程序程序员,当我第一次开始用 Java 为一个爱好项目编程时,我并没有真正理解 OO。在没有真正理解接口要点的情况下编写了大量代码,试图通过将所有内容强制到继承层次结构中来最大化代码重用 - 希望 Java 在事物不适合清理到一个层次结构中时具有多重继承。我的代码有效,但我现在对那些早期的东西感到畏缩。

当我开始阅读有关动态语言并试图找出一种好的学习语言时,阅读有关 Python 的重要空白让我感到厌烦——我确信我会讨厌它。但是当我最终学会了 Python 时,它变成了我真正喜欢的东西。我们通常会努力使用任何语言来获得一致的缩进级别,但没有得到任何回报(除了视觉可读性)。在 Python 中,我发现在缩进级别方面我并没有比以前做更多的努力,Python 处理了我在其他语言中不得不使用大括号或其他任何东西的问题。它现在让我觉得 Python 更干净了。

于 2009-05-20T20:45:31.117 回答
6

评论越多越好。我一直试图让我的代码尽可能地可读——主要是因为我几乎可以肯定会修复我漏掉的错误。所以在过去的几年里,我曾经有一段又一段的评论。

最终,我突然意识到,在某一点上,更多的评论——无论结构多么整齐——没有任何价值,实际上维护起来很麻烦。这些天来,我采用目录+脚注的方法,每个人都为此感到高兴。

于 2009-06-17T21:43:58.207 回答
6

我最近才发现在 Hello World 中执行了超过一百万条指令!我写的c++程序。我从来没有对像单个 cout 语句这样简单的事情抱有这么大的期望

于 2009-05-21T07:04:57.817 回答
6

以前从未遇到过整数提升......并认为'z'在这段代码中将保持255:

unsigned char x = 1;
unsigned char y = 2;
unsigned char z = abs(x - y);

z 的正确值为 1

于 2009-05-20T19:38:36.367 回答
6

OO 不一定比非 OO 更好。

我认为 OO 总是更好。然后我发现了其他技术,例如函数式编程,并意识到 OO 并不总是更好。

于 2009-05-20T20:16:41.110 回答
6

我们作为软件工程师可以理解用户真正想要什么。

于 2009-06-11T18:31:25.517 回答
6

不要使用高级实现特定的功能,因为您可能希望“有时”切换实现。我一次又一次地这样做了,而且几乎总是没有发生这种转变。

于 2009-05-23T12:13:47.993 回答
6

goto 是有害的。

现在我们继续或中断。

于 2009-05-20T20:58:23.570 回答
6

我是一名年轻的初出茅庐的开发人员,希望专业地做这件事,因为这是我所爱的,这是我曾经认为我通过短暂的经验了解到的观点是错误的

当您根本不将用户界面与逻辑分开时,您最终会遇到的可怕混乱是可以接受的,这也是每个人编写软件的方式

没有太多的复杂性或抽象性

一级责任——我从来没有真正有过这个概念,这对我来说非常有形成性

测试是我在卧室编码时不需要做的事情

我不需要源代码控制,因为它对我所做的项目来说太过分了

开发者无所不能,我们应该知道如何设计图标并做出令人敬畏的布局

Dispose 并不总是需要终结器

每当发生任何类型的错误时都应引发异常

异常是针对错误情况的,很多时候只返回一个指示失败的值是可以的。我最近开始理解这一点,我一直在说它并且仍然抛出异常更长的时间

我可以编写一个完全没有错误的应用程序

于 2009-05-27T11:43:50.380 回答
6

我曾经认为Internet Explorer 6 盒子模型是 MS 想出的一个邪恶愚蠢的想法,只是为了破坏与其他浏览器的兼容性。

许多 CSSing 让我相信它更合乎逻辑,并且可以使页面设计维护(更改块填充/边框/边距)更加容易。

想想物理世界:改变 A4 页面的内边距或边框宽度不会改变页面宽度,只会减少内容的空间。

于 2010-06-24T10:20:29.087 回答
6

唯一的本地化/国际化问题是翻译信息。

我曾经认为所有其他语言(我没有语言环境的概念)在所有方面都像英语,除了单词和语法。因此,要将软件本地化/国际化,您只需要让翻译人员翻译显示给用户的字符串即可。然后我开始意识到:

  • 有些语言是从右到左书写的。
  • 一些脚本使用上下文塑造。
  • 日期、时间、数字等的格式存在很大差异。
  • 程序图标和图形对某些人群来说可能毫无意义或令人反感。
  • 有些语言有不止一种“复数形式”。
  • ...

即使在今天,我有时也会读到令我惊讶的国际化问题。

于 2010-12-19T18:26:43.780 回答
5

我曾经认为我是一个非常好的程序员。担任该职位 2 年。

当你在真空中工作时,很容易填满房间:-D

于 2009-05-21T14:47:55.323 回答
5

现在流行的 $ 符号作为 java/javascript 标识符的一部分是非法的。

于 2009-05-21T14:50:42.353 回答
5
  • 编程语言 == 编译器/解释器
  • 编程语言 == IDE
  • 编程语言 == 标准库
于 2009-05-20T17:31:18.807 回答
5

“这次会成功的”

于 2011-03-23T00:21:44.060 回答
5

我的学校教育将为我在该领域的工作做好准备。

于 2009-10-12T22:08:45.703 回答
5

认为我了解编程中某种语言/主题的一切。只是不可能。

于 2009-05-21T21:05:58.930 回答
5

C++ 是最酷的语言!

于 2009-05-22T18:15:23.813 回答
5

订阅许多 RSS 提要、阅读许多博客和参与开源项目非常重要。

我意识到,真正重要的是我花更多的时间在编码上。我有阅读和关注许多博客的习惯,虽然它们是丰富的信息来源,但实际上不可能吸收所有内容。平衡阅读非常重要,并且更加注重实践。

注册。开源的,恐怕不会流行。我曾尝试参与开源,其中大部分是 .NET。我很震惊地看到许多开源项目甚至没有遵循正确的架构。我在 .NET 中看到一个系统没有使用分层架构,并且数据库连接代码到处都是,包括背后的代码,我放弃了。

于 2009-05-25T09:19:36.597 回答
5

由于性能问题,像 Java 和 .NET 这样的虚拟机架构对于除了玩具项目之外的任何东西基本上都毫无价值。

(好吧,公平地说,也许这在某些时候是真的。)

于 2009-05-21T23:36:25.163 回答
5

经理们知道他们在谈论什么。

于 2009-05-28T02:54:31.243 回答
5

学习语言只是学习语法,以及标准库中最常见的部分。

于 2010-04-03T21:00:19.960 回答
5

字节码解释语言(如 C# 或 F#)比那些直接编译为机器代码的重置按钮慢。

好吧,当我开始相信(在 80 年代)时,这是真的。然而,即使在 C# 中——有时我有时想知道“将内部循环放入 .cpp 文件是否会使我的应用程序运行得更快”)。

幸运的是,没有。

可悲的是,我几年前才意识到这一点。

于 2010-07-12T16:02:07.737 回答
4

我需要在函数开始时定义我将在函数中使用的所有变量(Pascal 风格)。

我曾经认为我需要在开始编码之前考虑我的函数要使用的所有资源并定义它们,这可能是因为我的第一语言是 Pascal,这是我的要求。然后,当我移至 C 语言时,我将定义仅在这些循环之外的循环内使用的临时变量,而不考虑循环内范围,以便“一切都将在开始时定义”。

我花了几年的时间才明白,提前定义所有资源并不是一头牛,而且范围界定本身对于代码的可读性是极其重要的。

于 2009-08-28T07:46:29.503 回答
4

假设我要使程序 100% 完整且没有错误,并将其报告为“已完成”。有时公司想在有很多错误时发布程序以首先获得市场份额。

于 2009-05-20T19:25:18.733 回答
4

在我完成 CS 学校后,我可以开始工作并将我在学校学到的知识用于实际应用。(我真的希望我不会浪费 4 年的时间来学习操作系统和序言)

于 2009-05-20T19:29:02.300 回答
4

人们会关心最佳实践,甚至是一致性。

于 2009-06-19T12:50:28.767 回答
4

每个人都想为一个问题生成最好的\最适合的代码......

于 2009-05-22T15:49:55.907 回答
4

总有一种“正确”的做事方式。离开大学后,我坚持这个假设太久了。

当然,我开始意识到,完成一项任务总是有很多方法。每种方法总是有优点和缺点。查看可用的信息,做出决定,然后确保你可以向你的老板证明它的合理性。

于 2011-02-03T12:57:33.830 回答
4

该ASCII以与二进制不同的方式存储

于 2009-05-21T21:09:44.180 回答
4

我可以花几天时间尝试减少我的业务层使用的内存量,只是后来才意识到我的项目的 WinForms (GUI) 使用的内存是应用程序其余部分的 4 倍。

于 2009-05-20T18:22:05.087 回答
4

SQL WHERE 子句中整数的按位比较在查询性能方面实际上是免费的。

碰巧的是,对于前 50 万行左右,这在某种程度上是正确的。在那之后,它被证明是非常无联合国的。

于 2009-05-21T00:21:58.073 回答
4

很长一段时间(大约 5 年),我认为 PHP 很摇滚。

我以为我知道算法。然后我加入了 Topcoder.com

于 2009-05-21T05:10:49.520 回答
4

早期,大多数个人计算机都有用于加载和存储程序的盒式磁带接口。当时我没有电脑,但我可以阅读所有与电脑有关的东西(主要是杂志)(这是 70 年代后期 - 我没有互联网)。出于某种原因,我的印象是程序是直接从盒式磁带执行的,而计算机拥有任何 RAM 的唯一原因是在程序运行时存储变量。我想当代码必须执行跳转指令时,它会以某种方式倒带或将磁带推进到正确的位置并从那里继续。

于 2009-05-22T00:23:36.037 回答
4

其他人都在使用最新最好的技术,而我的团队是唯一一个使用劣质过时工具的人。(神秘的cobol恐龙除外)

于 2009-05-22T09:36:31.277 回答
4

也就是说,作为我编写的代码的所有者,我是唯一应该理解或触摸它的人。

于 2009-05-23T13:22:50.583 回答
4

替代文字 http://images.despair.com/products/demotivators/teamwork.jpg

于 2009-07-29T10:39:47.293 回答
4

这种编程是为初级人员准备的,最好的项目经理是不会编程的人。

于 2010-04-17T21:41:11.517 回答
4

当我第一次听说“鸭子打字”时,我认为实际上是“管道打字”,类似于人们常说的鸭带。“鸭子打字”听起来是错误的,而“管道打字”有一种奇怪的感觉(拼凑在一起的类型)。

于 2010-04-03T21:25:03.307 回答
4

你永远不会完成你没有开始的项目。

看起来真的很愚蠢,但我推迟了这么多项目,因为规模简直是压倒性的。刚刚完成了一个项目的怪物,我意识到如果我意识到它的范围,我永远不会开始。但实际上,即使是最复杂的系统在分解成离散和定义的部分时也非常简单。然而,从宏观层面来看,它很快就势不可挡。

于 2010-06-14T20:23:06.713 回答
4

不熟悉 SQL 和关系数据库的程序开发人员/程序员不需要任何正式培训或了解如何使用和/或使用 SQL,并且快速阅读SQL For Dummies之类的内容就足以使用关系数据库像OracleSQL Server

在处理存储在 Oracle 和 SQL Server 等关系数据库中的数据的应用程序中,很多错误往往是由于缺乏理解或如何使用关系数据库的语言造成的;SQL

我曾经为一家软件供应商工作,他们认为开发人员所需要的只是 SQL For Dummies 书或类似的东西,他们将完全有能力处理任何关系数据库问题。现在这家供应商的客户拥有数百 GB 的数据库,这种 SQL 知识的缺乏正在以负面的方式重新出现。问题不仅是查找和/或更新和插入性能不佳,而且数据库本身的实际设计才是真正的障碍。

如果当时开发负责人能够像对待构建应用程序所用的语言一样尊重 SQL 和关系数据库,那么现在所有这些都可以避免并导致成本大大降低。

不要认为 SQL 不重要,因为它最终会回来困扰你。您可能可以暂时摆脱它,甚至数年,但您最终会达到一个临界点,如果不完全重新设计数据库,您就无法取得进展,那是成本最高的时候。

于 2010-07-12T16:04:03.613 回答
4

回到我的 C++ 时代的开始(很久以前),我被 Java 学者包围着。当被问及 C++ 相对于 Java 的优势时(通常是一个我试图将其视为做作而忽略的问题,但你去了),我会在我的回答中包含 C++ 给你的引用指针。Java 的人会看起来难以置信,并建议引用指针,然后把我笑出房间。我坚持认为引用和指针在 C++ 中是不同的。

而且,公平地说,我是对的。引用和指针在语义和句法上是不同的。不幸的是,我用一个谬误来支持我的主张:底层实现是不同的。

我坚信,通过标准化,引用是语法中的名称别名typedef,就像 a是没有存储的类型别名一样。

我确信引用不是对象并且没有存储空间,它们只是提供了“名称”到“对象”的多个顶级映射。在这方面,我认为它们就像文件系统中的软链接

Code: int a = 3; int& b = a;

 Names          Objects           Memory

+-----+     +-------------+     +-------+
|  a  |---->|             |     |       |
+-----+     |             |     |       |
            |     int     |---->|   3   |
+-----+     |             |     |       |
|  b  |---->|             |     |       |
+-----+     +-------------+     +-------+

当然,虽然优化可能会导致这种情况,但引用确实有存储空间。它们是不同的对象,即使语法尽力将其从程序员那里抽象出来。

可以这么说,我很失望地得知关闭优化的编译器可能将引用实现为指针,需要取消引用操作:我实际上是在创建文件系统中的硬链接的类比:

Code: int a = 3; int& b = a;

 Names          Objects           Memory

+-----+     +-------------+     +-------+
|  a  |---->|     int     |---->|       |
+-----+     +-------------+     |       |
                                |   3   |
+-----+     +-------------+     |       |
|  b  |---->|     int&    |---->|       |
+-----+     +-------------+     +-------+

标准 C++ 实际上并没有指定应该如何实现引用,所以我的理论可能适用于某些工具链,但它在任何主流编译器中都没有……而且标准中肯定没有说明。

于 2011-03-23T00:48:49.630 回答
3

C/C++ 中 if 语句的评估顺序是特定于编译器的。所以写:

if ( 指针 != NULL ) && ( 指针->doSomething() )

不安全,因为可以交换评估顺序。我最近发现(经过多年的撒谎),它是 ANSI-C 规范的一部分,您可以保证订单及其完全安全。

詹姆士

于 2009-06-10T15:08:06.290 回答
3

其他人会像我一样被已知的错误所困扰,并将修复它们作为项目工作的优先事项。

于 2009-08-31T13:01:04.683 回答
3

在学校,你被教导编程是“读取输入、处理数据、写入输出”。实际上,很少有处理步骤——大多数编码只是“读取输入,输出”

通常,它要么是“从用户读取,写入数据库”,要么是“从数据库读取,显示在屏幕上”。这两个案例涵盖了您将要做的大约 95% 的工作。

于 2009-06-19T12:49:09.250 回答
3

通过实现客户想要的来满足客户 - 不幸的是,这意味着客户知道他想要什么。

于 2009-06-19T12:49:32.153 回答
3

代码越少越好。现在我知道,如果代码更容易阅读/理解,有时值得拥有更多代码行

于 2009-06-19T12:50:40.403 回答
3

在我的计算机科学课程中教授的卡诺图编程中,我永远找不到实际用途。

于 2010-01-04T10:29:29.220 回答
3

事实证明,在 Linux 下检查内存分配是否返回引用并不重要,因为它实际上会欺骗你,或者在将来的某个时间实际分配内存,或者如果没有,则完全中止你的程序有你需要的内存。

于 2009-05-20T19:42:19.683 回答
3

从大学时代开始,我就认为自己是编程大师。因为我可以编码,但其他人不能。但是当我加入一家公司时,我对自己对基础知识的无知感到震惊。我对自己的所有假设都被证明是错误的!现在我知道我需要知道什么和我不知道什么!

于 2009-05-21T07:08:52.350 回答
3

Python 是一种不切实际、令人讨厌的语言(我仍然可以阅读一些关于我早期代码的评论,抱怨它),而 C++ 是唯一真正的面向对象语言。

我错了,我仍然感到羞愧。

于 2009-07-29T10:22:16.697 回答
3

我持有时间最长(因此代价最高)的错误假设是:“业务的要求是理智和合理的,我只是还没有理解它们。”

墙上有 100 个绿色假设,
如果一个绿色假设意外倒下,
那么墙上就会有 99 个绿色假设。

交替:

矮胖子坐在墙上。
矮胖子摔倒了,
所有国王的马和所有的国王男人,
埃菲姆说,他只是个技术人员。

于 2009-05-23T05:11:15.130 回答
3

我一直认为任何为任何语言编写任何代码的人都会使用编辑程序。

我和我的一个客户一起工作,他让我主要是作为支持,并为他写一些更复杂的东西。有一天,他搞砸了一个文件,很重要。他不小心保存了自己的三个多小时的工作,当我问他为什么不经常保存时,他回答说:“因为我还没有完成”。当然,这不是一个可以接受的答案,我又戳又戳了一点。我最终发现他从未使用过任何编辑程序,永远!甚至没有notepad.exe!他一直在使用在线 CPanel 编辑器来编辑文件!它甚至没有“查找”功能。他在完成之前无法保存,因为他正在编辑网站上的实时文件!

不用说我大吃一惊,他至今仍在使用 CPanel 编辑器...

于 2009-05-22T09:31:47.183 回答
3

我不需要快速重构面向对象的代码。马丁福勒终于睁开了我的眼睛。

于 2010-01-04T09:41:26.870 回答
3

OOP 的好处是您可以重用对象,而实际上它是通过创建具有相同接口的新对象来重用其余代码。

实际上,对象可能占代码的 2%,因此重用只会为您带来 2% 的好处。真正的好处是通过创建一个允许所有其他代码完全不同的新对象来重用其他 98% 的代码。现在您可以重用 98% 的代码。将某些东西写为对象所需的时间延长 3 倍,这是非常值得的。

例如,如果您有一个绘图程序并且突然想要绘制一个新形状,您只需更改 ShapeObject(同时保持界面相同)。程序中的其他任何内容都无需更改。

于 2009-10-13T01:30:41.787 回答
3

在上大学时(90 年代中期),他们的计算机实验室里只有 Windows 3.11 机器(我知道,奇怪的大学)。

有一段时间,我认为只有 Windows 平台与我作为一名专业程序员相关,而所有其他平台只是从历史学术角度来看才有趣。

从学校毕业并了解了现代 unix 和 linux 环境后,我不禁对我蹩脚的学校感到愤怒和失望。

我还不敢相信我在没有见过 bash shell 甚至没有听说过 emacs 或 vim 的情况下获得了计算机工程学位。

于 2009-05-21T07:17:31.443 回答
3

在不浪费一个字节或一个 CPU 周期的情况下编写高效的程序非常重要。

但有了更多的经验,它不是关于字节或 CPU 周期,而是关于你的思想流,连续的、不间断的,就像一首诗。

本质上,不要太努力。

于 2009-05-21T07:19:19.943 回答
3

学习正则表达式将节省您的时间

于 2009-05-22T17:43:57.653 回答
3

那,通过学习一门精确的科学,我不需要提高我有限的社交技能。

于 2009-05-23T13:05:04.100 回答
3

我会成为别人的富有的编程软件

于 2009-06-10T15:23:15.667 回答
3

那些测试只是拖延的另一种方法。

于 2010-04-03T20:59:12.803 回答
3

我通过阅读 K&R 自学了 C。不幸的是,我没有逐字阅读它,并且一定错过了一些东西。我编写了自己的 malloc 和 calloc 版本,我从一个工作到另一个工作都随身携带,因为我没有意识到你可以只链接到现有的库。我这样做了好几年,直到有人终于问我为什么要携带这些东西,“嗯......你确实意识到你可以链接到现有的图书馆,对吧​​?”

于 2010-11-23T15:02:31.200 回答
3

PHP 的 mysql_fetch_row 是从已执行的 SQL 查询中检索数据的唯一方法。

老实说 - 我在没有使用 mysql_fetch_array 的情况下编写了整个 Web 应用程序,并且每次我想更改函数以添加额外的列时都必须更改一堆数字。

于 2010-06-19T21:45:59.480 回答
2

这很尴尬,但很长一段时间以来,我一直认为嵌套我的方法调用或进行多个方法调用比在 C# 中创建一个变量来存储每个方法调用的值更节省内存。

于 2009-05-21T15:04:01.690 回答
2

不是坚持时间最长的,但在某个时间点和几年里,我:

  • 以为 Microsoft Windows 是世界上唯一的操作系统(那是 1992 年)
  • 了解 DOS 足以拥有“高级”操作系统知识。

这就是为什么我在高中没有选择“计算机课程”的原因。我以为我对计算机已经足够了解了。

后来在大学里,出于我的错误:

  • 我认为 UNIX 操作系统/程序是完美的,而 DOS/Windows 永远不会接近它(当时它看起来如此真实,我想 Linus 也这么认为,这就是为什么 Linux 与 UNIX 如此相似而不是类似的原因。 . 其他操作系统)

最后,很长一段时间,我认为:

  • 只有我的软件很烂,商业软件完美无瑕,因为……它是“商业”软件
  • 美国的软件/工程师/产品是卓越的同义词,其他任何东西都只是糟糕的尝试。
于 2009-05-21T18:32:56.807 回答
2

我摸索编程。通过研究 SICP 书,我发现我一无所知。至少现在我正在深入研究编程。

于 2009-05-20T19:24:34.023 回答
2

如果你看不懂我的代码,你就是不懂语言。我有一些代码审查,我试图反驳这一点。

花了几年的时间才知道有时间和地点可以让您的代码变得神奇,它在库中,而不是在应用程序中。该应用程序是为了清晰和可读性。最好在隐藏在扩展方法和框架之后使用魔法。

于 2009-05-20T17:28:29.297 回答
2

代码行越多,软件就越好。

于 2009-06-03T19:19:49.613 回答
2

我从没想过我会成为一名专业的程序员,我以为我会从事电子工作。但最后,编程变得容易得多,而且报酬也高得多,以至于开始作为副业的工作成为了我的主要工作。

于 2009-06-19T12:48:45.117 回答
2

我最大的先入之见是我会被允许以我想要的方式编程。然后我当然离开了大学,被一家拥有荒谬的框架、规则和程序的公司雇用,这不仅意味着我没有按照我想要的方式编程,而且意味着我的编程很糟糕

于 2009-06-19T12:49:56.987 回答
2
  • 我以为我会连续编码 8 个小时。实际上,我每天有 4 小时的编码时间,1 小时的午餐时间,1 小时的茶歇时间,以及 2 小时的闲聊/闲聊/堆叠。

  • 在工作之前,我以为所有的客户都是白痴,不知道两个关于计算机的废话。男孩,我错了。有时,我们得到比我们做得更好的人的项目,他们只是没有时间去做。

  • 我认为隔间很糟糕,现在我喜欢它们:DI 实际上从有门的办公室搬到了隔间。我喜欢开放性。

  • 所有程序员都不是运动型的。我以为我是唯一一个去健身房的人。在我工作的地方,我们至少有 10 个人每天早上 5 点去健身房。

  • 我以为不会有女程序员。我们的一些线索是女士。

于 2009-06-19T12:57:53.167 回答
2

那些营销人员关心你的工作。

于 2009-06-10T15:34:39.450 回答
2

你需要一个客户规范来完成一个项目。很多时候,您都是从销售会议和记事本开始的。当然,在会议结束时,他们希望有一个截止日期,“只是大致了解一下”。

于 2009-06-10T15:40:58.487 回答
2

您可以在其构造函数中 memset( this, 0, sizeof(TheObject) ) 一个 C++ 对象,而不会产生负面影响

于 2009-06-08T02:18:57.543 回答
2

那....当断点有效时谁需要 JUnit 测试?(在调试模式下测试应用程序时)。后来才知道为什么......

于 2010-07-12T19:16:21.207 回答
2

不知何故,一家经营着大量相当高知名度/高流量网站的公司实际上知道他们在做什么。结果他们在很大程度上是一无所知,并且非常幸运地处于他们所处的位置。所以我想道德是,

扎实的软件工程和最佳实践!=商业成功

或者....

最关键的软件系统 == 废话

于 2009-05-21T13:25:11.513 回答
2

Java 将对象的副本传递给函数,而不是引用。

换句话说,我认为如果您将一个对象传递给一个方法,然后以某种方式更改该对象,它不会更改调用范围内的对象。我总是将对象传递给方法,操作它们,然后返回它们!

于 2009-07-05T01:35:26.403 回答
2

总是没有足够的时间在截止日期之前完成它。

于 2009-05-23T09:49:39.470 回答
2

我可以让传统的程序程序员相信为什么 OOP 经常提供更好的解决方案。

也就是说,描述世界的语言需要描述复杂对象及其关系的能力。

争论通常包括关于抽象类的废话,我的回答是“并非所有 OOP 程序员都是刚从 Uni 毕业并且仍然痴迷于抽象”。或者经典的,“在 OOP 中没有什么是我不能用严格的过程编程做的”,我通常回答说,“不是你可以,而是如果你有更广泛的工具集你是否愿意” .

我已经学会了接受他们不会通过与我相同的镜头来看待世界。

于 2010-06-14T20:08:38.543 回答
2

所有 OOP 语言都具有相同的面向对象概念。

  • Java interface!= 方法的接口。
  • Java 接口是一种特定于语言的解决方案,可满足多重继承的需求。Ruby 的 mixins 试图解决同样的问题。
  • Javascript 中开箱即用的继承与 Java 实现继承的方式非常不同。
于 2009-05-20T16:17:50.750 回答
2

假设如果我写的代码真的很好并且尽可能没有错误,那是我能做的最好的事情。事实证明,有时经理们更喜欢那些试图成为他们最喜欢的人而不是做得很好的人。

于 2009-05-20T19:30:17.243 回答
2

与自动化相结合的编程优雅足以替代良好的老式测试。

于 2009-05-20T19:58:08.713 回答
2

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

于 2009-05-20T20:07:56.293 回答
2

我以为 Windows 3.1 只是一个玩纸牌游戏的平台。DOS 是 BASICA 的平台。

于 2009-05-22T02:20:16.690 回答
2

当您彻底测试了代码后,就不需要进行错误处理了。

于 2009-05-22T06:56:24.987 回答
2

WTF 始终是一个糟糕的专业人士的证据。

事实上,我最近一直意识到我在整个职业生涯中承诺了多少 WTF,但是当 StackOverflow 向我展示它们只是另一个软件指标时,我感到很欣慰。

于 2009-05-23T13:00:05.670 回答
2

这些变量实际上只是内存中特定区域的名称。

于 2009-05-23T13:18:34.960 回答
2

只有程序员可以轻松地创建一个成功的应用程序。软件还与易用性、美观、文档和适当的营销有关。软件开发是多学科的,失败的一门学科可能会使应用程序失败。

于 2009-05-25T09:59:06.860 回答
2

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

于 2009-05-27T17:19:29.360 回答
2

常见的不良假设:“代码质量是次要的”。更糟糕的假设:“代码质量根本不重要。”

代码质量可以是一个非常广泛的概念。我在这里非常彻底地讨论了它。

于 2009-05-28T20:12:44.817 回答
2

我一直认为,要成为一名优秀的程序员,就必须了解系统的所有内部工作原理。我很惭愧,在你开始编码之前,我不知道关于该语言的所有知识,比如它的库、模式、片段。好吧,我不再那么天真了。

于 2009-07-29T09:56:02.333 回答
2

这种简单性几乎总是胜过复杂性。KISS - 保持简单愚蠢的规则。

编辑:正如乔治在下面所说的那样,我把这个颠倒了。我的思绪一定在回复中迷失了。如果使用得当,简单几乎总能让你的代码变得更好。

于 2010-07-12T15:57:48.827 回答
2

临时解决方案不是永久解决方案
,或者换句话说:变通办法不是永远的:))。

于 2010-08-11T10:50:09.300 回答
1

You can't diagnose 'intermittent errors' in production. Rebooting the server is the only way to fix it.

Maybe is was MORE true in my early days of ASP coding. But there are a lot of good profiling tools to find memory leaks and other weird issues. Perfmon also provides lots of good diagnostic data. Plus you should be coding diagnostic logging into your application.

于 2009-05-21T22:52:18.047 回答
1

我原以为这将是一辆快车、松散的女人、私人飞机和大胆的冒险经历的过山车。等到我得到那个职业顾问的帮助......

于 2009-06-19T12:52:42.973 回答
1

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

于 2009-05-25T03:08:12.333 回答
1

选择和使用我们的开发方法是因为它们是同类中最好的。

然后我发现我们使用的工具对我们所做的事情、何时做以及我们如何做的影响比我想象的要大得多。

于 2009-06-03T21:01:56.320 回答
1

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

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

  • 只有汇总重要,而不是细节
  • 统计精度对于定位性能问题是必要的
  • 测量时间和定位不必要的耗时操作是一回事
于 2009-05-21T13:46:44.467 回答
1

Windows 中的线程很便宜。

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

于 2009-05-20T20:18:15.147 回答
1

标识列不能包含重复值: Sql server 中的标识列

于 2009-05-21T20:48:22.523 回答
1

规格齐全且充足

于 2009-07-04T20:45:35.567 回答
1

运行时性能很重要。通常,总解决时间很重要。

自从学习了 python,我就摆脱了对静态类型的依赖。

于 2009-05-21T06:45:14.047 回答
1

人们实际上关心正在使用的技术(开源/闭源)。

于 2009-06-09T08:30:43.907 回答
1

那个 OOP 已经过时了 :( 直到今天我仍然后悔这样想。

于 2009-05-22T17:40:14.150 回答
1

软件工程师对他们现在正在做什么或过去对您的软件做过什么总是诚实的。

于 2009-05-20T15:21:16.167 回答
1

学习一门全新的语言真的很难。

于 2009-05-21T04:15:33.727 回答
1

640K 对于任何人(DOS)都应该足够了。多年来,许多人普遍相信这一点。

我第一次拥有一个具有 8MB RAM 的系统时,我认为这远远超出了我的需要。它运行了操作系统(Mac)以及我正在使用的所有应用程序(Word、电子邮件、Firefox 等)。

于 2009-05-20T15:48:54.037 回答
1

在可预见的将来,我写的所有东西都会在某个时候失败。

并不是说一切最终都不会分崩离析,而是在我的编程教育早期,当我发现 try..catch 块时……我将所有东西都包裹在其中……如果它们失败了,那将代表更大的东西我的程序无法处理的问题(例如,北极和南极互换了位置)

于 2009-05-20T20:26:46.490 回答
1

我不知道 Javascript 中除以 0 的东西是 Infinity(IEEE 754 算术)。最近很难学会。

于 2009-05-21T07:23:51.557 回答
1

那是因为我在我的“标准”环境中构建了该软件,它可以在每个人的机器/服务器上运行。只是发现我安装了一些实际正在使用的不起眼的库和服务。然后发现我利用了一个错误,该错误随后被修补。

于 2009-05-21T22:20:38.623 回答
1

我知道要编写一个合适的 Web 应用程序,并且当我必须设计可以在所有浏览器中运行的东西时,我就很清楚了。

于 2009-05-22T06:41:01.517 回答
1

理解指针和递归将是非常困难的。

VB6 中的整数与.Net 的大小不同。

VB6 可以进行位级操作。

专业程序员制作没有错误的软件。

于 2009-05-22T14:14:27.457 回答
1

完整的 Unicode 支持是成功将软件部署到亚洲地区的先决条件。

于 2009-05-28T02:31:38.250 回答
1

我认为编写足够好的软件是一件容易的事

于 2009-05-28T03:24:51.200 回答
1

八十年代初,当我开始玩电脑(ZX81,内存为 1K)时,我花了几个小时从杂志上为游戏输入大量机器代码(字节,不是人类可读的汇编语言),基本上是使用 BASIC Poke 指令。

我相信,如果我错误地输入了一条指令,那么我将不得不回到开头并从头开始再次输入机器代码。

于 2009-06-10T06:06:16.290 回答
1

线程=进程

于 2010-08-11T11:30:58.943 回答
1

可以互换的 html 元素 id 和 name 属性。

事实证明,具有 'name' 属性的元素是相关的/used.referenced 用于 POST 等,而 'id' 属性用于 DOM 引用。

于 2010-04-17T22:23:10.327 回答
0

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

字段没有被覆盖,它们被遮蔽。

没有明确的 super.super 访问。

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

要获得对内部类父级的引用,您可以使用语法“Outer.this”来消除方法调用的歧义或进行同步。

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

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

于 2009-05-20T15:37:18.257 回答
0

初中学习算法时,我认为NPC只是非多项式问题,这意味着这个问题的复杂性并不比多项式更简单。直到我在大学里学习了计算理论,我才意识到我错了-_-b

于 2009-05-25T03:40:47.663 回答
0

当它们相等时,该维度 n 是维度 (n+1) 的一个实例。

于 2009-05-23T02:12:54.657 回答
0

那:

for (int i = 0; i < myObj.variable; i = i + 1)

被优化为:

int j = myObj.variable; 
for (int i = 0; i < j; i = i + 1)

哇,当我意识到它们每次都在运行时,我停止了代替 j 的函数调用!

原因:

for (int i = 0; i < myObj.variable; i = i + 1){ 
    if (function_argument == NULL){ 
        myObj.variable++; 
    } else { 
        printf("%d", myObj.variable);
    }
}

不一样:

int j = myObj.variable;
for (int i = 0; i < j; i = i + 1){ 
    if (function_argument == NULL){ 
        myObj.variable++; 
    } else { 
        printf("%d", myObj.variable);
    }
}

任意示例,但您可以看到优化将如何改变执行。

于 2010-12-14T19:21:35.613 回答
0

销售人员现实地管理客户的期望。(接受过承诺不足和过度交付方面的培训)

该软件需求通常来自市场研究。

于 2009-05-21T05:04:27.010 回答
0

他说他懂编程,一定是真的!

于 2009-05-21T07:34:17.027 回答
0

认为我是唯一一个编写一段代码的人......然后当我需要那个例程时,我不记得我做了什么,只需复制/粘贴我自己的代码。

现在,我知道每个人都这样做。

于 2009-05-23T13:50:16.053 回答
0

一个程序最终可以解决所有问题。

于 2009-07-29T10:29:47.710 回答
-1

@Kyralessa:值得注意的是,在大多数处理器上,在汇编/机器语言中,函数可能会返回调用者以外的某个地方,同时使堆栈保持良好状态。事实上,在很多情况下这都是有用的。我在 6502 上第一次看到的一个变体,虽然在 Z80 上效果更好,但它是一个打印消息例程,其中要打印的文本紧跟在调用指令之后。执行将在零终止符之后恢复(或者,作为使用 Z80 时的轻微优化,在零终止符处,因为让零字节作为 NOP 执行比试图避免它更便宜)。

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

于 2010-12-19T17:20:01.867 回答
-2

Java 很慢。slashdot regurgitate(sp???) 上有这么多 perl 粉丝,这很可悲。

于 2009-05-25T03:42:50.953 回答
-2

我将永远在 VB 中编程,我现在是 c#。

于 2009-06-10T14:57:30.307 回答