Desenvolvedor full-stack. O que é?
Ser um desenvolvedor full-stack não implica necessariamente ser um desenvolvedor experiente, ou um desenvolvedor web. Basta o programador ter conhecimento razoável em tecnologias client-side e server-side, de modo que se sinta confortável com ambas metodologias.
É comum a rotulação de tipos de desenvolvedores em back-end e front-end. O front-end é representado pela camada cliente, bem como o servidor representa o back-end. Os programadores que se intitulam front-end lidam com a camada de visualização da aplicação, já os desenvolvedores back-end são aqueles que desenvolvem o código da lógica de negócio da aplicação.
Ser full-stack significa atenuar a linha que separa os programadores dos administradores.
Abaixo uma imagem ilustrando as camadas de desenvolvimento.
Assim, vamos caracterizar algumas das tecnologias utilizadas por um desenvolvedor full-stack hoje:
1. Sistemas Operacionais
Linux, este é de fato O Sistema no desenvolvimento web. Um desenvolvedor full-stack deveria saber também como um servidor cloud funciona, como Amazon, entre outros, e suas APIs.
2. Controle de versão e virtualização
Hoje, é inaceitável não usar controle de versão do código, mesmo sendo um lobo solitário. Como exemplo temos: GIT, Mercurial e SVN. Com a virtualização podemos criar facilmente ambientes de desenvolvimento, customizados e independentes, com Vagrant e VirtualBox. Desapegue do LAMP/XAMPP e suas variantes.
3. Tecnologias back-end
- Servidores web: Apache, Nginx.
- Linguagens de programação: Python, PHP, NodeJS, Ruby, etc.
- Banco de dados: PostgreSQL, MySQL, MongoDB, Redis, SQL / JSON em geral.
Um desenvolvedor full-stack deveria saber como instalar e configurar, no mínimo, um servidor Apache. Em relação às linguagens o foco não deve ser conhecer todas com total maestria, escolha uma e aprofunde-se. Como base, deixo um gráfico das top 10 em julho 2016 (fonte: google).
Além da informação do ranking, temos quais os tipos de plataformas suportados por cada linguagem de programação (ver campo type) sendo que neste momento o C lidera em todas as plataformas (Web, Mobile, Enterprise, Embedded).
Bancos de dados relacionais (MySQL, PostgreSQL) e não-relacionais (MongoDB, Redis) são termos que um desenvolvedor full-stack deveria saber as diferenças, bem como a sintaxe JSON.
4. Tecnologias front-end
- HTML, CSS, JavaScript
- Design responsivo
- UX / UI
Agora a parte divertida, um desenvolvedor full-stack deve entender dessas tecnologias e conceitos, como um design responsivo funciona, e conhecer também também alguns frameworks (LESS, SASS, Angular, Ember, etc). Novamente, não necessariamente saber tudo de todos os frameworks, mas conhecer os mais populares, por conta da comunidade (suporte) e mercado, e se aprofundar no que mais convem.
5. Tecnologias Móveis
Não menos importante temos as tecnologias móveis, que é uma indústria dinâmica e fortemente relacionada com desenvolvimento web. É bom conhecer sobre essas tecnologias também.
Então, qual a vantagem?
Sendo um desenvolvedor full-stack você tem a mente aberta para novas tecnologias, tem a compreensão de como uma aplicação web é feita desde o design até o produto final. Não significa que você deve ser fluente em todas possíveis e imagináveis tecnologias que há, não, pra isso existe a especialização. É mais sobre ter o entendimento de cada área e como elas se comunicam e tomar uma decisão importante quando necessário. Ser full-stack significa atenuar a linha que separa os programadores dos administradores.