An Average Person’s Coding Journey
I decided to embark on #100DaysOfCode to start the New Year. Looking through other tweets I see a lot of ambitious targets (often involving getting a job as a developer). My goals are somewhat less lofty, but I wanted to share them for any one else at there who is learning to code at a leisurely pace like me. I don’t have any immediate career goals, but I do think knowing how to code is going to become increasingly valuable. I sincerely hope that the line between developers and users continues to be blurred, and I’m sure I will find ways to apply the knowledge I accrue from learning to code in my day-to-day work.
My journey began as I’m sure many others’ have. I started at Codeacademy, completed a few challenges, got stuck and walked away for a few years! But, hey, that’s OK. Later I came across FreeCodeCamp and decided to give coding another try. Things almost went the same way, with moments of frustration that would make me put it down for long periods of time.
What made it work for me was to have something else to switch to. I started Swift playgrounds in my iPad. I’m sure some people see it a childish, but then in the context of coding I’m an infant. I really liked the fact that when my code didn’t work, it was really easy to step through and see what had gone wrong. Of course, now I’ve found tools and tricks to do this in other languages, but at the beginning it was really helpful to have this feature built in. I also found that switching between two types of tutorial helped me think about problems from different angles. There are always little quirks that don’t get explained explicitly, but when you are presented the same information in slightly different ways you are able to make more intuitive connections.
Everyone has different opinions of what the best language is to learn. Honestly, I think I’m far too early to worry about such things. But several people did extol the virtues of Python to me, so I figured I would take a look. I also wanted a Raspberry Pi and had in mind that it used Python. This led me to enroll in a course from MIT on EdX, Introduction to Computer Science and Programming Using Python. While they emphasize that it is not a Python course (rather a CS course that uses Python to demonstrate core principals), it seemed a good place to start.
Now, things really started to come together. I had seen for and while loops, and learned to iterate. I knew about if statements and Boolean operators. Understanding how to use these techniques in another language and seeing the similarities and difference was incredibly educational. I will say, I have struggled a bit with syntax as a result of switching between languages, but in the end this has been a good thing and forced me to work harder at memorizing correct syntax.
I hit a couple of big milestones this week that set me up for a good #100DaysOfCode. First, I complete all the Basic Algorithm Scripting challenges on FreeCodeCamp. Wow, I thought that would never end. I lost count of the number of times I gave up in despair, but would pick it up again later and find a solution. I think I overcame my fear of methods. At the start, it always seemed unfair that the solution was to use some method that basically completed the challenge for you, rather than building some lengthy algorithm to tackle the problem step by step. I was also intimidated, knowing that I could never memorize every available method, so I just didn’t want to use them. And, they are often a black box — it can be hard to understand exactly what a method will do in particular situations. However, rather than just moving on once I passed the tests, I learned to try some different approaches and got more comfortable with using methods.
My other big milestone was passing the Problem Set at the end of Week 3 of my MIT course. The problem is basically to build a game that plays like hangman. I honestly thought it would take me hours, and I wondered if I had learned the material well enough to tackle such an intimidating task. What I had learned most was persistence. My first attempt didn’t work? Of course not, it almost never does. Tweak the code. Find out what is going wrong. Re-read some notes. Really can’t get a particular error to go away? Trash the code and take a different approach — the is always more than one way to solve a problem. I was amazed that I was able to piece together some code that actually did something interactive, and what’s best is that there was no way to cheat, which made me find solutions on my own, so I could be proud that the code was all my own work.
The next thing on my agenda is the midterm exam for the MIT course. I’m going to try to avoid other languages until I get it done. This is a time limited exam so I don’t want to waste precious minutes trying to remember if I need a semi-colon or a comma. I don’t really know what to expect, but hopefully it goes OK. Once the midterm is done, I will split my time between continuing the course, and working on the Intermediate Front End Development projects on FreeCodeCamp.
If that leaves me any other free time, then I’ll be playing with my raspberry pi. I’m aiming to create my own homebrewing software, starting with a rudimentary timer. I’m committed to starting small and basic, rather than taking something that somebody else has built, just for the sake of having a working device very quickly. But of course I will use other people’s ideas as inspiration, so if anyone know some good homebrewing projects, please let me know, I’d love to check them out.
Here is my portfolio page on codepen. I think I’ll make some updates, to get back in to writing html and css, before tackling the intermediate front end projects. It will be worthwhile to use it to keep exhibiting my progress.