REDESIGNING COMPUTERS IN PARTICULAR AND INFORMATION SYSTEMS IN GENERAL…
This is more of a theoretical / conceptual approach to redesigning a computer and it’s associated networks. I’m not trying to re-invent the wheel, design cpu’s or hardware or even write a single line of code. It’s more an observation of computers and how they’re made and work and viewing this universal tool (described as bicycles for the mind by Steve Jobs) from a top down approach. Traditionally, computers and engineering in general is a bottom up approach. We first started with the transistor. (Actually, the vacuum tube - but I’m going to skip this bit) We combined the transistors into logic circuits and got to the point where we could perform calculations by programming the circuits. So we created logic circuits and cpu’s which simply got faster and larger (with more transister counts). In order to do things we connected up a keyboard (for input), a display (to see what we were typing), memory (to store the information) etc. Needing to “tell” the cpu’s to do something useful, the concept of programming and software was born. What I noticed in learning to program was that there are seemingly a vast number of programming languages. Different ways to communicate with the machine effectively. What I noticed (and I’m sure that I’m not the only one) is that a lot of modern languages are object-oriented languages. In brief you create a class / type (a template) and you create instances of that class / type. An individual object which has the characteristics of that class / type. As an analogy, you design an aircraft carrier. The blueprint is used to create / build an actual aircraft carrier. The class / type of boat (for lack of a better word) is aircraft carrier class / type. The actual real carrier bobbing up and down on the water is an instance of the class / type. So you create a class / type and that acts as a cookie cutter and that cookie cutter is used to create individual cookies (of that class / type). A class is comprised of members. Data members and functions that act on that data. These functions are called methods in object oriented programming parlance. I hope that is reasonably clear (or as clear as mud).
My insight or perhaps just a thought is that as we program with object oriented languages, can we extend the concept of objects to everything. By everything, I mean EVERYTHING. Hardware, software, networks, tea cosies…
Take the desktop and a web browser application running. Consider the desktop to be an object ie call it the desktop object. Call the web browser application, a web browser application object. The web browser app may have multiple tabs. Consider the web browser app to be an app made up of multiple tab window objects. I hope you can see where I am going with this.
A web page comprises text and pictures and hyperlinks to other web pages. The text are text objects. The pictures are picture objects. Hyperlinks are special types of text objects that take you to another web page / site. Each word of text is comprised of characters. Each character is a letter object…
Effectively, we are looking at everything as objects and objects that are composed of other objects. Now that we view everything as objects we can manipulate these objects as objects. Imagine there is a log / script which records as text everything that you do. When you click on a yellow circle on the top left of a window on a Mac, it will minimise that window into the dock. The script will say that the topmost window has been minimised into the dock.
What I am simply suggesting is trying to present everything in a unified manner as objects. Because we “see” everything as objects, we can treat everything as objects.
Traditionally, we have added things on step by step. We started with WIMP (Windows, Icons, Menus, Pointer) user interface. We added the dock at a later point. I am simply proposing that we “view” things in a different manner. I haven’t changed a thing, but I offer a different way of looking at things. Therefore there are windows, icons, menus and pointer objects and a dock object.
Because everything is now described in terms of being an object, you can manipulate these “objects” using a common vocabulary, a high level syntax. For instance, you might write “Display a picture of the cat playing the piano in the web browser. The picture is located on the desktop. The file is called “Piano playing cat””.
Addendum:
I just had another thought. I was reading the JSF C++ Coding Standards (and finding it rather difficult). Obviously the thought was “How about a simple to program language?”. Well there are issues with having a “simple” language. C++ is a very large language because new features are added to it all the time (but in an effort to actually make the language safer and easier to program). What about a language that is domain specific and context aware. As an example (as the JSF C++ Coding Standards is for the Joint Strike Fighter) how about a programming language that is context aware (ie. the language “knows” that it is being used to program the avionics for the fast jet) and domain specific (I'm kinda making this up as I go along) - domain specific means the same thing as context ie applying to a certain case. Well how would this work. I guess some AI magic is going to be required here (Duh!). AI/ML is trained to understand what a fast jet is ie what airfoils are, jet engines are, radar is etc. The AI understands what the various systems do. Understanding what they do, you write control software in an english like syntax the “behaviour” of the system. As an example you write code that simply says that the aircraft should pitch in an upwards direction when the stick is pulled back. And that the engines should increase in power when you push on the throttle. That seems a bit high level and simple right? I guess it is. But how about applying that process using the standard decompostion technique of writing software. So you write code for the control stick (joystick). The code is more in depth regarding what messages are sent when the stick is moved. Those messages are translated to the actual control signals that move the elevator surfaces of the aircraft.