100DaysOfCode — The first 10 Days…
The #100DaysOfCode challenge was created by Alexander Kallaway as a motivational tool for those new to coding; and for more experienced programmers who have been procrastinating on their personal projects.
The challenge has two simple rules:
1. Code for a minimum of one hour, every day, for the next 100 days.
2. Tweet your progress each day with the #100DaysOfCode hashtag.
The premise being, that public accountability helps to build positive habits, and by announcing your intentions to commit to a daily coding habit, you are more likely to push through when the going gets tough.
Thousands of coders have taken the challenge already, and hundreds more learners from around the world are tweeting their progress daily in a cacophony of success, frustration, triumphs and confusion. I have dived in amidst this chaos, and have been amazed at how positive, welcoming and encouraging the #100DaysOfCode community has been.
Why did I Commit to the Challenge?
In late 2018, I was inspired to upgrade my meagre technical skills in order to work on projects in Artificial Intelligence and AI Safety. In order to make any progress, this meant learning to code.
My earliest experience of coding was about 25 years ago, writing a few half baked text adventures in a language called “Easy AMOS” on the Commodore Amiga System. Unfortunately, the coding bug never caught me at the time, and the closest I then came to programming was messing around with MS DOS to install DOOM on our ancient school computers.
I opted to learn Python, a high level programming language which is widely used for AI Development and Machine Learning. For the past 10 days I have been learning Python and have evolved from squinting at the command line and interactive shell: “>>>” and wondering what on earth I was doing, to reading e-books; coding simple games, and organising lists of data. My learning has been supplemented by listening to podcasts, reading online step by step guides, and playing some interactive games such as “Code Combat” (Technically it’s meant for kids, but the act of repeatedly typing the code syntax has helped!). I have just launched into a structured online course (Also known as a MOOC) on Coursera, an online learning platform. My ongoing progress evidenced by daily tweets and uploads of my projects onto GitHub — an online code repository for collaboration and version control.
Learning to code from scratch as a complete beginner has not been easy, one positive in the process has been that coding gave me immediate feedback on how I was doing — either by working as intended, thereby prompting some self satisfied fist pumps, or throwing back errors when I “ran” the code, prompting me to examine where it went wrong and make changes. Cognitive Science research suggests that these iterative feedback loops are highly beneficial for new learning, and although it’s only been just over a week, I found myself quickly improving. It felt great to build and create, rather than be a passive recipient of software.
I have been lucky to find some fantastic resources for my learning journey in the last 10 days.
The first of these: “Automate The Boring Stuff in Python”, is a free e-book by Al Sweigart. The book is intended for anyone who has repetitive activities in their daily work that could be automated by code, for example by sending a batch of emails, or by automatically reviewing Excel spreadsheets for required data, even “web scraping” which is an automated trawl for information from websites.
The book provides the Python code to emulate in order to complete these tasks, but the early chapters are all about building a solid understanding of Python as a language, alongside explanation and encouragement to directly write the code to help cement the elements that make up Python programming.
On day’s 1&2 of the challenge I started by working through the early chapters of the book and started creating small programmes straight from the get go.
On Day 3, I started to work through another of Al’s e-books called: “Invent your own games with Python”, which again encourages you to dive straight into the code with simple text based games such as a random number guessing game.
The technique of writing the code myself, then running it, and finally working through the detail of why it works, with examples from the book explaining each step was very compelling.
I switched between both of Al’s books during the first 10 days as they were great fun, easy to follow, and free.
On Day 4, I continued to work on simple games following instructions from the e-books, and started to listen to a couple of Podcasts: Talk Python To Me, and CodeNewbie; which helped by immersing me further in the world of programming. It was also encouraging to hear life stories from people who had changed careers and taught themselves coding from scratch, the presenters also gave suggestions and signposting to other code learning resources.
On day’s 5–7, I continued to work through the chapters in both of Al’s books as above, and started a regular habit of uploading my code to GitHub which let me review and continue to work on the same code when I was learning at different locations, such as my local library.
Having a full time career and young family, I have sometimes had to split my 60 minutes of daily coding over several sessions, having a laptop is very beneficial as any spare?! time I had, I could launch Python and start coding.
Sometimes 30 mins in my car at lunchtime, and another quick session before bed were my only options, but where possible, I have been setting my alarm for 5am, getting up before the family, grabbing a cup of coffee and using the quiet hour or so to code.
This hasn’t always been easy, but one benefit of having a defined challenge is that it forces you to make a choice about how you spend your time, and when we are inundated with hundreds of things we should or could be doing, the clarity of a clearly defined challenge like #100DaysOfCode is useful to help cut through the conflicting demands on our time.
On day 8, I began to get stuck with some of the exercises from Automate the Boring Stuff, and after googling the solutions — Thank you stackoverflow.com and “copy/pasting” one too many times, I felt I needed something more structured to work through.
After researching various online Python course providers both paid and free (there is a lot of choice out there), I opted for Coursera’s highly rated: “Programming for everybody: Getting started with Python”.
I was able to enrol and study the content (known as “Auditing”) for free, although I later subscribed as I wanted a Certificate for my professional LinkedIn. I also enjoyed the lecturers (Dr. Charles Severance) teaching style, and his bonus video content on computing history, e.g. a talk from the inventor of the Raspberry Pi. Unlike “Automate the Boring Stuff” which launches you straight in, the course was slower to setup to actually enter my own code, but Charles’ teaching videos start off with fantastic explanations of the key concepts, and then pull them into the bigger picture, I learned how expressions; functions; conditions; and loops integrate to form small pieces of software. This, alongside embedded quizzes and a code playground sealed the deal!
Day’s 9–10 I continued to run through the structured lessons on Coursera and tweet my progress to a small but enthusiastic group of new coders that had been encouraging me over the last 10 days.
Why not give it a go?
I want to wish good luck to everyone who attempts the #100DaysOfCode Challenge, I have found the Twitter community to be supportive and encouraging. Positive comments, stories and battles of others completing the challenge alongside you can really help to motivate and inspire you to keep going.
If you want to follow my progress during the challenge, please feel free to join me on Twitter @ai_hub. If your thinking of learning to code, or getting that passion project off the shelf, #100DaysOfCode could be a great way to start.
Try not to think about it for too long, build your coding habit, and imagine how much you could learn and create with 100 days worth of dedication!