Gone are the days when only one programming language or a very specific process was required from a developer. Nowadays programmers must know a range of technologies across multiple platforms in order to do good work.
What does a full-stack developer mean?
The term full-stack means developers who are comfortable working with both back-end and front-end technologies.
A full-stack developer doesn’t need to master all of the areas and technologies he needs to work it, because that just makes it nearly impossible, he just needs to be comfortable working with those technologies, and that’s a lot too.
What full-stack meant 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.
Now it means.
- 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
Linux powering most of the Internet, it’s a de-facto operating system in web development (not to dismiss .NET). In addition, a full-stack developer should know how cloud hosting works, Amazon / Rackspace or other providers and its APIs.
Search is an integral part of most websites – a developer should know how to set up and use search servers such as Sphinx or Elasticsearch.
Caching is also important, Varnish, reverse proxy, Memcached and opcode caching. He needs to know what each of these is and how to use it.
Web development tools:
- Version control: Git, Mercurial, SVN
- Virtualization: VirtualBox, Vagrant, Docker
Today, it’s unnaceptable not to use version control, even if you’re a solo developer.
With virtualisation tools, having separated development environments on a per project basis is really nice to have, and easy to set up with VirtualBox and Vagrant at least.
If you want to work with Vagrant you also need to know the basic syntax of Ruby and shell scripts as well.
- Web servers: Apache, Nginx
- Programming language: PHP, NodeJS, Ruby
- Database: MySQL, MongoDB, Cassandra, Redis, SQL / JSON in general
Apache and Nginx are the norm for web development. A full-stack developer should know how to set up these applications and serve the contents of his website.
PHP is what needs to be mastered on a high level, NodeJS, Ruby is nice to know as well.
In addition to web server and programming languages, database management is also a requirement for a full-stack developer which in itself is another beast.
Relational (such as MySQL, PostgreSQL) vs non-relational databases (like MongoDB, Redis or Cassandra) are differences the full-stack developer needs to know, along with knowing the syntax of XML / JSON.
- HTML / HTML5: Semantic web
- CSS / CSS3: LESS, SASS, Media Queries
- Compatibility quirks across browsers
- Responsive design
- AJAX, JSON, XML, WebSocket
Here comes the fun part. If you want to present your website, you’d better know these and all their quirks.
One should also know how to communicate with the back-end via AJAX or WebSockets.
- Converting website design into front-end code
Is it better to be a full-stack developer?
Being a full-stack developer means to have an open mind towards new technologies, having your hands dirty in each one and to have an understanding of how a web application gets done from a concept to design to the finished product.
The idea of a “full-stack developer” isn’t about being fluent in every possible technology there is, because specialization exists for a reason. It’s more about having an understanding in each of the areas above, to communicate intelligently between team members and to be a good asset if the situation needs it.
The full-stack developer will have an increasingly important role in the web development of the future, especially when development methods such as DevOps are becoming an essential part of software development companies, where the line between code developers and administrators who are responsible for code deployment and setup is getting thinner each day.