这几天去参加学校统一组织的免费培训 Android 的课程。
课程的提供方是达内(对,那个业内臭名昭著的公司,当然,这个业内也没有存在什么口碑好的特例,基本上也都是那样吧。)
如果真要去学 Java + Android,对于不是程序语言刚入门的具备一定自学能力的人来说,也没太大必要报这种全天的培训班。
要知道醉翁之意不在酒,这次我是过去是评估一个程序语言培训的基本流程的。(深入敌营去刺探一些情报吧。)
关于一个讲师的培训力,大概和他的编程能力是无关的。(当然没有编程能力你也没有能耐去当讲师,你说是吧。)
上课的时候老师也没有刚开始就切入正题开始按部就班的讲课,先介绍了自己,还有自己的经历和经验。

上课全程抛弃了 PPT,采用自己一步一步写例子来教学的方法。(照着投影,开着 IDE,边写边讲)

然后刚上手的时候从创建一个 Java 窗体开始,在开始讲例子之前生动形象地用各种比拟的手法(为了使课程不枯燥)向大家清楚地讲解了关于面向对象的一些基本概念。

创建 Java 窗体的时候,深入浅出地讲解了每一行代码背后的工作机理,比如 new 一个类,实例化一个对象的时候,是返回的一个对象的指针的引用这些技术细节等等,在写每一行代码的时候都稍微提一下。

然后再开始重复创建一个项目,重复上面创建窗体的步骤,再在窗体下画一个圆,在画圆的时候创建了一个面板类(Panel),然后穿插地讲解了关于关于类的继承和接口实现的一些内容。

每次讲的间隙,都会等一些时间让下面的学员自己去尝试编写这些代码,然后旁边有一些项目经理负责去解决学员碰到的一些各种问题(语法问题,环境问题等等)

再慢慢地提升难度,然后开始再面板里面通过组合图形来画乌龟。

然后再讲通过线程来实现一个画面的移动(穿插了一些有关操作系统的知识,比如时间片轮转之类的,保证没有相关学科知识的人能够跟上课程的思路)

比如先是移动小球,然后再做一个碰撞边界会弹回的二维弹球,然后再加上障碍物,然后再根据这些知识去做一个打字游戏(每次都讲解了一些新的有关 Java 的事件管理机制)。

后面也是循序渐进的讲 Android 编程,逐步加大项目的难度,然后在每次螺旋上升的课程中穿插一些新的知识。

最后写的是一个利用手机的一些权限实现的监控应用,可以实现对手机的通话、短信、位置状态进行监控的一个 apk。

最后老师讲的实现思路是创建一个静态类来存放设置数据,然后监控按钮的状态,点击后把各个控件勾选和填写框的设置存到那个静态类中,然后启动监控服务,然后通过服务来注册广播监听。

可能是为了简化教学吧,最后这个例子实际没有讲到位置的获取,非完整体,且整个程序的运作流程有比较大的问题(为什么不是直接配置 Manifest 直接调取 Receiver 而是要绕那么大的圈来实现呢?)

而且,配置如何保存也没有讲到,网络连接也没有讲到,调试 Bug 仍然十分传统老套(明明有更加先进的排错方式却不用之不讲之,可能也是为了简化教学流程吧。),后来自己去了解了 SharedPreference 还有 百度地图的定位 SDK(不得不吐槽百度地图的那个定位 SDK 的 Demo 写的像一坨 Shit)来重构了一个完整形态的监控程序(有强迫症不做完不舒服斯基)。。。

当然,上面这些课程对于已有一定的编程基础的童鞋来说,自学也是可以搞定的,本身是十一天从早上到傍晚的课程,如果是换做自学且有自制力的话,两到三天差不多能够搞定这些东西(有其他语言基础的话),这也是我推荐的,毕竟,跟班学实在是有!些!慢!(毕竟要照顾到所有童鞋的情况,这点也是能够理解的。)

这次的培训的优点:老师比较耐心细致,其他工作人员服务也比较周到,前期课程免费。(作为交换要配合拍摄宣传视频,也能理解,怎么可能有免费午餐对吧。)
缺点:要照顾所有人的进度,讲的比较慢。讲的东西涉及面不广不深,大概属于带入门的性质。且教学使用的 ADT 已不被 Google 官方支持,Eclipse 在教学演示之中各种出错(嘛自己是 OSX 系统,就用 IJ 了,果然还是 IJ 大法好!)。

讲了那么多,现在来总结一下如何才能做好一个培训(线下)吧。

首先,课程最好能够具备以下的特性:

  1. 语言本身是枯燥的,为了让学员不枯燥,请不要一直讲课,并且在讲课的时候也适时穿插一些别的内容(比如业内的就业前景和其他知识之类的)
  2. 讲课的时候请适当穿插一些比拟手法去讲解代码,以让学员理解这个代码具体做了什么东西。(这点对于没有程序基础的学员来说非常重要,有助于他们去理解这段代码的作用)
  3. 上课的信息量不要太大,不要一直去讲课,要留足够的时间让学员自己去实践代码(比如这次的课程,大概有超过三分之一的时间是让学员自己去写代码,在实践的时候分别去针对个体的学生做答疑之类的事情)
  4. 安排的节奏合理,刚开始尽可能少的安排内容,然后后面逐渐加快课程的节奏,让学员去适应整套教学流程。
  5. 安排课程的时候循序渐进,讲解新内容的时候最好能够用上之前教的知识,以便于学员去消化课程的内容。
  6. 抛弃 PPT,以自己的实际操作去代替 PPT。
  7. 到课程的后期,你可以先讲一个类似的例子,然后去让学员自己写一个能够用到相关知识点的其他例子(让学员自己去消化这些学到的知识,并且活学活用)
  8. 老师的口才必须要好!(口才这个应该是可以练的。)

这次课程并没有想象中那么差,老师的水平还是不错的(毕竟讲课的据说是达内的金牌讲师,如果换做一个普通讲师,估计效果就要稍微打点折扣了),老师必须要洞悉一个语言的绝大部分特性,然后根据特性由浅入深去安排课程。

但是对于有一定语言基础的朋友来说,能不报班请尽量不要,自学是推荐的,毕竟进度实在是有些慢,上课有一半的时间都拿来逛坛子了= =
想到这里,就写到这里吧!也算莫名其妙地填了半个坑吧。