What does the term "full-stack programmer" mean?

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.
- Front-end code in one or more languages, e.g. HTML, JavaScript, Java, 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/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.
Typically these skills are developed over many years in the contexts of different jobs, so as Ian mentioned being a full-stack developer means being pushed outside of your comfort zone to constantly learn new skills.
What are good ways to be a full stack developer?
The best way to become full stack is to build something entirely by yourself. You'll be forced to learn backend, frontend, and everything in between.
Start simple. Make a static site with just HTML + CSS. Checkout Twitter Bootstrap to see CSS done right.
Next grab your favorite server-side language and preferably framework, setup your database models/tables, and start serving dynamic content on your HTML page through a server side templating language.
Next, add some interactivity via JavaScript. Make database calls through AJAX. Use jQuery or a similar library to make your JavaScript development easy, rapid, and stable.
Last step is to roll up your sleeves and dig into server administration and setup. Create an AWS account, fire up an EC2 microinstance, install Apache, setup your database, ssh your project in.
Most startups are running on AWS, so knowing your way around the web interface and terminal tools will make you an asset.
Start simple. Make a static site with just HTML + CSS. Checkout Twitter Bootstrap to see CSS done right.
Next grab your favorite server-side language and preferably framework, setup your database models/tables, and start serving dynamic content on your HTML page through a server side templating language.
Next, add some interactivity via JavaScript. Make database calls through AJAX. Use jQuery or a similar library to make your JavaScript development easy, rapid, and stable.
Last step is to roll up your sleeves and dig into server administration and setup. Create an AWS account, fire up an EC2 microinstance, install Apache, setup your database, ssh your project in.
Most startups are running on AWS, so knowing your way around the web interface and terminal tools will make you an asset.
What Does it Contain Exactly ?
A typical full-stack for an web application might cover:
Prototyping, Testing and couple of others are missing in that list; but let's be reasonable. Even then, one cannot probably build an average quality enterprise web application alone. A personal/hobby app or something for profile building is definitely possible.
There is no way, one can master all those skills. Although I agree, Full-stack Developer doesn't mean achieving mastery in all.
If we try to vaguely group these skills in various roles, the list might look something like:
There will definitely be some overlap from Product Management, QA and IT. But to build a good quality enterprise application, one should at least have 4 to 5 specialized people on the engineering team.
Becoming a Product Person - who takes initiatives and ownership to achieve 'completeness' in every deliverable in terms of its business value - is a great idea. My advice to you is, try to learn all those skills but be a master in at least one role.
- Usability Engineering and Designing for User Experience
- Graphics Designing (PhotoShop etc.)
- HTML and CSS
- JavaScript
- Web Standards
- Cross-browser compatibility
- Advanced JavaScript
- Trends - HTML5, CSS3 (and also watch for JS6)
- Libraries/frameworks like jQuery, Backbone, Knockout, AngularJS, qUnit, Mocha and many more
- Web Application Optimization Techniques - Front-end
- Web Security - Front-end
- Client-server communication standards and data exchange formats like XML and JSON
- REST and RPC
- Java (number of MVC frameworks)/Python (Django)/PHP/RoR/ are some popular server-side choices. Let's not ignore NodeJS as well.
- MySQL, PostgreSQL, MS SQL Express, Derby, Cassandra, Sybase and tons of other database solutions
- Web Application Optimization Techniques - Back-end
- Web Security - Back-end
- Product Design
- Application Architecture, Performance and Scaling
- Various Web Servers, Application Servers, Server Management and Cloud Deployment
Prototyping, Testing and couple of others are missing in that list; but let's be reasonable. Even then, one cannot probably build an average quality enterprise web application alone. A personal/hobby app or something for profile building is definitely possible.
There is no way, one can master all those skills. Although I agree, Full-stack Developer doesn't mean achieving mastery in all.
If we try to vaguely group these skills in various roles, the list might look something like:
- UX Designer/Engineer - 1
- Visual Designer - (Understanding of 1) + (Command on 2)
- HTML Developer/Prototyper - (Understanding of 1 and 2) + (Command on 3)
- UI Designer - (Understanding of 1, 4, 5 & 6) + (Command on 2 & 3)
- UI Developer - (Understanding of 1, 2, 7, 8 & 9) + (Command on 3, 4, 5 & 6)
- Front-end Engineer - UI Developer + Command on 7, 8 and 9
- Front-end Architect - Front-end Engineer + Command on 10, 11 & 12 + Good understanding of 18, 19 and 20
- Server-side Developer - 14 & 15
- Server-side Engineer - 12, 13, 14 & 15
- Server-side Architect - Server-side Engineer + 16, 17, 18, 19 & 20
- Database Designer/Engineer/Architect - Understanding of 14 and Command on 15 with distribution/scaling/load-balancing and other database optimization techniques
There will definitely be some overlap from Product Management, QA and IT. But to build a good quality enterprise application, one should at least have 4 to 5 specialized people on the engineering team.
Becoming a Product Person - who takes initiatives and ownership to achieve 'completeness' in every deliverable in terms of its business value - is a great idea. My advice to you is, try to learn all those skills but be a master in at least one role.