The web is more than what runs in the browser - its the openness and interoperability.
We normally build document centric web sites but there are more and more application like sites. This has been mostly on the server but it's now moving more client side. User expectation, especially on mobile, is that apps are more native-like. Big challenges are performance and the ability to work offline.
We are in a specific moment in history, things are changing and changing for the better, we need to be really careful with what we build. Has the web got an inherent stability that we need to respect?
Simplicity verses easiness by Rich Hickey - check out this presentation.
As developers we tend to conflate being easy with being simple. This is wrong - the two are unrelated. "Simplicy to not a daily increase but a daily drecrease. Hack away at the inessentials." - Bruce Lee
We've got away with not paying attention to complexity for a long time. We are used to throwing things away and starting again but systems last a long time.
Using HTML/ CSS /JS isn't always easy. Unfamiliar nature or inconsistent implementations.
We've made things more complex for ourselves to make things look the same in every browser:
- UA sniffing
- CSS hacks
- Doctype switching
This lasts in what we build - complexity has a long half life, be careful with what you add.
We use JS libraries to make our lives easier but they added complexity:
- New features
Similar things with CSS pre-prcessors, boiler plates, frameworks etc. All done to make front end development easier but all add complexity.
Complexity has costs
Not about methodoligical purity.
The process of building modern websites with frameworks, pre-processors, build tools, etc. is easy for developers but it is complex for beginners. Our tools are making web development easier but they are hurting interoperability and are fragile.
Are we always chasing the new? Do really need to keep throwing things out and starting anew.
Declaritive vs Imperative programming
- side effects
It's about how a computer should perform a task.
- no side effects
- deterministic outcomes
It's about what a computer should do.
Pre-processors are shoving idoms into another language. We turn a declarative system into an imperative system. We have also increased complexity.
Where do we go?
- keep doing new things
- appreciate the seriousness of what we are doing
- the web is becoming the platform for every kind of application
- don't avoid rigorous criticism
We already have the foundations in the browsers. We don't need to reboot the web, we need to get better at understanding what we are doing. We need to measure the complexity of our systems. We need to measure the robustness of our systems.
We need to understand what makes our technologies so powerful.