I suddenly had the urge to write about education and abstraction today. I blame a friend who attends Knox who started a conversation along similar lines a few weeks ago. A thousand words later and no desire to edit or add more left, I present to you the following.
Though it is undeniably old-hat to say that information is one of the most important goods in today’s world, the more I learn about the world, socially and scientifically, the more I realize just how powerful information is.
The person who has the largest amount of information, about the right things, and can appropriately process that information has a large competitive advantage, all else being equal. This almost goes without saying. But it brings me to my next point. What my peers and I are doing in college, and what many of us will be doing after we graduate, is collecting and storing knowledge and methods of interpretation/processing.
With so much information out there, often times the issue isn’t with not having enough information, but not being able to use the information efficiently.
Stick with me for a moment; I will move on to describe just a little bit about programming languages, then come back to the previous thoughts. A layperson should have little to no trouble understanding the following. There are levels of computer languages. With the most basic, low-level language, it takes a lot of zeros and ones and a large reservoir of knowledge concerning the inner-workings of the computer being coded on. For instance, 000010101110101000101 means something very different on computers with different CPUs. So a slightly higher-level language was constructed. This required far fewer words to be typed, and added a level of readability to code. It served as a mask of sorts for the zeroes and ones of binary code, as a particular key-word in this new language, assembly, could stand for hundreds of zeroes and ones in binary. Then another layer of language was built.
This layer added something rather important: it was not platform specific, meaning that if written on one computer to make that computer perform a function, it would cause another computer running the same code (with a different CPU, even) to perform that same function. For instance, using a high-level language called Python, the line “print ‘python’†outputs the word “python†on any computer that the code is run on.*
As a programming language becomes closer to how a human programmer thinks and further from how a computer functions, it is called more abstract. This abstraction generally saves time and means that programmers no longer need to have (as much) prerequisite knowledge of how a computer actually works. There are even languages, such as AppleScript, where a program is nearly as readable as English. It’s not entirely inconceivable that an interpreter (a program that turns the written code into something the computer can understand) should be written that can take a command in a natural language, such as English, and tell the computer what to do.
However, this speculation isn’t the aim of my article. What should be taken away from this brief exposition on computer languages is how abstraction make it possible for programmers to create more functionality in less time with less knowledge.
Now, imagine many people who have access to a database of knowledge stored in a hard drive or other external device. Give this person a problem to solve. I postulate that the person who can phrase the question in the best (most abstract, while still being understandable) manner and access the pertinent data using an algorithm phrased in this abstract language will solve the dilemma first, and possibly the best.
The same goes for accessing and utilizing internal data (memory). Complex problems are solved by first breaking them down into simpler sub-problems and rephrasing the question using these small, solvable morsels of data
Take this simple problem, for instance. If I were to ask how much a workman would make after taxes if he worked x hours at w wage, the proper way to solve it would be to first calculate how much he makes before taxes, then calculate and subtract the tax.
If I were to modify the question to then ask how much money the workman would have if he spent 30% of it on food, it would be a simple matter of subtracting 30% from the previous total obtained.
I’m going to abstract-ify the Workman Problem now. Say I have a way to immediately calculate a wage after taxes, so it is one step when I am solving the problem. Now, instead of 3 steps to solve the problem, I have two. I ask for wages after tax, and then I see how much he spends on food.
This abstraction can be done over and over until the complex problem is just one step. The hypothetical person who can process information the most abstractly solves it in the least amount of steps. If a truly complex problem is posed, involving millions of workmen and their food-buying habits, my hypothetical abstract-ifying protagonist will come out on top.
I think that it’s interesting how mathematical practices such as Newton’s Method is being taught less and less in schools as technology replaces the need for mechanical approximation. It only make sense that humans will, on the whole, continue to become further and further removed from the base methods and knowledge required to perform tasks. Technology should and will replace simple tasks like Newton’s Method, abstract-ifying them and enabling us to accomplish more with less effort.
This principle is vital for the advancement of our race. Should we continue to insist that everyone learn how to do these basic methods and spend time practicing them and understanding them, the time a person must spend in school will continue to rise. It is already ridiculous that a medical student is in school for up to 30 years. As techniques become more advanced in the other sciences, how long will people be expected spend learning the nitty-gritty before they can start exploring on their own.
That is not to say that at least some people don’t need to know the basics. If no one did and something went wrong – say one abstracted method turns out to be slightly wrong – it would be exceedingly difficult to fix it. That’s why, in the world of computers, there are still people who can code in assembly and binary.
*To be more specific, it would if the interpreter is installed, which is simply another program written in a lower-level language that utilizes assembly code which itself utilizes binary code. There’s a lot of generalizations being made in this presentation of computer languages, for the sake of saving space and keeping it simple.
One Comment
I think about things like this occasionally. I thought that it was interesting how people like Benjamin Franklin could be so good at a huge variety of subjects, but it was a lot less specialized back then.
Post a Comment