In December 2016, I wrote about my experience teaching my 10-year-old son to code. A year-and-half later, his journey continues with many ups, downs and plot twists.
“Papa . . . I’m bored!”
If you’re a parent or teacher, you’ve probably heard it many times. Children — like most people— have short attention spans, resulting in brief bursts of high-engagement with new toys, games or activities followed by long periods of disinterest. Once the novelty wears off things get boring and they search for something new—this actually sounds similar to front-end web developers 😉. My son is no different.
My son’s enthusiasm for coding waned soon after I published the first story in December 2016. By January 2017, he was up against the steep learning curve of web development.
If you’re unaware of how daunting web development is for beginners, scroll through the freeCodeCamp curriculum (an amazing resource BTW!) and review the completion time estimates —and that’s just for front-end webdev! It’s like reaching a mountain’s peak only to find yourself at the base of another mountain. Not very motivating for an 11-year-old.
You might be thinking . . . “Why did I start him with web development?”
Web Development is Not So Great for Kids
“Learning to code” should never feel like a job. I never force my kids to code. I’m a working parent and have no interest in running a coding school. Learning to code is always secondary to free play, reading, schoolwork, or just doing nothing sometimes (yes . . . it’s OK for kids to do nothing once in a while). Learning to code needs to be a self-driven activity or it won’t last. My role in the process has evolved into part-time curator, mentor and motivator.
It wasn’t until July 2017, during a serendipitous discussion about baseball statistics, that the switch turned on again . . .
“What’s a batting average?” he asked.
“It’s the number of hits divided by the number of at-bats.”
“What does it mean?”
My son doesn’t play or watch much baseball, but he likes basketball. So I switched the conversation to something more relevant . . .
“It’s similar to a shooting percentage in basketball — total shots made divided by the total shots attempted. It’s a simple measure of how well a player shoots the basketball.”
I could see the wheels turning again. “Maybe we’re on to something here.” I thought.
For the next few weeks, I pointed out examples of statistics in action wherever I noticed them, gauging his interest along the way. TV commercials, YouTube Ads, billboards, books — statistics are everywhere! In my new role as motivator, I closed the deal” by purchasing the “Cartoon Introduction to Statistics” by Grady Klein/Alan Dabney and his next adventure began.
My son finished the book around August 2017 and I put my curator hat on in search of the next learning resource.
Being an advocate for any self-driven learning by your children involves careful content curation. There are limitless online resources for learning almost anything. Your job is to find quality resources that best match your child’s learning style. I recommend testing out the material yourself first (watch a few video lessons, read a few chapters) to avoid selecting something too boring, fast, slow or poorly produced. Bad learning materials could negatively affect your child’s opinion of on entire topic. Be sure to choose wisely.
I signed up for an annual DataCamp membership during a holiday sale back in December 2016 — Data Science was trending in the tech media at the time and I wanted to branch out as a web developer. I browsed through some of the courses and really enjoyed their platform — very high-quality with lots of depth. I thought DataCamp would work well for my son . . .
“Remember Python?” I asked him.
“A little,” he replied with a suspicious look on his face.
“Do you know that Python is used all over the world by statisticians, scientists and even Google (I had to mention Google 😃) to work with data and statistics? You also don’t need to type brackets and semicolons 👏. Do you want to try it again?” I asked.
“Not for now,” I replied.
“OK,” he agreed.
He started with DataCamp’s Intro to Python for Data Science (a freely available course) in August 2017 and made great progress (working primarily a few hours on the weekends). He finished the first course by September 2017.
The Intro to Python for Data Science course is great for beginners; covering a lot of material in manageable chunks with live coding exercises directly in the browser. By the end of the course, he was comfortable with Python syntax, lists, functions, packages, and NumPy.
He moved on to Intermediate Python for Data Science but hit a wall around October 2017 — rarely logging in and eventually stopping completely.
I intervened . . .
“How is everything going with the DataCamp course? Are you stuck on something?” I asked.
“I like it, but I don’t really get how all this is used.”
There’s actually a lot going in the dialog above, but the keyword is “how”. One problem I consistently notice with the coding for kids movement is lack of context. Learning about programming structures and algorithms is fine, but abstract concepts don’t stick with kids unless connected to something in their world.
Scratch is very popular with kids not only for it’s “connecting blocks” metaphor, but for how it’s designed around the context of creating and sharing stories, games, and animations with the community. It’s fun and has a clear purpose — a win-win for kids. One of the hardest obstacles when transitioning from Scratch to text-based programming is that loss of that context. You’re no longer building fun things for the community; you’re on your own in a world of plain text, code editors and “Hello World!”. It’s a big shift.
What my son was really asking was: “What’s in it for me? How does Python give me superpowers?”
I needed something that would pique my son’s curiosity. A way to get him back into his coding adventure.
AI and Machine Learning dominated tech media in 2017 and I shared many interesting news articles with him throughout that year. He ignored most of them (kids don’t seem to like reading email 😃), but here are some of the stories he found interesting — at least based on discussions to/from school:
Notice a theme?
All of the stories are examples of machine learning code doing the work of humans. Giving us superpowers!
“What if you could build a program to do your writing homework — all those summaries and journal entries?” I said.
“Really? How?” His face lit up a bit.
“You can learn about AI and Machine Learning using Python.”
Let’s be honest. Very little machine learning content is designed with kids in mind. Kids like to dive right into things, but really understanding Machine Learning requires a lot of prerequisite knowledge in math and statistics.
As a web developer, my linear algebra and statistics knowledge is a bit rusty (to say the least 😉) making it harder for me to curate content and come up with fun code analogies. So I put on my research hat for a few weeks and learned as much as I could about the basics of Machine Learning.
The volume of resources available for machine learning is overwhelming: videos, blogs, books, conferences, courses. After some testing, I narrowed the choices down to Udacity, Coursera, or DataCamp. I focused on structured learning and a good practice environment — especially important when getting started on a vast topic like Machine Learning. After a final review of the courses, I selected Udacity due to their highly-targeted Nanodegrees and clearly defined prerequisites and set a long-term goal for him of completing the Deep Learning NanoDegree, knowing it could be years before he even starts that course.
The Deep Learning NanoDegree is above my level (let alone my son), so I built a course map; working my way down using the prerequisites and requirements. Here’s the first iteration:
Intro to Python for Data Science is shaded green since my son completed the course and it meets the Python prerequisite. He started with the statistics courses right away.
This was a big moment. For the first time, he was venturing into a subject area beyond my level. I only took one stats course in college and that was quite a few years ago. I wouldn’t be able to immediately answer his questions anymore; he would have to seek the answers on his own. It’s the moment I fully-transitioned out of my role as his coding teacher 😢.
As expected, he struggled with the material, but worked very hard — much harder than I expected. By January 2018, he hit a wall about two-thirds through the Inferential Statistics course. At this point, he took a well-deserved break until April 2018.
I received a promotional email from Udacity in April 2018 announcing their new AI Programming with Python Nanodegree program (yes, email marketing still works). It was a few months since my son coded anything and the course looked like a great way for him to review Python concepts (NumPy, Pandas, Matplotlib) with a short introduction to some additional machine learning prerequisites (Linear Algebra and Neural Networks).
He was also very motivated at the thought of receiving an actual certificate of completion (Gamification FTW) and started working on the course the day we enrolled.
Udacity courses and labs are pretty rigorous and he quickly fell behind the recommended completion deadlines. I wasn’t surprised since Udacity recommends a 10 hr/week commitment to complete the course on-time, but I didn’t want to curb his enthusiasm. He averages about 2–4 hours per week during the school year, since the material is very dense.
For parents just embarking on the journey of introducing coding to their kids, try to treat it like any other extra-curricular activity. Coding shouldn’t take priority over other activities such as schoolwork, free play or just being a kid. It’s a bit abstract and not always fun, but very rewarding in the long-term.
Personally, the fact that my son is willing to work on this at all makes me proud. I’m not expecting him to become a superstar programmer anytime soon. Hopefully, he is able to build new mental models enabling him to approach future problems from a different angle.
Most of us grew up in the world of imperative programming; where solving a problem involved defining each step in sequence. His world will be different. The ubiquity of AI/Machine Learning will enable computers to define the steps given the proper data and algorithms. Hopefully he’ll be ready for this reality.
For those interested, I’m planning a follow-up post in about six months, summarizing my son’s latest progress and struggles. Who knows, maybe he’ll move on to something new at that point . . . kids these days.
I also plan to start writing about my experience teaching my younger daughter’s to code (ages 6 and 9). My older daughter is currently working in Scratch and the youngest in Scratch Jr.
Follow me for updates, tips and advice on teaching your kids to code. I’ll also be documenting my experiences at CodingDad.io. Stay tuned!