原文:Why Learning to Code is Hard – And How to Make it Easier,作者:Ogundiran Ayobami

你是否在为学习代码而挣扎? 如果你是,我想帮助你。因此,我从我的个人经验中收集了一些技巧,给你一些指导,这样你就不会再做无谓的挣扎。

为什么学习代码很难

学习代码可能是非常困难的,特别是对于初学者。这可能就是你目前正在挣扎的原因。你可能会对遵循哪种方法感到困惑,因为有很多相互冲突的方法和想法。

你可能在背代码或用很多东西让自己超负荷工作。现在,你心烦意乱,无所适从。

这是所有程序员的共同经历。当我开始学习代码时,我也有同样的经历。我很困惑,不知道该遵循什么,因为我和你一样,在互联网上可以接触到很多风格和观点。

我不断地学习我所遇到的任何东西,因为我觉得一切都很重要。我担心,如果我忽视任何我发现的信息,我可能会失去我真正需要的成长。

你看,你很聪明,很有才华,很有能力。你没有任何问题。你只需要培养一种编程心态,并利用那些不会让一切变得更困难的资源来学习。因此,这里有你需要知道的东西,以帮助你更有效地学习代码。

编程概念的教学是困难的

如果你还没有找到合适的学习资源,你可能会在学习编码时遇到困难。有些教程让编码变得更加困难,而有些教程可能不适合你的学习风格。

另外,要确保你的学习资源来自于高质量的来源——教学并不总是等同于理解,所以要尽量找那些有高质量声誉的网站或组织。

没有哪个教程是完美的——但它们也不应该是不必要的难懂的。最近,我在互联网上研究了很多 JavaScript 教程,我很难理解其中许多教程所要教授的内容。而且我对 JavaScript 有很好的理解——但我还是对这些教程感到很费劲。

事实上,创建一个可以运行并且满足预期目的的应用程序是有可能的——但当涉及到教如何创建它时,那就是另一场球赛了。

为什么很难解释编码概念

一个复杂的代码库是很难解释的。有人在试图剖析它的时候,可能会从表面抓起,但他们可能不会让你对这个主题有深刻的理解。

当你在看教程中的代码时,想一想:对于你这个初学者来说,这些代码是否容易理解?或者你正在努力理解发生了什么?

在你选择学习材料时要考虑到这一点,因为它们可能是你在编码时感到困难的一个主要原因。简而言之,学习代码首先要找到合适的资源来学习。不要认为这是理所当然的。

现在的问题是,前进的道路是什么?好吧,从一些不同的资源开始学习——但不要太多。一旦你对它们有了感觉,就在其中挑选两个甚至一个,让你的一切变得简单。

这样做很重要,因为对我有用的东西不一定对你有用。所以一定要选择你自己的教程。

不要只是背代码

当你不明白自己在做什么时,背代码是很自然的。如果你学习的资源让你难以理解,那么这样做就特别有诱惑力。

看起来你并没有在背代码,但你可能是在下意识地这样做。

我现在能告诉你的是,你不应该只是背诵代码,否则会伤透你的心💔!它将迫使你进行不必要的挣扎。

以下是原因。

每当你应用你的知识时,背代码会让你感到困惑,因为你并不真正理解你在做什么。你实际上并没有学会如何编程,你只是学会了如何复制和粘贴。

每当你把一些代码储存在脑子里,却不明白代码的含义,如何工作,以及不同部分的实际作用。

由于你不理解核心概念,你会在实际构建项目时感到很困难。

你甚至可能放弃......

例如,让我们看一下下面的代码:

let students = ['Ope', 'Ayo', 'Ola']; 
let count; 

for ( count = 2; count >= 0;  --count ) 
{ 
    console.log(students[count]); 
} 

这将在控制台中记录什么?看,如果你没有真正理解 for 循环、 ++--是如何工作的,你会发现很难理解上面的代码。

那么,你应该做什么呢?

每当你意识到你并不真正理解一段代码时,就把代码分解成几块。然后研究每一块的用途。让我们用上面的代码作为一个例子。

如何将代码分解成小部分

第一步:你需要了解 for 循环 是怎么运行的:

for (...){ }

这个 for 循环是做什么的?

它被用来重复一个动作或一系列的动作数次。

第二步:你需要了解初始化。

for ( initialization; conditional; increment or decrement ) { }

初始化的作用是什么?

它设置循环的开始。它决定了要开始的位置或索引。

第三步:你需要了解条件语句。

条件语句是做什么的?

它们设定了必须满足的条件,以便循环继续运行。

如果条件评估为 true,循环将继续运行。但如果它的评估结果为 false,循环将终止(停止)。

第四步:你需要了解递增(increment)和递减(decrement)。

递增是用来做什么的?我们用它来给一个数字加 1。

递增可分为前递增(++increment)和后递增(increment++)。

它们有什么不同?在一个数字上加 1 后,前递增会像这样返回结果:

let number = 5; console.log(++number)// 6

在 1 加到 5 之后,它返回 6。后递增将返回我们加 1 的数字,而不是像这样的结果:

let number = 5; 
console.log(number++) // 5 
console.log(number) //6 

你看,在将 1 添加到 5 之后,后递增返回 5,当我们检查数字时,它现在是 6。

简而言之,只要我们对一个数字使用前递增(pre-increment),其结果就会被返回。但是如果我们使用后递增,则返回数字本身而不是其结果。它们返回的内容是完全不同的。

那么,它在循环中的应用是什么?

无论递增(increment)或递减(decrement)返回什么,都不会影响到循环,因为循环只处理我们在对数字应用后递增或前递增后得到的结果。它们都是在初始化器上加一。

但是我们也有递减(decrements)——它们从计数中减去一个。这意味着,在这种情况下,计数将在每次迭代时减少 1。

let students = ['Ope', 'Ayo', 'Ola']; 
let count; 

for ( count = 2; count >= 0;  --count ) { 
    console.log(students[count]); 
} 

所以 students [count] 将在第一次迭代时返回 Ola,因为其索引是 2。

它将在第二次迭代时返回 Ayo,因为它的索引是 1,Ope 将在第三次迭代时返回,因为它的索引是 0。然后,循环将终止,因为计数将小于零,条件将评估为 false

就这样 这就是你如何将代码分解成小块,从而使你能够解开它。

不要让自己的负担过重

超负荷意味着要处理超过你在某一时间内所能处理的任务。

当你开始学习代码时,你可能会有一种冲动,想迅速学会一切,获得编程所能提供的一切可能的机会。

所以,你最终会让自己的任务超载,或者在短时间内给自己分配一个复杂的任务。哦,不! 这就是你在编码上挣扎的原因之一。

我仍然记得学习 JavaScript 对我来说是非常困难的,因为愚蠢的我让自己超载了。我在不到 30 分钟的时间里学会了 var、let、const、函数、数组、对象和条件语句,以为自己已经准备好成为一个世界级的软件开发者。

与此同时,我还在学习 Python、PHP 中的其他东西,并且还在读 John Resig 的书,书中解释了很多 JavaScript 中的高级概念以及他是如何开发或借用解决方案来创建 jQuery 的。

还有一件事,我在一个小时内就读完了一本 100 页的教科书和一个长达 6 小时的视频教程。

说实话,广泛阅读或学习并没有错——但凡事都需要时间。你不可能一下子就知道所有东西。所以,不要让自己超负荷。

如何把握学习的节奏

选择你的项目的一个部分或你知道的超级简单的编程语言来建立或理解。然后问很多关于它的合理和基本的问题,因为这样基础扎实,无用之用,方为大用。嘿,等等! 让我给你举个例子:‌‌

想象一下,如果你想学习 JavaScript,你就决定,今天只学 letconst,其他都不学。然后你问了很多关于它们的简单而合理的问题。

这样做,你的学习速度会显得很慢,但你很可能最后会超过那些急于求成的同行(除非他们有特殊的大脑,这是一种罕见的情况)。

是的,同时处理几个任务或在时间不足的情况下做一件事会使你的编码变得困难。如果你没有达到一个合理的结果,它也会迫使你放弃。

所以,无论你学什么都要保持超级简单,驯服你的好奇心,因为它是专注的反面

保持开放的心态

关于编程语言、库、框架、技术和方法,软件开发者之间有很多相互冲突的意见。软件开发人员是我认识的最有主见的人。

你可能读过或听过诸如 不要重复自己(DRY)测试驱动开发(TDD)利润驱动开发(PDD)你不会需要它(YAGNI)干净的代码永远在编码(ABC)喜欢组合而不是继承,以及其他许多事情。也许你想站在一边。

根据你所尊重的软件开发人员的意见来站队是很诱人的。但我认为在你真正理解你所做的事情之前,你不应该这样做。你目前的工作是理解基本原理并使用它们来构建项目。

最终你会遇到一些挑战,迫使你使用某些方法、库和框架。所有的方法或技术都是基于上下文而有用的。没有哪种方法是对的或错的,是环境使然

所有这些技术在解决现实世界的问题时都是有用的,而且它们也都有缺点。因此,在你了解你所选择的编程语言的基本原理并用它建立了一些基本项目之前,不要太担心选边站。‌‌‌‌

培养研究思维

编程,大多数时候,就像研究一样。你从观察开始,然后测试几件事情,直到你取得一个满意的结果。这就是编程的样子。你常常不知道你在做什么,直到它发挥作用。

一旦你理解了这一点,它就会帮助你满足于必要的斗争。因为大多数时候,你必须学会如何修复一个你在职业生涯中从未见过的错误,而这可能真的需要很大的努力。

现在,你可能会挣扎着去修复那个错误,说实话,这是一种必要的挣扎。没有哪个软件开发者能摆脱这种挣扎。好吧,也许10 倍的工程师(微笑) 可以不受影响,但我不是。

作为一个专家并不是对所有问题都有答案,而是要知道如何找到答案。

避免分心

我们都有一些分心的事情,这些分心的事情会使我们无法专注于编码。你的是什么?是你目前的工作,合作伙伴,小玩意,还是仅仅为了维持生计而挣扎?

你需要弄清楚你的干扰因素是什么,并在你开始学习编码之前将它们去除。否则你就会一次又一次地开始和放弃。

有时,你可以正面应对挑战,而有时你只需要离开它们。在这种情况下,你需要安排好你的编码活动和时间,使你不会被你无法控制或改变的事情分心。

如果你的生活中有很多分心的事情,你就不可能真的那么有效地进行编码,所以你需要识别它们并逐一解决它们。这将帮助你增加实现你的编程梦想的机会。

不要太努力工作

放松!不要让自己过度劳累,因为你真的需要理解你在这个阶段所处理的概念。而这需要一个休息好的、新鲜的头脑来完成。所以,不要让自己过度劳累,危及你的学习效率。

编程对有经验的软件工程师来说都很难,更何况是初学者。工作太辛苦而没有得到合理的结果,可能会让你容易灰心。当你在精神上有些疲惫时,停下来,休息一下,以后再继续。

试试吧。退出一项任务几分钟。远离电脑工作。睡觉,解放你的思想,但随后不要忘记再试一次,再试一次,直到你理解为止。

总结

挣扎是一件好事,如果它是有成效的。它使你成为更好的人或更好的软件开发人员。但不要误会我的意思——我不是要你进行不必要的挣扎。

没有一个软件开发者在编写代码时是不需要挣扎的。但更糟糕的是,通过使用错误的资源进行学习,或不向导师或在你遇到困难时能帮助你的人寻求帮助,从而进行不必要的挣扎。

现在,去把事情做好吧。

还有一件事

Ayobami 喜欢分享软件开发的历史,正在通过 你也会编程,帮助那些在理解和用 JavaScript 构建项目方面有困难的人。