I’m a firm believer that it’s the computers, not the human beings, that should be doing the computing. However, due to the very nature of computers themselves, that’s often not the case. So when I say that I enjoy programming, this is what I mean…
I grew up with Lego and Meccano sets. When I was an older child, my father taught me how to repair small appliances, like vacuums and toasters. Later I learned electrical theory and about electronics. Over the years I’ve noticed that all of these activities have something in common that appears to be unappreciated: They’re all based upon derivations of the natural laws of the universe!
Lego and Meccano sets are derivations of the physical world, which is quite accurately explained mathematically by Newton’s laws and other related observations that have helped humanity build most of the world around us. Both systems allow the user to combine components that have known functionality to create a larger system, component, or object that has functionality beyond the sum of its parts. In other words, while the plastic parts of Lego are clearly different than the metal bolts and plates of Meccano sets, both sets allow people to use their imaginations to build stuff using a set of well defined parts. Importantly though, all of these parts are based on the natural laws of physics that have been discovered, therefore the way the parts work “makes sense” and can be readily understood by most people.
“Things that go up, fall down! Well, unless they go up too fast and too far… then ya ain’t never getting that shit back!” – Fig Newton
Electricity and electronic components are essentially the same in this regard; All electronic components are based off the fundamental laws of physics and as a result, on some level they’re all forced to “make sense”. Sure, the theory and math is more complicated than Newtonian physics, but none of it is subject to interpretation or imagination, therefore anyone can understand it if given lessons that build upon themselves. Starting with, “What is an electron” all the way up to, “This is how you build an op-amp”, a person can learn the fundamental rules of electronics and how to apply those rules to achieve their goals.
None of this is true when it comes to Computer Science.
The work achieved by computer software and hardware is, at the lowest level, based upon the “on” or “off” state of an array of electrical switches (called transistors). Imagine an infinite wall of electrical switches. Now imagine that you have the complete freedom to organize those switches in any way you could possibly desire, with the results being anything you could possibly imagine. That, in a nut shell, is Computer Science.
The whole of computer software (and much of computer hardware) is an imaginary construct derived from many human minds, not from any law of nature. Consequently, computer software and hardware has been dramatically influenced by hubris and insanity, both of which have, at times, masqueraded as genius. Since even before the invention of the transistor in 1948, many people have made a name for themselves by inflicting the greatness of their intellect upon the world of Computer Science. Absolutely there have been thousands of amazing people who have created wonderful computer concepts, but the bottom line here is this: The human mind is as malleable and flawed as the behaviours of humans themselves, therefore anything a human creates on a computer will also be subject to those conditions. It’s only in the real world where imagination must comply with the limitations of the universe itself.
Building a system, device, or component out of nothing but on/off switches is an immensely complex task that really is beyond almost every human being ever born. This is why we have so many computer programming languages that simplify the process by moving the programmer many levels away from the on/off switches that ultimately do the work. And this is largely where the hubris and insanity that I mentioned earlier comes into play: many computer science concepts exist only because someone at some point wanted to pat them self on the back for being so clever! And other concepts exist only because they made sense in the mind of their creator, who objectively had a mind like no one else has and no one else ever will. The end result of this unfolding of history is that Computer Science is now the study of, and further creation of, a collection of systems and concepts that have no basis in reality and that are often poorly documented and difficult to operate, even when they are well documented.
If a person builds a car and the car does not work properly, at least they have the laws of physics on their side – eventually the problem can be solved, because the answer DOES exist. With Computer Science, that’s just not the case, because all of it is completely arbitrary. One could fight for days, if not months, trying to solve a bug in a piece of software, only to find that there there is some underlying issue with the hardware that just does not jibe with the software and no amount of poking at it will ever actually fix the problem.
So, Computer Science is for crazy people, for folks who don’t have a problem with stuff not making sense simply because some person 40 years ago thought of something and now that’s “just how it is, man!”. Good for those wacky individuals. Let them have their cake and eat it too!
Where “CompSci” benefits us all is, as you are probably aware, in the USE of computers. For instance, it would cost me a small fortune to build my own R2-D2 robot, but I could open up Blender on my computer and build a fully functional model of Artoo for only the cost my time and electricity. Similarly, one could spend $50 on Minecraft and get an unlimited supply of Lego-like functionality, which is considerably more than what they would have gotten had they spent the same dollar value on Lego pieces. Of course, this truly wonderful world we now live in would not have been possible had many intelligent people not put the time and effort into creating the imaginary construct that is Computer Science.
I think at this point it is important for me to emphasise that logical programming and content creation using a computer is awesome for almost any human being. The world is a better place thanks to what we can do using computers.
However, despite how much it has changed the world for the better, the “CompSci” that lurks beneath those layers of simplicity and usability are, in some ways obnoxious, inane, and down-right insane for all the wrong reasons. I feel like I should be able to instruct the computer do my bidding and it should find the most efficient way to utilize its hardware and software to achieve my goals – That’s the difference between “Programming” (or “Coding” as the kids say) and “Computer Science”!
Unfortunately, much of the time that’s just not how it works. Often when I am programming I’m forced into spastic routines of ridiculous mental gymnastics that piss me off and waste my time, simply because the people who created the software/hardware/language/etc (all of whom are way smarter than me!) couldn’t be bothered to make it less stupid; they understood it, they liked it, therefore everyone else should too! As annoying as these experiences are, the truly unfortunate part is that unlike what we have in the natural universe, Computer Science isn’t governed by a common set of rules; When the documentation runs short, there’s no external reference one can count on. Humanity can rediscover the laws of physics, but we have no hope in hell of rediscovering the laws of Bob’s post psychedelic musings, that’s just not possible. This why I sincerely appreciate the computer scientists who are bold enough to potentially think themselves out of a job by creating computers with “artificial intelligence”, computers which will be capable of doing exactly what I expect a computer should do – exactly what I want it to do!
I am amazed and enthralled by the wonders and intricacies of our incredible universe, from the quirky electron who can’t be captured, to the joy we feel when our children laugh, but I just don’t give a rats ass about someone else’s crazy ideas that they think are so smart. My limited time here on planet Earth is better spent trying to make the most of what is, rather than to whittle it away on what drifted onto paper from another’s mind.