Think First, Code Later...
Published: 2020-03-17 14:58:52


Computer science is the science of computers.

Lol… okay. Seriously, computer science is simply about making computers work for humans. It is leveraging technologies or computers to solve diverse kinds of problems.

When I got first introduced into computer science about a decade ago, I learnt the wrong way. Maybe it was due to the university system those days or just inadequate understanding of what the field was about on my end. Whatever it was, whenever I was presented with a task or assignment, I always delved into programming before I even properly dissected the challenge.

After graduation, I took an almost 3-year break from programming and recently started in the past year. In this period, I have noticed something very profound, something I probably should have known a decade ago. Anyways, mgbe onye ji tete bu ututu ya (Whenever a man wakes up, that's his morning)

The most important skill for a computer scientist someone who is looking to solve problems is not programming, it is problem solving. In the words of one of my favourite professors, “If it can work for one and on paper, it can work for a million on your computer” Many times, there’s this obsession to learn about a certain technology or language and this is great. However, what is even better is perfecting the art of problem solving – how to take a problem however gigantic it maybe and break it down into small logical bits and solve the problem. I have come to learn that many times when I am battling with a project or assignment, it is because there is some uncertainty in the way. Maybe I am not clear as to what I am doing, this happens to me a lot when I am stressed, and I try to attack a problem first from an IDE instead of from my head. Or maybe there is a bit of logic that is not right somewhere in my thinking.

Once, I am clear and certain as to what the problem is and how to solve it (logically), the hard bit is out of the way. Then I can work on fleshing that out with lines of code. I like to see programming languages as what they are – languages. Of course, there’s some difference between programming and natural languages but they are languages, nonetheless. Languages are a means of communication. But you see, if there is a flaw in what you intend to communicate, that is when all the bugs from the days of Charles Babbage would flood your system.

Currently, I work with at least three languages, which can easily turn to four. I am taking courses that require me to use C, Bash and Python which sometimes is MATLAB depending what I want to do and how much time I have. In between, I do java sometimes when I have something to do outside schoolwork as that is what I am most comfortable with. This can change anytime as I am training myself to be able to solve problems regardless of the language or platforms. And I can tell you this: even though sometimes, I forget myself and try to use tab to complete my words in C as I would in Python, the underlying principles of programming are the same. I dare say too that with the rate at which artificial intelligence is advancing, in the nearest future, there would be packages that would translate natural languages to programming languages.

Honestly, I do think anyone can code, there’s snippets of codes and lessons on the internet on how to do almost everything with code. So that bit isn’t the hard bit. The hard bit is figuring our how to solve problem and more importantly, how to do that efficiently.

Therefore, in conclusion I think computer scientists should be problem solvers... first in their minds. It is important to learn this skill independent from the languages and tools out there. This is because there is no guarantee that today's languages would be relevant in 10 years. There may be new technologies and platforms that'd be more relevant then. The art of problem solving (efficiently and with humanness) is one every computer scientist should constantly work to build. This bit I think might take longer for the robots to catch up if they ever will :)