A few days ago my wife expressed an interest in learning how to code. ‘Really..? Sure!’, I said. ‘You should check out an app called Swift Playgrounds’. I was a little surprised, since she’s not the math or science type (she’ll freely admit that). Unlike me, she hung out with the popular crowd at school, and let’s face it: coding falls much closer to ‘geek’ than ‘cool’ on the social stereotype spectrum. Trying not to seem too excited, I explained a little more about the app, and how it teaches a programming language called Swift. I hadn’t tried the app myself, but Apple made a big deal of introducing it last year, and I had heard positive things - so it seemed like a good suggestion.
It didn’t take long to get the app installed, and as Joelle (my wife) started the first lesson, my curiosity turned to fascination. Yes, the app was fun, exciting, and engaging, but that wasn’t it. Despite a few rough edges, Swift Playgrounds made coding seem approachable, perhaps even ordinary. As if by magic, coding had become something that everyone can do.
Lately the subject of teaching code has started to make social media and news headlines. The New Zealand Government recently announced the introduction of coding into the school curriculum by 2020, following many countries in Europe that have made a similar decision. Tim Cook, the CEO of Apple, has been quoted more than once on how he believes every school should teach coding. Apple makes their stance quite clear with a promotion titled Everyone Can Code (inspiration for this post’s title). Teaching some form of coding as a basic skill is not just for those destined to be a programming whiz; associated techniques like breaking large problems down into smaller, more achievable tasks have real life applications unrelated to a career in tech.
After a little more time in the app, Joelle is demonstrating a pretty impressive understanding of some basic programming concepts like functions (she tells me functions are her favorite). The app isn’t perfect, but is certainly unique in its approach and implementation. So, what makes Swift Playgrounds different? Does it satisfy the lofty statement it wields, ‘Everyone Can Code’? I’d like to offer my thoughts as a review of sorts.
While installing the app is a breeze (it’s free, and on the App Store) there is one ‘gotcha’. It’s iOS 10+ only, requiring an iPad Air or newer. While many iPhones would meet this age requirement, iPads have a longer average lifespan, putting a very quick end to the experience for a more significant percentage of iPad owners. The app seems to require a lot of processing power, making this restriction understandable, however it does detract slightly from the app’s intention. Everyone Can Code (*if you’ve purchased an iPad recently). Fortunately, the current hardware requirement will become more reasonable in time, so this limitation isn’t a permanent one.
Swift Playgrounds really takes the cake in this department. After starting the app, installing Apple’s ‘learn to code’ courses is trivial. The app is set up in a way that prepares it for an entire ecosystem of courses and coding material, featuring an iBooks like interface, with shelves displaying each course in your library. For the remainder of this post, I’ll focus on the experience using Apple’s learn to code courses, however the expandable nature of course content is certainly a promising sign for the app’s future.
Starting the first lesson presents a short introduction on a programming concept called functions. The explanation is fun, concise, and most importantly, easy to understand. Bright and colorful animations both add to the explanation, and demonstrate the app’s ability to bring fun into a learning environment.
Shortly after, we’re dropped into a cartoonish, colorful world, and presented with our character, ‘Byte’. Both the animations and sound effects are first class, aiding us via visual and audio cues as Byte progresses through the level. The background music is a little overboard, but thankfully can be turned off easily. After giving Byte a few instructions, we are rewarded with a dance from Byte. Cheesy? Yes. But it works, and we are left with the impression that coding doesn’t need to be hard. Heck, perhaps it could even be a little enjoyable.
The Swift Playgrounds team has really put a lot of thought into how lessons are structured, and the content in them. The overall experience is positive, although a few unfortunate issues could put a damper on the experience for some users.
The format works, and works very well. Short lessons, ~10 minutes long, with a concise explanation and hints for those that get stuck. It feels more akin to a game than a lesson, where getting stuck is a challenge, not a frustration.
Some lessons are a little buggy. For example, a switch and a gem sometimes appear on the same tile, which Byte does not know how to handle correctly. This could be very frustrating for a user, especially if they believe the bug is their own, or something they should be able to solve. Although this issue doesn’t happen frequently, it happens often enough to leave a sizeable blemish on an otherwise great experience.
Lessons have ‘lenient’ solutions. Not only are there many ways to solve problems, but giving an extra instruction or two to Byte can still result in the lesson progressing (although Byte makes it clear when this is the case). This point alone really shines as something that would make Swift Playgrounds work in a classroom environment. Rather than passing/failing each lesson with a black and white rule, students that are a little stuck will be able to progress as long as their solution is mostly correct.
Most lessons have clear and concise wording, although a handful are a little confusing, and not in the right way. It isn’t always clear exactly what the goal of the lesson is, making it difficult to write code without some initial experimentation. Perhaps this is intentional, although confusing for a new coder nonetheless.
Content is very positive and encouraging. Concepts like debugging code are introduced early, reinforcing the idea that coding is hard, and not getting it right first attempt is actually OK (quite normal in fact).
Swift Playgrounds really tries hard to make coding on an iPad a great experience. Note the word ‘tries’; while it’s not too bad, iPads aren’t going to become the de facto device for doing real coding work anytime soon. Both a code suggestion bar, and a brand new coding keyboard are Apple’s attempts to make the experience as good as it gets.
The code suggestions that appear as you type are a winner, especially while learning to code. They are quick to appear, and filter as you type, making longer statements easy to select. I suspect that these shortcuts are used more often than the keyboard, at least for the lesson content. Swift Playgrounds also has the smarts to hide more complicated code suggestions and concepts from the suggestion bar until you’ve progressed far enough - this is a small, but really important touch.
The new coding keyboard is certainly unique: there are one or two symbols above each letter, where a directional swipe will pull the relevant symbol into focus. It’s ok… but I wouldn’t jump to call it revolutionary. My wife preferred switching to the symbolic keyboard over the slightly awkward directional pull gesture. Perhaps more time would make the pull-release gesture more natural, although I’m not so convinced. Any learning environment using Swift Playgrounds would be doing their students a favor by providing them with a bluetooth keyboard.
There are a few other unique controls and gestures, like being able to drag code blocks around. It’s nice, but doesn’t make up for the lack of an onscreen cursor and mouse for selecting text. That last point is a pretty sore one, because for all the multitouch gestures Apple can add, there’s just no beating a good old mouse when it comes to selecting text.
In short, the coding environment is ‘good enough’, at least for a learning environment. I’m certainly not switching to an iPad for my daily coding work, but I can envision the next generation learning to code on an iPad without facing too much difficulty.
When you’re learning math at school, you don’t start out by reading pages of abstract metaphors on what it means to add and subtract. Likewise, your first grade teacher isn’t going to start by showing you a second order differential equation, showing you how to do the addition parts of it, and explaining that you should just ignore the rest of it (which you’ll learn about later). When it comes to learning code, many solutions seem to lean too far in one of these directions; very few get it right.
The courses in Swift Playgrounds pay a lot of attention to this exact issue. While not always executed perfectly, the general model works very well: introduce an idea, explain it simply & concisely, and provide a series of short challenges (increasing in difficulty) to reinforce it. There isn’t too much repetition, just enough to make sure you have understood the concept before moving on. Challenges are set up in such a way that you are not presented with subjects that you haven’t yet learnt - it would seem that there’s some magic going on under the hood to make this true. The result is a guided, focused learning environment that really works.
Swift Playgrounds shows a lot of future promise. A lot of the big questions, like ‘How the heck do we make coding approachable?’ and ‘How would teaching code in a classroom context work?’ are answered with resoundingly confident and well thought out answers. A few rough edges, like the odd bug, a confusing lesson, or lack of a real keyboard and mouse do detract from this, but not enough to undermine the potential that Swift Playgrounds shows.
Can Everyone Code? Apple certainly thinks so, and Swift Playgrounds is a solid step towards this goal. If the next generation is to grow up learning code as a basic skill, there is certainly something Swift Playgrounds can teach us.
Perhaps you’ve even been inspired to learn a little code yourself - Swift Playgrounds is a great place to start. You can download it here: App Store Link.