This post stems from me finding this conference talk. It would be best for you to watch it first and then come back, but don’t worry – it’s pretty funny and really enlightening.
Death By a Thousand Cuts
Now, after watching that talk, I realized that ever since I started to learn how to program, I was dying the death of a thousand micro-leaks because there was so much I didn’t know. We’ve all been in that boat before: “Well, real programmers use the terminal.” So I do my best to learn the terminal, while trying to learn how to code and learn the concepts of computer architecture and keep up with engineering physics and… You get my point.
From this fire hose I did manage to learn little things like ls, cd, etc. And of course I learned the material in my classes. But I was nowhere near mastering a terminal. I was piling up on B. And I was in double trouble because I was so concerned with everything I didn’t know that the things I thought I did know ended up in the Half-assed on C category. So I know what you’re thinking: “OK, I get it… you’re an idiot. What did you do about it?” Please, read on.
Real Programmers Use…
As a programmer, we get pulled all kinds of different ways with what we should or shouldn’t know. So the first task that Kathy issues us with is pulling stuff off B. The odd jobs I worked in college pulled me through C#/.NET, JavaScript, HTML, CSS, iOS in Objective-C, and Android in Java all while doing my studies. Now that I think about it, I probably wasn’t even working in the B category in most of those technologies.
To top it off, I’m one of those people who have the bad habit of seeing everything as a challenge and so the Real programmers use X statements really got to me:
Real programmers use vim
Real programmers use the terminal
Real programmers use a *nix environment
It’s funny that Kathy refers to compensating with food because that’s exactly what I did during this time.
Nail in the Coffin
My last semester was the most rewarding in my undergrad, but it really brought to light that I was just spinning my wheels. One class was using F#, the other Python and Java, we decided on Rails for our senior design project (I would also end up the sole developer of the iOS app, where I lost a lot of sleep learning the new Swift language because that’s what real iOS programmers went to), and we were goaded by another “Real programmers use LaTeX to write documentation” snark so, by God, our senior project documentation would be an immaculate PDF written in LaTeX. None of this actually improved my skills as a developer, I just ended up knowing where to put the colons and semi-colons in up-teen different languages and I was completely burnt out from not ever getting productive with any of them.
Your Brain is a Codebase
Kathy made me realize that I could look at improving my skills like improving a codebase. What do you do when you realize your software doesn’t have a feature the client (you, in this case) needs? It gets put on the backlog in order of priority. Upon this eureka moment, I made a Trello board named Skills with columns Can’t Do, Learning, and Mastered. My git skills sucked, so that went to the top of the Can’t Do column in my new Trello board. Then I could track what I didn’t know and work on it after I was done bringing a current skill (think task) to the Mastered column – effectively closing it out. This continues to work well when you realize that a previous feature of yourself has a bug in it! Just make an issue and take care of it.
This has brought my productivity and capability to another level, where I am finally comfortable with git, the shell, and Acme. I also decided to concentrate all my efforts into my favorite programming language, Go, which has earned me the privilege of using it full time at work. And finally, to fix my Half-assed on C skills, I’m going back to school for my masters through the OMSCS program at Georgia Tech. With a proficient knowledge of my core tools: the shell, git, Go, and Acme, I plan to keep my focus strictly on my academic sabbatical, where I can bring the concepts of computer science I left on B to C.