运行与构建——教非开发人员学习 iOS & Swift 的注意事项
过去两年来,Jeff 一直致力于设计课程,教授开发经验几乎为零的学生们学习 iOS 开发。这个课程的设计初衷是为了让这些学员在不到5个小时的学习时间里能迅速掌握一定知识,构建出有用的应用。不过 iOS 是一个很大的平台,因此选择教学内容对成功来说非常关键。Jeff 讨论了他在教 iOS 开发的时候所学到的经验,帮助我们教学方面更进一步,可以参考 Hacker News上的讨论。
下面是视频内容摘录,请点击这里查看 Swift 的文档。
制作功能齐全的应用 (4:07)
在教非开发者 iOS 时,首先要学习的就是全功能式应用。按照惯例,大家都习惯从“hello world”这个的简单应用学起,但时代在进步,现在的人都知道 App Store,并且认为 Instagram 是一个“简单的应用”。
在我们的课程中,针对从未编写过代码的人通常会设计两个项目。第一个:是构建一个小费计算器,里面有一些字段可以输入小费数额和百分比,点击按钮就能计算小费。可以使用到 storyboard、outlet 和 action,还有 Swift 中一些基本的算法。第二个应用:则是针对已经有过编程经验,但也许没用过 iOS 的编程者,我们会做一个叫做“烂番茄”(Rotten Tomatoes)的应用。
在制作第二个应用时,需要下载 JSON,解析后获得 storyboard,然后制作 table view。我喜欢这个项目是因为:它就是每个应用的本质内容 —— 从互联网上下载一些东西,然后在 table view 中展示出来。因此对于学生们来说,在构建应用时了解这些适用于所有 iOS 应用的基础知识确实非常有用。
了解学生们现有的技能水平 (6:46)
在评估学生的水平时,有一些基础的问题:
- 你知道变量是什么吗?
- 你知道函数或者方法是什么吗?
如果对于这两个问题,他们的回答都是“是”,也许他们已经是你的学生们水平比较好的了,这可不是开玩笑。如果他们听说过面向对象编程 —— 不是了解这个概念,而是仅听说过,很可能就已经是水平高的了。
不要以为所有人都知道该如何使用台式机 (8:15)
别以为大家都知道怎么用台式机,我们生活的世界是移动的世界,我们习惯于 iPad 和 iPhone,因此我经常能看到大家头疼于台式机的基础使用,比如文件夹/目录管理,再比如屏幕上的窗口。
相信学生们学习的能力 (9:37)
记得这一点很重要:学生们遇到困难,并非由于他们能力不足或者做不到某个任务。正如图表(视频中)所示,我们认为自己如何学习 vs 我们实际的学习方式是不同的,学习过程并非一条完美的曲线。相反,有时人们需要花费额外的精力与时间来学习并理解这些信息。
展示常见的 iOS 设计模型 (10:41)
大家都知道,iOS 有四种基本设计模型:
- Table View
- Push Navigation
- Modal
- Tab Bar Controller
为了演示这些设计,我们可以通过 QuickTime 来录制视频,并在课堂上展示其在实际中的应用方式。
不要违背框架 (12:16)
不要违背框架,我知道苹果喜欢这样说,而这种说法让我们疯狂,但在教学中说这些很有可能就变成了抱怨,不要在教学时抱怨这些。想要解释如何使用视图控制器(view controller)就已经很困难了,因此再强调其他的有多困难无疑是在分散注意力。
不要教 Swift (10:41)
不要教那些错综复杂的 Swift,我们都喜欢 Swift 以及不变性,也都喜欢使用结构替代类,也喜欢函数编程,但对于学习阶段来说,这些都不适用。
区分引用类型与值类型毫无意义,只教会他们当前项目所需的 Swift 即可。
做好准备 (14:18)
这是最困难的部分之一,因为需要很多准备工作以及准备时间。需要询问自己的问题是:我要教多久?是2个小时,4个小时,8个小时还是一个礼拜?需要像 General Assembly 组织的课程那样,教一整个课堂的学生吗?这一点特别需要注意,因为教一群学生的话进度会更慢。
构建与运行 (15:41)
在 Swift 或框架出现变化的情况下,使用最新的非 beta 版 Xcode 来构建样例应用,这一点非常重要,因为如果在教学时由于变化而导致故障出现,就必须得在课堂上 debug,这会带来混乱。教师需要与学生建立持续的反馈环路,而这只会在所有细节都被照顾到时才能完成。
经常触发崩溃 (16:52)
时常触发崩溃也很重要,这是反馈环路的一部分,崩溃很容易出现,不过如果故意犯些最为常见的错误而导致崩溃,再让学生们找出崩溃的原因,就会是很好的学习过程了。例如,将 IB outlet 相连接,然后将变量与属性重命名;对 IBActions 采用同样的做法;如果构建 table view,使用错误的 cell identifier。在 Swift 中我们可以采用隐式解开可选值之类的有趣操作。
不要训诫式教学 (17:55)
这一条也与反馈环路相关,如果你不想浪费太多时间无所作为,或者倾听学生的观点。
稳妥的选择:Storyboards (19:07)
Storyboards 比手写代码更好,特别对初学者而言,storyboard 是非常优秀的,没有其他的平台能像 storyboard 那样,可以让你画出整个 UI。它也不是那种简单的代码生成器,不会为你自动为你生成代码等稍后人工编辑。
别只写代码 (20:19)
别只写代码,我们不仅教 Swift,大多时候教的是 iOS,因此多写代码少做讲解,在教学时速度的确更快,风险也更高。要告诉他们,感叹号代表如果出现类似样例中那样的故障,则应用会崩溃。因此为了简单起见,在打开可选值的时候使用感叹号。
提供初学者项目 (21:55)
有些时候构建初学者项目很有必要,我试过不这么做,因为从一个全新的项目开始也很好。但有时候,如果我们想要讲授 table view 的使用,或者查看如何下载数据,还是需要初学者项目的。无需教授如何使用 CocoaPods,这个可以在线观看。除了要让 Ruby 在 Mac 上运作,还要构建 pod init 并让 pod 文件运作,这些都太费时间了。
不要教他们自动布局 (23:16)
有太多按钮、太多烦琐的事情以及太多的规则。在实际中学习自动布局时,它是一个较长的类,通常对于初学者来说太过复杂。可以在讲解 storyboard 时覆盖不同的屏幕尺寸,从而让学生们了解这个概念。
节省时间,执行定制 (26:12)
在学习的过程中,学生们只会模仿教师,盲目地输入一些内容,但可能根本没有完全理解所有知识。因此,让学生们使用 storyboard 换换背景颜色和字体,最后定制自己的应用,他们就能学会具体要怎么做。从而了解并学习 Xcode,而这些知识他们也许是无法在为期一天的研讨会中学到的。
问答:
-
Q:什么时候处理设备配置的问题?
-
A:在安装 Xcode的时候,也就是上课之前。
-
Q:你是否使用过 Playgrounds,它是否是教学的好工具?
-
A:我发现 Playgrounds 的问题在于:它更关注 Swift 的教学,而不是构建应用,而人们通常更想要做的事情是构建应用。