Over the years I’ve come to believe in four basic principles computer programmers should adhere to. They reflect four paths of continuing education programmers walk throughout their career. The bottom line, really, is that you’re going to be doing these things a lot; it will serve you well to learn to do them well and with intention.
Here they are:
- Learn to learn.
- Learn to look stuff up.
- Learn to communicate.
- Learn your craft.
That’s right; actually learning your craft is number four! I think the first three are good principles in general. All three are useful skills in life, but I’ve found them to apply particularly to code work. I’m not saying software is unique in this; many professions need constant access to stored knowledge. No one knows all the details, so everyone needs documentation at some point!
Knowing your craft is certainly important—it made it into the top four! But the first two are constant job requirements, and the third is an invaluable skill. All three apply regardless of your craft. Let me explain them in more detail.
Learn to learn. This is a required skill. Programmers constantly learn new things. There are new tools, new languages, new processes, new standards, new client contexts and new technology. This is an evolving field; there’s always something new. I learned as much in each year of my 30+ year career as I did in the first years, and I’m still learning new things!
In fact, I advocate teaching yourself one new computer language a year. I don’t make the recommendation to exercise your learning skills, although it does do that. I think learning new programming languages is important to your understanding of what they are and how they work.
It’s like a musician learning many instruments. If it’s about the music, then the tools — the instruments, the programming languages — don’t matter. Which is not to say that becoming a virtuoso on an instrument isn’t a valid choice. But the job pool is limited, so you need to be a serious virtuoso if you’re going to specialize.
So each year, pick a new language and learn it (the interweb makes that very easy). You have so many to choose from: Python, Ruby, Scheme, Haskell, Smalltalk, Lisp, Erlang, Prolog, APL, Forth, Eiffel, Perl, Ada,… The list continues, and those are just a few of the fairly mainstream languages! You might be amazed at how many programming languages there actually are.
Learn to look stuff up. Another required (and acquired) skill. No one can know it all, so the key is knowing where to look stuff up. As I said, we all need the documentation sometimes. That was Scotty’s secret, you know. He had access to Starfleet Wikipedia!
Seriously, Wikipedia is wonderful for technical research. The quality of Wiki entries is high on technical material (probably because of the many technical people involved in Wiki and in the interweb). And technical material doesn’t have the political freight as does some social material. Genuine error is rare, let alone deliberate disinformation.
The interweb in general was always rich in technical resource. Its origins were technical, so for a long time its content was also heavily technical. But unfortunately these days, searches turn up results with a lot of (a) people already asking your question and (b) people guessing at the answer for group (a). It has become much harder to sift out the actual answer.
But it’s usually still there. The interweb remains a great, if somewhat noisy, technical resource!
Learn to communicate. This covers tools, such as Microsoft Word and Excel (or whatever is used in your world), but also has to do with improving your writing — and possibly speaking — skills. You may need to do documentation for others, or give a presentation, but you’ll find that skill with documentation and analysis tools is also a benefit to you.
This occurs in two ways. First, you can use these tools to explore a problem or at least put it down on paper. Sometimes a diagram or a flowchart or some kind of drawing is very helpful in breaking down and understanding a problem. Second, documenting your work using modern tools for the job is almost pleasant; the result definitely is!
You will want to be familiar with a good authoring tool (such as Word), a good data analysis tool (such as Excel), a good drawing tool (programmers make many diagrams), and maybe a presentation tool (PowerPoint; sorry about all the MS Office references, but they are very good tools) and a database tool (guess what: MS Access; sorry, I’ve lived in a Microsoft world most of my career).
The world is increasingly electronic, and it is more and more common to communicate by electronic means. You’ll want to be facile (which includes being literate and clear) with email as well as with whatever other tools make sense in your business. Increasingly, communication means the interweb, so you’ll want to be interweb aware if not savvy.
Interesting how the interweb manages to be a part of all three first general principles. Think it’s invaded and permeated our life much? (Actually, it’s been a part of programmers’ lives since it began!)
Learn your craft. Well, duh. Naturally you want to be good at what you do. That includes the background knowledge, such as knowing the programming language, as well as specific knowledge, such as the data scheme of your database. The stronger your background knowledge, the more you can see of a system, the more of that system you understand. The more you can see, the better you are at debugging or making changes.
Background knowledge also tends to transfer from position to position better than specific knowledge. XML, for instance, is used in so many areas of the computer world now that knowing it is a big benefit. Knowing how computers work and communicate on a general level can be extremely helpful in giving you utility in many areas. It gives you a strong foundation on which to build.
Knowing a given language, such as Java, is fairly useful and very common, but it still narrows your options. And consider that a C programmer, or a C++ programmer, might well have felt like a Java Programmer does today. This, by the way, is why you want to learn new languages! It looks like Java is here to stay, it looks like there are plenty of Java jobs, but eventually the next new thing does come along. Background knowledge (and the ability to learn!) helps with the next new thing.
There’s a lot more to it, of course. For one, programmers need attention to detail. When it comes to software, you do have to sweat the small stuff. Each bit matters!