关于编程的初学者最有害的误解?

时间:2009-07-14 12:09:59

标签: language-agnostic

  

可能重复:
  What is your longest-held programming assumption that turned out to be incorrect?

你认为对于那些刚接触过编程的人来说编程最有害的误解是什么?

68 个答案:

答案 0 :(得分:58)

重新发明标准库函数/类。

通过语言书/教程后,大多数初学者 - 知道如何处理字符串和数字 - 将发明他们自己的日期函数,他们自己的'压缩算法',他们自己的SORT实现。

哦,他们总是在第一天搜索clrscr();

答案 1 :(得分:56)

因为他们的程序编译并运行它会做他们期望的事情。

答案 2 :(得分:41)

如果他们的代码无法编译或工作,那是因为编译器中存在错误。

答案 3 :(得分:40)

也许不是最有害的,但他们通常无法估计需要多长时间才能完成,他们认为可以比实际要快得多(包括我)。

对于有害物质,优秀的公司通常会让初学者远离可能造成很大伤害的地方。他们通常被鼓励更有经验的人工作,这样他们就能更好地学习。

答案 4 :(得分:35)

如果他们的程序在他们自己的计算机上运行,​​那么它也可以在其他人的计算机上运行。

  

“但它适用于我的机器!”

答案 5 :(得分:28)

编程完全是关于语法的。事实证明,这完全是解决问题。

答案 6 :(得分:26)

用户是程序员。

答案 7 :(得分:26)

如果它看起来并不复杂,那么它必须是错误的或“坏的”代码。

我必须在几年前在学校承认我认为我的课程看起来不够复杂!这些天我想哭,如果有些事情变得不那么简单:

//start

if(something)
{
    do_stuff();
}

//go home

:P

答案 8 :(得分:22)

  • 编程很简单:编程非常有趣但不要认为编程很容易。它需要大量的经验,学习,而且没有更好地学习它并且谦虚。
  • 工具为我做,所以我不需要了解封面下发生的事情:工具使事情变得更容易,让你更快地完成工作。但是,你仍然需要知道并熟悉封面下发生的事情,因为迟早你需要打开引擎盖。
  • 缺乏好奇心
  • 所有关于最新和最酷的技术:不一定。它是关于什么是适合客户的,以及你想要解决的问题。

答案 9 :(得分:19)

“问题不在我的程序中,这是库/ OS /语言中的错误。”

“它适用于我的机器!你的问题出了什么问题?”

“一切都是模式,你只需要找到它们。”

“我不需要测试,因为我只进行了一行更改。”

“源代码控制浪费了这个项目的时间。”

答案 10 :(得分:14)

我在编程tyros中遇到的真正问题是“编程是神奇的”,这意味着没有真正意识到计算机将在逻辑上完全运行,并且每次给定完全相同的输入时都会做同样的事情。

他们写了一些他们认为应该做他们想要的东西,然后当它不起作用,而不是试图逻辑地处理问题时,他们开始半随机地改变事物,希望,显然是为了安抚神灵他们纯粹的坚韧或愿意在奇思妙想的祭坛上贬低自己的计算机魔法。他们认为计算机是反复无常的,并且随机地改变了事物,他们所希望的最好的事情就是让事情变得模糊近似,并希望星星长时间保持一致。

当然,即使对于有经验的程序员来说,它有时也可以感觉,但是有一种固有的知识,即出于某种特定原因正在发生的事情,你只需要深入研究得到那个理由。

答案 11 :(得分:13)

  1. 他们的计划会奏效。
  2. 如果前一个障碍奇迹般地被克服,他们的程序将按照最终用户的预期运作
  3. 如果前一个障碍再次被奇迹般地克服,他们的程序将经得起时间的考验,即它将是可维护的
  4. 如果所有以前的障碍再次被奇迹般地克服,那么他们的second system会一样好或更好

答案 12 :(得分:11)

他们的解决方案是 解决问题的唯一方法 ,其他人都是愚蠢和错误的。

答案 13 :(得分:11)

最有害的误解(财务版):

“大学教育需要了解或了解如何编写软件。”

答案 14 :(得分:11)

在您的代码中拥有设计模式。

答案 15 :(得分:10)

“我打算用电脑赚大钱!”

编辑:另一个让我疯狂的人:

“另一个人的代码没有正确地调用我的代码,因此系统不起作用并不是我的错。” - 没有主动调查,诊断,建议补丁,没有。作为经理或团队领导,这个真的深深触动我。

答案 16 :(得分:9)

最有害的误解是:当你使代码工作时,你就完成了。

答案 17 :(得分:9)

我遇到的最糟糕的误解是,编程是编写代码而不是阅读代码。

答案 18 :(得分:9)

您必须使用您正在学习的语言的所有功能,继承

更新:了解C

中的汇编内联代码

答案 19 :(得分:8)

禁止他们认为“完美但非常晚”的概念比“可接受且准时”更好。

如果每周报告在5秒钟内运行,而不是在8个月后报告,则没有人会关心。

答案 20 :(得分:8)

那很酷==可用。

答案 21 :(得分:7)

它与计算机有关。

答案 22 :(得分:7)

他们的代码不需要记录。他们是唯一会看到它的人,对吗?

答案 23 :(得分:6)

最常见的误解是您可以通过启动您喜欢的IDE /编辑器然后立即编写代码来编写应用程序。

是的,它会创建一个应用程序。是的,当你完成时它也可能是cr @ p ......

首先通过创建设计开始开发软件。最好使用笔和纸或计算机上的一些有用工具。编写实际代码恰好只是整个过程的一小部分。 (如果没有,你做错了什么!)

答案 24 :(得分:5)

最有害的误解是假设软件行业的人知道他们在做什么。初学者倾向于信任产品文档中的所有内容,他们信任错误消息和异常描述。他们甚至信任发布在博客上的东西。

答案 25 :(得分:4)

所有这一切都是每天都在建造很酷的新东西。维护是编程的一部分!

答案 26 :(得分:4)

难以输入代码。你走的越远,就越容易成为它的一部分。

答案 27 :(得分:4)

早期:

  • 但是世界上不是一个x86吗?
  • 我必须使用该缓冲区传递大小?
  • 错误检查?为什么?
  • STL太复杂了。我宁愿自己实现一切。
    • (使用std :: swap()!std :: swap()!从那里开始,然后分支到更多...)
  • 不知道您不能将二进制缓冲区视为字符串而不先将null终止。 (想想:read(),recv()等。)

后来:

错误地认为......

  • 一个字节中有8位。
  • 垃圾收集将使您免于资源管理。

  • 字节序?填充?我不能只写(),发送()等整个结构?

  • 线程,死锁和竞争条件哦,我的。
  • I18N? (2009年,我们仍在学习地球是圆形的!)
  • 我本可以写得更好。是时候重写了。 (提示:重构。)
  • 时间相关,错误地认为:
    • 在一个日历年内,DST在结束前开始。
    • 所有时间段都是+或 - 整个小时。
    • 最大UTC偏移量为+或 - 12小时。
    • 一分钟内有60秒。
    • 1900年是闰年。

错误地认为:

  • 16位足以容纳Unicode代码点。
  • 我可以忽略为我做90%工作的FOSS库。
  • C,C ++,Python,Lisp,C#,. NET,Java,VB6,Ruby,PHP,Bash,汇编程序是完成每项任务的完美语言!

答案 28 :(得分:3)

  

测试并不重要/必要。

     

单位测试是浪费时间

     

某些代码模式(命名约定等)并不重要

答案 29 :(得分:3)

他们将“打破”某些东西!

或者,将“新手”定义为那些没有做到的人,“它很容易改变!它是软件!”

欢呼声,

答案 30 :(得分:3)

第一次程序必须正确。

快速,早期和经常失败。这是变得更好的唯一方法。

答案 31 :(得分:2)

语言语法的刚性是惹恼他们或“为表演”。

直到很久以后(在自动机/正式语言课程中,后来在编译中),他们才意识到他们必须放入分号或关闭括号的原因是因为否则编译器无法解析他们的程序明确。

这可能来自于自然语言的流动性,由于发短信,这一代学生可能更容易相信。

答案 32 :(得分:2)

在面向对象的编程中,使用实例变量,其中局部变量更合适,尤其是在多线程框架(例如,servlet)中。

更一般地说,使用比适当范围更广的范围。

答案 33 :(得分:2)

我认为尚未提及的是一些学生认为他们总是拥有有效的数据/输入。实际上,有效数据只是一种情况,它们会忘记所有形式的无效数据/输入。

答案 34 :(得分:2)

像Java,Python等语言“没有”指针而不是C。

(小心我引用了否定词)

答案 35 :(得分:2)

  • 忘记设计阶段。我一直与学生一起工作,只是想在不考虑最终设计的情况下跳入代码。
  • 关于作业如何运作的困惑,详见here

答案 36 :(得分:2)

如果评价良好,那么500+线功能是可以接受的。我见过有经验的开发人员这样做,并拒绝将其分解为可维护的块,因为该功能“只做了它应该做的事情,每个操作都被评论了。”

答案 37 :(得分:2)

  1. 他们阅读了网络上的教程,复制粘贴,它正在运行的代码,但他们不知道为什么,他们对此感到满意。
  2. 代码适用于本地计算机,但不适用于其他计算机
  3. 问题在于机器,而不是椅子和键盘之间的外星人
  4. 编写代码,但在维护方面,他们更喜欢啤酒...

答案 38 :(得分:1)

“当我们来到它时,我们将穿越那座桥梁”

答案 39 :(得分:1)

他们不需要学习任何新东西。

答案 40 :(得分:1)

我看到的最有害的是他们不必理解他们在做什么(即粘贴一些你不理解的代码是可以接受的,因为它“似乎”起作用了)。

对于那些似乎没有理解AND和OR之间区别的人来说,这也让我感到惊讶。

还必须处理边缘情况。只要有决策点,就必须处理从那一点开始的所有可能路径,即使它们很少发生。

在数据库方面,仅仅因为查询运行并不意味着结果是用户想要的。

答案 41 :(得分:1)

如何在Java和C#等语言中传递引用的概念化。

答案 42 :(得分:1)

  • [插入语言,语言功能,模式,技术]是所有问题的灵丹妙药。
  • 重新开始是一个好主意。
  • Unicode只是一个编译器开关。
  • 这个小改变不会破坏任何东西。
  • 看起来正在承认失败。

答案 43 :(得分:1)

命令行和文本编辑器已成为过去。我有一个IDE,所以我不(需要)关心引擎盖下发生的事情。

答案 44 :(得分:1)

作为一名软件开发人员,完全了解编程语言和API。

答案 45 :(得分:1)

在谈到选择时不够灵活,又名“当你有锤子时,一切看起来像指甲综合征”。这可能包括尝试用最喜欢的语言解决每个问题。

答案 46 :(得分:1)

初学者和管理者之间的一个常见误解是,编程基本上是记住类似密码的“代码”,并将问题的正确代码键入计算机。如果你不知道问题的“代码”,你要么是愚蠢的,要么撒谎。

答案 47 :(得分:1)

曾经是初学者,我会说初学者最大的误解是

if (thisBool = true)
    blah blah blah...

是有效的代码。

答案 48 :(得分:1)

  1. 从MSDN或其他地方复制代码是解决问题的有效方法

  2. 单元测试和合同毫无意义,只适用于大学的那些人

  3. 设计模式:见2.

  4. Visual Basic 6.0和Java是很好的编程语言

  5. 通过字符串连接来组装XML是一件明智的事情

  6. 功能编程很复杂

  7. 面向对象的设计只会让人烦恼

  8. 组件越灵活越容易使用(不仅是terribad而且是terrisad)

答案 49 :(得分:1)

您可以忽略动态语言中的变量类型。

看到PHP程序员做的事情很常见:

$a = false;
if ($a == "false") ...

或:

$b = "0";
if ($b) ...

答案 50 :(得分:1)

重构之后,该功能无法破解。

答案 51 :(得分:1)

首先,他们可以忽略错误检查,或者可以将错误检查视为事后补充,或者捕获异常意味着您可以忽略它发生的事实。这为您提供了以下内容的代码:

try {
    date = format.parse(dateString);
} catch (ParseException e) {
    log.debug("exception: ", e);
}
String message = "The date was " + date.toString();

第二个误解是编程变得容易。它没有。问题会随着你的能力而增长。

答案 52 :(得分:1)

缺少缩进...变量名称和注释不正确。它是有害的,因为尽管有这些错误,它们仍然可以做小程序。

答案 53 :(得分:1)

其他人都是天才,因为他们可以快速编码,但你不能。在你和他们坐在一起之后,你会看到他们像你一样解决问题,而这实际上是经验的问题反过来给出直觉 - 哦,他们使用搜索引擎,就像你一样。

答案 54 :(得分:1)

根据我与新手朋友的经验,我认为常见的误解是验证数据并使代码防故障只是浪费时间。实际上,我的CA类中的每个人都不验证INPUT数据!

  • 其他的,就是你只需要坐在椅子上和代码上。在触摸键盘之前忘记编写问题并研究最佳方法。当一个更简单,更漂亮的方法起作用时,它们也会创建如此复杂的代码?

只需2美分。

答案 55 :(得分:1)

作为一名兼职教师,我发现他们通常认为编程非常难!

答案 56 :(得分:1)

伪代码是事物的外观。太多的新程序员试图像编写一个句子一样编写代码,而且......它只是不起作用。

我的妻子拥有英语学士学位,她最近想回到CS学位。当我试图将她的代码编写为:

时,我看到了这个第一手资料
If Myint = 1

Then
   cout ...

Else

答案 57 :(得分:1)

就我而言,提到的大部分内容与初学者程序员没有关系,但程序员已经超越了解大部分工作原理的阶段 - 如何学习第二,第三和第四种语言比第一语言容易得多 - 等等 - 但是谁还没有成为一个重大“严肃”项目的一部分。

初学者对我的误解包括以下内容:

  1. 当代码无法编译或抛出错误时 - 错误消息除了存在错误之外没有任何其他说明(即从PHP泵出的错误消息中理解)
  2. 关于网络编程,了解php和html之间的整个关系如何成为许多人的一大障碍
  3. 当我有一个初学者编程课时,对于一切如何工作有很多困惑 - 授予我们几乎显示VB.Net 2005 Express,显示如何创建一个带有窗口的新项目,给定功能“兰德“(我认为它被称为,我不是一个VB人)然后被要求制作一个利用随机数的游戏。需要我说的不止一半的类有没有得到使用本地函数/子变量或在类中声明变量之间的区别的概念?而且,我认为,他们中没有一个人对OOP到底是什么,或者他们可以创造自己的物品这一事实有丝毫的线索。
  4. 我不能老实地记住我自己的那些(嘿,我可能仍然带着一些愚蠢的误解,这就是为什么我没有意识到我的是什么,因为他们仍然是我的错误观念) - 但我的猜测是,这与我刚刚描述的非常相似。

答案 58 :(得分:1)

另一个误解是当它们遇到编译错误或异常时,实际错误正好在构造函数指示的行中。

不幸的是,源通常在某个地方更早(例如,缺少大括号)或者在某些早期状态更改中,但是有一种趋势是坚持编译器/运行时指示的那一行。

答案 59 :(得分:1)

由于某些直觉感觉而不能更改代码,因为它会更慢,例如将嵌套ifs更改为表驱动方法。

答案 60 :(得分:1)

或者,为了给伤害添加另一种侮辱,新手开始改善一段代码的性能,使其好5倍并为自己感到骄傲......直到有人提醒他,他提高了性能整个过程的一小部分,净效果为一秒,这个过程需要两个小时。

(我实际上有一位同事做了一些愚蠢的事情。一个过程必须导入50万条记录,他真的很自豪他只是通过跳过一些初始化使它更快启动。结果,第一个日志条目将在一秒钟内出现而不是在10秒之后。不幸的是,整个过程从30分钟减慢到6小时......)

答案 61 :(得分:1)

聪明的程序员知道:

  1. 加快应用程序的最佳方法是提出更好的算法
  2. 单元测试是加速开发和减少调试的最佳方法
  3. 永远不要实现您不确定需要的功能

答案 62 :(得分:1)

过高估计实际编写代码的重要性(和时间份额),然后进行一些测试/调试,同时低估或完全忘记编写单元测试,以及其他重要活动,如需求,编写规范,设计,系统测试,和客户接受。

答案 63 :(得分:1)

根据我的经验,大多数新程序员都高估了编译器的智能。这可能采取的形式是期望c数组像向量或矩阵一样繁殖,直到告诉计算机他们想用英语。 (“对角化矩阵A;”)我也看到人们希望编译器从一开始就完全了解所有代码,因此对于事情的顺序是松散的。

答案 64 :(得分:1)

自动化测试是浪费时间。

答案 65 :(得分:1)

这是一条充满希望的职业道路,他们都应该去那里。然后需要数年时间来清理灵长类动物的代码系统。

答案 66 :(得分:1)

  

“但你可以做任何事情!”

答案 67 :(得分:0)

成功项目与失败之间的差异是由于技术问题或选择造成的。

事实上,差异几乎总是由于社会(基于人群/团队)因素。