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