Computers are built on the concept of abstraction. Machine language led to assembly language, which led to higher level languages. APIs organize functions. How far can we go? Have we reached the maximum leverage a Mac can give us?
This article falls under the label of an editorial, but it's really an exercise in whimsey and playful thinking. Follow me along for a minute.
MacBook Pro: CPU, about 12-16 gigaflops, GPU, about 125 gigaflops
I'm sitting here in front of a computer that can execute 100 million sines in 20 seconds. And that's in Perl. It would probably be faster if I wrote some compiled C code. A computer with that kind of speed and size, if taken back in time, would have led to World War III in 1975.
And yet, after all these years of software development, I wonder if we're really getting the maximum level of abstraction out of our personal computer, whether it's a Mac or a PC.
I mentioned in the introduction that machine language led to assembly language, then something like C, and some higher level compilers are written in C. But the process usually stops there because the current, popular language is then used for a different end. For example, a programmer comes up with a viable commercial idea and then utilizes the current tools, say Objective-C and Cocoa Frameworks, to implement the idea. The level of abstraction stops unless the author is building yet another tool, like iWeb, to construct an other level of abstraction.
The question I want to pose is:
Given the current, terrific level of hardware technology and software tools, how far can one take the levels of abstraction, for the sake of abstraction power, to build the ultimate tool? I call it Maximum Mac Leverage.
I am familiar with mind mapping tools, like TheBrain, but that's not quite what I'm looking for because that's a knowledge organizer, not a problem solver. I'm thinking about a broader, problem solving tool, that allows human beings to express a problem in an elegant way and invoke the computer to come up with a fast answer. For example,
Excel Spreadsheet is to accounting as ??? is to general problem solving.
Some might argue that ??? is best implemented in 2009 as:
- Microsoft Visual BASIC
- REAL's REALbasic
However, I'm thinking of at least one level higher of abstraction, likely more, because mastery of any of the above requires some hard-earned, detailed skills with, for example, (ycch!) CLASS_PATH, an IDE (Eclipse, Xcode) and the detailed syntax of a high level programming language.
We're not there yet
One example that comes to mind is Apple's Grand Central in Snow Leopard. Managing safe threads has been too big a challenge for programmers who are on a viciously tight ship schedule. The philosophy is that if it has all the features and compiles, QA it. If it passes QA, ship it. Grand Central allows the programmer to work at one higher level in the APIs to launch threads, but not get bogged down in the messy details of the low-level API. That will keep the programming job manageable, but extract more power from the hardware.
What if a research project went about the business of identifying all the Cocoa APIs and building a general, overlying structure on top of that as well? And then keep going, with a mind towards an eventual GUI that's useful for general problem solving? How far could that process go?
Right now, for certain classes of problems, I pull out Apple's Numbers. For others, I'd use PCalc. For yet others, I might use Perl. I have a myriad of tools, all designed to solve a special class of problems that must be nursemaided into proper form before I can construct a solution.
Is there a way to characterize a wide range of problems into a more general problem solving tool? I know I'm being vague here because I don't have the answer. I'm having a hard time just posing the question.
I'm in whimsy mode. But I'm betting someone out there is thinking along the same lines.