我正在研究初级(可能是高级)软件工程师的常见错误和不良假设。
最终纠正的最长假设是什么?
例如,我误解了整数的大小不是标准,而是取决于语言和目标。国家有点尴尬,但确实如此。
坦率地说;你有什么坚定的信念,大致你维持这个假设多久了?它可以是关于编程,编程语言或计算机科学的算法,语言,编程概念,测试或其他任何内容。答案 0 :(得分:545)
很长一段时间以来,我一直认为其他人都掌握了所有编程概念(设计模式,最新的新语言,计算复杂性,lambda表达式,你的名字)。
阅读博客,Stack Overflow和编程书籍似乎总让我觉得我在所有程序员必须直观地知道的事情上落后于曲线。
随着时间的推移,我意识到我正在有效地将我的知识与许多人的集体知识进行比较,而不是单个人,这对任何人来说都是一个相当高的标准。现实世界中的大多数程序员都拥有完成工作所需的知识库,并且有一些以上的领域是弱者或完全无知的。
答案 1 :(得分:308)
人们知道他们想要什么。
我认为我会与人交谈的时间最长,他们会描述一个问题或工作流程,我会把它放入代码并自动化。每当发生这种情况时,他们认为他们想要的并不是他们想要的。
编辑:我同意大多数评论。这不是技术上的答案,可能不是提问者所寻求的。它不仅适用于编程。我敢肯定这不是我最长时间的假设,但这是我在过去10年中所学到的最引人注目的事情。我确信这对我来说是纯粹的天真,但是我的大脑是这样的,并且我进入商业世界之前的教学和经历让我相信我会做我所回答的事情。我将能够使用代码和计算机来解决人们的问题。
我猜这个答案类似于Robin关于非程序员理解/关心我所谈论的内容的答案。它是关于将业务学习为敏捷,迭代,交互的过程。它是关于学习编程代码猴子和软件开发人员之间的区别。这是关于意识到两者之间存在差异,并且在该领域非常好,这不仅仅是语法和打字速度。
编辑:这个答案现在是社区维基,以安抚人们对这个答案感到不满,给我代表。
答案 2 :(得分:292)
我知道没有分析的性能问题在哪里
答案 3 :(得分:232)
我应该只有一个函数/方法的退出点。
答案 4 :(得分:228)
非程序员明白我在说什么。
答案 5 :(得分:219)
这个无错误的软件是可能的。
答案 6 :(得分:199)
私有成员变量对实例是私有的而不是类。
答案 7 :(得分:166)
我认为静态打字在你的键盘上非常稳定。
答案 8 :(得分:162)
在开始开发之前,您可以完全理解问题。
答案 9 :(得分:158)
聪明人总是比我聪明。
当我犯错误时,我可以真正打败自己,并经常被告知要自我贬低。我曾经对许多开发人员敬畏,并且经常认为,因为他们在 X 上比我知道的更多,所以他们比我更了解。
随着我不断获得经验并结识更多人,我开始意识到,虽然他们在特定主题中比我更了解,但他们不一定比我/你更聪明
故事的道德:永远不要低估你可以带到桌面上的东西。
答案 10 :(得分:131)
在最长的一段时间里,我认为糟糕编程是发生在边缘的东西......正确地做事是常态。这些天我不是那么天真。
答案 11 :(得分:113)
我认为我应该尽可能地进行抽象。由于太多交织在一起的功能,我受到了主要的打击。
现在我尝试尽可能保持简单和分离。重构一些抽象的东西比预测抽象的东西要容易得多。
因此,我从开发统一规则的框架转移到完成工作的功能片段。从来没有回头,除非我想起我天真以为我会成为下一个大事的人。
答案 12 :(得分:103)
女性认为计算机程序员很性感......
答案 13 :(得分:100)
软件质量将带来更大的销售额。有时会发生但并非总是如此。
答案 14 :(得分:82)
所有语言(大多数)都是平等的。
很长一段时间以来,我认为选择的语言并没有对开发过程的难度和项目成功的潜力产生太大的影响。这绝对不是真的。
为工作选择正确的语言与任何其他单一项目决策一样重要/至关重要。
答案 15 :(得分:81)
大评论/代码比率是一件好事。
我花了一段时间才意识到代码应该是自我记录的。当然,如果代码不能更清楚,或者有一个重要的原因,为什么要做的事情,这里和那里的评论是有帮助的。但是,一般来说,最好将评论时间用于重命名变量。它更清晰,更清晰,注释不会与代码“不同步”。
答案 16 :(得分:66)
编程是不可能的。
不开玩笑,我一直认为编程是一件不可思议的事情,我总是远离它。当我接近代码时,我永远无法理解它。
然后有一天,我坐下来阅读一些基本的初学者教程,并从那里开始工作。今天我作为程序员工作,我喜欢它的每一分钟。
另外,我认为编程很简单,这是一个挑战,我喜欢学习更多,没有什么比解决一些编程问题更有趣了。
答案 17 :(得分:65)
“On Error Resume Next”是某种错误处理
答案 18 :(得分:64)
编程软件需要更高的数学基础。
在我开始编码之前的几年里,我总是被告知要成为一名优秀的程序员,你必须擅长高级代数,几何,微积分,三角等。
十年后,我只有一次不得不做八年级学生不能做的任何事情。
答案 19 :(得分:63)
优化==用汇编语言重写。
当我第一次真正理解汇编(来自BASIC)时,似乎使代码运行得更快的唯一方法是在汇编中重写它。花了不少时间才意识到编译器可以非常擅长优化,特别是对于具有分支预测等的CPU,它们可能比人类在合理的时间内做得更好。此外,花时间优化算法可能会比花时间从高级语言转换为低级语言更有利。而且,过早的优化是所有邪恶的根源......
答案 20 :(得分:63)
答案 21 :(得分:58)
我想说将日期的年元素存储为2位数是一个折磨整整一代开发人员的假设。在Y2K上吹来的钱非常可怕。
答案 22 :(得分:57)
除了插入/冒泡排序之外的其他任何东西都非常简单。
答案 23 :(得分:50)
该XML将是一种真正可互操作且易读的数据格式。
答案 24 :(得分:48)
C ++本质上比其他所有语言都要好。
这是我在大学提前几年从朋友那里收到的。我和我一起度过了一段令人尴尬的时光(我现在脸红了)。只有在与它合作2年左右之后才能看到它们的裂缝。
没有人 - 没有 - 是完美的,总有改进的余地。
答案 25 :(得分:47)
我相信创建程序的方式与课堂上的内容完全一样......你与一群人坐下来,解决问题,提出解决方案等等。相反,现实世界是“这是我的问题,我需要它解决,去”十分钟后你会得到另一个,让你没有时间有效地规划你的解决方案。
答案 26 :(得分:42)
我认为主流设计模式非常棒,当它们被引入CS类时。在那之前我已经编程了大约8年的爱好,而且我对如何创建良好的抽象我真的没有充分的理解。
设计模式感觉像魔术;你可以做真正的东西。后来我发现了函数式编程(通过Mozart / Oz,OCaml,后来的Scala,Haskell和Clojure),然后我才明白许多模式只是样板,或者是额外的复杂性,因为语言不够表达。
当然,几乎总会有某种模式,但它们在表达语言中处于更高的层次。现在我一直在使用Java进行一些专业编码,当我必须使用访问者或命令模式等约定而不是模式匹配和高阶函数时,我真的感到痛苦。
答案 27 :(得分:38)
我编程的最初几年我没有注意到1 Kbyte在技术上是1024字节,而不是1000.我的数据文件的大小似乎与我的略有差异,我总是有点困惑。期待他们。
答案 28 :(得分:36)
该条件检查如下:
if (condition1 && condition2 && condition3)
以未指定的顺序执行......
答案 29 :(得分:35)
如果单独执行,我的编程会更快更好。
答案 30 :(得分:31)
“该项目将在2周内完成”
和
“这需要2个小时才能实施”
答案 31 :(得分:30)
我可以在没有评论的情况下理解我自己的代码!!!
答案 32 :(得分:28)
我以为我需要它。
答案 33 :(得分:25)
像Python或Ruby这样的动态类型语言在某些方面不太适合在大型项目中使用。
答案 34 :(得分:25)
那些日子我作为新秀的一个假设是那些拥有更多年龄的人自动成为更好的开发者..
答案 35 :(得分:24)
这很令人尴尬,但是最长的时间我并没有真正理解引用类型和值类型之间的区别。我以为你必须使用ref关键字来改变另一种方法中的对象。
这是我应该知道的最基本的C#概念之一。
答案 36 :(得分: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行中进行了一次tic-tac-to游戏! 那时我非常高兴,直到我在互联网上找到了150行的井字游戏。然后意识到我是个白痴,重新开始。
答案 37 :(得分:20)
编程很简单。
答案 38 :(得分:20)
Unix和Linux操作系统设计得很好......我应该有资格(!)
首先,这种反真理的观点得到了改善:
可能更确切地说,他们 设计得好/做得好,而且肯定是其中的一部分,但即使这只是一个相对判断,相对于一些可怕的Windows版本。以下是一些做得很糟糕的例子:
这并不全是坏事。 Linux在政治上更好,而且没有受到业务需求的破坏,但遗憾的是,在很大程度上,许多技术领域已经失去了。
答案 39 :(得分:19)
好的,我很早就学会了编程。我14岁左右。我持有各种疯狂的信念,但不要问我精确的时间,因为那是......很久以前。
好的,所以,我相信有一段时间,如果你在Java中使用术语同步,那么Java会为你解决这个同步的问题
我相信至少半年,可能更多,静态打字会改善表现。
我相信释放一些东西会将记忆恢复到操作系统。
我相信malloc调用可以归结为检查操作系统上是否有足够的可用空间,因此malloc会很便宜。
我想了很久,Java的构建充分考虑了其他语言的所有优点和缺陷,成为一种“完美融合”,可以获得其他语言的最佳属性并拒绝错误。< / p>
我大大高估了LinkedLists胜过ArrayLists的案例数。
我认为NP-硬度证明没有任何INSTANCE可以有效解决,这在一段时间内是微不足道的。
我认为在旅行社网站上找到最好的飞行计划需要很长时间,因为“旅行推销员问题”,因为我自豪地向我的亲戚笑了(当我小的时候,好吗?!)
可以拿出更多。不知道我坚持了多久。遗憾。
PS:
啊,好吧,这个问题得到的解决不是那么缓慢,但是我看到新手不时地这样做,所以我觉得你可能会感兴趣:我还认为要存储不确定数量的东西,你需要申报每个的新变量。所以我创建变量a1,a2,a3,...,而不是使用一个变量a,我将其声明为一个向量。
答案 40 :(得分:19)
当我从大学毕业后第一次开始时,我希望更多高级开发人员知道他们在做什么。男孩我错了......
答案 41 :(得分:18)
我曾经相信应用程序的大多数工作实际上是编程。我确信在某些情况下这是正确的,但根据我的经验,我花费更多的时间来研究,记录,讨论和分析,而不是实际编码。 (我研究的是运行基于激光的传感器的软件,确定如何最好地控制硬件比编写代码更具挑战性。)
我过去常常认为开放的环境中程序员可以俯视他们并向他们旁边的人(通常)询问一个问题,这是一个程序员团队制定解决方案的最佳环境。事实证明,一个黑暗的孤独的房间更有效率,团队或没有团队。
当我毕业时,我认为专业编程就像在大学编程一样,这意味着我将获得输入和预期输出,并要求填写进行转换的黑匣子。实际上,我必须弄清楚输入,输出和黑匣子。
我不习惯认为营销和销售人员是人类的祸害,太天真了。
答案 42 :(得分:18)
这是一个9-5的工作
答案 43 :(得分:17)
在上线之前可以无缺陷。
绝对不是这样,即使P2缺陷有时也会被打开。
答案 44 :(得分:17)
代码审查是浪费时间。
从一家完全可选的公司搬到强制要求的公司(甚至是经过审计的公司),我逐渐了解它们的用处。对代码有第二眼,即使是最琐碎的部分,也可以:
A )当你搞砸了一些微不足道的事情时,你会感到尴尬(例如,一个简单的代码审查会阻止我们在我以前的工作中向我们的客户发送数百封电子邮件)
B )可以教你最初不知道的事情(我现在的工作中学习新的图书馆 - 不可避免地在一家大公司,有人已经偶然发现你遇到的问题,并且做得更好,解决它 - 这只是知道在哪里看的问题)
C )至少要确保自己以外的其他人知道事情是如何运作的。
最后,我对我提交的代码感到高兴,而不是以前的工作,尽管当时我认为我知道一切:)
答案 45 :(得分: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
答案 46 :(得分:16)
与UNIX相比,NT操作系统的设计存在缺陷。事实证明,NT内核和设计决策与任何类似现代UNIX的系统都非常相似,而且你在内核中遇到的大多数问题都是由有缺陷的公司编写的第三方错误驱动程序造成的。
答案 47 :(得分:15)
.NET结构(C#和VB.NET)是引用类型,就像类一样。
我在.NET 1.0到达现场之前或之后的某个时刻“收到”了那段智慧(我不知道从哪里来,它可能从我的脑海中浮现出来,就像宙斯的眉毛中的雅典娜一样并且保留它直到大约4个月前Jon Skeet对这个概念的消除。
感谢Jon。
P.S。没有编程相关,但我也相信(直到大约5分钟前)“阿波罗从宙斯的眉头中蹦出来”。
答案 48 :(得分:15)
字节和字符实际上是相同的 - “ASCII”只是将字节值映射到屏幕上的字形的一种方式。
阅读Unicode真的让我大开眼界(虽然我还是不完全理解它)。
答案 49 :(得分:15)
我是一名优秀的程序员!
答案 50 :(得分:14)
我曾经认为它足以编写Win32应用程序。
此外,每个程序都必须带有GUI,因为命令行是“过时的”。
答案 51 :(得分:14)
有一天,我有一个现实的想法,需要多长时间来构建一些非常重要的代码/系统/无论如何。
答案 52 :(得分:14)
我可以阅读SO并完成任何工作。
答案 53 :(得分:13)
我认为我需要做的就是提高数据库性能,将数据库置于第3范式。
答案 54 :(得分:13)
这种面向对象始终是设计源代码的最佳方式,而且永远都是。
答案 55 :(得分:12)
这就是:
SomeClass object(initialValue);
和此:
SomeClass object = initialValue;
保证在C ++中是等效的。我认为第二种形式被保证被解释为好像它已被写成第一种形式。不是这样:请参阅C++ Initialization Syntax。
答案 56 :(得分:11)
我仍然遇到麻烦的一些事情是以下误解 - 即使我更好地了解,我仍然会尝试抓住它们:
答案 57 :(得分:11)
当我在TI-83上编程时,我认为你无法为自己分配一个变量。所以(忽略这是C代码,而不是TI-BASIC)而不是写
c = c + 1;
我会写
d = c + 1;
c = d;
当我了解+=
和++
时,它引起了我的注意。
答案 58 :(得分:11)
IDE会更快。
答案 59 :(得分:10)
我应该始终优化我的代码。这并不是说我在编写它之前不应该考虑它,但是我应该认真考虑如何从每个语句中挤出每一点性能,甚至到达牺牲可读性的程度。
答案 60 :(得分:9)
XML命名空间(或更糟糕的是,良好的形成)在某种程度上比没有它们时更难实现。
一个非常常见的错误,即使是在W3C!
答案 61 :(得分:9)
我的错误假设:虽然总有一些改进空间,但就我而言,我和我一样都是一名优秀的程序员。
当我第一次上大学时,我已经为C编程了6年,对“结构化编程”一无所知,认为“OO”只是一种时尚,并认为“男人,我很好!”
10年之后,我在想“好吧,那时候我还没有达到我想象的那么好...... 现在我得到了多态的想法以及如何编写干净的OO程序...... 现在我真的很好。“所以不知何故,我总是很好,但总是比以前更好地方式。
在那之后,便士不久就下降了,我终于有了“一些”的谦逊。总是有更多需要学习的东西(尚未用像Haskell这样的纯函数式语言编写适当的程序)。
答案 62 :(得分:9)
我想我已经10岁了,当有人说服我的计算机能够在3秒内运行无限循环时。
答案 63 :(得分:8)
在C ++中,很长一段时间我一直认为编译器在为纯虚拟方法提供定义时会拒绝你。
当我意识到自己错了时,我感到很惊讶。
很多时候,当我告诉别人为其抽象类提供纯虚拟析构函数的默认实现时,他/她会用大眼睛回顾我。我从这里知道,随后会进行长时间的讨论......似乎一种普遍的信念在C ++初学者中有所传播(我也认为自己也是......我现在还在学习!)
答案 64 :(得分:8)
至少6年来,我确信每个问题都有一个解决方案。
完全没有意识到具有不同复杂性,空间/时间权衡,OOP与功能与命令,抽象级别和不可判定问题的多种算法。当那幸福的天真破灭时,它开辟了一个充满无限可能的世界,只是坐下来建造东西,猛烈砸门。花了很长时间才弄清楚如何选择一个并运行它。
答案 65 :(得分:7)
作为一名老程序程序员,当我第一次开始使用Java编程进行业余爱好项目时,我并没有真正理解OO。在没有真正理解接口点的情况下编写了大量代码,尝试通过将所有内容强制转换为继承层次结构来最大化代码重用 - 希望Java在事物不适合清理到一个层次结构时具有多重继承。我的代码工作正常,但我现在对那些早期的东西不屑一顾。
当我开始阅读关于动态语言并试图找出一个好学习的语言时,阅读Python的重要空白让我失望 - 我确信我会讨厌它。但是当我最终学习Python时,它变成了我真正喜欢的东西。我们通常使用任何语言来努力以获得一致的缩进级别,但不会得到任何回报(视觉可读性除外)。在Python中,我发现在缩进级别方面我没有比以前更多的努力,并且Python处理了我在其他语言中使用大括号或其他任何东西时所做的事情。它让Python现在感觉更清洁了。
答案 66 :(得分:7)
天儿真好,
我只是在设计和编写代码。
没有要求收集,文档或支持。
欢呼声,
答案 67 :(得分:7)
答案 68 :(得分:6)
之前从未遇到整数提升... 并且认为'z'在此代码中将保持255:
unsigned char x = 1;
unsigned char y = 2;
unsigned char z = abs(x - y);
z的正确值是1
答案 69 :(得分:6)
OO不一定比非OO好。
我认为OO总是更好..然后我发现了其他技术,比如函数式编程,并且意识到OO并不总是更好。
答案 70 :(得分:6)
goto是有害的。
现在我们继续或休息。
答案 71 :(得分:6)
我最近发现在Hello World中执行了超过一百万条指令!我写的c ++程序。对于像单个cout声明一样简单的事情,我从来没有想过这么多。
答案 72 :(得分:6)
C ++是那里最酷的语言!
答案 73 :(得分:6)
不要使用高级特定于实现的功能,因为您可能希望“有时”切换实现。我一次又一次地这么做,而且几乎总是从未发生过这种转变。
答案 74 :(得分:6)
我是一个年轻的初出茅庐的开发者,希望能够专业地开展这项工作,因为这是我喜欢的,这是我曾经认为我通过简短经验学到的一系列意见错误
当你根本没有从逻辑中分离用户界面时,你最终会遇到的可怕混乱是可以接受的,并且每个人都在编写软件
没有太多的复杂性或抽象
一级一级的责任 - 我从来没有真正拥有这个概念,它对我来说是非常好的
当我在卧室编码时,测试是我不需要做的事情
我不需要源代码管理,因为它对我所做的项目来说太过分了
开发人员做了所有事情,我们应该知道如何设计图标并制作精美的布局
Dispose并不总是需要终结者
发生任何类型的错误时都应抛出异常
异常是针对错误情况的,并且很多时候只返回指示失败的值是可以的。我最近明白了这一点,我一直在说它并且仍然会抛出更长时间的例外
我写了一个完全没有错误的应用程序
答案 75 :(得分:6)
我们作为软件工程师可以理解用户真正想要的东西。
答案 76 :(得分:6)
更多评论更好。我一直试图让我的代码尽可能可读 - 主要是因为我几乎可以肯定是那个能解决这个问题的人。所以在过去的几年里,我曾经在评论段落之后加上段落。
最终我突然意识到,有一点需要更多的评论 - 无论结构如何整洁 - 没有增加任何价值,实际上变得很难维持。这些天,我采用了目录+脚注的方法,每个人都为此感到高兴。
答案 77 :(得分:6)
我曾经认为Internet Explorer 6 box model是一个邪恶的愚蠢想法MS只是打破了与其他浏览器的兼容性。
许多CSS确信我更合乎逻辑,并且可以使页面设计维护(更改块填充/边框/边距)变得更加容易。
考虑物理世界:更改A4页面的填充或边框宽度不会改变页面宽度,只会减少内容的空间。
答案 78 :(得分:6)
唯一的本地化/国际化问题是翻译消息。
我曾经认为所有其他语言(我没有语言环境的概念)在所有方面都像英语,除了单词和语法。因此,要对一个软件进行本地化/国际化,您只需要让翻译人员将显示的字符串翻译给用户。然后我开始意识到:
即使在今天,我有时也会读到让我感到惊讶的国际化问题。
答案 79 :(得分:5)
答案 80 :(得分:5)
我曾经认为我是一个非常优秀的程序员。担任该职位2年。
当你在真空中工作时,很容易填满房间:-D
答案 81 :(得分:5)
现在流行的$符号作为java / javascript标识符的一部分是非法的。
答案 82 :(得分:5)
认为我对编程中的某个语言/主题了如指掌。只是不可能。
答案 83 :(得分:5)
由于性能问题,除了玩具项目之外,像Java和.NET这样的虚拟机架构基本上没有价值。
(嗯,公平地说,也许在某些时候是真的。)
答案 84 :(得分:5)
订阅许多RSS源,阅读许多博客并参与开源项目非常重要。
我意识到,真正重要的是我花更多的时间进行编码。我有阅读和关注许多博客的习惯,虽然它们是丰富的信息来源,但却无法吸收所有内容。平衡阅读非常重要,并且更加注重练习。
注册。开源,我恐怕不会受欢迎。我曾尝试参与开源,其中大多数都是在.NET中。我很震惊地看到许多开源项目甚至没有遵循适当的架构。我在.NET中看到一个系统没有使用分层架构,并且数据库连接代码遍布整个地方,包括代码,我放弃了。
答案 85 :(得分:5)
经理们知道他们在谈论什么。
答案 86 :(得分:5)
我的学校教育将为我在该领域的工作做好准备。
答案 87 :(得分:5)
学习语言只是学习语法,以及标准库中最常见的部分。
答案 88 :(得分:5)
字节码解释语言(如C#或F#)比那些直接编译为机器代码的reset-button-hog慢。
好吧,当我开始相信时(在80年代),这是真的。然而,即使在C#中,我有时也会想知道“将内部循环放入.cpp文件会使我的应用更快”。
幸运的是,没有。
可悲的是,几年前我才意识到这一点。答案 89 :(得分:5)
“这次会工作”
答案 90 :(得分:4)
我可能花费数天时间来减少业务层使用的内存量,以后才意识到我项目的WinForms(GUI)使用的内存比应用程序的其余部分多4倍。
答案 91 :(得分:4)
假设我要使程序100%完成并且没有错误并将其报告为“已完成”。有时公司希望在有许多错误首先获得市场份额时发布该计划。
答案 92 :(得分:4)
在我完成CS学校之后,我可以开始工作并利用我在学校学到的知识来获取真实世界的应用。 (我实际上希望我不会浪费4年的时间学习操作系统和prolog)
答案 93 :(得分:4)
SQL WHERE子句中的整数按位比较在查询性能方面几乎是免费的。
碰巧,对于前五十行左右,情况有点如此。事后证明它非常无联合国。
答案 94 :(得分:4)
很长一段时间(大约5年),我认为PHP摇滚。
我以为我知道算法。然后我加入了Topcoder.com
答案 95 :(得分:4)
该ASCII以与二进制
不同的方式存储答案 96 :(得分:4)
在早期,大多数个人电脑都有一个盒式磁带接口,用于加载和存储程序。我此时没有电脑,但阅读了我可以拿到的所有东西(主要是杂志)与电脑有任何关系(这是70年代后期 - 对我来说没有互联网)。出于某种原因,我认为程序是直接从盒式磁带执行的,并且计算机有任何RAM的唯一原因是在程序运行时存储变量。我认为当代码必须执行跳转指令时,它会以某种方式将磁带倒回或推进到正确位置并从那里继续。
答案 97 :(得分:4)
其他人都在使用最新最好的技术,而我的团队是唯一一个坚持使用劣质过时工具的人。 (除了神秘的cobol恐龙)
答案 98 :(得分:4)
每个人都想为问题制作出最好的\最合适的代码......
答案 99 :(得分:4)
那,是我写的代码的所有者,我是唯一应该理解或触摸它的人。
答案 100 :(得分:4)
人们会关心最佳实践,甚至是一致性。
答案 101 :(得分:4)
答案 102 :(得分:4)
我需要在其开头(Pascal样式)中定义我将在函数中使用的所有变量。
我曾经认为我需要考虑我的函数使用的所有资源,并在开始编码之前定义它们,这可能是因为我的第一语言是Pascal,这就是要求。然后,当我转移到C时,我将定义仅在这些循环外的循环中使用的临时变量,忽略循环范围,只是为了“所有内容都将在开头定义”。
我花了几年时间才明白,提前定义所有资源并不是一头真正的牛,而且范围界定本身对编码可读性非常重要。
答案 103 :(得分:4)
当我第一次听到它时,我认为“鸭子打字”实际上是“管道打字”,类似于人们经常说鸭带的方式。 “鸭子打字”听起来不对,而“管道打字”却产生了一种奇怪的感觉(拼凑在一起的类型)。
答案 104 :(得分:4)
编程适用于青少年,最好的项目经理是无法编程的人。
答案 105 :(得分:4)
你永远不会完成你没有开始的项目。
似乎真的很愚蠢,但我推迟了这么多项目,因为规模太大了。刚刚完成了一个项目的怪物我意识到我从来没有开始,因为我意识到它的范围。实际上,即使最复杂的系统在分解为离散和定义的部分时也非常简单。然而,在宏观层面看,它很快就会压倒一切。
答案 106 :(得分:4)
不熟悉SQL和关系数据库的程序开发人员/程序员不需要任何正式的培训或了解如何使用和使用SQL,以及快速阅读 SQL For Dummies 之类的内容足以使用关系数据库,如 Oracle &amp; SQL Server 。
处理存储在关系数据库(如Oracle和SQL Server)中的数据的应用程序中的许多错误常常是由于缺乏理解或如何使用关系数据库的语言而引起的;的 SQL 即可。
我曾经为一个软件供应商工作,这个软件供应商的所有开发人员都需要的是SQL For Dummies书或类似的东西,他们可以完全适应处理任何关系数据库问题。既然这家供应商的客户拥有数百GB的数据库,那么SQL知识的缺乏就会以负面的方式回归。这不仅仅是糟糕的执行查找和/或更新和插入是一个问题,但数据库本身的实际设计是真正的障碍。
所有这些本来可以避免并且导致现在成本低得多,如果当时开发主管将SQL和关系数据库处理得与他们使用它们构建应用程序的语言相同的尊重。< / p>
不要将SQL视为不重要因为它最终会回来困扰你。你可能能够侥幸逃脱一段时间,甚至几年,但如果没有完全重新设计你的数据库,那么你最终会达到一个无法进步的突破点,那就是成本最高的时候。
答案 107 :(得分:4)
总有一种“正确”的做事方式。离开大学后,我坚持了这个假设。
当然,我意识到任务完成的方式总是很多。每种方法总有优点和缺点。查看可用的信息,决定,然后确保你可以向老板证明这一点。
答案 108 :(得分:4)
回到我C ++时代的开头(很久以前)我被Java学者包围了。当被问及C ++优于Java的优势时(通常是我试图解雇的问题,但是你去了),我在答案中包含C ++为你提供了参考和指针。 Java家伙会看起来不相信,并建议引用是指针,并笑出我的房间。我坚持认为C ++中的引用和指针是不同的。
而且,公平地说,我是对的。引用和指针在语义和语法上是不同的。不幸的是,我以谬误支持我的主张:底层实现是不同的。
我坚信,通过标准化,引用在语法中是 name aliases ,就像typedef
是没有存储的类型别名一样。
我确信引用不是对象而且没有存储,它们只提供了“name”到“object”的多个顶级映射。在这方面,我认为它们就像文件系统中的软链接:
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 ++实际上没有指定引用应该如何实现,所以我的理论可以适用于某些工具链,但它不适用于任何主流编译器......而且它在标准中肯定没有说明。
答案 109 :(得分:3)
原来,无论你是否检查内存分配是否在Linux下返回引用都没关系,因为它实际上谎言给你,并且在将来的某个时间实际分配内存如果没有你需要的记忆,你可以完全中止你的程序。
答案 110 :(得分:3)
从大学时代开始,我就认为自己是编程的主人。因为我可以编码,但其他人不能。但是当我加入一家公司时,我对基础知识的无知感到震惊。我对自己的所有假设都证明是错的!现在我知道我需要知道什么以及我不知道什么!
答案 111 :(得分:3)
在大学时(90年代中期),他们只在计算机实验室中安装了Windows 3.11机器(我知道,很奇怪的大学)。
有一段时间我认为只有Windows平台与我作为专业程序员相关,所有其他平台只是从历史学术角度来看才有趣。
从学校毕业并了解现代unix和linux环境后,我不禁对我的 lame 学校感到愤怒和失望。
我还不能相信我毕业时没有计算机工程学位而没有看到过bash shell,甚至没有听过emacs或vim。
答案 112 :(得分:3)
在不浪费字节或CPU周期的情况下制作高效的程序非常重要。
但是有了更多的经验,它不是关于字节或关于CPU周期,而是关于你的思想流,连续,不间断,就像一首诗。
基本上,不要太努力。
答案 113 :(得分:3)
我一直认为,任何编写任何语言代码的人都使用编辑程序。
我和我的一位客户一起工作,他主要是我的支持,并为他写了一些更复杂的事情。好吧有一天他搞砸了一个档案,很重要。他不小心挽救了超过三个小时的自己的工作,当我问他为什么不经常保存时,他回答说,“因为我没有完成”。当然,这不是一个可接受的答案,我戳了戳,并进一步推动。我最终发现他从未使用任何编辑程序,甚至!甚至没有notepad.exe!他一直在使用在线CPanel编辑器来存档!它甚至没有“查找”功能。直到完成后他才能保存,因为他正在编辑网站上的实时文件!
毋庸置疑,我大吃一惊,他至今仍在使用CPanel编辑器......
答案 114 :(得分:3)
学习正则表达式可以节省时间
答案 115 :(得分:3)
我持有的最长时间(也是最昂贵的)不正确的假设是:“业务的要求是合理的,我只是不理解它们。”
坐在墙上的100个绿色假设,
如果一个绿色假设应该意外地下降, 墙上有99个绿色假设。
可替换地:
矮胖的傻瓜坐在墙上 Humpty dumpty有一个很大的下降,
和所有的国王马和所有的国王男人,
埃菲姆说,他只是一个技术人员。
答案 116 :(得分:3)
通过学习精确科学,我不需要提高我有限的社交技能。
答案 117 :(得分:3)
C / C ++中if语句的评估顺序是特定于编译器的。所以写道:
if(pointer!= NULL)&amp;&amp; (pointer-&gt; doSomething())
不安全,因为可以交换评估订单。我最近发现(经过多年的喷射谎言)它是ANSI-C规范的一部分,你可以保证订单和它的完全安全。
詹姆斯
答案 118 :(得分:3)
我会成为别人的富有编程软件
答案 119 :(得分:3)
在学校,你被教导编程是“读输入,过程数据,写输出”。实际上,很少有处理步骤 - 大多数编码只是“读取输入,输出”
通常,它是“从用户读取,写入数据库”或“从数据库读取,在屏幕上显示”。这两个案例涵盖了你将要做的大约95%的工作。
答案 120 :(得分:3)
通过实施他想要的东西来满足客户 - 不幸的是,这意味着客户知道他想要什么。
答案 121 :(得分:3)
代码越少越好。现在我知道,如果更容易阅读/理解
,有时候有更多行代码是值得的答案 122 :(得分:3)
Python是一种不切实际的,令人烦恼的语言(我仍然可以阅读一些关于我早期代码的评论,抱怨它)和C ++唯一真正的面向对象语言。
我错了,我仍然感到惭愧。
答案 123 :(得分:3)
其他人会像我一样被已知的错误困扰,并会使他们优先于项目工作。
答案 124 :(得分:3)
OOP的好处是你可以重用对象,而实际上是通过创建一个新对象来重用代码的 rest 相同的界面。
实际上,对象可能是代码的2%,因此重用只会带来2%的好处。真正的好处是通过创建一个允许所有其他代码完全不同的新对象来重用其他98%的代码。现在您已经重用了98%的代码。值得把东西写成对象的时间要长3倍。
例如,如果你有一个绘图程序,并且突然有一个你希望能够绘制的新形状,只需更改ShapeObject(同时保持界面相同)。程序中的其他任何内容都不得更改。
答案 125 :(得分:3)
我不需要快速重构我的面向对象的代码。马丁福勒终于睁开眼睛了。
答案 126 :(得分:3)
我从未在计算机科学课程中教授Karnaugh maps的编程中找到实际用途。
答案 127 :(得分:3)
这些测试只是拖延的另一种方法。
答案 128 :(得分:3)
PHP的mysql_fetch_row是从执行的SQL查询中检索数据的唯一方法。
老实说 - 我在不使用mysql_fetch_array的情况下编写了整个Web应用程序,并且每次我想更改函数以添加额外的列时都必须更改数字串。
答案 129 :(得分:3)
我通过阅读K&amp; R来自学C语言。不幸的是,我没有逐字逐句阅读,一定是错过了一些东西。我编写了我自己的malloc和calloc版本,我随身携带着从一个工作到另一个工作,因为我没有意识到你只能链接到现有的库。我这样做了好几年,直到有人终于问我为什么要把这些东西包装起来,“嗯......你知道你可以在现有的库中链接,对吧?”
答案 130 :(得分:2)
所有OOP语言都具有相同的面向对象概念。
interface
!=方法的界面。答案 131 :(得分:2)
如果您无法阅读我的代码,您只是不懂语言。我有一些代码审查,我试图与之对抗。
花了几年的时间来学习有一个时间和地点,你的代码是神奇的,它在库中,而不是应用程序。该应用程序是为了清晰和可读性。隐藏在扩展方法和框架之后,最好使用Magic。
答案 132 :(得分:2)
我正在编程。通过研究SICP书,我看到我什么都不知道。至少现在我正在深入研究编程。
答案 133 :(得分:2)
假设我编写的代码非常好并且尽可能没有bug,这是我能做的最好的事情。事实证明,管理人员更喜欢那些试图成为他们最喜欢的人而不是做好工作的人。
答案 134 :(得分:2)
编程优雅与自动化相结合,可以替代良好的老式测试。
答案 135 :(得分:2)
我曾经认为我永远不会像MS开发人员这样的顶级开发人员编程,但现在我认为我可以编写相同的清洁代码甚至更好。
答案 136 :(得分:2)
以某种方式运营大量相当高调/高流量网站的公司实际上知道他们在做什么。结果他们在大多数情况下是无能为力的,并且非常幸运能够处于他们所处的位置。所以我想道德会是,
可靠的软件工程&amp;&amp;最佳实践!=商业成功
...或
最关键的软件系统==废话
答案 137 :(得分:2)
这很令人尴尬,但是最长的时间我认为嵌套我的方法调用或进行多个方法调用的内存效率要高于创建一个变量来存储C#中每个方法调用的值。
答案 138 :(得分:2)
没有持续时间最长,但在某些时候,我已经持续了几年:
这就是我在高中时没有选择“计算机课程”的原因。我以为我对计算机已经足够了解了。
后来在大学,出于我的错误:
最后,很长一段时间,我想:
答案 139 :(得分:2)
我认为Windows 3.1只是玩纸牌游戏的平台。 DOS是BASICA的平台。
答案 140 :(得分:2)
彻底测试代码时,不需要进行错误处理。
答案 141 :(得分:2)
总是没有足够的时间在截止日期前完成。
答案 142 :(得分:2)
WTF始终是不良专业人士的证据。
事实上,我最近一直在意识到我在整个职业生涯中承诺了多少WTF,但当StackOverflow向我展示they are just another software metric时,我感到很欣慰。
答案 143 :(得分:2)
这些变量实际上只是内存中特定区域的名称。
答案 144 :(得分:2)
只有程序员才能轻松完成创建成功的应用程序。软件还涉及易用性,外观,文档和适当的营销。软件开发是多学科的,失败的一门学科可能会使申请失败。
答案 145 :(得分:2)
适合系统编程的语言必须支持[可变]变量。
答案 146 :(得分:2)
常见的不良假设:“代码质量是次要的”。 更糟糕的假设是:“代码质量根本不重要。”
代码质量可以是一个非常广泛的概念。我彻底解决了这个问题here。
答案 147 :(得分:2)
代码越多,软件就越好。
答案 148 :(得分:2)
你可以在它的构造函数中memset(this,0,sizeof(TheObject))一个C ++对象而没有负面后果
答案 149 :(得分:2)
营销人员关心你的工作。
答案 150 :(得分:2)
您需要客户规范才能完成项目。更多时候,您可以从销售会议和记事本开始。当然,在会议结束时,他们想要一个截止日期,“只是棒球场”。
答案 151 :(得分:2)
我从未想过我会成为一名专业程序员,我以为我会使用电子产品。但最终,编程变得更加容易,并且付出了更多的代价,以至于作为一项副业开始成为我的主要工作。
答案 152 :(得分:2)
我最大的偏见是我可以按照自己想要的方式进行计划。当然,我离开了大学,受雇了一家公司,这家公司的框架,规则和程序都很荒谬,这不仅意味着我没有按照我想要的方式进行编程,而且意味着我正在编程非常
答案 153 :(得分:2)
我以为我会连续8小时编码。实际上,我每天有4个小时的编码,1个小时的午餐,1个用于喝咖啡休息时间,2个用于旋转/闲聊/堆叠上下流动。
在工作之前,我认为所有客户都是白痴,并且不知道两个关于计算机的骰子。那个男孩我错了。有时候,我们可以通过能够做得更好的人来获得项目,他们只是没有时间去做。
我以为小隔间很糟糕,现在我爱他们:D我实际上是从门口的办公室搬到了小隔间。我喜欢开放性。
所有程序员都没有运动能力。我以为我是唯一一个去健身房的人。在我工作的地方,每天早上5点我们至少有10个人去健身房。
我以为不会有女性程序员。我们的几个主角是女士们。
答案 154 :(得分:2)
Java将对象的副本传递给函数,而不是引用。
换句话说,我认为如果将对象传递给方法,然后以某种方式更改对象,它不会更改调用范围中的对象。我总是将对象传递给方法,操纵它们,然后返回它们!
答案 155 :(得分:2)
我一直认为,要成为一名优秀的程序员,必须了解系统的所有内部工作原理。我很惭愧的事实是,在开始编码之前,我不知道关于语言的所有内容,例如它的库,模式,片段。 好吧,我不再那么天真了。
答案 156 :(得分:2)
我可以说服传统程序程序员为什么OOP oft-times提供更好的解决方案。
也就是说,描述世界的语言需要能够描述复杂的对象及其关系。
参数通常包含关于抽象类的废话,我回答说“不是所有的OOP程序员都是Uni新鲜的,而且仍然沉迷于摘要”。或者经典,“你在OOP中没有什么可以做的,我不能用严格的程序编程”,我通常回答说,“这不是你可以,而是你是否 如果你有更广泛的工具集“。
我已经学会了接受他们不会通过我所做的同一个镜头来看世界。
答案 157 :(得分:2)
这种简单性几乎总是比复杂性更重要。亲吻 - 保持简单愚蠢的规则。
编辑:正如格奥尔格在下面说的那样,我得到了这一点。我的想法一定是在回复中迷失了。如果正确使用,简单性几乎总能使您的代码更好。
答案 158 :(得分:2)
那个......在断点有效时需要JUnit测试吗? (在调试模式下测试应用程序时)。我后来意识到为什么......
答案 159 :(得分:2)
临时解决方案不是永久解决方案 换句话说:变通办法永远不会:))。
答案 160 :(得分:1)
软件工程师总是诚实地告诉他们过去在做什么或者对你的软件做了什么。
答案 161 :(得分:1)
任何人(DOS)都应该足够640K。多年来,很多人普遍认为这一点。
我第一次使用8MB RAM的系统时,我认为这远远超过了我的需要。运行操作系统(Mac)以及我正在使用的所有应用程序(Word,电子邮件,Firefox等)。
答案 162 :(得分:1)
Windows中的线程很便宜。
事实证明这只是有点真实。一个线程有一定的开销,需要它自己的地址空间,它可以生存和快乐。因此,如果我发现自己在一个应用程序中处理了几十个线程,我会问自己如何简化并将所有内容整合到更少的线程中。
答案 163 :(得分:1)
在可预见的将来,我写的所有内容都会失败。
并不是说一切都不会崩溃,但是在我的编程教育的早期,当我找到try..catch blocks ...我把所有东西包在其中......如果他们失败的话会有代表了比我的程序处理的问题更大的问题(例如,北极和南极已经转换了位置)
答案 164 :(得分:1)
学习一门全新的语言真的很难。
答案 165 :(得分:1)
运行时性能很重要。总的解决方案时间通常很重要。
自从学习python以来,我已经从我对静态类型的依恋中断绝了自己。
答案 166 :(得分:1)
我不知道在Javascript中除以0的是Infinity(IEEE 754算术)。最近学到了很多。
答案 167 :(得分:1)
分析和性能分析是一回事。
然后我发现分析器虽然总比没有好,却包含错误的假设,例如:
答案 168 :(得分:1)
标识列不能包含重复值: identity column in Sql server
答案 169 :(得分:1)
因为我在我的'标准'环境中构建了软件,所以它适用于每个人的机器/服务器。只是发现我安装了一些实际上正在使用的模糊库和服务。然后发现我利用了一个随后修补过的bug。
答案 170 :(得分:1)
您无法诊断生产中的“间歇性错误”。重新启动服务器是修复它的唯一方法。
在我编写ASP代码的早期,也许更为真实。但是有很多很好的分析工具可以找到内存泄漏和其他奇怪的问题。 Perfmon还提供了许多良好的诊断数据。此外,您应该将诊断日志记录编码到您的应用程序中。
答案 171 :(得分:1)
我知道要编写一个合适的Web应用程序,并且当我必须设计适用于所有浏览器的东西时它都很清楚。
答案 172 :(得分:1)
理解指针和递归会很难。
VB6中的整数大小与.Net不同。
VB6可以进行位操作。
专业程序员制作无错误的软件。
答案 173 :(得分:1)
那个OOP已经过时了:(直到今天,我仍然后悔当时。
答案 174 :(得分:1)
如果我有一个像ML或Haskell那样强大的静态类型系统,我应该用它来编码尽可能多的不变量。只有经验,我才知道有时候让不变量变得动态更好。
答案 175 :(得分:1)
完整的Unicode支持是成功将软件部署到亚洲地区的先决条件。
答案 176 :(得分:1)
我认为编写足够好的软件是一件容易的事情
答案 177 :(得分:1)
我们选择并使用了我们的开发方法,因为它们是最好的。
然后我发现我们使用的工具对我们所做的工作,工作时间以及我们的工作方式产生了更大的影响。
答案 178 :(得分:1)
人们实际上关心所使用的技术(开源/封闭源)。
答案 179 :(得分:1)
八十年代初,当我开始使用计算机(带有1K内存的ZX81)时,我花了几个小时为杂志中的游戏输入大量的机器代码(字节,而不是人类可读的汇编语言),主要是使用BASIC戳指示。
我相信如果我输入的指令不正确,那么我必须回到开头并从头开始再次输入机器代码。
答案 180 :(得分:1)
我认为它将成为快车,宽松女性,私人喷气式飞机和大胆冒险的过山车。等到我得到那个职业顾问的时候......
答案 181 :(得分:1)
规格齐全且充足
答案 182 :(得分:1)
那是一个可互换的html元素id和name属性。
事实证明,具有'name'属性的元素与POST等相关/ used.referenced,'id'属性用于DOM引用。
答案 183 :(得分:1)
thread = process
答案 184 :(得分:0)
当然你可以看看FindBugs和PMD但这些是我最喜欢的问题和技巧(所有Java):
字段未被覆盖,它们被遮蔽。
没有明确的super.super访问权限。
没有定义构造函数的类具有隐式零参数构造函数。我今年做了一个与此相关的实际错误。
要获取对内部类父级的引用,可以使用语法“Outer.this”来消除方法调用的歧义或同步。
类在C ++术语中是“他们自己的朋友”,该类的任何实例的私有方法和字段都可以从同一个类的任何方法引用,甚至是静态方法。这会使我的早期clone()和复制构造函数更加简单。
受保护的方法和字段在扩展类的静态上下文中是可访问的,但仅当该类位于同一个包中时才可访问。我很高兴flex.messaging.io.amf不是一个密封包。
答案 185 :(得分:0)
销售人员真实地管理客户期望。 (训练不足和过度交付)
软件要求通常来自市场研究。
答案 186 :(得分:0)
他说他懂编程,一定是真的!
答案 187 :(得分:0)
当维度n等价时,维度n是维度(n + 1)的实例。
答案 188 :(得分:0)
认为我是唯一一个制作一段代码的人......然后当我需要那个例程时,我不记得我做了什么,只是简单地复制/粘贴我自己的代码。
现在,我知道每个人都这样做。
答案 189 :(得分:0)
当我在初中学习算法时,我认为NPC只是非多项式问题,这意味着这个问题的复杂性并不比多项式简单。在我的大学里学习计算理论之前,我没有意识到自己错了.- / b
答案 190 :(得分:0)
程序最终可能会解决所有问题。
答案 191 :(得分: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);
}
}
任意示例,但您可以看到优化将如何改变执行。
答案 192 :(得分:-1)
@Kyralessa:值得注意的是,在大多数处理器上,在汇编/机器语言中,函数可以返回除调用者以外的其他位置,同时使堆栈保持良好状态。实际上,在各种情况下,这可能是有用的。我在6502上首次看到的一个变体虽然在Z80上工作得更好,但它是一个打印消息例程,其中要立即打印的文本跟随调用指令;在零终结符之后执行将恢复(或者,当使用Z80时,在零终止符处进行轻微优化,因为让零字节作为NOP执行将比试图避免它更便宜)。
有趣的是,在许多现代语言中,函数有一个正常的退出点(它将在调用后恢复执行),但也可以通过抛出异常退出。即使在C语言中,也可以使用setjmp / longjmp来模拟这种行为。
答案 193 :(得分:-2)
Java很慢。很多perl粉丝对slashdot反刍(sp ???)这个,很难过。
答案 194 :(得分:-2)
我将永远在VB中编程,我现在是c#。