Full Stack? Excuse me, what?
The term full-stack means developers who are comfortable working with both back-end and front-end technologies.
A full stack developer is capable of performing tasks at any level of the technical stack in which they reside. It means:
- Working with systems infrastructure (knowing what hardware to ask for , what OS to install, how to prepare the system and dependencies for all software)
- Understanding, creating, manipulating, and querying databases
- API / back-end code in one or more languages, e.g. Ruby, Java, Python, etc.
- Project management / client work, e.g. gathering requirements, creating technical specifications and architecture documents, creating good documentation, managing a project timeline (e.g., someone who knows Agile/SCRUM).
However, the developer doesn’t need to master all of the areas and technologies he needs to work on, because that just makes it nearly impossible, he just needs to be comfortable working with those technologies, and that’s a lot too.
Full Stack – Back in 2000 and Now
2000 was a long time ago, in that year PHP 4.0 was released. Yes, 4.0. Back then, a good web developer knew a little HTML, CSS and some procedural PHP, because proper OOP didn’t even exist until version 5.0.
The LAMP (Linux – Apache – MySQL – Perl/PHP) stack was all the rage in those years, with little or no alternative. In the early 2000s if somebody used version control they were considered either technological heretics or wizards. Today it’s unheard of and laughed at, not using one.
So, let’s try to break down and categorize the main technology stacks that are required from a full-stack developer today:
- Linux and basic shell scripting
- Cloud computing: Amazon, Rackspace, etc.
- Background processing: Gearman, Redis
- Search: Elasticsearch, Sphinx, Solr
- Caching: Varnish, Memcached, APC / OpCache
- Monitoring: Nagios
Web development tools
- Version control: Git, Mercurial, SVN
- Virtualization: VirtualBox, Vagrant, Docker
- Web servers: Apache, Nginx
- Programming language: PHP, NodeJS, Ruby
- Database: MySQL, MongoDB, SQL / JSON in general
- HTML / HTML5: Semantic web
- CSS / CSS3: LESS, SASS, Media Queries
- Compatibility quirks across browsers
- Responsive design
- AJAX, JSON, XML, WebSocket
- Converting website design into front-end code
One other category that deserves mentioning is mobile technologies. It’s a very dynamic industry and closely related to web development:
- Hybrid: PhoneGap, Appcelerator
A full-stack developer should know about these technologies as well.
Wow, then should I even try to become a Full Stack Developer after all?
I consider a great full-stack developer to be someone who is good at lot of things but great at some. I’d wager that there are zero individuals with advanced-level knowledge in each of these areas that would be capable of single-handedly delivering this next generation kind of application. Just keeping up with the advancements and new programming interfaces in each category is almost a full-time job. So, I would rather advise you to pick your eco system and become an expert in it, but don’t try to be everything to everyone or you will burn yourself out. There are a lot of great stacks available and you must learn one of them thoroughly. In order to “have a deep understanding of all areas” you must begin with a deep understanding of just one area. Only then should you expand.
Future of Full Stack
Whether you choose to specialize in front end or back end development — or position yourself as a full stack generalist — the job outlook is positive. The role of software developer is recognized by the U.S. Bureau of Labor Statistics as one of the occupations that will have the most growth over the next ten years. In 2014, just over 718,000 people were employed in some capacity as software developers — and the nationwide median salary was $95,510. That number is expected to rise by 135,000 jobs to more than 853,000 by 2024.
So, Good Luck and let me know your thoughts.