KnowWare, Inc. has existed as a Corporation since 1991.
This happens to be about the same time that the Internet started to become “a thing”, with the connection of University of Hawaii’s AlohaNet to ARPAnet, the first computer network. ARPAnet was created in in 1962, in response to Russia’s successfully putting the first artificial satellite into orbit around Earth in 1957, the year I was born.
The satellite was called Sputnik, which means “satellite” in Russian. It had a radio transmitter on it that went “beep… beep… beep…”, and that’s about it. But it was a very big deal at the time, especially because Russia beat the US to it. This made the “conspiracy theorists” of the day feel like they were being spied on by Russia. They were actually right, except that they were about 40 years too early, it wasn’t just Russia that they needed to worry about, but that’s a different story.
ARPAnet was a wired network of computers, and it was not very available to the general public, being a military project.
AlohaNet, on the other hand, was a public Acedemic and research project, and it was wireless, being used to send messages between the Hawaiian Islands.
When these two very different types of networks began to interact with each other, the Internet started to come into being.
If you are interested in the formation of the Internet, there is an excellent (and brief) history of it at www.history.com.
My name is Rick Harrison. I have been programming professionally since 1980, when I found a job as a trainee at a company called Mini-Computer Business Applications. Real computers had been around for decades, but up until right about that time, they had been so big and expensive that only governments and large corporations and institutions could afford them. Even in 1980, they still cost thousands, often tens of thousands of dollars (think 4 times that if you take inflation into account), and they couldn’t do too much yet, but it was enough to start a major market disruption. And computer prices were going significantly lower every year.
Successful small businesses could potentially afford to buy their own computer to potentially do things like word-processing, accounting, mailing list processing, and so on. But there wasn’t hardly any packaged software on the market yet. Mihi-Computer Business Applications was one of the first companies to fill this market.
I had played…
At the age of 22, I was lucky enough to be there, and ready to start a career. Unfortunately, the computers were already in use all day long. I had to sleep during the day and train on the company computers all night, but I was happy to do it!
. The practice and the business of writing software have changed many times and in many ways since then. The most significant change, to me, is that back in those days, programmers spent their time writing code. Today, they spend the bulk of their time connecting things.
I distinctly remember times when I spent some days writing code, without any need to look up anything! I was glad of this, because before the Internet, “looking something up” usually meant a trip to the library or bookstore. I did have my small collection of manuals, and books on programming, accounting and so on, and I would refer to them as necessary, but it was a small number of books, and I had read most of them from cover to cover already.
Today, programming is usually all about connecting to one piece of software or another, to a website over here, or a server over there, how to get data from one device into another device or convert information or files from one source so to make it understandable by something else. Of course, it’s still “code” that does this, but most of the time and effort, the studying the testing and the debugging is all about figuring out all of these things that need to be connected. The needed documentation rarely exists in printed form anymore. More often than not, it is just “on the Internet”, or included as part of the software that you are using. The documentation always references terminology and technologies, and other software which is separately documented, again, “on the Internet.” It’s not that most of this documentation is hard to find; it’s not. With Google, you can find almost anything. The problem is that “everything you need to know” is now contained in millions of pages, you guessed it, “on the Internet.”
Granted, you don’t need to know all of it. You only need a tiny portion of it. But where is the document that tells you which parts you need? Nobody, no graduate from college, nor any “programmer boot camp” nor professor nor “high tech guru” knows everything he needs to know to do any real project. The best they can hope for is to know enough to know where to find what they do need to know. It was probably inevitable that it would come to this, but nobody saw it coming. It is a specialized skill to deal with such vast quantities of information. Even if you happen to have that particular talent, it still takes years of experience working with the data. It also takes considerable experience using that information to write code.
Fortunately, there are lots of people coming into the job market who are interested enough in technology, and willing to put in the investment of time and effort to get themselves into the software profession. Once they are trained, either through a traditional college program or a “boot camp,” they can get a job; they will not be unemployed. But I also know, from going to computer group meetups of all sorts and talking to lots of high tech recruiters, that there are far more jobs available than competent programmers to fill those positions. I recently saw a good post on this “Programmer Shortage” from Garry Taylor at Quora.
Programming, especially the type of programming that is needed the most, has become a highly specialized and elite skill. It is not readily available to the ordinary person, to the hobbyist. The small businessman, who needs to make computers work for him, cannot do the programming that needs doing. But it’s worse than that. He normally cannot afford to hire a programmer to do it either. Most available software is not truly customizable, even by a programmer.
There are some who will argue that this is not needed, because so much software has already been written. They will say it is only a matter of connecting things together. There is some truth to this, but it is not what I’m talking about.
Software has “options” that allow us to choose between various choices that the programmer of the software has decided to give us. We can change the color of one thing or the position and size of a window, but when a piece of software does not work the way we want it to, it is almost always impossible to change it ourselves. Even if the change that is needed is vital to some small business, it is rarely practical for that business to hire a programmer to make the change. Large corporations often spend millions of dollars on programmers. I have seen first hand the kinds of results that they get in exchange for those millions. It’s pitiful. Software is no longer modifiable in any practical way.
The other thing about “options” is that there can never be enough of them. At the same time, there are usually so many of them that we are overwhelmed by the task of finding or choosing the one that we need, if it’s there. There is no possible balance between these two opposite problems. The problem is in offering only “options” or “choices” rather than complete freedom. It is simpler for a programmer to do it this way. Sure, life might also be simpler if everyone was given three career options after high school, “Baker,” “Soldier” or “Fireman”. See? You have a choice! But preferably, people are given the freedom to choose to be anything, including roles that have not yet been thought of or named yet. Freedom is important in software, just as in life.
When a powerful technology matures, it often reaches a point where it becomes too complicated or expensive to be used by all but the largest and most powerful corporations of the world. The general population excluded from it to a large extent, which creates a market for a new, simplified version of the same technology. There have been many disruptive industries throughout history, from rubber, gunpowder and iron smelting, to electricity, flight, the microchip, and the Internet. Clayton Christensen, the man who coined the term “Disruptive Innovation,” covers this phenomenon in his excellent book five industries that are ripe for disruption. They listed robotics as #3, but they missed the big one, software as a whole! I know “everybody knows” that Artificial Intelligence is the disruptive technology that will upset software as a technology. Computers will be able to program themselves, they say. But I say that Artificial Intelligence is one of those big complex technologies that, itself, is ripe for disruption! It will not be the disruptor, but the disruptee!
Don’t get me wrong. The set of technologies that we call Artificial Intelligence can do a lot of things. AI software can convert speech to text and text to speech. Drones (and missiles) can travel to designated locations, avoiding any obstacles along the way. GPSes can find a route from any point on a continent to any other. The list goes on and on (see this article on the top 10 uses of Artificial Intelligence from www.bloggingrepublic.com). But Artificial Intelligence cannot and will not solve the problem of software modifiability, customizability, and complexity. Artificial Intelligence can find patterns and order where it exists inside vast repositories of data. It can help make sense of complex data to help us find where problems exist. It can be used to create systems that respond to data in ways that appear to be “intelligent.” But one thing it does not do, and will never do,
Artificial Intelligence, if anything, is one of those big complex, inaccessible technologies that, itself is ripe for disruption! It will not be the disruptor, but the
Software today is complicated and troublesome. It is difficult to learn and use. It rarely does quite what we want it to do. It requires constant attention and fiddling. It controls us, gets in our way and even stops us from doing things. It does not submit to our commands. And it never gives us complete freedom.
In this blog, I explore the various ways that software is messed up and how this came to be. More importantly, I will outline what to do about it.