Since I started writing software when I was 5, I’ve been doing it a long time. I’ve seen a lot of changes in the technology – from the BASIC language all the way to assembly, desktop to server, fat client to thin client, you name it. But the trend I’ve seen over the last 10-15 years is troubling.
There is absolutely no question that the Internet has changed things radically. Much of that change is good. There is, however, an aspect of the Internet and the way that software is written that is disturbing. Many of the time-tested, well-thought-out, efficient ways of coding are disappearing and are being replaced by junky, ill-conceived, incredibly inefficient substitutes. People that are learning to code now are mostly coding for the web, and it is very upsetting how little they understand of the actual science behind computing, mostly because the software development tools in use today don’t even support the best, time-tested concepts.
Another concept that is lost on the web is code compilation. Pretty much ever since the dawn of computing, developers take code and run it through a compiler to produce the set of instructions that are native to their computer so that they don’t have to be translated at the time the software is run. Consider how much more efficient you are at speaking your own language than you would be at trying to converse in Korean by using a dictionary, having never heard or seen a word of Korean before. Compiling does the translation ahead of time (just once) so that software runs as quickly as possible. Yet again, web technologies don’t do compilation – they do the “translation” at the time that code is executed, making things incredibly slow in comparison. In addition to that, since the translation is done at run-time, that means you have to distribute the actual source code (the original code you’ve written) to your software in order to run it… so anybody who wants to could take your code and modify and redistribute it… or in cases where you’ve got content you want to protect, like music, or a movie, everybody can see exactly how it is protected so that protection can be removed. Java has the ability to do a sort of rudimentary compilation just before code is executed, but it is still far from true native code, and it still slows you down considerably.
It’s almost like about 15 years ago people said, “We don’t care about all of the research and learning that has occurred over the last 50 years. We’re going to come up with a new way of doing things, no matter how good some of your ideas may be.”
As someone who works in both worlds it is incredibly frustrating. Especially when I have to interact with people who have only ever spent time in the newer web technologies, because they don’t even have a remote concept of what they are missing out on.
There are a ton of other great technologies that seem to be falling by the wayside. True code debugging (the ability to see what is happening internally inside of software as it is running, making testing much, much easier) is extremely rare. RAD (Rapid Application Development), once considered the epitome of efficient design and coding, is almost unheard of today. True integration with databases is pretty much gone too, and in its place are incredibly difficult-to-program, very bloated communication methods that making coding difficult, especially if it is to be done securely. Forgive me if fname.value=’Frank’ is easier (and conceptually much more sound) than “UPDATE users SET fname=’Frank’ WHERE userid=56”, but this is exactly the sort of difference I’m talking about. For the most part web developers aren’t even remotely aware that the tools we had for doing things were much better than the best of what they have access to today. It’s really quite sad.
I’m not saying for a minute that these newer tools don’t have a place. They do. But very little, if anything, is being done to improve the tools and incorporate the lessons that 70 years of computing science have taught us. There’s almost a wall there where anyone who works in the newer tools will automatically dismiss ideas from the old school just because they are old school, not because there is any real reason to do so.
Would you enjoy having your Ferrari swapped out for a Model T? And somehow I’m expected to like it.
The result of all of the backwards ways of doing things with “modern” tools is that it takes forever to get anything done. I can easily write “equivalent” code in Delphi five times faster than it can be done in PHP even though at this point I probably know PHP as well as anyone could. And, on average, it takes about half of the lines of code in Delphi to accomplish something as it does to do the same thing in PHP. And yet the Delphi code literally executes more than a hundred times faster, and provides a better user experience. Yet somehow people are critical of my decision to continue to use such a tool. Only because they don’t understand it, and in most cases refuse to even try.
Much of the stagnation in web technologies is due to the bickering and in-fighting that happens between companies that build tools for the web. HTML 5 is, in reality, very poorly suited for what we are asking it to do today. And everybody involved wants their own ideas for improving it to become the standard, but nobody else is willing to adopt those ideas because they aren’t their own and they can’t profit from it. In the 1990s and early 2000s, for example, Microsoft tried to extend HTML 5 with new features in Internet Explorer and they got shot down by everyone else, because they weren’t “following the standard.” Well, yeah, they didn’t… because there wasn’t a way of doing the things they wanted to in the standard. Yet when people do actually get together to try to improve the standard, nobody can agree on anything so nothing gets done. We’ve been talking about HTML 5 for nearly ten years, and it is still so poorly supported across different browsers that you almost can’t use it.
Trying to creating interactive web pages is a an absolute disaster – programmers have to take care of every low-level event (click button, move mouse, release), and those events differ from browser to browser. Want to play music or show video on a web page? Nobody can even agree on how to do that so you have to produce three separate versions of every file, then figure out which version to use when you view the page. HTML wasn’t ever even designed to handle any multimedia other than graphics, either, which is why so many web pages use Adobe Flash, despite the fact that everybody hates it. Want to do things like drag-and-drop? Good luck. It’s really hard to do, and usually has to be coded multiple different ways to work in all popular browsers. But in my ‘old school’ Delphi drag and drop doesn’t even require writing a single line of code. Just set an object property saying ‘yes, you can be dragged’ and ‘you can accept dragged objects.’
It goes on and on. Want a web page to interact with a Joystick on the web? Not happening. Or generating output for a printer with full control over how it looks? Again, not really possible. How about photo editing? Not very plausible in HTML. How about a page that uploads a picture to your cell phone over USB? Nope, HTML doesn’t allow it. And it will likely be at least a decade before such things are actually possible and usable.
All of the above problems had already been pretty much solved by traditional development tools long ago.
And somehow many of the companies that have produced the strongest tools and environments for software development in the past are abandoning the more mature technologies. Microsoft is trying to force everybody to the write Windows 8 apps, despite the fact that this environment, too, is missing some of the best things from their traditional desktop environment. Apple invests very little in desktop technologies. And Linux stagnated years ago.