I started the Beads project because I was fed up with the current complexity of software development.
I was transitioning from iPhone and Android apps to web apps, and was shocked to learn that all of my code and tools had to be completely replaced for web apps, which for compatibility have to be written in HTML/CSS/JS.
And the JS frameworks, they come and go like storms. Trying to use a piece of code that was written in a different framework is either impossible or creates a double framework hypercomplex mess. And even if you endure the framework turmoil, it only handles one target platform, the web. You can’t easily take your software from the web to iOS or Android. The tools that are cross-platform like Electron are very complex. So one must conclude software is too difficult to build, and that the giants of the industry have succeeded in keeping their developers like some private army in 1500’s Italy.
I started this project to make programming much simpler, like it was back in the old days, but allow you to easily draw nice graphics and use the latest devices. But even more importantly than making it simpler, I also wanted to make software more reliable. We are seeing the evidence of sloppy programming killing people like the recent Boeing MCAS system disaster, or the Toyota braking system mistake, which killed many. Both of these disasters were caused by programs that weren’t robust.
There is another goal I am pursuing, which is to make programming less frustrating. Right now the field of software development is restricted to people with almost infinite amounts of patience. You can measure the patience of a person by asking them the toughest jigsaw puzzle they can stand. Most programmers are in the 7000 pieces or greater category, while the general population doesn’t go beyond 1000 pieces. The tedious aspects of programming are not intrinsic to the field, but a byproduct of poor languages and toolchains. We need to open up programming to a wider range of personality types.
Humans are fallible, and it is too easy to make a small error in programming. I want the computer to help the programmer more, by either making it impossible to make certain kinds of mistakes due to the design of the language, and when I do make a mistake, I want the computer to find it quickly, and if a user of my program should encounter an error, I want to be sure that I can repeat that issue back in the lab and fix every single error reported.
To make things 100% repeatable, i built Beads from the ground up so that it was reversible in a special way: I want to be able to go back in time, and see what the screen used to look like. I don’t want to just reverse the state of my variables, I need to see what it looked like earlier, because debugging animations and fancy graphics requires this. That is not an easy thing to do because the underlying CPU architectures were designed 50 years ago, and made no provisions for such a thing. The Intel and ARM CPU chips, which power 99.9% of all computers and phones in the world today only go forwards. So i needed to build an emulation of a new kind of computer that can go backwards.
I wanted to fix some glaring omissions in computer languages that people have been asking for since the 70’s. The NASA Mars Climate Observer worth hundreds of millions crashed because someone used meters instead of feet for height in a calculation. So i added physical units of measurement so in your Beads program you can add 3 feet + 4 meters + 2 inches and it will calculate correctly. These units are carried at run time, and the arithmetic will be checked as the program is running. I guarantee you this feature will be copied into Julia and other languages once people get a taste for this, but you saw it first here.
Making layouts that flow into the hardware screen in a liquid manner is the big reason people use frameworks, and to eliminate the need for frameworks, I have put the layout planning and flowing into the language itself. This eliminates a whole layer of additional complexity by adding it into the language.