esc from tutorial hell

The Sha(w)shank Redemption, for programmers

04 May 2021

Hope is a good thing

Peter Thiel classifies the future into four quadrants on two orthogonal axes: determinate vs indeterminate, and optimistic versus pessimistic. The quadrants are pretty self-explanatory, and he uses them to reflect on nature of economies as well as businesses across geographical and historical boundaries.

Future quadrants showing effect of determinism

Future quadrants showing effect of optimism

I call upon these four quadrants to motivate my personal reason behind starting this blog. However,

(Not) learning how to program

I started learning programming in the Fall of 2013, my first semester of college. I had been taught ‘programs’ in middle school before, simple graphical simulations using the ancient LOGO Programming Language. I was given an exact set of instructions to type into my school’s computers by my teachers, with the promise that I could potentially speak to this network of wires and screens through in this magic tongue. The classes were less (if at all) about understanding programming principles, and more about rote learning. I, or my teachers for that matter, would never consider me a programmer even after a few years of these classes in middle school.

So I learned to program back in 2013. And it was not how most of you learned to program. I for one did not have a computer to run my programs on! I would learn to program by reading a book called Let Us C and trying to figure out concepts like recursion, conditionals, among others. I wasn’t very good at it, obviously, but it was enough to get me through my first year programming course and lab with a B.

However, it was panifully obvious to me that I did not know how to program. Being an electronics major at a university with a rigid curriculum also meant that I would not take classes where any singificant programming knowledge would be gained or expertise required. It dawned on me that, like most programmers, I will have to learn from the Internet.

The cliché of the self-taught programmer

I continued to read Intro To Programming books from my university’s library during my second year of college. I learned enough of C to work on a short project with a professor at my department. I was trying to model a network using graphs, in order to later simulate package scheduling on it. I remember it being extremely simple – I think I got maybe 200 lines of code written and got nowhere close to having anything decent working. I managed to sell that project well because after my second year I got a research internship and a chance to participate in a long workshop based on the premise that I could program. However, reality caught up to me as I failed miserably at both my internship and the workshop at getting anything done.

After this I focussed a lot of my efforts in learning to program on studying data structures and algorithms, and solving coding challenges. I am assuming I did not do a great job at them because I ended up not receiving an internship offer (at all) or a job offer up until the final semester of my undergrad. It was also a bad way of learning how to program – I wrote quick and dirty programs which solved the problem at hand but never grew beyond that.

I did however get really into machine learning and data science during my undergrad, a field which maybe does not emphasize good software development practices as much. Most of my programming experience has been in machine learning, I did pick up a lot of high-level programming knowledge working on research projects.

Determinate Optimism

Long story short, I have spent a long time programming without ever really doing software development. Never studied CS topics like programming languages, operating systems, compilers. Never worked a software job for a significant amount of time. You get the gist.

This blog is my conscious attempt at teaching myself software development and computer science. My hope is that I will get both first-principles understanding of how computers and software work, and also develop expertise in writing good-quality software. I hope to document this journey for folks who might also feel that they are stuck in this sorry state of having programmed for long enough but not feeling confident in their abilities to build software. See you on the other side!

comments powered by Disqus