We’ve Made Web Development Complicated

When I first made my transition from front-end development into back-end development in ~2002, I had two things to learn:

  1. a server-side language
  2. how to talk to a database (SQL)

on top of my knowledge of HTML, CSS and JavaScript. With these five basic things, I was able to build some useful stuff.

I’m working on a web app now and it recently struck me how much more complicated things have become. I’m following what I consider to be modern development best practices and that means that I’m dealing with the following concepts and technologies:

  1. a server-side language
  2. how to talk to a database (SQL)
  3. HTML
  4. CSS
  5. JavaScript
  6. The concept of a virtual machine
  7. Vagrant with a pre-built image (Laravel Homestead)
  8. SSH
  9. Version control (Git)
  10. A branching/merging process (Git Flow)
  11. Gulp
  12. Node.js (for running Gulp)
  13. Homebrew
  14. /etc/hosts file (or Dnsmasq)
  15. CSS pre-processors (Bootstrap was already using Less, I am using Sass)
  16. CSS concatenation
  17. JavaScript concatenation
  18. Image sprites
  19. A server-side framework (Laravel)
  20. Framework-specific command line utilities for creating template files, running pre-load optimizations, database commands, etc.
  21. ORM
  22. Security (SQL injection, XSS, CSRF, etc.)
  23. Templating syntax (Laravel uses one called Blade)
  24. A client-side framework (jQuery, Bootstrap, Angular, etc.)
  25. JSON
  26. PHP Composer
  27. PHP Packages
  28. Database migrations (database schema defined in code)
  29. Database seeding
  30. Faker (for creating dummy data)
  31. Unit testing

Unused in my project thus far, but other things you’ll need to know sooner rather than later:

  1. Memcached (or other key/value caches)
  2. Capistrano (or another deployment process)
  3. CDNs

I’m guessing I’ve forgotten another dozen or so things that you all will remind me about in the comments… point being, this stuff has gotten more complicated and difficult to get one’s head around. Lots of abstractions, optimizations, etc.

I was recently asked to chime in on a “what programming language should a new developer learn?” round-up. The resulting :scare: article :/scare: is a bit of a mess as you have relatively unstructured comments from 83 developers to slog through. Further, many of them have huge biases towards frameworks they created, etc. Regardless, I was interested to see that I wasn’t the only one to challenge the question and push the importance of motivation and the project goal over a technology choice.

We need to remember that we’ve created this chaos bit by bit. When we are teaching, we need to provide a path that allows people to master one brick at a time. Pretty soon, they have enough bricks that they can build more layers on top of them.