Recently, I often hear in Bishkek shouts of small children “I am Full-stack. I’m full-stack. “ And something tells me, that these guys do not understand, who is full-stack. In their understanding, if they bit a backend and learned about React.js or something else (starts on something there and ends with js), that’s all. They are at the club. They are in the club of those, who are called full-stack developers.
Full-stack does not end there. And it does not begin either.
There is one definition for the full-stack developer:
In this version, a person must understand everything and close the entire stack of technologies, components. To be able to understand servers, hosting, operating systems, databases, understand several PaaS. In general, it is as efficient as possible to spend the money of the company for which it works. This is Vasya, scrolling in the AWS scaling for the Django application, running in the docker containers running the Kubernetes cluster.
In another version, more lightweight, it’s just the ability to close the employer’s technology stack. It can be a full-stack Wordpress developer. It’s just a man who does sit-outs on wordpress and deploys it. It can be Full-stack Django Developer. This is the person who will completely cover the development stack on Django. But here we have problems with the fact, that it is difficult to assess the level.
After all, yesterday student, who knows how to python and css/js, and the person who spelled more than one application on Django, scaling it, are the same full-stack.
Well, which levels do I see here? I’ll just throw the levels up and down the stairs.
- A person knows what is Django. A person knows what js is. A person can make up.
- A person understands how Django works (ORM, Cache, internals).
- A person understands how the frontend works. He knows how to do a cross-browser layout and write cross-browser JS code.
- A person understands how the frontend works. How the browser renders the page, what are his events.
- A person understands how the network works in the browser. A person understands how the page rendering can save battery on the mobile phone. Can make an adaptive layout. He knows how to make his site fast, like diarrhea. Can cash in the browser. Can use the service-workers. Knows how to make custom offline pages.
- A person understands how his language works (Python) (OOP versus a functional approach, knows the difference between a decorator / generator / metaprogramming and knows how to apply it).
- A person understands how to do a performance at the language level using all sorts of optimization.
- A person understands how the selected WSGI server (uWSGI, Gunicorn) works.
- A person understands how the OS works with sockets and a network (epoll).
- A person understands how the network works on the server (Traffic control, shaping, Firewall).
- A person understands how the OS kernel works with the network.
- A person understands how HTTP and HTTPS works and knows how to provide PFS.
- The person knows the difference and is able to apply HTTP (1.0/1.1/2) and Websockets.
- A person can deploy and organize it. Making it Graceful, rolling, etc.
- A person can optimize queries in the database and knows how his database works (which indices are used, how to set indexes, which indices are used in Mongodb / MySQL / PostgreSQL depending on which storage engine was chosen).
- That’s not to mention all the usual algorithms.
A lot of skills, right? Difficult in places, huh? But we have not gone lower in the OS and in hardware, front-end, UX and other things, especially, in the server and the organization of cross-dc replication and writing mobile applications :)
All for what? Stop calling yourself Full-stack. Full-stack is an even more vague term than DevOps, SRE, and others. Full-stack is a myth. And Full-snack sounds funny at least :)