If there’s one thing that I’ve learned from my plunges into open source hacking, its that the most valuable talent you can have is adapting to code bases you’ve never seen before. Sure, being able to write efficient, clean code is a must as well, but that is a baseline expectation from anyone who calls himself a programmer. As far as mental effort goes, its relatively IHMO easy to create an entire code base yourself and simply keep modifying whatever you deem necessary in order to improve the project. You hold the structure of the program in your mind and can shape it easily. The tricky part comes in when other people start to tinker with what you’ve wrote, or when you start to tinker with what others have done. The code base isn’t in the newcomer’s mind; what the creator easily grasps can prove difficult to a newbie. Many mechanisms need to be discovered and grasped When a person who can program comes into a new, large code base, theres a very steep learning curve, for the most part. The project has likely been going on for some time and has a fair amount of complexity. Learning how to deal with software you didn’t write is a huge task that is oftentimes ignored in academic circles, or at least the ones I have the misfortune to be involved with. I feel that the consensus among my professors at least is to teach the students to code in terms of syntax and basic algorithms, and once the students know that, adapting to the real world will simply fall into place. I can’t help but realize that this thinking is flawed, but there’s nothing I can do about it. So why is being able to adapt to unknown the most important skill a programmer can have?
- You can’t code everything. Believe me, if I was immortal and had infinite time to do things, the first thing I would do is get started writing a totally custom OS from scratch. Unfortunately, our time on this globe is limited, so you have to accept work that other people have done in order to get a functional system on your computer within a reasonable amount of time, not to mention a computing system that has some degree of compatibility with the rest of the world. Learning to adapt to what other people have coded, in a very real sense, gives you power over the code you use, and makes it your own. Knowing the code, or adapting quickly gives you the power to shape how your computer operates and what it does for you.
- If you’re reading this computer blog, there’s a decent chance that your computing skills help to put food on your table. If you take a new job, say for better benefits, bosses, or salary, you’re going to have to adapt to whatever code base the company works with. Learning good adaptability from your open source endeavors will help you in your professional life by being able to do what you need to do at work, whether you make your money in the open source or closed source world.
- If you look at it in the right way, adapting to big unknown code bases can be fun. Looking at the unknown as a difficult, grueling hurdle to be overcome is a big mental block to actually learning what the code does. Instead, look at the code as a puzzle, a Rubik’s cube of sorts, thats waiting to be unlocked. This makes finding out things like the fact that processes are organized as a circular linked list in the Linux kernel a reward from conquering a challenge, as opposed to regarding these facts as bullets you had to bite. Its gonna be a challenge, and when you just want something to work, its going to be frustrating, but thats the way things are. Take the challenge by the horns and kick its ass. You’ll learn more in the end because of optimistic approaches, not to mention you get that “I just climbed Mt. Everest” feeling once its done.
- You gain a sense of humility, and build good interactive capabilities with other people. When going into a new code base, it is oftentimes essential to ask a more ‘senior’ developer in the project what a chunk of code does, or how something works. Asking others for help teaches you that, despite your impressive knowledge of computers, you still can’t be arrogant about it, there will always be more to learn. Furthermore, getting to know the creators builds an oftentimes valuable software contact that you wouldn’t have otherwise have.
Well, those are the best reasons I can think of to learn to adapt to new code bases. If you’re a newbie to actual coding, just jump into it. It won’t be a peachy experience 100% of the time, but you will gain invaluable experience. Don’t be one of those kids who only goes to swim class to tip-toe around the edge of the pool and never learns to swim. 😀