Matt Warren

The Web Sucks

I’ve been bouncing around between working on native Applications and web apps for the last few years. Having experience with the state of the art in both areas of software development. One thing I have found is that web development is not nearly in a state that programming a complex application is sensible.

A modern web application is probably leveraging client side MVC with a framework like Backbone.js or Angular.js. These are great frameworks that allow us developers to finally create web applications that behave in a usable fashion on the internet. These are definitely a step in the right direction. However, these frameworks bump into a hairy mess as soon as you start to work on the Javascript code needed.

Javascript simply wasn’t designed to power these sorts of complex web applications and as such the language lacks a lot of the higher level syntax for organizing massive code bases. Without these language constructs it’s difficult to avoid having the code evolve into spaghetti.

The separation of structure and style (HTML vs CSS) seems great in theory but in practice it’s hard, and limited. Between fundamental limits of styling, and the bugs/differences between browsers, targeting a pixel perfect design is an exercise in frustration. In fact attempting any non-standard layout of a web page is frustrating beyond reasonable. Add to this the new design requirements that websites should be responsive and scale down or up to all screen sizes and orientations and now you’ve probably tripled the amount of work to do.

These hurdles result in much longer development times and more bugs to fix along the way.

Native Applications on the other hand provide two key advantages to developers. First is that designers are generally not requesting uniquely laid out, graphically intense applications, so standard widgets are usually ok. Second is that for different types of applications there are better layout techniques available to use. Simple desktop applications can be designed in an interface builder tool while something like a video game can be flexibly done in code.

Both the web and native sides of app development are still evolving so it’s not simply a case of the web catching up. Native is a moving target which is itself getting better all the time as well. However with the web your technology is much more restrictive, you can’t simply opt out of HTML/CSS and write client side web applications in C++. Where as if someone writes an amazing predictive layout system in Go, you could feasibly write UIs in it tomorrow.


Posted

in

by

Tags: