IT#1 What "Computer Science" is for?

What computer science is for?

#science #ComputerScience #IT #SoftwareEngineering 

Summary: Computer Science is not that much about computers, it's about limitations of humans that makes using computers so hard.

In the previous post we discussed what that "science" thing is. And here is the reminder:

Science is about modeling repeatable verifiable things which allows humans  to recognize, predict and, if possible, control those things or their consequences.

The key word is "allows humans". Allow what? You see, all the computers that we deal with are von Neuman computers. And it so happens that humans are not very good at dealing with von Neuman computers…

Or, more precisely, controlling computers, making them do what we, humans, want them to do. Each time your favorite site does something stupid is an example of that. And if you think that explaining to your grandma, where this "Any" key is on the keyboard, is a good example of it, think again. The problem is much deeper. You see, for computers there is nothing but ones and zeros.

Yes, the Matrix movie simplifies the problem of showing letters and digits, but in truth the only things a computer understands are ones and zeros. Everything else is just a higher level abstraction made of those ones and zeros.

Computers handle those abstractions very well. But for them they are simply ones and zeroes. So we need a lot of CODE that converts those abstractions into ones and zeros and convert those ones and zeros back into the abstractions that we understand. And that code… you guessed right, it consists of ones and zeroes.

But again, humans are not very good at long sequences of ones and zeroes. In the beginning code was created by hand as such a series of ones and zeroes. I still remember entering such a series at the console of an ancient (60s) computer into its memory, then setting the instruction pointer address and executing the thing. Such methods were guaranteed to have a lot of bugs and they did not work for anything complex enough. So, Assembly languages were born. This improved things quite a bit, but still was not good enough.

BALR 3,5

This is how a function call looked like in the System/360 Assembly language. Makes sense? Clear? Exactly. It's not. It was too hard, error-prone and slow. So FORTRAN, Algol-60 and other higher languages were born.

About the same time we've got algorithms, that is step-by-step instructions of what a von Neuman computer must do to get a specific result. Say, sort a list of numbers or convert those ones and zeros into a decimal number, we are accustomed to.

Later we invented UI and UI elements like buttons, drop down boxes, lists and others like that, which help us to control the machines.

Do computers need programming languages, algorithms, UI? No, they don't. We, humans, do. We need all that to control the computers and make them do what we want them to do.

In fact, most of the Computer Science is about fighting the limitations of the human race that prevents us to be the masterminds of the von Neuman computers:

  1. Inability to handle long sequences of ones and zeroes: Assembly language.

  2. Inability to copy long sequences of ones and zeroes: functions.

  3. Inability to handle similar patterns without grouping: OOP, classes, methods, structs.

  4. Inability to handle a large number of abstractions: Libraries.

  5. Inability to handle large arrays of data and picking their common trends: Machine learning.

Somewhere in the end of 90s I had an interview in Chicago based company. The interviewer was an expert in MFC (Microsoft C++ framework for UI) and apparently was very proud of that. So, he asked me:

"What would you do if you need to put a hundred thousand items into a list view?" 

I answered:

"I would not put a hundred thousand items into a list view"

The guy tried to solve a wrong problem. He tried to figure out how to make a computer to handle a hundred thousand items in a single list view. And, of course, he found a solution. In fact, there are several. But his real problem was "How to let a human handle a list of a hundred thousand items?"

This was his true problem. Because a computer can handle 100K items in a single list, a human, sitting in front of it, cannot. 

Computer Science is a set of tools and models that allow humans to work around human limitations to control von Neuman computers and make them do what we, humans, want them to do.

Again, Computer Science is not that much about computers, it's about limitations of humans that makes using computers so hard.

 

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer