Mar 12, 20154 min read

How I learned to program - part 2

Learning data structures and algorithms to uncover the fundamentals of my craft

Part 1 here

Back to the basics

As I mentioned in my previous post, I was at the point in my career where I needed to go back and start exploring some of the concepts that are second-nature to most Computer Science majors, namely data structures and their algorithms. For the unfamiliar, these are well-established paradigms for dealing with typical programming-related issues such as sorting, storing, and retrieving data.

You can actually go surprisingly far in this industry having only a shallow knowledge of these concepts, and some people I’ve met who have been doing web development for several years actually have no knowledge of it whatsoever. Indeed, most programming languages have built-in solutions for these sorts of problems already, and the ones you’d have to work on yourself only make a big difference when you have tons of data. I can only count a handful of times when deep knowledge of data structures has actually been useful on the job, and even then I would say it wasn’t strictly necessary. There’s been some discussion over the past few years whether engineering candidates (particularly those specializing in front-end) should be required to have a strong knowledge in this area. However, learning these concepts has helped inform my way of thinking and improved my overall ability as a developer, and furthermore many companies (especially the tech giants) will likely ask questions in this arena during their interviews. It is likely in your best interest to study this area.

I have to admit that knowledge of data structures eluded me for many months. I made many attempts to get this material under my belt, and I struggled to find the right medium for learning this subject. Most books on the topic are quite academic and a bit obtuse, more useful as reference manuals than tutorials.

MOOCs to the rescue

Luckily, around this time, Massive Open Online Courses (MOOCs) such as Coursera and Udacity were on the rise. The algorithms courses (part I and part II) taught by professor Robert Sedgewick, a renowned Computer Scientist from Princeton, were the ones that finally made it all click for me. The instruction was clear and straightforward for such a complex topic and the exercises were helpful. I can’t recommend this course enough if you are in software and are looking to fill this particular knowledge gap.

While I was looking to learn data structures, I ended up taking a bunch of other courses in an attempt to solidify my knowledge. A particularly helpful one was Udacity’s Web Development course, taught by Reddit’s co-founder Steve Huffman. While a lot of this turned out to be review of HTML, I got a really great overview of the internals of HTTP, the protocol that the Internet runs on, as well as an introduction to the Python programming language and using Google App Engine. The course ended with a glimpse into the technology stack that Reddit employs, and it offered a real look at how a site might handle traffic on the scale that Reddit does.

The deep end (systems administration)

After I had been at my first job for a little over a year, my supervisor/mentor announced that he was leaving, and he trained me to take over all the server administration in his stead. I learned quite a bit about the server configurations, proxies, load balancing, and database replication. These topics aren’t nearly as mainstream as most of the others that I’ve talked about, so it can be pretty tricky to learn some of them on your own. If I’m being honest with myself I’d definitely say my knowledge in this area is pretty shaky. My only recommendation as far as a resource to learn this stuff would be “a mentor.” It’s rare as a front-end developer (unless you’re the only developer/a CTO) to be in a situation where you will have to work on sysadmin stuff a lot, but in most jobs (even at big companies) there will be many situations in which you’ll find that knowledge of this domain helps you do your job much better.

With my supervisor gone, I was the sole developer for a little while. It was a great challenge for me to maintain the site as both the sole developer, and to be on call for any outages and what-have-yous that the site ran into. However, despite having more responsibility and eventually a few interns as my direct reports, I stagnated. It’s tough to be at a place where you are the most experienced developer with just a year of experience, so I eventually sought out new opportunities.

In case it wasn’t obvious from what I’m writing, I think it’s absolutely crucial to find a good mentor early in your career. Even as I write this, I am amazed when I think about all that I learned during my first year of development. I’m very grateful to have had the opportunity to grow so much when I was just starting out.

My next job was when I started to specialize in front-end development and how I prepared myself further for working at big companies. I’ll talk more about these topics in the next chapter.