I’ve had more than a few readers write and ask how someone becomes a programmer. Of course, that’s a loaded question. The first thing that you must decide is what a programmer does, who they are as a member of society, and what they contribute to society. There are many fields that could be construed as programming. Anyone who writes a set of instructions that somehow directs that actions of a computer is a programmer. This definition encompasses everyone from the administrator or power user who writes macros to the designer who creates engineers huge projects to the low level developer who creates operating system code. Theoretically, the ingenious person who actually succeeds at programming their video recorder to start and stop at certain times to capture a favorite television show is a kind of programmer. Today I’ll focus on the computer scientist, because that’s what I am.
Aptitude is part of becoming a good computer scientist and you need to decide whether you have the required talents, skills, and desires. A love of the abstract is a requirement. Despite the best efforts of companies such as Oracle and Microsoft (and a huge number of others) to create an environment that mirrors the concrete world, creating good code is the domain of those who embrace the abstract. It isn’t simply a matter of knowing how to work with numbers. A computer scientist is an expert in many arenas of abstract thought and can actually feel the numbers in a way that few others can. Developing great computer applications is an art and many of the best computer scientists have an artistic bent—they play music, craft words into books, paint, or otherwise put into physical existence the abstract concepts of the mind.
Most computer scientists are naturally curious. It isn’t sufficient to know that the device works—how the device works is far more interesting. Taking things apart to see how they work and putting them back together again to ensure a true understanding of the underlying principles exists is a joy for the computer scientist. Nothing is too complex and in everything there is wonder. Where others see the mundane, the computer scientist sees the amazing.
Of course, there is the practical to consider as well. My first exposure to computers and programming was punch cards (yes, I’m dating myself here). I was in a typing class and part of that class was to work on a keypunch machine. The fact that holes in a card could control a huge machine was amazing to me. In those early years I also studied computer hardware in depth (right down to the chemical reactions that occur within a transistor) and discovered things like paper tape machines and light panels. This sort of education isn’t available to aspiring computer scientists today, but it’s where I began. Those early days were critical to my development as a computer scientist. Your early days are equally important.
So, where would someone begin today? There is a fear that everyone seems to exhibit about destroying their computer. Get an older machine that you don’t have to care too deeply about, but still works. Take it apart, learn how it works, and put it back together. A computer scientist understands that every line of code does something to the hardware. We’ve lost touch with that connection today—a real loss. Obviously, you don’t need to know absolutely everything about the functioning of the hardware, but you should at least know the basic parts of your computer.
Eventually, you’ll want to start working with a programming language. My first true programming language was BASIC. I learned it at a time when DOS was king—before Windows was even a twinkle in Microsoft’s eye. Visual Basic or C# are great languages to start with. You can write some extremely useful applications without a very large investment in either time or money. If you prefer, learning Java can be a good experience, but I’ve found it requires a little more time to learn than some other languages.
Discover a low level language. For me it was assembler. Actually, I learned to work with assembler on a number of systems. Today you’ll want to learn C++ because few people use assembler anymore. Even embedded system programming (the last frontier of truly custom systems) relies on C or C++ for the most part now.
Don’t confine yourself to a single platform or language though. Before I even entered college, I had been exposed to three different computer languages. During college I learned three more. Today I learn whatever seems to be the best language to accomplish a particular task. It wasn’t long ago that I learned IronPython. I’ve worked with PERL, LISP, F#, Java, PHP, and many other languages—they’re all ways to express something that I need to do with the computer—they’re all beautiful languages for a particular task.
The important thing is not to make writing applications a chore or work—keep it fun. If you’re thinking about a career as a computer scientist, I think you have some amazing things to look forward to because computers are become ever more capable of interacting with the outside world. Let me know your thoughts about computer science at John@JohnMuellerBooks.com.