[Note: The post below was updated in July, 2019 (originally written May, 2018). This article might be a useful read if you are teacher considering Scratch vs Swift Playgrounds or are caught up in discussions / arguments about the two. I think that juxtaposing these two coding environments helps reveal the distinction between children “learning to code” and children “coding to learn” in schools.]
If you are a teacher like I am, and love to see how coding can be conceived of as a literacy, a powerful tool with which children can create, tinker, and share then you might also become frustrated by articles like this. Here is a quote:
Block-based coding is kind sort-of, kind-of coding just like a child using an Easy Bake Oven is sort-of, kind-of baking. What the child makes in the Easy Bake Oven may technically be a cake, but it’s not really a cake. Similarly, coding in something like Scratch or Scratch Jr. may technically have coding blocks, but it is not really actually coding.
Besides the prejudicial (and erroneous) assumption that block-based coding is not real coding, this kind of thinking strikes at the question, “what is coding?” Or, better, “why do you want kids to learn how to code?” In this article, the author is clearly writing about teaching kids to code. It might seem a subtle and dismissible distinction but I think there is a big difference in pedagogical focus between students learning how to code in schools and students using code to explore, create and learn new things. Unless I am teaching a computer science course in which students are learning the discipline of computer programming (involving best practices of algorithms, structures, systems, networking, robotics, AI, etc.) then I think the focus of coding with children in schools should be the development over time of each child’s literacy in controlling various computing devices with code. And, it doesn’t matter… blocks or typed text… they are still learning to control a computing device. (More on text-based vs. block-based here.)
Ultimately, for me, it comes down to a single key issue: In the limited time we have with children each day in school, what is the best use of that time for learning? How are we designing and/or supporting powerful and empowering learning experiences for our students? I suppose you could think of it as a question of ROI – with any given student investment of time and effort, what is the return in terms of powerful, high quality learning?
I am a teacher who has observed students using a variety of coding environments and finds that Scratch has the most to offer students. Despite this bias, ultimately, I think we can all agree that we are looking for tools, environments and learning models that really work well with our students in terms of high quality, meaningful, useful learning.
I have a love-hate relationship with Swift Playgrounds. I think probably anyone who is as passionate about learning as they are about computer programming would probably feel the same way. Maybe that’s just me? I just think Scratch has more to offer because it focuses far more on creative learning than Swift Playgrounds does (or could) as it stands now. More on that later…
There’s lots to love
Swift Playgrounds is a beautiful looking environment to learn to code. It’s a nice, modern, object-oriented language and I can learn concepts and conventions and put them to work later in Xcode. Children can choose step-by-step lessons and puzzles to build their coding knowledge and skills. They can choose other playgrounds to play in and subscribe to third party ones, too. They can start with a blank project and try out coding ideas. They can save their projects. There are handy shortcut buttons so you don’t have to always type in commands or statements. The code editor is very helpful and automates many syntactic and structural formatting conventions. Kids can program various robots. There’s even a new, augmented reality coding kit so kids can start to explore AR.
There’s lots not to like
I considered writing a section about how Swift Playgrounds and Scratch are both free tools but that Scratch (which runs on all devices) is supported by a non-profit called the Scratch Foundation and that Swift Playgrounds (which only runs on iPads) is supported by a for-profit called Apple, Inc. Suffice it to say, I think the motivations behind each tool are linked to the organizations that create and fund them.
Learning to code
It’s probably clear by now that Swift Playgrounds was not designed as a learning through coding environment; it was designed as a learning to code environment. I don’t think anyone at Apple would have ever said that it’s a coding to learn environment. Indeed, in 2016, Apple’s Director of Tools & Technologies Product Marketing Wiley Hodges said that Swift Playgrounds is “not about learning apps for platforms. It’s about learning good coding practices.” Yet, this turns my mind back to the single key issue at the beginning: In the limited time we have with children each day in school, what is the best use of that time for learning? How are we designing and/or supporting powerful and empowering learning experiences for our students?
What makes using Scratch powerful learning?
Scratch is a unique learning environment because every aspect of it was carefully researched, designed, tested and redesigned. The experiences children have in Scratch maximize the creative, social, personal, experimental, visual and design elements and minimize the technical, syntactic, textual, abstract, and rigid elements of many typed languages. A key design objective in Scratch was (is) to support self-directed learning through tinkering and the creation of personally relevant projects in collaboration with peers. These ideas are further refined and described in Lifelong Kindergarten by Mitch Resnick.
In terms of real students in real classrooms using Scratch, I regularly see students quickly think of interesting ideas they have for a Scratch project and proceed to start to code it in their first session. The use of the Scratch environment, along with a research-based and student tested learning model, can accelerate learning and competence using Scratch to express their ideas. When I observe children creating with Scratch, the best word I can think of to describe it is intuitive. The colour-coded blocks invite experimentation based on almost instantaneous conclusions students have about how the blocks might function with other blocks. The work and the learning come from the building of their code scripts into projects that work the way they want. Typed languages are generally not very intuitive. And with modern object-oriented programming, these languages are even more abstract.
It’s no accident that Scratch works so well with students. I regularly engage in detailed conversations about projects, designs, and problem solving. I’ve written previously about how Scratch is the right place for coding in schools. Probably the most important aspect of Scratch is that it was designed to support a very wide variety of potential projects that can be easily personalized; this leads to children who are highly invested emotionally in their projects. Many have said in passing how much they love working on their Scratch projects.
Papert and Mathland
The “powerful ideas” part of Seymour Papert’s 1980 book Mindstorms: Children, Computers and Powerful Ideas talks about the potential of the computer and computer programming as a tool for thinking and building knowledge within a carefully designed learning environment. This powerful learning environment is the opposite of computer aided instruction (CAI) which is a profoundly important distinction. Instead of designing computer applications that act as a teacher for children, Papert envisioned computers as tools children could use in order to play with ideas and build knowledge. He saw coding as a way to control a mini world, a Mathland, and developed LOGO and various mathematical learning environments. From his perspective, the children are controlling the technology, not the other way around.
Papert’s philosophy was always about how children could use coding to learn, and learning about things that are interesting and fun. Powerful learning is exciting, personal, memorable, social and creative. Scratch was specifically designed (and continues to evolve in redesigns) to be exciting, personal, memorable, social and creative. Despite the seemingly endless coding tools now available through sites like code.org and various app stores, I still think Scratch is the right place for coding to learn.
This is a good pro/con post. Thanks! I had middle school teachers in my last district play around with Swift playground since we were 1:1 iPad. There was a love-hate relationship amongst students as well. I was hoping it’d translate to some actual app development, but like you stated, that leap isn’t as easy as Apple made it appear.
Thanks for your comment, Laura! Maybe in a later incarnation, there could be a place for some kind of app development in Swift Playgrounds… using a design process and learning project management skills would be such a good experience…
[Apologies if this comes through twice, I believe it didn’t post when I logged into WordPress. I’ve also posted my comment on my blog and linked back here.]
In terms of the list of right/wrong answers, I think some adjustment in phrasing might be helpful. First, the items on the left are specific knowledge that students will need to learn in order to do the items listed on the right. So, they might not be the best motivating factors for learning to code, but they aren’t “wrong” learning goals for coding.
To further support that, if we frame the items on the left in-terms of larger concepts they sound a lot better as reasons for coding. For instance, ‘learning hexadecimal codes’ or ‘learning binary’ (not in your list) could be phrased as “Learning that numbers can be represented in many ways using different bases that have advantages in a variety of contexts.” As a math teacher that is a really good reason to use coding because it provides a way for students to use different number bases in a context where those bases have meaning. We might also combine ‘Use if then statements’ and ‘learn boolean logic’ under “Learn that many problems requiring conditional thinking about the factors involved and possible outcomes.” I would see this as a mental model that is transferable beyond coding and again a great reason for learning through coding. I could go on with the examples. My point being, I think it is important to be careful about trying to separate off the ‘technical’ skills of coding from the broader goals of coding because they are interdependent.
Wow! Thank you for writing that post and jumping into the right vs. wrong issue. I admit I was being deliberately provocative but still sincere, nevertheless. My point really is all about focus. I know very well that coding skills will be learned (from the left list) when involved in meaningful endeavours (on the right list)… To me, it is a matter of focus and philosophy when working with students. My focus is ensuring the context is the right side stuff… the left side stuff is important, too, and is learned and developed over time… Over the years I have come to see coding as a literacy… that used to sound absurd to me, I can now admit. But now it sounds absurd not to think of it as a creative medium… I also love the mathematical – computational – coding – Mathland potential as well… My site https://scratchmathland.com is the place where I am exploring that potential. Thanks again for your comments and taking the time to write such a thoughtful response!
Thank you for a thorough and thoughtful review. As we look at our 6-8 environment, this helps us define our “why”, which will ultimately lead to how we want to proceed. Learning to code or coding to learn?