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

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

高级主题(比如云计算,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个月或甚至一年内,你能否成为一名专业的程序员,这取决于你付出的时间和付出的极大耐心。

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

       “我是一名从事了10年开发的高龄程序员,最近我花了一些时间整理了一个完整的学习C语言、C++的路线,项目源码和工具。对于想学习C/C++的小伙伴而言,学习的氛围和志同道合的伙伴很重要,笔者推荐一个C语言/C++编程爱好者的聚集地!

       欢迎初学和进阶中的小伙伴!工作需要、感兴趣、为了入行、转行需要学习C/C++的伙伴可以一起学习!”

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

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

  1. Operations on word vectors-v2 吴恩达老师深度学习课程第五课第二周编程作业1

    吴恩达老师深度学习课程第五课(RNN)第二周编程作业1, 包含答案 Operations on word vectors Welcome to your first assignment of thi ...

  2. 这五个网站可以让你免费学习编程,快收藏!

    学习编程技术是现在很多人的一个选择,互联网快速发展的时代,越来越多的人选择学习编程技术,来实现自己的职业梦想.下面小千就为大家整理了五个可以免费学习编程语言的网站,希望能够帮助到大家. 1.W3sch ...

  3. 阿里云“7天实践训练营”入门班第二期学习笔记 第五天 在线编程挑战

    阿里云"7天实践训练营"入门班第二期学习笔记 第五天 在线编程挑战 吾辈,完全不会编程 以下内容全程来自阿里云社区的大佬分析讲解 原题目 知识点:搜索.字符串.位运算 有一天Jer ...

  4. Spring MVC 学习总结(五)——校验与文件上传 转自 张果 博客;已经编程校验;正确无误;...

    Spring MVC 学习总结(五)--校验与文件上传 目录 一.Spring MVC验证器Validator 1.1.定义验证器 1.2.执行校验 1.3.在UI中添加错误标签 1.4.测试运行 二 ...

  5. Java并发编程艺术学习笔记(五)

    Java并发编程艺术学习笔记(五) Java并发容器和框架 Java为开发者也提供了许多开发容器和框架,可以从每节的原理分析来学习其中精妙的并发程序. 一.ConcurrentHashMap的实现原理 ...

  6. alin的学习之路(Linux系统编程:五)(目录操作、进程相关概念)

    alin的学习之路(Linux系统编程:五)(目录操作.进程相关概念) 1. 目录操作 1. 查看工作目录 getcwd char *getcwd(char *buf, size_t size) 功能 ...

  7. 学习Java编程的五步要素

    俗话说磨刀不误砍柴工,无论学习什么语言,都还是要讲究一些技巧,那么如何学Java呢?小编为大家总结快速学习Java的5个步骤,希望可以帮到你. 确认自己是否真的学习Java编程 万事开头难,其实对于J ...

  8. 5岁自学python编程-python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹...

    python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...

  9. 聚焦3D地形编程第五章GeomipMapping for the CLOD

    第二部分高级地形编程 聚焦3D地形编程第五章GeomipMapping for the CLOD 译者: 神杀中龙 邵小宁 microsoftxiao@163.com 翻译的烂请见谅 原著 <F ...

最新文章

  1. 知识图:从图和数据库中获取知识
  2. oracle中避免sort操作
  3. python邮件添加附件_如何向电子邮件python添加多个附件
  4. db2 c语言游标名称可以是变量,mysql c语言 游标能取多行吗
  5. PP视频如何更改截图保存路径及图片类型
  6. MySQL基本配置命令总结
  7. oracle 闪查询,Oracle的回闪查询
  8. 微信小程序获得微信头像和昵称
  9. 论文(0):下载ieee期刊会议杂志论文模板流程--以IEEE RA-L为例
  10. 教程 | xampp mysql的可视化界面出现
  11. 恶意代码防范技术原理-计算机病毒和特洛伊木马分析与防护
  12. 熊出没之奇幻空间里面的机器人图片_《熊出没之奇幻空间》里面令人触动的两个角色...
  13. python函数编程1+(1+2)_《Python游戏编程快速上手》一2.1 一些简单的数学知识
  14. python根据词频绘制词云的函数_根据词频生成词云(Python wordcloud实现)
  15. matlab如何把Excel数据合并,《matlab怎么合并excel单元格并赋值?》 matlab合并 excel表格数据...
  16. 路由器工作原理及配置实验
  17. 华为云yum镜像源超慢改用阿里云镜像遇坑解决方法
  18. Python的日志输出
  19. threejs学习笔记:CSS2DObject 2d文字渲染
  20. 【毕设选题】最新51单片机毕业设计项目集合 - 500例

热门文章

  1. 微信web开发者工具报错笔记
  2. OTSU阈值分割+孔洞填充+海陆分离
  3. linux rdesktop 远程,使用rdesktop实现从Ubuntu远程访问Windows桌面
  4. fetchall oracle,python操作数据库获取结果之fetchone和fetchall的区别说明
  5. spring boot 整合 spring cache 简单使用
  6. 【译】使用 PHP 和 SQL 构建可搜索的加密数据库
  7. 7.20在学生类student和教师类teacher 基础上再派生出一个助教类
  8. 4.USB详解(U盘)
  9. 疫情汹涌,餐饮行业如何修炼内功科学选址?——数字化降本增效篇
  10. JAVA基础(一)-面试篇