When I first made my transition from front-end development into back-end development in ~2002, I had two things to learn:
- a server-side language
- 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:
- a server-side language
- how to talk to a database (SQL)
- HTML
- CSS
- JavaScript
- The concept of a virtual machine
- Vagrant with a pre-built image (Laravel Homestead)
- SSH
- Version control (Git)
- A branching/merging process (Git Flow)
- Gulp
- Node.js (for running Gulp)
- Homebrew
- /etc/hosts file (or Dnsmasq)
- CSS pre-processors (Bootstrap was already using Less, I am using Sass)
- CSS concatenation
- JavaScript concatenation
- Image sprites
- A server-side framework (Laravel)
- Framework-specific command line utilities for creating template files, running pre-load optimizations, database commands, etc.
- ORM
- Security (SQL injection, XSS, CSRF, etc.)
- Templating syntax (Laravel uses one called Blade)
- A client-side framework (jQuery, Bootstrap, Angular, etc.)
- JSON
- PHP Composer
- PHP Packages
- Database migrations (database schema defined in code)
- Database seeding
- Faker (for creating dummy data)
- Unit testing
Unused in my project thus far, but other things you’ll need to know sooner rather than later:
- Memcached (or other key/value caches)
- Capistrano (or another deployment process)
- 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 article 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.