Looking at the past years of application development, as a developer you might have noticed
a significant shift from desktop applications to web applications. The Web has evolved as the
major platform for applications and is going to take over many facets—not only in development
but also in everyday life, resulting in this shift accelerating. Who would have thought 10
years ago that current mobile phones are indeed only very strong ironed notebooks with a
permanent Internet connection?
The Internet provides a very direct connection between consumer and producer. For application
developers this implies a very easy -to- use- and- handle platform. Looking around, many
application frameworks have evolved in recent years in order to be very Internet-centric. These
frameworks interpret the Web as an ubiquitous platform for providing not only ordinary web
pages, as it was done 10 years ago. The web has become a data provider on top of one of the
most proven protocols in industry, the HyperText Transfer Protocol (HTTP). The core concepts of
the Internet being a decentralized highly available network with HTTP as a protocol on top of it
are the inner core of a big part of today’s applications. Furthermore, another development took
place in the last years. The browser became more and more a replacement of the operating
system. Fully fledged web applications like Google Docs, which act and look like desktop
applications, are becoming more popular. JavaScript engines like Google V8 or SpiderMonkey
are getting insanely fast to deliver web browser performance not thought of several years ago.
This means current web applications are now capable of delivering a real user experience
similar to applications locally installed on your system.
So many software engineers today are also web engineers as well. This poses a very big
problem. As most of software engineering is based on abstraction, many tools, frameworks,
and languages try to hide complexity from the engineer, which sounds good at first. No
web engineer cares about the fragmentation of the IP packets which are sent throughout
the whole world in milliseconds. By abstracting and layering your software to reduce the
complexity per layer, you inadvertently might hide features of the underlying protocol your
software is built upon. Many frameworks try to resemble the style of programming desktop
applications, with the exception of application being in the Web. However, in order to make
use of HTTP and its features you cannot easily hide them away in your application framework.