What does it describe? Is this some common basic term I'm actually missing?
To me full stack would start way down at the hardware design and end just when the computation has finished and (possibly) persisted to disk. A vast field that I can't possibly hope to learn in a lifetime.
Dear HN please enlighten me
This term really caught on with people who develop for the web because there actually is a divide here: some people really prefer the front-end work (JS/HTML/CSS), some people prefer the backend work (sysadmin/app logic/data stores) and some people prefer both.
So basically, if someone says "full stack", they likely mean that you can develop and run the entire product, not just a part of it.
Having said that, I strongly encourage everyone to go deeper. Learn some C. Figure out the difference between a function and a syscall. Understand what the kernel does and how it works (whichever kernel you happen to use). Write a toy libc. Program for a microcontroller (try adding RAM to a microcontroller circuit for added fun). Play some Minecraft. Write a bit of assembly. Create a data store. Develop a JS framework for DOM manipulation. Create a toy programming language. Write a malloc implementation. Write a kernel module (maybe a driver to that microcontroller device you put together). Write a web server. I find that the more of this kind of stuff you do, the more aware you become of what `display: block;` will do and how to structure your code better.
On the face of it, this sounds reasonable but it glosses over the fact that better tooling/frameworks/etc make it much easier to get started. If you use something like Parse/Heroku or their ilk, then you can get away with not having to know much about backend development (or the problems around it). In effect, when you define 'full-stack' as the ability to ship a product, then the 'stack' is actually narrowing over time.
This is just an observation and as I said elsewhere in the thread, I don't find the term particularly useful anyway.
To say "I'm a full-stack developer" without that context is meaningless and will inevitably be untrue.
This definition omits some things that become more important as the application becomes larger, such as cloud deployment, performance optimization, project management, and designing for reliability. But I think of those as more architect or project manager skills, rather than developer skills.
I should add that all three tiers are complicated enough to have specialists of their own. It's perfectly reasonable to be a database expert, full stop. But there seem to be a lot more opportunities for people who know the whole stack.
For example, most people "out source" their network / system administration to a company like Rackspace or Amazon. I would still consider someone utilizing their services to deliver a product "full-stack".
Now, that's not to detract in any way from people who specialize. A good front-end developer with design skills can often get the job done faster and simpler. A good backend specialist can get performance under control sooner.
It's about as useful as the term 'Ninja' or 'Rockstar' in that it's used when people can't articulate succinctly what they mean (or they don't really want to take the time to do so).
2. Keep learning about lower layers until you get tired or things just don't make sense any more.
3. Define that as "full stack" and ignore anything still below.
For most people the process seems to terminate somewhere around the kernel/user boundary, much like someone in a boat who's aware of the vast shapes moving below but never gets a clear sighting. IMX a typical "full stack" engineer can manage things like routing tables and logical volumes, understands that context switches and page faults matter, but becomes increasingly unable to explain what they really are to others. By the time you get e.g. to different kinds of cache misses or database/compiler internals (even those are still out in user space) forget it.
TBH I think most "full stack" engineers are half-stack at best. So am I. Twenty years ago the upper parts of a modern stack didn't exist and I could explain pretty much everything in the lower parts from tty to network to disk plus VM/schedulers/etc. Maybe back then I could have called myself a full stack engineer. With today's deeper stack (and my own career progression) I'm down to about half, somewhere in the middle. I don't actually know anyone who's truly full stack any more.
15 years ago, it was normal that, as a developer, you know how to administer a server, know how Unix works, know how to setup/debug the database. Maybe know a bit of C.
Fast forward to 2015. Lots of developers are purely frontend developers and don't know how to setup a server, or don't know how to administer the database. This is now the norm. The developers who could do all that stuff (as they should) are suddenly "full-stack developers".
A lot of us actually don't even touch the web all day long, not even for fun.
This definition including hardware down to the transistor is just silly, and its the equivalent of non-web devs chiming in with a "Hey we matter too!"
I would assume that most decent devs no matter what their specialty will be able to get a very basic HTML page working. Or am I making too many assumptions?
As a backend dev you get your data from web-services which are written by the web-services team (or another company) which in turn receives optimized database queries/procedures from the database team. You pass the data after processing to the template/fronted which is is the domain of the fronted-guys.
Deployment is done by the ops team to servers which are administered by the infrastructure department in the data center.
My first job as junior-developer was in such organization and it is quite enjoyable to have experts for every domain to learn from instead a lot of "Jack of all trades, master of none" people. The other benefit is that you can put all your effort in to mastering your particular domain.
The drawback is obviously that you are isolated in your tier and don`t learn as much as if you would do a project "full stack".
I've never seen guys who grok C, ASM and Perl being fascinated by JS and CSS3.
I have considered myself a generalist for some time, since the early 00s. I can handle all of the normal IT work in an office, in a colocation facility, networking, power delivery, cooling, server purchasing / configuration, OS tuning / patching / securing, database design / development / optimization, application architecture / maintenance, and project management.
Typically I work with people at a very early stage and get everything up and going, add in most of the automation layers, and hand over the keys to someone else. Then I do it again on a slightly bigger scale.
It's a pretty generic term watered down by its lack of concrete meaning. There are probably going to be a couple of hundred varying opinions and fifty or so disagreements about what it means before this post disappears off of the front page.
To me this makes it a meaningless term and one I don't feel bad poking fun at. It's a term used by managers and start-ups to get more for less from a single developer. We used to call "full-stack" developers, "generalists." Before that... I don't know, "whiz kids?" "Good with computers?" "Geeks?"
Many people agree that it means someone who knows how the whole technology stack works from keyboard and screen down to the processor. That used to be just, "programmer," but I suppose there is quite a bit more going on these days. I have my suspicions that few people actually know, "what's going on from keyboard and screen down to processor." Install just one software package on your machine and try to figure out how many dependencies it has, how many different languages and run-times, and "APIs" it uses. Then there's the operating system itself (often in the case of application developers). I think what we're really agreeing on is that "full stack developer" is a term for people who are capable of figuring out what broke when things go wrong and have a broad-enough range of experience to fix it.
1) Write an application backend (e.g. Ruby/PHP/Python/Java/ASP/JS)
2) Created a modern front-end (JS/HTML/CSS) for this application
3) Set up a VPS or go with AWS/Heroku/Whatever stack to deploy the app which means:
3.a) Set up the SQL or NoSQL database(s) 3.b) Set up the CDN for traffic control/protection/speed 3.c) Deploy a backup strategy 3.d) Write the firewall rules (if this is a VPN) and secure the host...
Well then by all means, you're a full stack developer. Some badasses use their own VPN to handle email (setting up an SMTPd daemon), write custom firewall rules, setup reverse-proxies (nginx) and use chroot, containers or jails (FreeBSD).
It's extremely hard to be good at all these, especially as the projects get larger and larger. Usually people are good either at systems administration (which is complicated and hard) or web-programming (which is complicated and hard).
Now being average on all of those, might be good for launching a startup-level MVP but I'm not sure it's going to work in the real world. There people who specialise in using specific cloud software, e.g. Amazon AWS ... If you try to work out the documentation and vocabulary it's a brand new world. I think Azure and Google might (almost) the same level of complexity for big projects.
A web developer saying they work on the "full stack" means that they both write server-side and client-side code.
That is, not necessarily experience in multiple web languages, but rather skilled in a particular stack from top (presentation) to bottom (database).
I consider myself, and look for jobs that are full-stack development, particularly because I like to work with JavaScript, CSS/HTML, server-side code, and database development.
Full stack in practice means knowing where to look on the next layer down when something goes wrong, and having good intuitions about how things behave and how you can expect things to be implemented given what's available.
Full stack web engineer is less about depth of abstractions and more about breadth; knowing the browser, a back end language, a database, and enough about system administration to put it all together.
But yeah, most people don't design software like that yet, so they mean server rendered pages, which means a server container of some sort, an application "middleware" process (something like node or PHP or Java), and a database process, all of which allow the user to, from one perspective, "pan and zoom" across some data corpus, and gives them the right to poke that data corpus at a few points.
What about running and maintaining it?
tl;dr Someone who's familiar with
- Hosting / Server environment (SysOp things)
- Application development (Front / Backend)
I think the simplest way to think fullstack is to think of an end-to-end experience and list all the components.
* Develop the app. Let's say, swift + cocoa touch (front-end)
* Developing the backend services. Let's say, Django REST Framework (back-end)
* Setup and manage the PaaS. Let's say, Google App Engine or Heroku (infrastructure)
But in the 80's and 90's, it used to refer to someone who could handle development at any level of a stack of OS/Framework/API's - from either building their own new API/Framework, to using it, to using others, and so on. A Full-Stack Linux developer wouldn't have any problems busting out the kernel sources to add features/fix/debug, compiling libraries (add/fix/debug), building user-space apps (dev/fix/debug), etc.
But these days you mostly only hear it in relation with web technologies.
What I don't do is draw pretty pictures. Don't mind UI design but the moment we start discussing changing the look and feel and PSDs you get somebody else cheaper in to do that.
So they learn databases, linux, Photoshop (wait, if poor; then GIMP), Javascript, PHRUBYPY, and $100 of free adwords credits.
These poor, full-stack developers try writing their own legal terms, finding the best examples of good UI to copy, and setting up social media accounts for their projects.
They also have a friend that is good with Canon/RED cameras and can help record a promo video.
https://www.google.com/webhp?q=getting%20started%20PHRUBYPY
appearantly Google thinks it's Rails :)
Why would you say this? It's incredibly offensive, and adds nothing to your argument. A full stack dev might not be as good as a specialized dev in any of backend / devops / frontend, but that's just the price you pay for being a generalist. That doesn't mean they 'pretend to be able' to do things.
Then how to configure/update/trouble shoot the web server and related issues like database performance and mail server errors
Full-stack can mean whatever you want it to mean. Often it just means you're old.
The term is very difficult to define, because you keep on getting different answers for what the stack actually is.
It's really a question of scope.
Full stack knowledge is typically needed and appreciated during the early stages of a startup, but larger companies dislike people with such broad-ranging knowledge and do everything to limit them, box them in, and prevent them from being hired. The typical excuse is that it's not possible to have knowledge that broad and still have strong depth of understanding in each area, but this is absolute garbage. Most idiots in middle management don't like Engineers like these because they'll become too dependent on them (middle management is obsessed with being able to see everyone as expendable, something that is not usually the case with a Full-stack Engineer). Also, a legitimate Full-stack Engineer is rare and special (even though 10-15+ years ago it was the norm to be this way), and management doesn't like people that are special.
By the way, while many job postings state they are seeking Full-stack Engineers, the term is usually just an empty buzzword used by management to lure in someone that knows Javascript. They don't believe there is such a thing as a Full-stack Engineer and think anyone claiming themselves to be one is full of it. So, while it's important for many companies (startups, especially) to have people with this skill set, they're still playing the same game of hiring in those that are expendable (no, "specialized"), mediocre (can't handle anyone that's skilled), and compliant (can't handle anyone challenging their authority).
I'm a Full-stack Engineer (if I'm not, then that's where I want to be), so I'll share my skill set as an example of what a Full-stack Engineer would know: - Hardware: VHDL, circuit board design - Backend: Python, Go, Java, Lua, C/C++, PBASIC, SQL - Frontend: Javascript, HTML, CSS - Machine learning knowledge - Able to set up and maintain servers - Can create wireframes and design a user interface - Can set up A/B tests and analyze user feedback - Can create and optimize internet marketing campaigns (most people don't realize this is almost 100% an engineering and optimization problem) - Good business and user sense