A full-stack developer is a developer who sees something that needs to get done and does it, even if they currently don't "know how".
And these people do exist, and are every bit as valuable as you'd expect.
A full-stack to me is somebody that can do web development, do server-side development, optimize SQL queries, understand security, scalability, and able to build linux server infrastructures for large software systems. They also are able to take any technology and provide value to a business using it in a matter of a couple of weeks.
* Willingness to dive in and figure things out. * Having a wide enough knowledge base that they know where to and what to look for when they don't know something.
And you can learn the second ...
How? Especially if they've never learned the language/framework? This "Paul Bunyan" fairy tale of the "just do it!" hacker who can solve any problem no matter the odds just doesn't exist in real life.
Learning just enough of a language or a framework to patch up a solution to a specific problem doesn't take very long. It takes a bit of experience, but it doesn't take a mythical hyper-productive hacker. The solution might not be pretty, and it probably won't scale to millions of users or stay solid for decades, but it will solve the problem. And in many cases, it's all that matters.
I'm sticking with my "full stack" claim. I think I've earned it.
Which is what the actual core of the article (the section on "Identifying mastery") was devoted to.
http://en.wikipedia.org/wiki/Competent_man
In particular:
"A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects." — Robert Heinlein, Time Enough for Love
Except, of course, tied to software ...
“Specialization is in fact only a fancy form of slavery wherein the ‘expert’ is fooled into accepting a slavery by making him feel that he in turn is a socially and culturally preferred—ergo, highly secure—lifelong position.”
― Richard Buckminster Fuller
Its a bunch of false comparisons.
The simple facts are this:
1) Full Stack Developer == Generalist [ Do lots of things; not 100% as fast or effectively as a specialist]
2) Specialty Developer == One area of profession-level competence [e.g. Front End Developers would need to go and start learning all the other areas/categories from essentially scratch since they haven't touched them at a profession level in years]
I'm not sure why people need to come up with a bunch of silly comparisons that are more complex than this and call generalists a "myth".
"Do they believe they have familiarity with different layers, or true mastery?"
Full-stack guys never (that I have seen) have mastery of all layers, but rather can perform at a reasonable level at all necessary layers to make an app happen. They might have mastery of a few layers, they might lean on infrastructure like herokou to cut out a section of the stack, whatever, but they can get it done.
They are also always scary smart, and scary employable.
I didn't really choose to become a full-stack developer or get involved in dev-ops / IT / sysadmin work. It's just something you have to do when you work at a startup, because no-one else is going to do it. I'm really grateful for the time I've spent reading the Saltstack documentation back-to-front, learning how to set up RADIUS and EAP-TLS secured Wifi, setting up logging and error reporting tools, setting up DeployStudio, Munki and Boxen to provision new developer laptops, setting up the VPN, DNS, etc., even though that's not in my job description.
Anyway, we're hiring full-stack developers at ZenPayroll [1]. Come and work on some challenging problems with an awesome team!
However, most people disagree with that definition, and in fact use a definition that fits their own skills.
It's like WTF!!! You are a Developer, why would you want to stay just in web development? if you're a developer you can move on anything you want anytime!! Why are you locking yourself just into "Web Developer"?
Well, that's my rage... Lots of answers from friends, basically, they are all afraid of tools they've never used, and they don't even bother to try them out.
I like to do any kind of work, from deployment scripts, load balancers, distributed computing, web front-end, desktop front-end, mobile, database, hell, i like to be part of all the entire project!! I've have a lot of luck because i've always been in small companies, and maybe we don't deliver the best solution, but the solutions work, and work really well, i have developed lots of systems, and they are not a headache to support, so i'm proud of what we have achieved...
But recently, when people ask you "what kind of developer are you", you can't just say "i'm a developer", because, i don't know why, but people assume that you don't know Web, SQL, FrontEnd, etc... And magically, a "Web Developer" is way better than just a "Developer". That happened to me lots of times, just because my title said "Developer", people that didn't knew me don't consider me for projects.
That's why i am now using the "Full-Stack Developer" title, you just can't use any other title on today's market. I don't want to be doing just "Web Frontend", or "Database Administrator", or "CI Manager"... Heck, i want to participate in all the project.
And i agree with other people here, a Full Stack doesn't needs to be a guru on every language/framework. You just need to know how to assemble everything to make it work. And it WILL NEVER be perfect, because requirements change everyday, but your stack can evolve to adapt to those changes.
Same goes for a "Frontend Developer"... A frontend developer can be really bad frontend developer, but he's a frontend developer because he wants to do only that and is happy whit that...
I believe a Full Stack developer is a guy that is not afraid to solve a problem in any stack of the system, not a guru or a genius.
Well, that's my point of view.
Assuming the same knowledge of contemporary tech, the 2014 developer can do more with less than the 2010 developer. The stack is only bigger if you have reason to make it bigger, which is far from a foregone conclusion. LAMP is more effective today than it was in 2010 because HTML/CSS/JS/PHP are better (and frankly LAMP was already moving off the bleeding edge a decade ago, not in 2010). Now obviously the development of JS frameworks and nosql databases has progressed significantly, so that potentially adds to the layers you can employee and the things to learn, but none of those things are required to be "full-stack". All that stuff could be done before, you just had to roll your own or use earlier-gen tech that was maybe not as optimal. Certainly heavy javascript was already well-entrenched by 2010.
The crux of the matter is defining "full-stack"? The author talks as if this is about being up to speed with all facets of the latest web tech, but that is a useless definition. There is simply too much tech now for anyone to know it all in any meaningful capacity. Of course I agree with the author that there are a lot of useless blowhards out there talking about being "full-stack" developers. This is because we are well into year 2 or 3 of "full-stack" being a cargo-culted buzzword that is latched onto by posers and wannabes from all walks of tech life.
But like all such overplayed ideas, "full-stack" has a legitimate origin. It comes from the fact that the web was really developed and evolved by two distinct sets of people. You had the programmers who were back-end focused (because javascript was not treated as a serious language for the first 10 years of its existence despite rapid ubiquity), and you had the web designers pushing visual design, first through HTML and then additionally CSS. It took a long time to close the gap between these two groups, and during that time, it was very rare to find anyone with any talent in web design who could program or vice-versa. In the mid-2000s once a few people started to achieve the requisite 10k hours of practice, true full-stack developers started to appear, and since then as the web became something that people had grown up with from early childhood, the number of people who built things end-to-end on the web only increased.
For a short time, "full-stack" was a pretty strong distinction because it meant a passion and focus on the web as a unique platform at a time when most top talent was immigrating from other disciplines. Today, however, everyone attending a bootcamp as a career move is training to be "full-stack" because that's simply what the HR people demand. It's completely orthogonal from whether someone is a good developer, and it's at least partially orthogonal from any list of particular skills—it just means someone can build both the front-end and back-end of a web app in some form; the specifics and expectations of which vary widely from job to job.