Since classes start tomorrow, I figured that now would be a really good time to make a post. I am more excited for this coming term than any so far while at Yale, in large part because I am finally going to get to dive into the heart of the computer science major and otherwise submerse myself in the computer science community. In terms of CS classes, I will be taking two: Data Structures and Programming Techniques and Design and Analysis of Algorithms. The first one is going to really whip my C into shape, and obviously give me forwards and backwards knowledge of
linked lists, I mean, data structures (okay, okay, it’s really hard to be funny on paper). The second course, a bit more theoretical and a bit more math-y, will definitely structure my thinking and approaches to problem solving.
But enough of the boring stuff. I decided last semester that I love computer programming, and even more so, that I want to put the time in to be good at it. Not, not good. Great. So over break, I spent a fair amount of time reading up in the Stanford CS Library as well as various programming blogs like Joel on Software, Steve Yegge’s Rants, and Coding Horror, and my reading prompted me to make the following New Year’s Resolutions:
- I will use version control. Not just for CS assignments, but for papers as well. As both Joel Spolsky (Fog Creek, Stack Overflow) and the guys at Reliscore described, the use of version control is one of the things that sets apart the good programmers from the great ones. I can’t tell you how many times I made copies of my project folder for my Yale Daily News iPhone app — I realized that I needed to do version control, but at that point, hadn’t bothered to learn to use git (or even XCode’s built in repository system, for that matter). But now, I am convinced. So after a fair amount of research, I installed git on my computer, and set up an account with BitBucket to handle my online repositories. Why BitBucket, you ask, rather than Github or Google Project Hosting? Simple answer: free, unlimited repositories (public and private), and, if you’re a student, unlimited users. BitBucket also allows you to keep Mercurial repositories, which is nice if you prefer that to git. Also, for Mac users, SourceTree, made by the company who runs BitBucket, is a brilliant GUI for Git and Mercurial on Mac OSX. Although I will make an effort to learn how to use git from the command line, SourceTree will really help to keep myself organized.
- I will learn how to use and write test scripts for my assignments. In a technical interview I had the other day, I was asked not only how to optimize an algorithm for a given problem, but also what test cases I would implement to check that algorithm. I was able to come up with a few on the spot — EOF conditions, whitespace, non-ASCII characters, int overflow errors, null pointers — but developing test cases on a regular basis will challenge me to think in a more complete way about the problems that I am solving. I also decided that I will write my test scripts in Python, which, quite obviously, will help me learn Python.
- I will learn as much Linux as possible. There are so many ways in which Linux can help with coding, whether they be command-line utilities like
sedor software like emacs (yes, I know I can use it on a Mac, but I much prefer TextWrangler) and valgrind. If I want to consider myself a real programmer, then Linux is a must.
Those are my resolutions. I’ll let you know how they go!