Thoughts on forward thinking web application development
Been doing some research at work lately on something I’ve felt strongly about for some time. I wish I either had more time or took more time to sit down and write out my thoughts. I ran across a guy who seems to be of a similar mindset in his thoughts about where web application development needs to be heading.
Now a lot of the “open source” community out there is going to see this and say something like… “duh”! But “big corporate” (most, not all) hasn’t seen this light yet, so it’s nice to find some people out there thinking the same way so I know I’m not crazy:
Key points (but please read the above):
- “Java was originally designed to run on first set-top clients and then PC clients” - Java was NOT designed for server side applications.
- “The average corporate application will be a big text pump, taking in XML from a back-end resource, transforming it somewhat, and producing either HTML or XML”
- “Java is horrific at processing text since it can’t manipulate strings directly.” - Not only is it not architected for server-side applications, it’s not architected for manipulating large amounts of text!
- “…developers want only a very thin veneer over operating system services like sockets, while Java provides a huge virtual machine in between the application and the operating system.” - We (IT workers of the world) need to be reducing complexity, not creating or facilitating it.
- “where is the application server of the future? It is a big text pump that is embedded in the various endpoints of an enterprise. There is nothing in the middle.”
Reducing Complexity:
Is it just me, or is it not a simple thing to conceptualize that introducing abstraction layer upon abstraction layer means introducing overhead upon more overhead, and is only going to result in a horribly performing product? Keep in mind folks that it takes extra CPU cycles per abstraction layer to get through to code that actually does some work!
As we get access to all this latest and greatest, faster hardware and such, the wrong approach is to introduce yet more layers of absraction in code to make it easier to manage for the developer. More abstraction == BLOAT. Faster servers should mean the ability to service more customers per server (provided bandwidth isn’t the issue). Developers have been trending towards adding more abstraction layers to code which has been (somewhat) offset by improvement in hardware. I’m all for easing the development process with abstraction layers for certain pieces of an app, but some of you have been taking this a little overboard. Code needs to trend back closer to the metal, not further away from it.