初学者对编程最有害的误解是什么?
可能重复:
什么是你最长的编程假设,结果是不正确的?
你认为什么是你所看到的对编程新手的编程中最有害的误解?
重新devise标准库函数/类。
在阅读一本语言书籍/教程之后,大多数初学者(知道如何处理string和数字)将会创build自己的date函数,自己的“压缩algorithm”,以及自己的SORT实现。
哦,他们总是花第一天去searchclrscr();
。
这是因为他们的程序编译和运行它,他们期望它做。
如果他们的代码不能编译或工作,这是因为在编译器中的错误。
也许不是最有害的,但他们通常不能估计需要做多less时间,他们认为这可以做得比实际上(包括我)要快得多。
至于有害的东西,好的公司通常会让初学者远离可以造成很大伤害的地方。 通常鼓励他们由更有经验的人来工作,这样他们可以学得更好。
如果他们的程序在他们自己的计算机上工作,那么它也会在其他人的计算机上工作。
“但它在我的机器上工作!”
编程是关于语法的。 原来这是解决问题的一切。
用户是程序员。
思考如果它看起来不可怕复杂,它必须是错误的或“坏”的代码。
我几年前在学校必须承认,我觉得我的课程看起来不够复杂! 如果事情不像以下那样简单:
//start if(something) { do_stuff(); } //go home
:P
- 编程很简单:编程很有趣,但千万不要认为它很简单。 这需要很多的经验,学习,而不是在这方面做得更好,而且要谦虚。
- 工具为我做,所以我不需要知道底下发生了什么:工具使事情变得更容易,让你更快地完成工作。 但是,您仍然需要了解并熟悉封面下方发生的事情,因为迟早您需要打开引擎盖。
- 缺乏好奇心
- 这是关于最新和最酷的技术:不一定。 这是关于什么是正确的客户和你正在试图解决的问题。
“问题不在我的程序中,这是图书馆/操作系统/语言中的一个错误。”
“它在我的机器上工作了,你的错在哪里?”
“一切都是一种模式,你只需要find它们。”
“我不需要testing,因为我只做了一个改变。”
“源头控制是这个项目的浪费时间。”
我在编程时看到的真正的问题是“编程是魔法”,意思是说,并不是真正意义上的计算机将完全按照逻辑运行,并且每次给出完全相同的input时都会执行完全相同的操作。
他们写了一些他们认为应该做的事情,然后当它不起作用,而不是试图从逻辑上处理问题,他们开始半随机地改变事情,希望,显然是为了安抚计算机魔法的神因为他们纯粹的坚韧或愿意在奇思妙想的祭台上放下自己。 他们觉得电脑是反复无常的,随意改变事情,而他们所希望的最好的办法是把事情弄的模糊一点,希望星星长期保持一致。
当然,即使对有经验的程序员来说,有时候也可以有这种感觉 ,但是有一个固有的知识,即正在发生的事情是由于某个特定的原因而发生的,而你只需要深入了解这个原因。
- 他们的计划将起作用。
- 如果以前的障碍得到奇迹般的克服,那么他们的程序将按照最终用户的预期工作
- 如果以前的障碍再次奇迹般地克服,他们的计划将经受住时间的考验,即它将是可维护的
- 如果以前的所有障碍再次奇迹般地克服,那么他们的第二个系统将会一样好或者更好
你必须在你的代码中有devise模式。
他们的解决scheme是解决问题的唯一真正的方法 ,而其他人都是愚蠢的错误。
最有害的误解(财务版本):
“大学教育需要了解或了解如何编写软件。”
“我打算用电脑玩一大笔钱!”
编辑:另一个驱使我坚果:
“另一个人的代码没有正确地调用我的代码,所以这不是我的错,系统无法正常工作。” – 没有主动的调查,诊断,build议补丁,什么都没有。 作为一名经理或一名组长,这真的是我的皮肤。
我遇到的更糟糕的错误观念,也是最难摆脱的,就是编程是编写代码,而不是阅读它。
你必须使用你正在学习的语言的每一个function,首先是inheritance 。
更新:关于在C中的汇编内联代码迷恋
那个很酷的==可用。
让他们理解“完美但很晚”的概念比“可以接受和准时”要好。
如果每周报告在5秒钟内运行,没有人会关心,如果是两个月后,则没有人会关心8。
最有害的误解是:你完成了代码的工作。
这与电脑有关。
他们的代码不需要logging。 他们是唯一一个会看的人,对吧?
最常见的误解是,你可以通过启动你喜欢的IDE /编辑器来编写应用程序,然后立即编写代码。
是的,它会创build一个应用程序。 是的,当你完成的时候也可能是cr @ p
您首先创build一个devise,开始开发软件。 最好用笔和纸或在电脑上使用一些有用的工具。 编写实际的代码恰好是整个过程的一小部分。 (如果没有,你做错了什么!)
最有害的误解是假定软件行业的人知道他们在做什么。 初学者倾向于信任在产品文档中编写的所有内容,他们信任错误消息和exception描述。 他们甚至相信在博客上张贴的东西。
所有这一切都是每天都在build造一些很酷的新东西。 维护是编程的一部分!
难的部分是input代码。 越往前走越容易。
早期:
- 但是,不是所有的世界都是x86吗?
- 我必须通过该缓冲区的大小?
- 错误检查? 为什么?
- STL太复杂了。 我宁愿自己实施一切。
- (使用std :: swap()!std :: swap()!从那里开始,然后分支到更多…)
- 不知道你不能把二进制缓冲区当作没有先终止它们的string。 (Think:read(),recv()等)
稍后的:
错误地认为…
- 一个字节中有8位。
-
垃圾收集将节省您的资源pipe理。
-
字节序? 填充? 我不能只写(),发送()等整个结构?
- 线程和死锁和竞赛条件哦,我的。
- 国际化? (2009年,我们还在学习地球是圆的!)
- 我本可以写得更好。 时间重写。 (提示: 重构 )
- 与时间有关,错误地认为:
- 在一个日历年内,DST在结束之前就开始了。
- 所有时间区域都是+或 – 整个小时。
- 最大UTC偏移量为+或 – 12小时。
- 那一分钟有六十秒钟
- 1900年是一个闰年。
错误地认为:
- 16位足以容纳一个Unicode代码点。
- 我可以忽略为我做90%工作的FOSS库。
- C,C ++,Python,Lisp,C#,.NET,Java,VB6,Ruby,PHP,Bash,汇编器是完美的语言!
该程序必须是第一次是正确的。
快速,早,经常失败。 这是改善的唯一方法。
他们会“打破”一些东西!
或者,把“新人”定义为那些不这样做的人,“很容易改变!这是软件!”
干杯,