2021 Summary — Looking ahead
With 2022 underway it’s time I took stock of the progress I made in 2021 on my path to becoming a more confident Computer Science learner and eventually venturing into the professional realm of Software Engineering.
The start of 2021 was very promising. After completing my introductory course on Computer Science (CS50), my Algorithms and Data Structures (ADS) course got off to a frustrating start. My chosen course was Princeton’s Algorithms I module offered by Coursera. Having never programmed in Java before, my first week was an absolute disaster. I quickly realised that I had to change course — no pun intended — and maybe stick to something more familiar. At the same time, I was getting better at Python so I opted for the language agnostic Algorithms Specialization offered on Coursera. Tackling the four-part specialisation constantly kept me wondering whether I should be specialising in anything so early in my development. Though brutal, it followed a very structured path of a lecture, followed by a quiz and a programming assignment. It covered very basic Algorithms to a satisfactory level, at least for a beginner and looking back at the programming assignments I can say that, with the exception of two sub-assignments, they were not so difficult. Overall, I can say that the experience has made me a more confident thinker and encouraged me to consider the impact my coding decisions can have on the overall performance. In other words, it has made me a better programmer. The beauty of it all was that if I’d stuck to a more formalised curriculum I would have not pulled through and this is one of the aspects I love the most about being ‘self-taught’ (more on the quotes in another post): I can take my education in any direction I choose, as long as it leads me to my pre-determined path.
As you can imagine tackling such a complex topic left very little time for any other endeavours. Soon, Web Development and continuing my Operating Systems (OS) journey took a back seat. With hindsight, I am pleased to have followed my gut instinct and focused primarily on ADS. Here’s what most people tend to get wrong about the topic. Irrespective of your entry route to Software Engineering, you will need to be familiar with ADS. The reason all the big tech companies quiz applicants on the topic is because it is fundamental. Wishing there were a way round it is a fool’s errand. But that doesn’t mean you have to be able to invert a Binary Tree or come up with an optimisation to Dijkstra’s algorithm for detecting shortest paths on the spot. Maybe at the top level (working for Google for example) that might come in handy and if that’s your goal, you’ve got my blessings. You know what to do. The rest of us commoners will never have to touch that stuff with any high level of granularity. These are the words of a seasoned software engineer not some random person on Medium, so make of that what you will…
The second half of 2021 saw me trying to keep some forgotten promises. My Web Dev and OS modules. With my ego battered and bruised from the ADS experience, I timidly started on the CS50 Web Dev module. Though initially quite difficult, learning the inner workings of a framework always is, I powered through and made a lot of progress surprisingly quickly. My biggest takeaway from the module was that programming for ADS and programming for the Web are quite different. Not once did I have to worry about the algorithmic complexity of my code. Truth be told, the tasks involved were very simple following the CRUD and MVC patterns, but with the exception of a few cases for example where I wrote my own custom methods for a class, I hardly had to care about the runtime analysis of my code. My suspicion is that in real life applications using layer upon layer of micro-services and third party APIs it will come to play a more integral role to the product that gets shipped.
This leads us nicely to the present. I am boldly stating that I am ready to tackle real-life projects and applications via seeking a junior developer position. So far, I’ve applied to very few positions and the results have been discouraging to say the least, with potential employers turning down my application or quite simply ghosting me. And you know what? That is fine by me! If you’re a ‘self-taught’ enthusiast in a similar position take a step back and think about what you’re asking of them! Ultimately, you’re a random person who can offer them no assurance that what you claim is true. (Say what will of academic institutions but they’re pretty good at the credibility part). Essentially, you’re asking them to potentially waste time and resources on someone who might not be suitable for the role. That is a risk and businesses do not like risk, no matter what they say. Let’s not forget that even if someone held proof they could do something — at the very least finishing uni means you know how to study for and pass exams, as the critique directed at more traditional institutions holds — they would still struggle. It is very much a numbers game. But that’s life…
My battle against ADS did not end with the Algorithms Specialization. In late August, I decided that I wanted to take a deeper dive on the essentials and enrolled in another ADS specialisation offered by Georgia Tech through edX. And guess what? It is taught in Java. At the time of writing I am 3/4 of the way there and I have to say I struggled significantly less picking up Java. Also, I started on the Operating Systems course offered for free on Udacity, which gives me a decent reason to program in C again, which I like.
That is all for now. Feel free to comment on any of the ideas the article has put forth. I am always up for improving.