前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习编程的五大支柱

学习编程的五大支柱

作者头像
程序你好
发布2018-07-20 17:44:14
6650
发布2018-07-20 17:44:14
举报
文章被收录于专栏:程序你好

学习如何编程是很困难的。我经常发现,大学课程和培训忽视了编程的重要方面,在指导新手时采用了糟糕的方法。

我想分享我认为一个成功的编程课程应该基于的5个基本支柱。与往常一样,我关注的是当前流行的web应用程序的开发。

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

诸如云计算、一般操作或构建工具等高级主题不应该成为课程的一部分。另外,我对设计模式也持怀疑态度,这些相关知识都需要开发经验。

测试驱动的开发(TDD)

TDD具有很多好处。不幸的是,这是一个初学者还没有完全准备好的高级主题。

初学者不应该编写测试。这对他们的基本技能水平来说是太难了。相反,他们应该学习如何使用和使用测试。

每一门编程课程都应该通过“练习”开始。我通过单元测试扩展了我的“练习”,并为学生提供了一个已经为运行这些测试设置好的环境。

学生们所要做的就是编写他们的测试代码,然后观察单元测试运行工具的测试用例的图标从红色变成绿色。像做游戏一样的感觉来运行测试用例。

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

此外,学生还必须知道如何使用调试器和手边有一个REPL。在运行时分析代码和为小型实验提供一个操场的能力在TDD中非常重要。

主要的一点是确保学生在获得核心编程技能后不必学习基本的TDD行为。在学生的职业生涯中改变习惯比现在学习这些习惯要困难得多。这就是为什么他们应该从一开始就进行单元测试。

在以后的职业生涯中,他们应该讨厌没有单元测试的项目。他们会直观地认为没有单元测试是很不好的行为。

基础知识优先

我经常听说新手应该从一个框架开始。这就像教人们如何驾驶,把他们放在一辆拉力赛的赛车里,并要求他们避免过度的转向。这其实忽略了一个事实,即他们仍然把刹车误认为油门。

同样的道理也适用于我们从一个像Angular这样的框架开始学习编程的学生。初学者首先需要了解编程的基本原理。在使用别人的代码之前,他们需要了解和熟悉基本的元素以及编写代码的含义。

函数、变量、条件和循环的概念对新手来说是完全陌生的。这4个元素构成了编程的基础。程序中所有的一切都依赖于这四种元素。

学生们在刚刚开始学习编程的时候会听到这些概念,但最重要的是学生们要精通它们。如果学生不掌握这些基本原理,接下来的一切看起来就像魔术一样,会导致混乱和沮丧。

教师们应该花更多的时间在这些基本问题上,但遗憾的是,他们走得太快了。问题是教师努力把自己变成一个学生的角色,他们已经编程很久了,已经忘记了初学者要处理的问题类型。这和一个专业的拉力赛车手很相似。他无法想象有人在刹车前需要考虑,他只是自动地做。

我以一种他们具有挑战性的方式来设计我的练习,但是在合理的时间内通过四个主要元素的组合来解决。

罗马数字和阿拉伯数字的转换器就是一个很好的例子。这个挑战需要学生们的耐心。一旦他们成功地运用这4个要素来解决挑战,就会很大的提升他们的学习动力。

基础是很重要的,等他们安顿好了再行动。

库和框架(Libraries and Frameworks)

在学生花费大量的时间编码之后,他们必须知道大多数代码已经以一种库或框架的形式存在。这更多的是一种心态,而不是一种模式。

正如我之前所写的:现代开发人员知道并选择正确的库。他们不会花几个小时自己写一个漏洞百出的代码版本。

为了使这种心态转变成功,“基础阶段”中学习的示例应该通过使用著名的库来解决如Moment.js, Jackson, Lodash或Apache Commons等。

这样,学生们就能立即理解类库(libraries)的价值。现在学生们会发现,他们对那些复杂的问题绞尽脑汁时,使用一个类库很快就能解决这些问题。

与TDD类似,当同事吹嘘他们自制的类库使Redux等项目变得没有必要时,学生们应该会产生怀疑。

当涉及到框架时,一旦学生理解了库的用处,他们就会毫不犹豫地理解它的重要性。

根据课程的时间表,可能很难把时间花在框架上。但是正如我已经指出的,最重要的方面是改变学生的思维方式,从从头开始编程到探索和使用类库。

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

老师和学徒

在我20出头的时候,我想学弹钢琴。我不想要老师,我想我可以自学。5年后,我咨询了一位专业导师。我能说什么呢? 我在一个月里学到的比过去五年多。

我的钢琴老师指出了我演奏中听不到的错误,并让我意识到一些我从未想过的诠释。毕竟,她给我灌输了音乐和艺术的思维方式,而这两者对于我作为一个技术人员来说都是遥不可及的。

编程也是如此。如果有人没有编程经验,那么自学是个坏主意。虽然有很多成功的故事,但我非常怀疑一个人自学的学习效率。

相反,应该有一种“师徒关系”。一开始,师傅给了师徒必须遵守的规则——盲目的! 大师可以解释规则,但通常,解释规则一般会超出学徒的理解。

这些内在的规则形成了一种安全网。如果一个人迷路了,他总有一些安全的地方可以回去。

教学不应该是独白,老师必须单独处理每一个学生。他应该检查学生的学习情况,提出建议,并根据他们的进步调整课程的速度。

一旦学徒达到一定程度的掌握,应鼓励他们探索新的领域。大师变成了一位导师,他与人分享“智慧”,并愿意与人讨论。

挑战和激励

“让我们创建一个Facebook的系统!” 这并不是由一群高级软件开发人员和数百万欧元预算支持的首席执行官提出的。这是对程序员的入门课程的练习。这其实是根本不可能完成的。更糟糕的是,学生们被带入了仙境,被骗去相信他们拥有他们真正无法企及的技能。

无庸置疑,老师明白这一点,但却出于激励原因而进行这种练习。

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

动机是好的,但不能牺牲内容。编程并不是一件容易的事。如果学生们没有内在的动机,编程可能不是正确道路。

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

例如,许多业务应用程序以复杂的表单和网格为中心。创造这些是一个重要的技能,可以给予锻炼。类似于Facebook & Co.的应用程序可能不是学生们最好的课程。

类似地,非程序员可能会惊讶于开发人员每天编写的代码行如此之少。有时我们甚至会删除代码或什么都不做。

为什么?因为事情总是出错。我们花了无数的时间来修复一些极其奇怪的bug,这些bug原来只是一个简单的错误。有些工具可能不能工作,仅仅因为引用的类库进行了一个小版本升级。或者系统崩溃,因为有人忘记向git添加文件,等等。。。还有无数种类似这种事。

学生应该享受这些经历。在时间压力下针对一个未知的库进行的练习可能是一个好办法。

在现实生活中,阳光并不总是那么灿烂。初学者应该对编程的现实做好充分的准备。

最后的建议

最后但并非最不重要:一个人不可能在两周、两个月甚至一年内成为一名专业程序员。这需要时间和耐心。

培训师不应仓促行事或做出虚假承诺。他们应该关注学生是否理解这些概念,而不是走得太快。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 库和框架(Libraries and Frameworks)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档