loading...
Cover image for It's Never Too Late To Learn: 3 things my 11yo taught me about coding

It's Never Too Late To Learn: 3 things my 11yo taught me about coding

nitya profile image Nitya Narasimhan 惻4 min read

Recently I wrote a couple of spontaneous threads on Twitter that became the most-viewed of my posts in over a decade. They focused on learning. The first inspired me to convert the tweets into a series of personal essays to support deeper conversations on those topics.

Today I'm converting the second thread into a post for the series. You can click the tweet below to read the thread on Twitter or just scroll down to read it in paragraph form. (The bonus of writing this on dev.to is that I can actually fix those pesky typos in my tweets!)

The original thread has 13 tweets. I captured the first eleven below, and the final two in the Takeaway section at the end.


The Thread

It's never too late to learn something and never too early to share knowledge with others. My 11yo is getting more into Python so I decided to do (separately) the same intro Udacity course and be a study buddy.

And something interesting happened. (A thread)


It started weeks ago. We realized schools were not going to have any meaningful routines & wanted to give him something with a target and achievement, that would promote self-study and learning. I pointed him to the Udacity "Intro to Python Programming".

He started doing the lessons & zoomed through them.
It was clear he was watching the videos and completing the exercises fairly fast. It wasn't as clear if he understood the concepts in a way that allowed him to apply them elsewhere.

So I announced I would do the course! šŸ™‹šŸ½ā€ā™€ļø

At which point he suddenly took an interest in MY progress. I made it a point to tell him I had never done the course before. (True - I've used Python as-needed and learned it as I learned everything else, by examples and application)

He decided he needed to be my coach. šŸ˜


And so began an interesting journey. I watched videos with him and sketchnoted things of interest. And we would have discussions about what we were hearing and how it would apply. Till then he had used Python with Mindstorms - and with clear code examples (copy/edit). Now he saw Python as an open-ended tool to make things - and he started reading "Invent your own computer games with Python"

It opened his mind further to creative things he could do with code. Which brings me to yesterday (Jul 18). He came over all excited to show me a simple text-based adventure game he had created via Trinket App

A professional coder might look at it and think it needed work
Just conditionals, print statements and string literals. Not at all DRY.

They would be wrong.


To understand the power of learning and achieving you need to understand the user journey and goal. You need to see a 11yo giggling and running the app till the dragon finally relinquished the treasure.

It wasn't code.
It was creation + storytelling

He was only running code examples and modifying them slightly. But he had learned two things already.

  • Document. Document. Document.
  • Experiment. Experiment. Experiment.

And now he was ready to have the conversation on problem solving with code given a written problem.


The image above was me challenging him to take the same example text-adventure and modify it to create a "Snakes-and-Ladders" game.

Huh? "Where do I start?"

And that shift in mindset was what successful learning is about - not "can I do this?" but "HOW can I do this?".

We had more conversations - the biggest lesson I could impart to him was that there were no perfect solutions. Just iterative experiments to get desirable results. We walked through data structures and functions and understanding how to write code for agility and reuse.

He grasped three things immediately

  • Use functions to abstract complexity so code was readable
  • Use print + interactive runs to test & validate assumptions
  • Make the basic idea work before layering on complexity

His first board had 1 snake, 1 ladder - and it worked.


The Takeaway: 3 Things

This morning he has been busy explaining to his grandparents how they can create a text-based board game with Python. And explaining how we can share code via browser if they want to learn. And he told me he will extend this to multiple snakes/ladders - šŸ˜±

And that to me is the three steps to successful learning

  1. BUILD something (document, experiment, iterate)
  2. EXTEND it to do something more (be creative, efficient)
  3. TEACH someone else what you do (clarify your thinking, inspire someone else)

Resources

I'll update this with more resource links as we go. But starting with this. Hugely recommend the book - it's available online here

The Journey Continues!

Update 1: July 21, 2020

We have a working Snakes-and-Ladders game and it has the ability to be taken to the next level and randomized for different board sizes. I gave him the win on this one.

Update 2: Aug 2, 2020

I think I may have found us a new adventure to go towards.

The 11yo was on board and we had a great conversation but this one is a bit more complex than the first one. I hope he perseveres. And I hope I get a chance to update this thread with learnings later

Your Turn

Do you have a story on how it's never late to learn? Or about someone who surprised you with their ability to overcome initial hurdles and discover the joy in problem solving?

Let me know - and if you have ideas or insights into other things I can get the 11yo to explore in his Python and game development journey, just leave a comment below. ā™„ļø

Posted on by:

nitya profile

Nitya Narasimhan

@nitya

PhD & Polyglot / Senior Cloud Advocate @Microsoft / I love mobile, web and visual storytelling / Be fearless, learn continuously!

Discussion

pic
Editor guide
 

Absolutely love this! I can definitely relate to the "it's never too late to learn" theme. I have a background in education (elementary teacher), but love writing and am passionate about diversity in tech and tech for good. After five years of teaching I decided to make a career change and learn all about digital marketing, content writing, and content creation. Now I'm working in dev relations at a company I <3 and continue to learn new things every day!

 

OMG that is incredible - and congratulations! Contnet creation and digital marketing are both high-value areas for developer relations and I have the biggest respect for educators, so I can absolutely envision how your teaching background will be such a huge benefit when creating content that helps others learn tech.

Thank you for sharing. I hope you write a blog post about your journey and share it as well - I know many folks looking for inspiration around career changes and this is perfect!

 

Thanks so much! That means a lot!

I wrote a post about some tips for changing careers and sustaining yourself on the job search journey on LinkedIn back in January, and just revamped it and posted it here on DEV! I'm planning on writing another one as a follow-up ā€“ thanks for the motivation and inspiration! :)

Woot. I am off to read the post and amplify it ā™„ļø anytime. I think this is exactly what Community is about. Helping and learning from each other, and sharing that with others

Awesome, much appreciated! I fully agree šŸ˜Š

FYI - I decided to go deeper with my original article and make it into a series, elaborating on each of the 5 things that helped me make my career change. Thanks for the inspiration! šŸ˜Š

 
  • Use functions to abstract complexity so code was readable
  • Use print + interactive runs to test & validate assumptions
  • Make the basic idea work before layering on complexity

Those are three very valuable lessons for any new programmer. Specially the last two!

Two many programmers start hacking stuff together until they feel they have reached some goal; then they try running it and nothing works because a bunch of assumptions were wrong and it's now very hard to debug the whole construct.

I was once helping a friend over screenshare and after every line of code I was like "Dude, why aren't you running it to see if it works so far?" and it took quite a lot of effort to get him used to not just run the program after completing a whole 30+ line function.

 

I know - there is a lot we need to change in tech about "perceptions" of what a good programmer or coder is. I know folks who believe that good coders are those who can reduce code to 1 line of dense (unreadable) semantics in the name of efficiency, and who think knowing all the available debug tooling and being a power user is the key.

It's not.

Like everything in life, programming is about adapting to context and personalizing to preference. And being able to have short, fast, "iterate-test" cycles is key to agile development. And print statements are still the most common way to validate your thinking and keep making progress. Tools are awesome too - and everyone will get to the point where they will use the right tools for the right job and it's okay to get there in your own time.

 

Lately, I've seen quite many people defend print statements for debugging because they're dumb, but they get the job done and I really think they're missing the point.

Print statements are the most versatile debugging output available; they can communicate every last bit of information that is programmatically available from a given state of the application, whereas "advanced" debugging features, while often incredibly useful, provide a much narrower insight into certain aspects of the state of the application.

But even beyond debugging, printing some meaningful application state can help, as you said, to validate the programmers assumptions. Validating your assumptions in short implement-validate-fix-cycles helps in detecting both bugs based on technicalities (typos, syntax, etc.) as well as those based on incorrect assumptions (wrong order of arguments, less information returned from a function than expected, etc.) and, in the latter case, can prevent spending much more time chasing down a path that, as it later turns out, doesn't work because it only works for an incorrect assumption (like wanting to use information that an API just doesn't provide, etc.)

"Print statements are the most versatile debugging output available;"
I couldn't agree more - and it is definitely one of those hills I am willing to die on. I think there is a reason we all "print Hello World!" as the starting point for every new learning journey.

Thank you for this!

 

This article is great. I love how enthusiastic your son is, and how you're enthusiastic about learning with him.

It also strikes me quite personally - I wish I had had someone there when I was younger to encourage me to go from tinkering with code into actionable learning, as your bio says. As an 11-13y/o, I started to tweak my MySpace profile's HTML and create some personalised Bebo skins. I was good at it and enjoyed doing it, but never realised it was possible to do more than that, or that I was capable of it. As an adult, I realised I COULD, so jumped straight into a coding bootcamp, which I recently completed and loved it.

It makes me feel so good that there's someone out there helping people find this path! Thank you for sharing this story!

 

Thank you so much!!

And I agree. Not just as a parent but as someone who looks back on her childhood and thinks "what if I had started learning this then?" And I absolutely appreciate what you say - I try to give back as much as I can. But I also know my 11yo has privileges that other kids don't and I hope that by us all sharing stories, other parents realize how much their kids are capable of as well.

The truth is that kids emulate parents and the adults they observe around them. All the time. And they are made for curiosity and play. If we see them and appreciate their efforts, they can (and do) flourish.

 

I think there is always a generational change - mobile phones went mainstream in the late 1990's but the generation that grew up then takes them for granted. Similarly I think the current generation of kids is born digital - they own phones, have computers in every school, read books and submit assignments online, and play games across 5 different platforms. And because of that, they see the environment differently almost as a toy they can hack.

Programming - if seen as digital puzzle solving and fun creative activity - is a good thing for kids. However, I am aware that having young kids get too much screen time is bad - so I absolutely encourage my 11yo to sketch out problems, read more books, play board games and do all the things that build problem solving muscles without having to be online always.

 

Thanks so much . Bengaluru is one of my favorite places in the world .. love that you have a WhatsApp coders group. Unfortunately I don't have an account there but if you have a dev.to Community or series of posts let me know and I'll be happy to share

 

Love this story. Cultivate and Create.

 

Thank you so much! I appreciate it!