学习编程时常见的 10 个错误及其解决方法
开始编程可能既令人兴奋又令人疲惫,这是一项要求很高的活动,需要大量的注意力和精力才能正确、一致地完成。
我将分享我认为大多数初学者都会犯的 10 个错误,以及一些关于如何避免这些错误并加速您的学习之旅和职业生涯的建议。
1)试图在一天内学会所有东西
我遇到的大多数新手都非常感兴趣,或者急于找工作。这在一开始可能会是一个激励因素,但如果你没有足够的耐心,就会破坏你达到专业水平的努力。人脑在给定的时间内只能学习有限的知识,所以试图把大量的信息塞进你的大脑是没有意义的。
制定一个时间表或时间,限制自己只学习一定数量的知识,然后再花一些时间从事其他不太耗脑的活动。我曾经在离开电脑的时候找到了一些复杂编程问题的解决方案,我也看到一些其他人分享了类似的经历。所以,值得暂时放下电脑,反思一下你目前学到的东西。
每个人都是不同的,学习方法也各有不同。有些人喜欢看视频,有些人喜欢阅读,有些人则喜欢通过逆向工程来学习。找到适合自己的学习方式,并坚持下去。
你应该了解你目前的学习方法是否有效,并在必要时进行调整。想要找到最适合你的学习方法,不妨做一下这个测试,并以此为起点。
2)过于注重工具而非基本原理
你使用的框架只是建立在语言之上的工具,所以最好先学好语言,然后再学习框架。同时学习两种语言也是可以的,但这样会形成一种狭隘的视野,让你无法跳出框架的界限去思考。
语言也是如此。无论你使用什么语言,JavaScript、Python 还是 PHP,语言都有其兴衰。但软件工程和语言有一些基本的原理,例如
- 数据结构,
- 算法,
- 面向对象编程,
- 设计模式
- SOLID 原则
这些是人们在职业生涯中应该掌握的一些与语言无关的主题,而且这个列表并不是确定的。
做到以上两点,你就能轻松地在不同的语言和框架之间切换,这样即使你最喜欢的框架/语言被其他语言取代,你也能毫不费力地保持就业能力。
想要学习和提升算法技能,algodaily是个很棒的网站。对于列表中的其他内容,谷歌是你的好帮手。此外,如果你认为还有什么其他主题应该添加到这个列表中,也请告诉我。
3)没有计划和目标的学习
当你学习某样东西时,如果没有计划和目标,你很可能无法坚持足够长的时间掌握它或完成学业。当你觉得它不适合你,或者你认为你找到了更好的选择时,你可能会立即放弃。为了避免这种情况,有必要设定学习目标。
关于目标,我建议你设定 SMART 目标。但是,
什么是 SMART?
- 具体的
- M-可测量
- A-可实现
- 相关的
- 时间限制
如果你有兴趣了解更多关于 SMART GOALS 的知识,请参阅这篇文章。通俗地说,一个明智的学习目标不仅仅是“我想学习 ReactJS”,而应该是“我想在 3 个月内学会 React,然后开始从事初级工作”。这样设定目标会让你对完成学习后的能力和未来发展有更清晰的认识。需要注意的是,目标也有一个时间表。时间表对于衡量进度和在必要时做出调整至关重要。我说的是时间表,而不是截止日期。只要你取得了良好的进展,即使超出这个时间表也没关系,但不要在没有目标和你认为需要的时间的情况下就仓促行事。
以上是一个宏观目标,你实际上应该将其分解成更小的微观目标,这时就需要制定计划和时间表了。计划至关重要,因为没有计划,你很容易迷失在日常事务中,忘记全局。设定目标后,花些时间分析实现目标所需学习的各种知识,并为每项知识留出时间。同时,还要规划每天学习的时间。
规划/估算的一般经验法则是,不要承诺过多而交付不足。制定计划时,务必留出时间用于其他日常活动、充足的睡眠(这对于巩固所学知识至关重要)以及日常工作(如果有的话)。
4)不做则学
这是一些人常犯的一个最大错误,我见过有人把看教程当成看Netflix的节目一样看。这可能会让你误以为自己学到了很多,但除非你是迈克·罗斯,否则你可能根本无法掌握大部分概念。那么解决办法是什么呢?
动手实践。尝试一下你刚才学到的东西,失败了再试。一旦你觉得自己可以轻松做到,就继续学习下一个。记住,我们学习是因为工作中需要用到它,所以光看或读是没有意义的。
每当我们思考如何做这件事时,都会遇到一个问题:该做什么?你可以思考一些想法,并花一些时间去创造新的想法,但更好的方法是利用你学到的知识,复制现有的网站。
构建一个 Medium 克隆版、Twitter 推送、Trello 看板或一个简单的待办事项列表(这就是应用程序的通用 Hello World)。你还可以寻找一些能提供简单应用程序创意的资源,例如Florin Pop提供的这个。
5)需要帮助时不寻求帮助
说起来容易做起来难,但确定自己是否能够独立完成某件事,或者是否需要经验丰富的人士的帮助,确实可以节省大量时间。
我刚开始的时候,痴迷于哈希和加密,甚至在不了解网络安全基础知识的情况下就尝试编写自己的加密算法。我花了很长时间才意识到加密算法本身就是已解决的问题,而我编写更好的解决方案的可能性微乎其微。但我为此花费的时间都白费了。如果有人能告诉我真相并建议我使用现有的方法,这一切本可以避免。
以上内容适用于很多主题。大多数情况下,熟悉相关知识的人可以轻松总结,然后您可以根据需要扩展知识,而不必尝试自学所有内容。
有些人可能还会遇到一些问题,他们会浪费很多时间,而实际上却没有一个系统的方法来解决该问题,必须尽量减少这种情况以节省时间,并且可以通过向导师寻求帮助来解决,因为他们可以为您指明正确的方向。
我并不是说你不应该多加尝试,或者总是寻求别人的帮助,而是要用你的判断力来判断自己是否能够解决这个问题。这是一项需要长期掌握的技能。
一旦你决定需要帮助,该去哪里寻求帮助呢?你可以使用推特标签,例如#100DaysofCode,分享你的疑问,并从优秀的技术推特用户那里获得帮助。如果你是初学者,正在寻找导师;或者你是一位专家,希望回馈社会,CodingCoach是一个很棒的平台,可以帮你找到导师和学员,并在需要时获得帮助,不妨看看。
6)倦怠/失去学习动力
我们不得不承认,学习很难,你必须找到自己的动力,并在一段时间内保持动力,才能持续学习。但这听起来并不那么容易,即使是那些正在寻找可能永远改变人生的工作的人,也会感到倦怠,失去动力。为什么学习这么难?
这需要我们付出巨大的努力,并从日常安排中抽出大量时间。通常情况下,在刚开始的时候,当你的动力相对较高时,我们会投入大量时间。随着时间的推移,你会开始感到倦怠,即使你投入大量时间学习,它也会显著拖慢你的进度。倦怠是真实存在的,为了长期保持高效,避免倦怠至关重要。
如何避免倦怠?培养一些与电脑完全无关的爱好,尽量远离电脑,这能真正提高你的整体表现。读本书,骑自行车,游泳,玩游戏。做一些体力活动,睡个好觉,以饱满的精神状态迎接新的一天。
我发现,远离电脑进行几天体育锻炼后,我的效率更高,也更积极。千万别不休息就把自己逼上绝路,那样只会适得其反。
7)低估调试技能的重要性
如果你问我每个开发人员都需要掌握的一项重要技能是什么,我会说是调试。我相信不同的人可能会有不同的看法,但每个人都会同意,调试是一项非常重要的技能,它可以在处理问题或处理他人代码库时省去很多麻烦。
你应该学习一些调试工具、技巧,以及如何隔离错误,或者如何在 stackblitz 或 codepen 中重现错误,这样你就可以向其他人寻求帮助。一旦你学会了如何排除因素并隔离错误,调试就会变得非常简单。以下是一些简单的步骤,你可以在任何语言中使用它来进行调试。
-
始终先阅读错误消息
大多数框架/语言本身都会向您解释错误是什么,并会为您提供一些有关如何修复它们的建议。
-
谷歌错误
程序员所拥有的一项重要技能是能够在搜索引擎中搜索错误的不同或相关部分,并缩小针对自己问题的结果范围。
-
阅读文档/常见问题解答
对于您可能遇到的任何常见错误,Flutter 会在未安装 Android SDK 或未连接 Android 模拟器/设备时出现一些常见错误。您可以在 Flutter 的文档中找到这些错误。
-
掌握你的行业的调试工具:
恕我直言,前端 Web 开发者拥有最好的内置于浏览器中的调试工具。不要害怕花时间学习浏览器开发者工具,并充分利用它的强大功能。
要了解这些工具,您可以订阅Umar Hansa发布的这份精彩的开发工具新闻通讯。
Chrome 用户可以在此处了解更多信息,Firefox 用户可以在此处了解有关浏览器开发工具的更多信息。
-
使用断点进行调试
您可以使用 console.log 语句在运行时检查值,但如果它是一个对象,由于对象引用的存在,浏览器会将值更新到现有日志中。检查程序中正在流经的值的更好方法是使用断点。您可以使用断点随时停止程序,并检查应用程序数据的当前状态。您还可以使用监视点来查看单个值在程序执行过程中的变化情况。这两个方法对于处理原本令人头疼的错误来说,真的非常有用。
-
拥抱 IDE 的强大功能
您遇到的大多数错误都可以通过使用像 VSCode 或 IntelliJ 这样的优秀 IDE 来解决,IDE 提供的关于代码和语言的智能感知能力无可比拟。这两款编辑器都支持内联调试功能,这意味着您甚至无需打开浏览器的开发工具进行调试,只需使用断点即可直接从 IDE 进行调试。这就像增强版的浏览器开发工具一样。设置起来可能有点困难,但值得一试。不妨一试。
8)害怕失败
这个问题很少被提及。学习过程中,失败是可以接受的,这并不代表你不适合这项任务。失败和成功一样重要,因为它能让你发现自己技能的薄弱环节,你应该开始专注于这些方面。
所以,如果你还不理解 Flexbox 或无法修复 JS 问题,也不必太担心。弄清楚这些问题需要时间,你必须有耐心,更重要的是,要坚持不懈地努力。
9)参与有关编程的网络辩论
我必须得说,很多初学者都倾向于参与争论或花时间观看关于 X 语言与 Y 语言或 X 框架或 Y 框架的评论线程。
作为初学者,我们总是想当然地认为我们做事的方式是正确的,其他方式都是错误的。我们经历过,也做过。这实际上不会对你有什么帮助,反而会把你禁锢在别人形成的观点的牢笼里。
理想的做法是,你应该以非常开放的心态对待任何工具,亲自尝试并形成自己的观点。如果你没有时间亲自尝试,那也没关系。你不需要对每个新事物都发表意见。
尽量远离那些抱着“哪个最好 X 或 Y”心态的人。每个工具都是为解决一个问题而生的,而在编程中,解决同一个问题的方法也千差万别。所以,用三个框架或工具来做同一件事是没问题的,你应该仔细研究一下,选择最适合你的那个。
以健康的方式比较两种技术与引发一场技术论战之间的界限非常模糊,这条界限通常很模糊。这里的箴言是:
合适的工具适合合适的工作。
10)没有养成良好的开发习惯
最好从第一天起就养成这种习惯,一旦习惯了就很难摆脱。以下是开发人员应该注意的一些重要事项,所以你应该从学习之旅开始就考虑这些事情。相信我,你未来的同事会因为你这些好习惯而喜欢你。
-
命名
无论你给函数、变量还是类命名,都要确保名称简短且有意义。我建议你选择简洁的名称,而不是清晰、有意义、能够轻松表达变量意图的名称。
-
建筑学
这不是你在学习时应该开始担心的事情,但是每当你编写项目代码时,你都应该考虑软件架构。
您将如何实施该项目?
不同模块如何工作和通信?
软件架构基本上是关于做出基本结构选择,一旦实施,改变的成本就会更高。
-
清理自己
这就像软件开发的童子军规则一样,
让代码比你发现时更好
如果这太难做到,至少试着不要让它变得更乱。妥善处理内存,删除不必要的导入、函数和变量。妥善处理订阅(rxjs)或取消订阅,释放所有占用的内存。这些都是在完成功能编码后需要注意的事情。
-
提交消息
撰写良好、有意义的提交信息,并与变更相关。这将对您未来的自己或代码维护者有所帮助,当然,这并不容易,所以您必须从一开始就正确地做到这一点。无论您是该仓库的唯一提交者,还是这只是一个宠物项目,都没有关系。
关注此主题可以向很多人学习如何编写好的提交消息。
我的一个小建议是,我忘了 git commit -m 这个选项,我总是明确使用 git commit -v。如果你想知道它们有什么区别,-m 选项只允许单行提交,而 -v 选项会打开默认的 git 编辑器,允许你编写很长的多行提交信息。
-
结盟
对齐代码是一个好习惯,你应该从第一天起就养成。当然,你可以让 IDE 帮你完成繁重的工作,或者使用像Prettier这样的工具,但我更希望将其作为第二天性,而不是依赖某些外部工具。一旦你养成了正确的对齐和间距习惯,就可以安装一个像 Prettier 这样的工具。
代码对齐很重要,因为代码应该易于理解,无论是你的后继者还是你的未来。没有什么比一长串不对齐的代码更糟糕了。可读性远不止对齐,这一点可以作为一个很好的起点。
-
评论
优秀的开发人员也应该掌握注释的精妙艺术,为什么称之为艺术呢?因为你需要找到过度注释和不注释之间的最佳平衡点。并非每一行都需要注释,因为你的代码应该基本不言自明。
注释的一条经验法则是尽量不要解释你在代码中做了什么,任何开发人员都能理解你在做什么,重要的是你为什么要这么做。想象一下,我要重构你编写的一个函数,你对每一行代码做了一些注释,这些都不重要,因为我要重构,可能会删掉一半的代码行,甚至完全重写。如果你处理了一个特殊的业务案例或一个特殊的边缘情况,那才是重要的,应该记录下来,这样我才能考虑到。
最后,
// 这就是奇迹发生的地方
以上评论毫无根据。我刚开始编程时就说过这句话,现在回想起来都觉得好笑。人们很容易把某些代码或者自己写的一些最聪明的代码当成魔法,但正如罗伯特·A·海因莱因曾经说过的,魔法根本不存在。
一个人的魔法可能是另一个人的工程。
无论它看起来多么聪明或神奇,它总是合乎逻辑的,即使是很难追踪的错误也大多是合乎逻辑的,只是你必须开始像该语言的编译器/解释器一样思考。
以上是我对那些正在学习编程并即将开始第一份工作的人们的建议。我并不认为自己是一位优秀的开发人员,但我认为我犯过上面列出的一些错误,并从中吸取了不少教训。你在职业生涯中吸取了哪些教训?欢迎在评论区或在推特上与我分享你对这篇文章的看法。
[最初发布于https://vikky.dev/common-beginner-mistakes/ ]
文章来源:https://dev.to/shivenigma/10-common-mistakes-when-learning-to-code-and-how-to-fix-them-594a