学习编程的5大支柱
原文:5 Pillars of Learning Programming
对于初学者来说,通常入门的编程课程和培训班的学习内容都很深入,采取本文的步骤进行学习.
如何学习编程是困难的,我经常发现大学课程和培训班错过了编程的重要方面,并且在教授初学者的时候采取了差劲的方法.
我想分享我认为成功的编程课程应该包含的5个基本支柱。与往常一样,我正在解决主流Web应用程序的问题.
新手的目标是掌握编程的基础知识,并了解库和框架的重要性.
云,一般操作或构建工具等高级主题不应该成为课程的一部分。对于设计模式,我也表示怀疑。他们认为这是初学者从未有过的经验.
TDD(测试驱动开发)
TDD带来了很多好处.不幸的是,这是一个高级主题,初学者还没有完全做好准备.
初学者不应该编写测试。对于他们的基本技能水平来说,这太难了。相反,他们应该学习如何使用和操作(运行)测试.
每个编程课程都应围绕练习进行。我将单元测试扩展到练习中,并为学生提供一个已经准备好运行这些测试的环境.
所有学生所需要做的就是编写他们的代码,然后看着测试运行程序的指示灯从红色变为绿色。产生的可视化结果是一个很好的促进作用.
例如,如果选择的技术是Spring,那么我将在Spring项目中提供练习和测试。学生不需要了解Spring。他们只需要知道练习的位置和触发测试的按钮即可.
此外,学生必须知道如何使用debug调试器并准备好REPL。在TDD中,运行时分析代码的能力以及可以进行测试的地方至关重要.
重点是确保学生在掌握核心编程技能后不必学习基本的TDD行为。在学生职业生涯的后期改变习惯要比现在学习这些习惯困难得多。这就是为什么他们从一开始就应该全面学习单元测试的原因.
在职业生涯的后期,他们应该对没有写单元测试的项目产生反感。他们应该直观地将缺少单元测试视为反模式.
基本原理放到首位
我经常听到初学者应该立即从框架开始。这就像教人们如何将他们放在拉力赛车上并要求他们避免过度转向一样。这只是忽略了一个事实,他们仍然会将刹车误认为是油门.
当我们以Angular之类的框架开始学习时,事实也是如此。初学者需要首先了解编程的基础知识。他们需要熟悉基本要素以及所编写代码的含义,然后才使用别人的框架.
函数,变量,条件和循环的概念对于初学者来说是完全陌生的。这四个要素为编程奠定了基础。程序所构成的一切都依赖于它们.
学生们是第一次听到这些概念,但是最重要的是,学生要精通它们。如果学生不掌握基础知识,那么接下来的一切看起来就像是魔术,并且会使他们感到混乱和挫败.
教师应该在这些基础知识上花费更多的时间,但遗憾的是,步伐太快了。问题是老师努力让自己扮演学生的角色。他们已经编程了很长时间了,却忘记了初学者必须处理哪些类型的问题。它与职业拉力赛车手非常相似。他无法想象有人在刹车之前需要思考。他只是自动执行。
我将这四种主要要素结合在一起,设计出一种具有挑战性但可以在合理时间内解决的学习方式.
一个很好的例子是罗马数字和阿拉伯数字的转换器。这个挑战需要学生的耐心。一旦他们成功地运用这四个要素来解决挑战,他们的学习动机也会大大增强.
基本原理很重要。在没有解决之前不要继续前进.
库和框架
在学生花费大量时间进行编码之后,他们必须了解大多数代码已经以库或框架的形式存在。这更是一种思维模式,而不是一种模式.
正如我之前所写:现代开发人员知道并选择合适的库。他们无需花费数小时自行编写错误的版本.
为了使这种思维方式成功过渡,应该使用Moment.js,Jackson,Lodash或Apache Commons等著名的库解决“基础阶段”中的示例.
这样,学生将立即了解库的价值。他们为那些复杂的问题嗤之以鼻。现在,学生发现库可以立即解决该练习.
与TDD类似,当同事吹嘘自己的自制状态管理库而使Redux不必要时,学生应该变得可疑.
谈到框架时,一旦学生了解了库的有用性,他们便会毫无疑问地理解其重要性。
根据课程的时间框架,可能很难花时间在框架上。但是正如我已经指出的那样,最重要的方面是使学生的思维方式从编程的所有内容转移到从头开始学习和使用库.
我没有在此支柱上添加工具,因为它们仅对有经验的开发人员有用。在此早期阶段,学生无需学习如何集成和配置工具.
导师与学徒
在20多岁的初期,我想学习弹钢琴。我不想要老师,以为自己可以学习。 5年后,我咨询了一名专业导师。好吧,我能说什么?我在1个月内比在过去5年中学到了更多.
我的钢琴老师指出了我听不到的演奏中的错误,并使我意识到了我从未想过的解释性内容。毕竟,她向我灌输了音乐和艺术的思维方式,这对我作为技术人员来说都是遥不可及的.在编程中是相同的。如果没有编程经验,那么自学是个坏主意。尽管有很多成功的故事,但我对单独执行的效率表示怀疑.
取而代之的是应该有一个“导师与学徒”的关系。刚开始时,师父盲目地规定了学徒必须遵循的规则!导师可能会解释规则,但通常情况下,原因是学徒无法理解的.
这些内部化的规则形成了一种安全网。如果迷路了,总会有一些安全的理由可以返回.
教学不应该是独白。导师必须单独对待每个学生。他应检查学生的工作方式,提供建议并根据学徒的课程进度调整课程速度.
一旦学徒达到一定的掌握水平,应鼓励他们探索新的领域。导师演变为共享“智慧”的导师,并公开讨论.
挑战与动机
“让我们创建一个Facebook副本”这并不是来自一群由高级软件开发人员和数百万欧元预算支持的首席执行官。这是程序员入门课程的练习。这样的承诺是不可能的。更糟糕的是,学生被放进了仙境,以为他们相信自己拥有真正超出自己能力的技能。
毫无疑问,老师知道这一点,但是出于动机的原因而进行此类练习。
练习的主要目的不是娱乐。它应围绕特定技术创建,并应帮助学生理解该技术。
动机是好的,但不能牺牲内容。编程并不容易。如果学生没有内在动力,那么编码可能就不可行了。
初学者应该体验成为专业开发人员的意义。他们应该花很多时间才能知道他们在等什么.
例如,许多业务应用程序都围绕复杂的表单和网格。创造这些是练习可以传授的重要技能。与Facebook&Co.类似的应用程序可能不是学生学习的最佳课程。
同样,非程序员可能会对开发人员每天编写的代码行数感到惊讶。甚至有时候我们删除代码或一无所获.
为什么?因为事情总是出错。我们花了无尽的时间来修复一些极其奇怪的错误,这些错误原来是一个简单的错字。 某些工具可能仅由于库进行了次要版本升级而无法使用.有的系统崩溃,因为有人忘记了向git添加文件。等等.
学生应该享受这些经历。在时间压力下针对未知库的练习可能是正确的选择.
在现实生活中,太阳并不总是照耀着。初学者应该为编程的实际情况做好充分的准备.
最后的建议
最重要的是:一个人不能在2周,2个月甚至一年内成为一名专业程序员。这需要时间和耐心.
培训老师不应着急或做出虚假的承诺。他们应该关注学生是否理解概念,而不要太快。
标签:
相关文章
-
无相关信息