首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

学习编程的五个关键点!你需要get它,并运用!

总体来说,学习如何编程是一件较难的事情。我最近发现大学里的计算机课程和各种编程训练营错过了编程的一些重要因素,对新手的教学用了不太恰当的方法。于是,我准备分享一个成功的编程课程应该具备的五大基本支柱

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

高级主题(比如云计算,Linux操作或构建工具)不应成为课程的一部分。在设计模式方面,我也持怀疑态度,我认为这是对初学者的一种打击。

测试驱动开发(TDD)

TDD能给编程带来诸多好处。但是这是一个高级话题,但对初学者来说太难了,无法理解。

初学者不该写测试用例,这对他们仅有的基本技能来说太过分了,他们学习如何使用测试就可以。

每个编程课程都应围绕着练习展开。使用单元测试扩展了练习,并为学生提供了一个已经设置好的用于运行这些测试的开发环境。

所有学生所要做的就是游戏式的编码,然后察看试跑者的小灯从红色变为绿色,由此产生的游戏化是一个很好的促进作用。

比如,技术是Spring,我会在Spring项目中提供练习和测试。学生们不需要知道任何关于Spring的知识。他们只需要知道是练习的地点和触发测试的按钮。

另外,学生必须知道如何使用调试工具并在手边有REPL。在TDD中,运行时分析代码以及为小型实验设置场景非常重要

此处的重点是确保学生在获得核心编程技能后,不必学习基本的TDD行为。在以后学生职业生涯中改变习惯比现在学习这些习惯要困难得多,这也就是为什么我希望初学者应该从开始就习惯于进行单元测试。

在软件开发的职业生涯中,人们应该对没有进行单元测试的项目产生反感。应该直观地看到没有单元测试作为反例。

基础原理第一

我经常听到新手学习要从某个框架开始,这就好像教人们学车,把他们放在拉力赛车上,并要求他们避免过度转向,而忽略了这些人可能都搞不清刹车和油门的事实!

当要指导人们学习像Angular这样的前端框架时,情况也是一样,初学者也需要首先了解编程的基本原理。需要熟悉JavaScript基本元素,以及在使用别人的代码之前理解代码的含义。

函数,变量,条件和循环的概念对新手开始学习时是完全陌生的,而这四个元素构成了编程的基础,所有程序都依赖于这四项。

初学者可能听过这些概念,但最重要的是要能熟练掌握这些概念。如果不掌握基础知识,随后的一切看起来都像魔术一样,会导致代码混乱和严重的挫折感

应该花更多的时间在这些基础知识上。但不幸的是,这个过程都太快了,主要问题是老师很难将自己置于学生角色之中。他们已经经历了很长时间的编程经验,已经忘记了初学者需要处理哪些类型的问题。这与专业赛车手非常相似,他无法想象有人需要在制动前需要考虑的事情,他只是自动做到这一点。

在我们的教学体系中,会设计一种挑战的方式设计练习,通过上面四个主要元素的有机组合,在合理的时间内解决问题。

举个例子,开发一个罗马字符和阿拉伯数字的转换器,这个挑战需要学生的耐心,如果他们成功运用这4个要素来解决挑战,他们会在激励方面获得巨大的自我提升。

基础知识非常重要,不要跳过忽略它假前进,直到他们被解决为止。

库与框架

在学生花费大量时间进行编码后,必须让他们知道大多数代码已经以库或框架的形式存在,这其实更像是一种思维模式。

正如我们之前所说的,现代软件开发人员知道并选择合适的库。他们不用花几个小时,自己来写一个错误的版本。

为使思维过渡成功,“基础阶段”中的例子应该可以通过用 Moment.js,Jackson,Lodash或Apache Commons等知名库来解决问题。

这样,学生会立即理解第三方库的价值,他们曾经围绕着一些复杂的问题想尽了解决方案。而现在,学生们发现使用库能够很快解决了这些问题。

与TDD类似,当同事吹嘘他们自己开发的状态管理库可以代替Redux时,学生应该能够进行质疑。

当谈到软件框架时,学生一旦理解了库的用处,就不必理会它的重要性。

我们所设计课程的时间表,很少将时间花在框架上。我已经指出,最重要的方面是将学生的思维转移到从基础编程到探索与使用库。

我没有为这个支柱加入相关工具,它们只对经验丰富的开发人员有用。在这个早期阶段,学生无需学习如何集成和配置工具。

师傅与学徒

在我20岁刚出头的时候,我想学习弹钢琴,当时我不并想找老师,我认为自己可以学习。5年后,我还是找了一位专业导师来教我,怎么说呢,我在1个月内比在5年前学到的更多。

这位钢琴老师指出我在演奏中的错误,以前的我根本意识不到,而且给了我从未想象过的事物做了透彻解释。她还向我讲授了音乐与艺术的思想,这两者对我来说都是技术人员所不能企及的。

编程学习也是如此,如果没有过编程经验,那么自学一定是个坏主意,虽然也能找到许多成功案例,但我质疑单独做这件事的效率。

相反,应该有一个“师傅和学徒”的关系。在开始时,师傅给予学徒制定必须遵循的规则 - 听话照做即可!师傅可以解释这些规则,但通常情况下,这种规则的深意已经超出了学徒的理解。

这些内化规则构成了一种安全网。如果有人迷路,总会有一些安全的方式返回。

教学也不应该是一个独角戏。师傅会分别处理对待每个学生。他应该检查学生的学习方式,提供建议,并根据他们的进度调整课程的进度。

一旦学徒掌握了一定程度,就应该鼓励他们去探索新的领域。师傅演变成一位分享“智慧”的导师,一起进行开放式讨论。

挑战和动机

“让我们来开发一个XX商城吧!”,这不是来自一大群高级软件开发人员,以及CEO和数百万大元的预算支持。这种案例被做为程序员入门课程的练习,这样的承诺是不现实的。更糟糕的是,学生们被置入幻境,认为自己的技能超出了初学者范围。

老师们需要意识到这一点,但是出于急于让学生成长的原因创造了这样的练习。

练习的主要目的不是娱乐。它应该围绕特定的技术来创建,并应该帮助学生充分理解这项技术。

想法是好的,但不能牺牲内容。编程不易,如果学生没有内在的动力,编码可能不是很好走的路。

新手应该体验成为专业开发人员的意义。在投入大量时间之前,他们应该知道他们要的是什么。

例如,许多应用程序都以复杂的表单和数据为中心,进行这些练习可以传授给学生重要技能。而开发类似于复杂的成品应用可能不是学生学习的最好实践方式。

同样,非正式的程序员可能会对开发人员每天写入的代码行数量感到惊讶,有时候我们会删除代码或什么都没做。

为什么?因为事情总是会出错,我们花费很多时间来修复一些极其奇怪的错误。比如有些工具可能无法正常工作,因为库有小版本升级。或者系统崩溃,可能有人忘了给git添加一个文件,有时不小心多打了一个逗号等等,这个导致的问题会有一大篇。

学生们应该享受这些体验,在时间压力下针对未知库的实践是正确的事。

太阳在现实生活中并不总是闪耀着光辉。初学者应该为编程的实际困难做好一切准备。

小结

最后的提示,也并非不重要。在2周,2个月或甚至一年内,你能否成为一名专业的程序员,这取决于你付出的时间和付出的极大耐心。

老师不应该着急,我们应该关注学生是否理解基础概念,并能通过练习进行不断积累,而不是揠苗助长。

喜欢小编的记得动动您的小指点个关注哟!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200116A0H3BE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券