The Summer Lambs Project
How we offered teenagers a summer job and taught them to code
— A recursive dogfooding story
Spaced Repetition with The Summer Lambs
This summer we organized a lovely experiment, the Summer lambs project, where we offered a handful of teenagers the opportunity to get some work experience within tech and the chance to learn to code. We were curious whether someone could learn to program in just six weeks.
We ended up using a pattern that could be described as dogfooding mixed with a recursive learning loop. It turned out to work wonderfully and meant that the high schoolers coded an actual real-world application but also learned about ideas in programming and computer science through dogfooding the same app that they were programming.
The product they built is a quiz app that is meant to help people trying to learn through spaced repetition. The larger vision for the product was that they would build something during the six weeks that could become a Wikipedia of quizzes; a service where all the source materials of the world such as books, videos, and lectures could be found in a quiz form. After you have read a chapter from a book, you can learn the content by practicing with the quiz app, and by returning to the app until you have properly digested it.
You can try out the quiz app at https://8-bit-sheep.com/various/lamb-quiz/index.html! As the lambs put it "It's not ready and will probably never be ready, but it works!"
Crash Course Computer Science
For most of the days the kids, or the "lambs", would watch one or two videos in the mornings. Then they would generate about 20 questions for each video. Every day they would watch a new episode of the absolutely brilliant Crash Course Computer Science series. Sometimes they would also watch some more hands-on videos and tutorials related to programming.
The Crash Course Computer Science is a fantastic resource. We had already been using it at home with my kids during the past year. It is a fun way to learn computer science. We used to watch the videos together and collect insights on sticky notes. Then we would post them on a wall and return to them regularly, often while brushing our teeth, to review and discuss them. This experience was also one of the inspirations that led to the Summer Lambs Project.
The series consists of short 10+ minute youtube videos packed with information. It is designed very well and the manner in which the host Carrie Ann Philbin @MissPhilbin explains computer science with wonderful clarity yet at some considerable depth makes it both fun and inspiring. The series basically covers what, say, a first-year computer science student would learn at university, albeit in a much more enjoyable way.
Before watching the videos and generating new questions, the lambs would actually start each day by answering 50 random questions from what they had previously produced. This was a natural way to assist them in their learning. Moreover, it was a good lesson in the merits of dogfooding while developing digital services.
Teaching high schoolers to code in 6 weeks
The rest of the day was spent programming. We decided to throw them in at the deep end right from the start. They started coding on the very first day. Of course, this actually meant they were mostly copying code that was presented to them. At the start we were following a JavaScript tutorial by James Q Quick where a simple quiz app is built. This was a perfect way to quickly get started and see some tangible results.
In terms of language, we chose JavaScript. Yeah, we know. Not perhaps our favorite languages in every sense nor the best. Clojure/ClojureScript, PureScript or even TypeScript comes to mind as something that might have been preferred. Nor is JS maybe the best choice in terms of teaching programming. Many schools and universities seem to opt for Python these days.
But there are other issues that speak in favour of JS: According to the StackOverflow 2019 Survey, as many of you no doubt are aware, JavaScript is the most popular programming language — as it has been for seven years in a row now. JS has pwned the web stack. We saw this popularity as an important consideration as it increases the utility of the language. The number of resources out there that can help your learning journey are limitless as well as is the general ecosystem that can be taken advantage of to solve almost any problem at hand.
Perhaps an even more important rationale behind the choice was the tooling, which can be straight forward, particularly if you are writing vanilla ES6 for the frontend. It does not require the compiling steps which increase the distance between coding and seeing the results of that code. This helps the beginner experience.
Also the "replesque" experience that the JS console provides is an asset. It might not be a real repl nor a great one as repl experiences go, but it does help learners tremendously to do step by step iteration, data exploration, experimentation and help overall easier debugging. The lambs learned very quickly to do experiments in the console when they did not understand something. Furthermore, as ES6 is now supported in the modern browser, this also helped to make this decision.
Google Drive as backend
Another important decision was that we chose to focus exclusively on the front end to limit the complexity of the systems that the lambs would have to grok. As a consequence, we ended up using Google Spreadsheets as the backend. It was handy and easy to input data manually to a sheet, while the lambs were creating content for the quiz. It is fairly trivial to retrieve data from there.
The lambs also developed a feature where users can submit feedback on how to improve a particular question and these are collected into another sheet. Another similar implementation was the feature where the users are asked to contribute a question of their own to the platform in order to offer the users the option to do some active learning.
The highscore functionality is slightly more complex as there is some latency after submission and before an updated row can be retrieved through the Google Sheets csv-API. This led to some hacks in the app, but the case also highlighted why backends are needed and what kind of basic security concerns need to be solved. Anyone can in the current implementation rather trivially just inject any highscore with any nickname into the sheet. Still, it made a lot of sense to try to limit the scope of the project.
Also version control and mob coding
The lambs also learned stuff like version control, ie. command-line Git, GitHub and pull requests. They were also introduced to the basics of some agile patterns and thinking. We especially made sure to do frequent retros which the kids seemed to find useful and enjoy. Pair coding, as well as mob coding, was also something they were used and taught.
Even though we did invest and "donate" a considerable amount of our own time to this project, we did also try to get the kids to do as much p2p learning as possible. Mob coding is a great tool for that and was used especially in the beginning. It helps complete novice learners not to get stuck as often, as they through mob coding get to "pool" their knowledge and solve problems as a group. When they got a bit further in their learning journey they started to focus much more on pair coding. It demands a bit more from each participant which is good.
The experience of teaching from scratch
The experience of teaching someone who is starting from scratch was an enormously difficult but also fascinating and gratifying experience.
Something that struck us as especially interesting was how important it is to carefully choose what not to teach and resist the urge to explain. This might even be more difficult than, indeed, to choose what to teach. There are so many layers of abstractions even in a simple front end JS app and as we humans can only keep a handful of concepts in our minds at once, it is easy to overload the learner with too many things. Just to keep track of simple programming fundamentals and the system ie. how the browser, HTML, CSS, JavaScript, and the DOM interact and are related to each other is not an easy task for any beginner.
You have to be careful to only introduce one idea at a time. Though we did choose to break this rule at the beginning and did jump right in at the outset. Seeing the effect of the code you are writing is necessary to build motivation.
Another wonderfully gratifying experience was to see how the mechanics of repetition work in learning. It is not very surprising, but to see it unfold in front of your eyes was really fascinating.
For instance, to learn how the map function works takes careful repetition multiple times until it sticks. The learner might understand it, but not remember it a few hours later. Or take the git commands. We repeated the same steps every day for about a week until they stuck. I'm not entirely sure we appreciate the mechanics of this when we go about our business ordinarily. We communicate and think people remember and understand. Usually, they don't.
Fantastic Kids
It needs to be said that the kids were amazingly bright and fast learners. It was such a pleasure to work with them. There were many moments when we were taken aback when realizing how they had figured out how to do something very advanced that had hardly been mentioned.
We are extremely happy and proud of what the lambs managed to learn and produce in such a short time. We are also grateful for the opportunity to learn ourselves. You can get a glimpse of how amazing these kids are in the video above.
And did they learn to programme in six weeks? Like they also express in the video, no, but then again learning to program is never finished. But they did get a great start that helps them to continue the life long journey if they would choose to.
We want to stress our gratitude to our partner, the Smart Data and Audience Insight team at Yle, The Finnish Broadcasting Company and Eija Moisala there who got excited by the idea and at very short notice decided to join the project and sponsor two of the lambs.
Of course, the project would not have been possible without the work of people like Carrie-Ann Philby and the team who produced the Crash Course Computer Science series not to mention the Green Brothers (@johngreen and @hankgreen) offering the Crash Course concept and content to the universe. Also, a big hand to James Q Quick and Brad Traversy at Traversy Media who have created some great tutorials for learners of programming, which we enjoyed during our adventure.
The planning, production of the project and the teaching were mostly done by yours truly, but the rest of the sheep at 8-bit-sheep are owed gratitude for their help and efforts. A special shoutout to Jaakko Ojalehto for jumping in and supervising as well as expertly teaching the lambs.