In my last year of college, I took a number of "advanced" computer science classes, including a class on compiler design, a couple on operating systems and three on computer architecture. From these classes, I drew some conclusions.
There is a small number of fundamental operations that computers perform. Really, when you get right down to it, a CPU today really does very little - it does basic math, loads and stores values into memory, and can change to different instructions (jump). There is very little complexity in the concepts of the CPU. The complexity comes in the details.
Many languages that we use today have very primitive roots. I saw a chart that showed the progression of every language from Fortran, COBOL and Lisp all the way up through C#. There was and is a lot of evolution going on, but not a whole lot of revolution - not a whole lot of radically different thought.
In most modern day languages, there are some intrinsic types (character, integer) and composite types (not known inherently to the compiler). Because the compiler knows about intrinsic types, it treats them a little bit differently than other types. They have less overhead, they compile down into machine specific instructions and they require no special effort.
All code consists of the same sorts of things that a processor does inherently - basic math, loads/stores, and jumps (conditional and non-conditional).
Finally, I saw a figure that showed that C has more than 40 key words and C++ has more than 100 key words. That seemed too complex to me.
So, as these ideas started to germinate, I came to the conclusion that we needed to build a language that was different. Austere and simple, yet as powerful as anything on the market. The introduction of Java and its struggles with library support showed me the true power of programming languages: pre-built modules. In the "olden" days of computing, you could build a language that had no more pre-built support than read and write a text line and it was acceptable. Since the 80s, it has become clear that no developer wants to start from scratch, building every component that he will ever need - today's schedules and applications just do not allow that. So the language needs a great support library to begin with.
So what should this language be like? The first criteria is that it can not be tied only to text files. Part of the problem that we have today with programming is that we are stuck in the 1950's with compile/link technology. There are whole books written on how to restructure your code so that the compiler can figure out how to deal with your code correctly and efficiently. Certainly compilation needs to occur. But it should be possible to build the link stage into the loader so that applications load and link dynamically.
The next criteria is that it has to be easily comprehensible to beginners. We (computer scientists) used to understand this. A young child could pick up a book on BASIC or LOGO and write small applications. Sometimes they could write whole, complete apps. This was something of a necessity back then, since the prepackaged software market wasn't anything like it is today. Still, the ability to make a computer do what you want it to is a feeling like no other, but the difficulty of most languages has placed a significant barrier to entry in front of most people. If they can't get some sort of result in an hour or so, they will quit trying. That is, in my opinion, the reason for the success of languages that we consider to be poor in quality today--like Visual Basic--a non-skilled, non-degreed person can sit down in front of VB and make an application that will do something in a short period of time.
Finally, the language has to be powerful. The easy languages of yesterday were too slow and too limited to make great applications out of. It was a common to hear, back in those days, that if you wanted decent performance or to do certain things, you would have to write in assembly.
Starting over with a clean slate allows the decisions of the past to be reviewed in a different light. One example of this is the use of key words or curly braces to demarcate blocks of code. Of course, the first thing that you are taught in programming class is to indent those blocks of code for human readability. But... wait - you need to separate the code one way (braces) for the compiler and another way (white space) for the human? Why? Another similar example is the use of statement terminators (usually a semi-colon). But the next thing that you are told in class is that you should have one statement per line. Why is that necessary? Human readability. Hmmmm... One more example - one that is sure to be a little more contentious - in order to build your own types, you have to explain to the compiler how that type should look and work, but you need to separate the two into two separate files - a look file (a header file) and a work file (a code file). All because we are stuck! ...in a text based paradigm.
How does all of this tie into OpenBeOS? I came to BeOS from the Amiga. On the Amiga, we had something called ARexx. It was based on IBM's REXX language and was used extensively for scripting between applications. A language wrapped around "hey" type functionality. I was able, for example, to write an ARexx script to make an application that I had purchased (Art Department Pro) to open pictures, rotate them, scale them and save them in another format. All in an automated fashion and in a few lines of code. The pseudocode was something like:
for each file in mypics:
adPro.load(file)
adPro.rotate(-90)
adPro.scale(.1,.1)
adPro.save(mypics:file.jpg,"JPG")
How easy is that? Of course, load, rotate, scale and save would all be "verbs" (in the BeOS scripting sense) exported by adPro. Still, something like this would be a phenomenal tool. Imagine with OBOS' media capabilities. One example that comes to mind is the ability to build your own digital video recorder with something like this. If the language was easy enough and the components were all available, this would not be all that hard. How about an application that automatically creates still shots from full motion video, captioning them with close captioned text, and posts them on a web site? Or maybe an application that e-mails your cell phone with important e-mails that come to your home address? The number of things that you might want to do with your system when scripting is this easy might surprise you, when you look at it from a fresh point of view.