Having been in college for the past 41 months in pursuit of a CIS (Computer Information Systems) degree, I fancied myself somewhat knowledgeable in the area computers and (to a very small degree) programming. However, courtesy of a class that I have had the good fortune to be enrolled in, my views on computer programming have shifted, and that is what I would like to share today. The views expressed in the following paragraphs do not ONLY apply to computer programming, so even if you don’t have the slightest interest in computer code hopefully you can still find this short post somewhat interesting.
So, to begin with…some history. For most of the time that I have spent in college my number 1 question related to programming has been:
What programming language should I learn?
I asked teachers, recruiters, other programmers, receiving almost as many answers as the number of people that I approached. This pretty much described my life up until the beginning of this past quarter (started around Dec 1st of 2014) when I began taking computer science 120: intro to programming, and this brings me to my first point:
Programming is NOT about the language
Just like spoken words are not the main point of communication (communicating is), neither are the languages of computer programming the main point of software development. Spoken languages exist to facilitate the communication of ideas, truths, and emotions. Similarly, programming languages simply exist for the communication and creation of ideas and content. Think about it for a moment: the code behind Google Maps exists to represent reality (the geographic and topological layout of the globe) to enable people to get directions and find their way from one place to another. For years all I thought about was, “Which language should I learn to make myself marketable as an IT professional?”. However, the right question would be, “How can I better prepare myself to solve real world problems with a computer?”. As with spoken language, the ideas and logic that provide the foundation of meaning and purpose matter much more than the specific linguistic way it is finally expressed (e.g. Spanish vs. English). Ultimately, programming is all about problem solving just like engineering, theology, art, philosophy, plumbing, trash pick-up, and politics. In the computer science class I am currently enrolled in, the professor stresses the problem solving strategies and ways of approaching problems much more than the specific language we are using (Java).
However, this brings me to my second point:
Programming is an art form…
…like painting, sculpture, or music. After all, the purpose of visual and musical art is to communicate ideas and represent reality. Michelangelo didn’t create his amazing sculptures without some intention of them representing how people really looked and felt, and Bach didn’t write his music without intending to communicate and represent real emotions to his audience. Going back to my Google Maps example, the code behind the online service was written to mimic and represent the reality of the road systems of the world. Some artists paint on canvases, or with notes, or in languages (literary), but programmers paint in code. Just as the medium that Michelangelo chose to communicate (pencil, paint, sculpture) mattered much less than what he was trying to say, so the language used by programmers takes second stage to what they are trying to communicate/accomplish.
Do you want to be a programmer? To paint on a virtual canvas that millions (and maybe even billions of people) will interact with? Then learn how to solve problems; learn how to strive for perfection. Leonardo Da Vinci did not paint the Mona Lisa his first day on the job. Also, don’t be afraid to fail -without failure there is no learning. As someone who used to draw, I can attest that 90% of everything I created was junk, but that the ninety-percent had to be worked through before the good 1% (and mediocre 9%) could be created. Learn the tools of your trade, but more importantly learn how to communicate and solve the problems, ideas, emotions, and meaning that drive every aspect of human life. That is how you can become a truly great artist, engineer, plumber, truck driver, or programmer.