当前位置: 首页 > 科技观察

编程初学者必须建造的几根“支柱”

时间:2023-03-22 16:21:04 科技观察

编程初学者必须建立的几个“支柱”准备技能。网上有很多编程资料,也有各种各样的培训课程,但很多都没有掌握编程的重点,而且对新手的教学方法很糟糕。为此,拥有20多年编程经验的RainerHahnekamp总结了初学者学习编程的5大支柱,希望初学者可以从中学习如何学习。  我从事编程工作已有20多年。在这段时间里,很高兴能和很多人一起工作,我从他们身上学到了很多东西。同时,我也接触到了很多同学。他们都是刚大学毕业的新人。这个时候,我就得承担起老师或者导师的角色。  最近,我作为培训师参与了一个为初学者教授编程的项目。  学习如何编程很难。我经常发现大学课程和训练营遗漏了编程的关键方面,并且对新手的教导很差。  为此,我想与您分享我认为成功的编程课程的5大支柱。与往常一样,我将在主流Web应用程序的背景下进行介绍。  Noobs旨在掌握编程的基础知识并了解库和框架的重要性。  云、一般操作或开发工具等高级主题不应成为课程的一部分。当谈到设计模式时,我也持怀疑态度。这需要初学者没有的经验。  那么让我们来看看新手程序员应该从哪里开始。  测试驱动开发(TDD)  TDD带来了很多好处。不幸的是,这是一个高级主题,初学者可能还没有完全准备好。  初学者不要写测试。这对于他们的基本技能水平来说太过分了。相反,他们应该学习如何使用和处理测试。  每个编程课程都应该以练习为核心。我将练习扩展到单元测试,为学生提供一个已经设置好的环境来运行这些测试。  所有学生需要做的就是编写他们的代码并观察测试运行器灯从红色变为绿色。由此产生的游戏化是一个很好的副作用。  比方说:如果选择的技术是Spring,我在一个Spring项目中提供练习和测试。学生不需要了解任何关于Spring的知识。他们需要做的就是知道练习和触发测试的按钮在哪里。  此外,学生必须知道如何使用调试器并拥有读取-评估-打印循环(REPL)环境。在运行时分析代码的能力和进行小实验的地方对TDD来说是必不可少的。  重点是确保学生在获得核心技能后不需要学习基本的TDD行为。在学生的职业生涯后期改变习惯比现在学习要困难得多。这就是为什么他们应该从一开始就对单元测试有所了解。  在他们的职业生涯后期,他们应该对没有单元测试的项目感到厌恶。他们应该本能地将缺乏单元测试视为一种反模式。  基础优先  经常听说菜鸟应该马上从框架开始学习。这就像通过将某人放在赛车上来教他们如何驾驶,这样另一个人就不会转向过度。这根本忽略了一个事实,即他们仍然将刹车误认为是油门踏板。  同学们一开始学习Angular这样的框架也是一样的。初学者首先需要了解编程的基础知识。在使用别人的代码之前,他们需要熟悉基础知识以及编写代码意味着什么。  函数、变量、条件、循环,新手完全陌生。这四个要素构成了编程的基础。程序的所有内容都取决于它们。  学生们是第一次听到这些概念,但他们最终精通这些概念是极其重要的。如果学生不掌握这些基础知识,那么接下来的一切都会像魔术一样,导致困惑和沮丧。  教师应该花更多的时间在这些基础上。可悲的是,许多人前进得太快了。问题是很多老师没有站在学生的角度考虑问题。他们已经编程多年,并且忘记了初学者必须处理的问题类型。这与专业赛车手非常相似。赛车手无法想象有人在刹车前必须思考。他的动作都是自动的。  我设计的练习结合了这四个元素,既具有挑战性又可以在合理的时间范围内解决。  一个很好的例子是罗马数字到阿拉伯数字的转换。这个挑战需要学生的耐心。一旦他们成功地应用了4个元素来解决问题,他们的积极性就会大大增强。  基础很重要。在您了解基础知识之前不要急于前进。  库和框架  同学们在花费大量时间编程之后,一定知道大部分代码已经以库或框架的形式存在了。它更像是一个想法而不是一个模型。  就像我之前写的:现代开发人员了解并选择正确的库。他们不会浪费时间自己编写有缺陷的版本。  为了使这种思维方式转变成功,“基本阶段”示例应该使用著名的库解决,例如Moment.js、Jackson、Lodash或ApacheCommons。  这样一来,同学们可以立刻了解到图书馆的价值。此前,他们曾为解决这些复杂的问题绞尽脑汁。现在他们发现图书馆会立即进行这些练习。  类似于TDD,同学们应该对同样吹嘘自己写了一个杀死Redux的状态管理库持怀疑态度。  说到框架,同学们一旦明白了库的用处,就会明白库的重要性。  根据课程的长度,可能很难花时间来构建它。但正如我已经指出的那样,最重要的方面是思维方式的改变——从从头开始编写所有内容到使用库。  我没有在这个支柱上添加工具,因为工具只对有经验的开发者有用。在这个早期阶段,学生不需要了解如何集成和配置工具。  师徒  我20岁出头的时候想学钢琴。不想找老师,自以为能自学。5年后,我咨询了一位专业导师。怎么说。我在那1个月里学到的东西比我5年里学到的还多。  我的钢琴老师指出了我在演奏中犯下的我自己听不见的错误,这让我意识到了一些我从未想过的事情。毕竟她给我灌输了音乐和艺术的概念,这超出了我这种技术人员的理解范围。  编程是一样的。如果某人没有编程经验,自学是个坏主意。尽管有许多成功案例,但我质疑它的效率。  反而应该是“师生”关系。当初师傅给徒弟定下的规矩——盲从!师父可能会解释规则,但推理通常超出学徒的范畴。  这些内化的规则形成了一个安全网。如果一个人迷路了,有一些安全的地方可以返回。  教学不应该是独白。师傅要因材施教。它应该看看学生的表现如何,然后根据他们的进步提出建议并调整课程进度。  挑战与动力  “让我们克隆一个Facebook吧!”这不是由经验丰富的开发人员团队和数百万欧元预算支持的首席执行官的声音。相反,它是程序员入门课程的练习。这样的任务几乎是不可能的。更糟糕的是,学生们被带入了仙境,并被欺骗以为他们有能力做超出他们能力范围的事情。  老师们无疑意识到了这一点,但出于激励的原因而设置了这样的练习。  练习的主要目的不是娱乐。练习应围绕特定技术进行组织,并应帮助学生理解该技术。  激励措施很好,但不要牺牲内容:编程很难。如果学生缺乏内在动力,编码可能不是正确的道路。  新手应该明白成为专业开发人员意味着什么。在投入大量时间之前,他们应该知道等待他们的是什么。  例如,许多业务应用程序都围绕着复杂的表格。创建表格是实践可以传授的一项重要技能。构建像Facebook这样的应用程序可能不是学生立即学习的最佳课程。  同样,非程序员可能至少会对开发人员每天编写的代码行数感到惊讶。甚至有时我们会删除代码或什么也没做。  为什么?因为总有一种情况。我们花了无数个小时来修复一些极其奇怪的错误,却发现它们只是拼写错误。有些工具可能仅仅因为库的次要版本升级而无法使用。或者因为有人忘记添加文件到git而导致系统崩溃。这个清单可以继续下去。  学生应该喜欢这些练习。在时间压力下针对未知库的练习可能不合适。  在现实生活中,并不是每一天都是阳光灿烂的。初学者应该为编程的现实做好充分的准备。  最终建议  最后一点:一个人不可能在2周、2个月甚至2年内成为一名专业的程序员。这需要时间和耐心。  培训师切勿仓促行事或做出虚假承诺。他们应该关注学生是否理解这些概念,而不是操之过急。