A full-stack developer is a person who is comfortable working with all the technologies required to get an idea to a finished product. Full-stack developer must be familiar with all the layers of software development.
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.
A full-stack developer is capable of performing tasks at any level of the technical stack in which they reside. It means:
- Designing a business object model, and using a popular framework to build prototype of application from scratch.
- 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
- Can performance tune a system, and estimate work load.
- API/back-end code in one or more languages, e.g. Java, Python, PHP, etc.
- Project management/client work, e.g. gathering requirements, creating technical specifications and architecture documents, creating good documentation, managing a project timeline (e.g. knows Agile/SCRUM/Kanban)
In general a full-stack developer has knowledge that is a mile wide, but not necessarily very deep, and has core competencies in the pieces of the stack in which they work most.
However in the 2010s, since API first and Single page apps have become popular, it requires for-stack web developer as well, and old LAMP full-stack developer become rare.
So Let’s try to beak down and categorize the main technology stacks that are required for a full-stack developer today (may be changed after 2020, :)) (source by George Fekete)
- 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.
- 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
For example if you want to set up Vagrant you need to know Ruby’s syntax, as simplified as it is or if you want to manipulate DOM elements, jQuery is a good to know technology.
One other category that deserves mentioning is mobile technologies. It’s a very dynamic industry and closely related to web development:
- Hybrid: PhoneGap, Appcelerator
One of the biggest disparities today is between web and mobile development, but the gap is rapidly closing.
A full-stack developer should know about these technologies as well.