Quantcast
Channel: 少数派
Viewing all articles
Browse latest Browse all 13772

具透丨苹果带你用最有趣的方式学编程:iOS 10 Swift Playgrounds 详解

$
0
0

147f88bc391f0248cabc0bb84af2712354e26_mw

关于栏目

苹果、谷歌每年一次大更新的新系统都值得关注。「具透」会挖掘、详解新系统的各个功能细节,并会以长期更新形式,让你对它们有更深入全面的了解。

从今年的 WWDC 到 8 号凌晨的 iPhone 发布会上,苹果都拿出时间专门介绍了他们针对教育市场的新尝试——学习 Swisft 语言1的应用——Swift Playgrounds,可见不止鲍尔默,库克也深知开发者和教育市场对应用生态的重要性。

显然 Swift Playgrounds 的目标用户不是那些有经验的开发者,而是「平凡」的你——对编程毫无经验甚至有点恐惧。别担心,Swift Playgrounds 正是为你而来,将你带入陌生而又新奇代码世界。

正式开始我们的 Swift Playgrounds 的冒险之旅前,我们要先搞清楚它是什么。 Swift Playgrounds 并不只是类似于 Tapcoding ,这类面向初学者的教授 Swift 语言的应用。对于开发者而言,它可以调用真正的 iOS SDK 中的上千个 API,来写出真正用于工程的代码;同时它也是开放的,任何人都可以成为「作者」,用 Xcode 来自己写出 Swift 课程。它是如此的强大与丰富,以致于难以在一篇文章里全面的介绍,而所以本篇着重介绍它最基础也是最重要的使命——教你写代码。

我不是要做全职开发者,我需要学编程吗?

我想看大部分人看完开头,都会不由自主的思考这个问题——我需要学编程吗?

今年的 WWDC 上,台下的开发者们欢呼最热烈的一次,大概要数结尾阶段播放的采访短片。围绕着「最初开始编程的动力」的主题,采访对象却是我们会天天会遇到的中学生、妈妈们和公益活动的组织者,他们共同的身份就是开发者。其中有一句深得我心:

我只是一个人,看到了一个问题,并创造出了一个解决方案。

而科技作家 Douglas Rushkoff 认为:

在未来,面对着一个高度程序化的世界,如果你不能开发软件,那么你将变成软件。就是这么简单:要么编程,要么被编程。

每天我们都会遇到很多问题,而通过编程这种工具来解决自己遇到的实际问题就是其中一种方案。所以说我们非专业的学习编程,不是真的要以此为职业,而是学习一种处理问题的工具。同时我们都知道,熟悉乘法的人会比只会加法更高效的计算。同样的,学习编程更多的是学习其中的高效的思维模式,比如循环、递归等等在生活中也常见的现象。

最后,正如小时候的我们喜欢敲敲打打做一些手工,写代码本身就有一种造物的乐趣

「有趣地学」才是正确的打开方式

前面做了足够多的心理建设,下面我们终于要开始领略 Swift Playgrounds 的乐趣所在。

初入编程乐园

Swift Playgrounds 目前分为两大类——「课程」和「挑战」。「课程」目前分基础和进阶两部分,都是给零基础的学习者准备的。而这个应用的最大特点就是游戏化的学习过程。

类似于书本的章节关系,在「课程」中 (无论基础还是进阶) 都是按照主题分为「章」,每一章内有若干「小节」。和普通的教科书不同的是,Swift Playgrounds 像 iOS 游戏那样,将对编程的介绍融入到关卡当中。

以最基础的第一章为例,开始的第一节,用有趣的文字和动画来解释要学习的概念。之后就像游戏鳄鱼小顽皮爱洗澡一样,你控制名叫 Byte 2的角色3,根据界面左上的文字提示,在左下写相应的代码来控制 Byte 的行动,向前移动三格,收集到宝石即可过关

 

对于任何有过 iOS 游戏经验的人来说,Swift Playgrounds 没有任何门槛而言,就像玩游戏一样来过关就可以了。而在这过程中,不知不觉就会非常直观的体会到编程的基础概念。

为 iPad 而优化

如果说有趣和零门槛是吸引你学 Swift Playgrounds 的初始动力,那么苹果特地对 iPad 进行的优化,会让你爱上在 iPad 上使用 Swift Playgrounds

1. 特别适配的键盘。键盘的字母区都可以通过拖拽按键的方式来输入编程符号。最好用的当然还是键盘上方的通过快捷点击输入命令,其实它也类似于自动补全功能,输入一部分就可匹配出相应的命令。这样的改进虽说比不上熟练的开发者的输入速度,但是对于初学者来说大大减轻了输入命令时的恐惧,将其变成几次轻松的点击。


2. 在编辑代码块时自动调整代码。对于已经输好的代码,我们可以直观的利用触摸屏的特性去拖动代码块的顺序,还可以根据固定的格式填写代码。省去了代码缩进这个对于初学者容易犯错的场景。当然一定程度也避免了括号不配对的尴尬。

为什么 Swift Playgrounds 简单到小朋友都能学会?

编程课程可以说是互联网教育中分量非常重的一块内容,各个水平、技术方向的内容都很齐全,那为什么编程没有普及到普通人甚至小朋友的范围呢?或者说,Swift Playgrounds 对比之前的课程有什么独特优势吗?我想「直观」「深刻」「实践」三个词可以总结为 Swift Playgrounds 的作为后起之秀的优势。

摆脱黑乎乎的窗口,来场交互式的学习

如果你之前有过其他语言学习的经历,我想你学会的第一个语句,一定是输出「Hello,World!」这个语句,这是为了给初学者增强自信,但是难免显得乏味。

而 Swift Playgrounds 一开始就是交互式的学习场景——通过命令控制 Byte 的行动,直观的看到自己命令的效果,相比千篇一律的「Hello,World!」,无疑是前者成就感更强

而用游戏的形式,一开始不让学习者接触到枯燥的基本语法。而是通过编写代码组合的方式,让学习者在脑中直观的建立起代码与最终呈现的联系,可以说能最大限度保留住了学习者的学习热情。

有趣又严肃,你学的是编程的思想。

一般来说,学习一门新的编程语言大致会分为四个部分:

  • 数据成分
  • 运算成分
  • 控制成分
  • 传输成分

很多教科书和网络课程,也会大致按照这个分类来编排内容。这种结构型学习的好处是基础会打的非常牢靠,就像修建金字塔一样,逐层往上,适合专业学生的学习。但是缺点对于初学者来说是很难忍受的——你在享受到编程的乐趣之前可能已经被枯燥的知识细节吓跑,比如缕清各运算符之间的优先级。

而 Swift Playgrounds 是一种目的为导向的学习,通过不断解决小问题来理解知识,而且将编程思想的介绍放在非常高的优先级上。最好的例证是在开头几章就讲「函数」、「循环」等,注重让初学者体会编程的意义——减少重复性的人工操作——和根本的编程思维——把问题逐步分解。而应该当做前几课讲的数据成分却放在了「进阶」的部分。

不一定说这种内容编排是最好的,但是我认为是最适合初学者的。对于初学者来说,告诉他为什么这么写,远比怎么写出来更重要。

实践出真知,学习不能袖手旁观

编程作为一门工科学科,势必需要学习者大量练习,才能真正理解一些看起来很基础的概念。

用游戏的方式来学习编程并不是单纯的吸引你来玩,因为本身编程内在的难度不会因为外在的形式而降低,但是用游戏的方式可以让你更形象的体会到编程中各种概念,从而降低了上手的难度和对概念的恐惧。

之前提到过Swift Playgrounds 分为两大类——「课程」和「挑战」。完成了基础的「课程」后,Swift Playgrounds 内准备了一些示范性的工具,供你尝试你的编程技巧。没有正确答案,有无限的可能性供你探索,这也就是为什么它叫 Playgrounds (游乐园)的原因吧。

你的乐园,也是你的起点

本文的大部分篇幅都在讲述 Swift Playgrounds 的意义,相反对其本身的描述却比较少,那是因为它本身太容易上手了,我的上百字描述,可能远比不上你实际体验一分钟。

如果你是一名想自己动手解决问题,却苦于之前没有机会坚持下来学习一门编程语言,我想这是一次好机会。Swift 本身作为苹果自己的开发语言,其强大的功能和可能性自不用说,Swift Playgrounds 又把学习的成本降到尽可能的低。

如果你已经是一位有经验的开发者,Swift Playgrounds 也有很多可玩性,比如写自己的 Swift 课程或者实验各类 iOS SDK 的特性,别把它当做一个给小朋友的玩具了。

总之,它会成为所有带有好奇心和动手能力的人的乐园。

  1. 于2014年 WWDC 发布, 是用来撰写macOS、iOS、watch OS和 tvOS 的编程语言。  

  2. 即「字节」,计算机信息计量单位。  

  3. 单击它可以进入选择角色形象界面,目前有三个小怪物可选。  

关于 iOS 10 的更多内容:



文章来源 少数派 ,原作者 sainho93 ,转载请注明原文链接



原文可获取应用下载链接:具透丨苹果带你用最有趣的方式学编程:iOS 10 Swift Playgrounds 详解
喜欢少数派?欢迎关注我们的微博:@少数派sspai ,微信公众号: sspaime
少数派( http://sspai.com )

95b039e3d5d68c765fe5da3e3f78a2e254b1a_mw


Viewing all articles
Browse latest Browse all 13772

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>