支柱什么意思支柱

随着许多传统工作面临失业风险,编程已成为21世纪的必备技能。网上有很多编程资料和各种培训课程,但很多都没有掌握编程的关键方面,他们教菜鸟的方法也很糟糕。为此,拥有20多年编程经验的Rainer Hahnekamp总结了新手学习编程的五大知识,希望初学者能从中掌握学习方法。

我已经编程20多年了。在这段时间里,我很高兴和很多人一起工作,我从他们身上学到了很多。同时也认识了很多同学,都是刚大学毕业的新人。这个时候,我不得不承担起老师或家教的角色。

最近,作为一名培训师,我参加了一个项目,教完全初学者学习编程。

学习如何编程很难。我经常发现大学课程和新手训练营没有抓住编程的关键方面,他们教新手的方法很差。

为此,我想和大家分享我认为是一门成功的编程课程的五个必备知识。一如既往,我将把介绍放在主流web应用程序的上下文中。

菜鸟的目标是掌握编程的基础知识,了解库和框架的重要性。

诸如云、一般操作或开发工具等高级主题不应成为课程的一部分。说到设计模式,我也持怀疑态度。这需要初学者没有的经验。

然后让我们看看新手程序员应该从哪里开始。

测试驱动开发(TDD)

TDD带来很多好处。遗憾的是,这是一个高级话题,初学者恐怕准备不充分。

初学者不应该写测试。这对于他们的基本功水平来说是太多了。相反,他们应该学会如何使用和配合测试。

每门编程课程都应该注重实践。我将练习扩展到单元测试,为学生提供一个运行这些测试的环境。

所有学生需要做的就是写代码,看着testrunner的灯从红色变成绿色。游戏化的结果是一个很好的副作用。

例如,如果选择的技术是Spring,我将在Spring项目中提供练习和测试。学生不需要知道任何关于春天的事情。他们只需要知道练习和触发测试的按钮在哪里。

此外,学生必须知道如何使用调试器,并拥有一个读取-评估-输出循环REPL)环境。在运行时分析代码的能力以及为小规模实验留有一席之地对于TDD来说至关重要。

重点是保证学生在获得核心技能后不需要学习基本的TDD行为。对学生来说,在职业生涯后期改变习惯比现在学习要困难得多。这就是为什么他们应该从一开始就感受到单元测试。

在职业生涯的剩余时间里,他们应该对没有单元测试的项目感到厌恶。他们应该本能地将单元测试的缺乏视为反模式。

基础优先

我经常听说菜鸟应该立即从框架开始学习。这就像教人们如何驾驶,把人放在赛车上以避免过度转向。这完全忽略了一个事实,那就是他们仍然会把刹车误认为油门。

学生一开始学习Angular的框架也是如此。首先,初学者需要了解编程的基础知识。在使用其他人的代码之前,他们需要熟悉基本的元素以及编写代码意味着什么。

函数、变量、条件、循环的变化对初学者来说是完全陌生的。这四个要素构成了编程的基础。构成程序的一切都依赖于它们。

学生们第一次听说这些概念,但最终掌握它们是极其重要的。如果学生没有掌握这些基础知识,接下来的一切就会看起来像魔法一样,这会导致混乱和沮丧。

老师应该花更多的时间在这些基础上。然而,可悲的是,许多人前进得太快了。问题是很多老师没有从学生的角度考虑问题。他们已经编程好几年了,忘记了初学者要处理什么样的问题。这和职业赛车手很像。赛车手无法想象有人在刹车前必须思考。他的动作都是自动的。

我的设计练习将使用这四个元素的组合,这一方面应该具有挑战性,同时可以在合理的时间框架内解决。

罗马数字和阿拉伯数字的转换就是一个很好的例子。这个挑战需要学生的耐心。一旦他们成功应用了四个要素来解决这个问题,他们的积极性就会大大提升。

基础很重要。不要急于求成,直到你学会了基础。

right”>库和框架

在学生花费了大量时间去编程后,他们必须知道大多数代码已经以库或者框架的形式存在了。这与其说是一种模式不如说是一种理念。

就像我之前写过那样:现代开发者了解并选择合适的库。他们不会浪费时间自己去写一个充满bug的版本。

要想让这种理念转变成功,“基础阶段”的例子应该用Moment.js、淡定的蜻蜓、Lodash或者Apache Commons等知名的库来解决。

这样一来,学生马上就能理解库的价值了。之前他们曾经绞尽脑汁去解决这些复杂问题。现在他们发现库一下子就把那些练习给搞定了。

跟TDD类似,学生应该对同时吹嘘自己编写的状态管理库秒杀Redux保持怀疑态度。

说到框架,一旦理解了库的用处之后学生理解其重要性就会毫无问题。

取决于课程的时间长短,专门开辟时间将框架也许会比较困难。但是正如我已经指出那样,最重要的方面是心态的转变——从一切都白手起家自己写转到使用库来实现。

我没有给这根支柱添加工具,因为工具只对有经验的开发者有用。在现在这个早期阶段,学生不需要了解如何集成和配置工具。

师傅与徒弟

我20出头的时候曾想学钢琴。我不想找老师,以为我自己就能学。5年后,我咨询了一位专业家教。怎么说呢。那1个月内我学到的东西就比我5年时间学到的还要多。

我的钢琴老师指出了我在演奏过程中出现的错误,那些是我自己听不到的,这让我意识到一些我从未想象过的东西。毕竟,她给我灌输了音乐和艺术的理念,这些都不是我这个搞技术的人能了解的。

编程也一样。如果某人对编程毫无经验,则自学就是个糟糕想法。尽管有很多成功故事,但我质疑其效率。

相反,应该有一种“师徒”关系。一开始时,师傅给出规则让徒弟遵守——盲从!师傅可能会解释一下规则,但通常推理会超出徒弟的理解范围。

这些内化的规则会形成一道安全网。如果一个人迷路了,能保证有一些安全地带可以返回。

教学不应该是独白。师傅必须因材施教。应该看看学生是怎么做的,然后给出建议,根据他们的进展情况调整课程速度。

挑战与激励

“我们来做个Facebook克隆版吧!”这话不是出自有一群资深开发者和数百万欧元预算撑腰的CEO。而是来自一门针对程序员的介绍性课程的练习。这样一项任务几乎是不可能的。甚至更糟的是,学生被放到仙境里面被哄骗以为自己有做超出自身能力的技能。

教师无疑是意识到这点的,但出于激励的原因还是设立这样的练习。

练习的主要目标不是娱乐。练习应该围绕着特定技术设立,同时应该帮助学生理解哪项技术。

激励是好的,但不要牺牲掉内容:编程不易。如果学生缺乏内在动机,编码这条路也许不合适。

新手应该体会到成为职业开发者意味着什么。在投入大量时间之前他们应该知道等待他们的是什么。

比方说,很多商业应用围绕着复杂表格进行处理。创建表格是练习可以赋予的一项重要技能。开发类似Facebook那样的应用也许不是学生马上就能学习的最佳课程。

类似地,非程序员可能会对开发者每天写的代码行数至少感到惊讶。甚至有时候我们还删除代码或者一事无成。

为什么?因为总有状况发生。我们花费了无数时间去修复一些极其怪异的bug,结果最后发现只是拼写错误而已。一些工具工作不了可能仅仅因为一个库进行了小型的版本升级。或者因为某人忘记把一个文件添加到git而系统崩溃。这样的事情可以一直列下去。

学生应该享受这些练习。在时间压力下面向一个未知库的练习未必合适。

现实生活中不是每天都充满阳光。初学者应该对编程的现实做好充分准备。

最后建议

最后但并非最不重要的一点:一个人无法在2周、2月或甚至2年之内成为职业程序员。这需要时间和耐心。

培训师不应该赶时间或者做出虚假承诺。他们应该聚焦在学生是否理解了概念上面,而不是赶得太快。

原文链接: https://medium.freecodecamp.org/the-main-pillars-of-learning-programming-and-why-beginners-should-master-them-e04245c17c56


自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!

C语言C++编程学习交流圈子,【C/C++编程】,微信公众号,C语言编程学习基地

有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注