Desenvolvedor Fullstack

Não seja esse cara.

Cléber Zavadniak

2019

https://medium.com/clebertech

  • C para microcontroladores
  • Simulações de hardware em C++
  • Redes Linux
  • Migração de programas em C do HP-UX para Linux
  • PHP (~ "fullstack" ~)
  • Python (~ "fullstack" ~)
  • Python + Erlang
  • Python + Microsserviços
  • Python + Microsserviços

Por que não ser esse cara?

  1. A natureza humana ao desenvolver software
  2. A natureza humana ao procurar emprego
  3. A natureza humana ao contratar pessoas

Ênfase nos desenvolvedores.

Gestores são um caso um pouco diferente.

Ao desenvolver software

A natureza humana

E ao PHP voltarás."

"Pois tu és PHP

HTML

 

HTML com PHP embutido

 

PHP gerando HTML

 

PHP gerando HTML com Javascript embutido

 

HTML com Javascript embutido

 

Javascript gerando HTML

 

Javascript gerando HTML renderizado no servidor

(APIs)

Voltar ao PHP não é um avanço...

  • Inclusive, PHP nem tinha "build"...

O cisma back/front teve bons motivos

  • A API passou a ser um valor em si mesma.
  • O conflito de interesses leva à adoção de padrões claros.
  • O frontend muda numa taxa diferente do backend.

A API

API

Frontend

Backend

API

  • Formada por padrões e protocolos.
  • Geralmente acoplada ao backend;
    • Mas pode ser uma entidade à parte (WAMP/Autobahn, por exemplo).
  • Separação clara entre os componentes.
  • Serve mais componentes do que só o frontend web.
  • Independente da linguagem de programação.

O "fullstack" moderno

  • Desenvolvedor frontend experiente que aprendeu Node.js.
  • Raramente é o contrário.
  • Todos tendemos a privilegiar nossa área favorita.
    • Backend: "A app tá feia, mas a API é linda...";
    • Frontend: "A API tá meio bagunçada, mas a app é linda...".

Conflito de interesses

  • O ser humano tende a ser complacente consigo mesmo.
    • (Isso fica muito claro em equipes com code review.)
  • Complacência, pressa e pressão externa levam à criação de massarocas.
  • É necessário outra pessoa para fazer uma avaliação realmente "sem dó".
  • Cada área deve defender seu objetivo:
    • Frontend: "quero entregar logo".
    • Backend: "quero uma API coerente".

Massarocas!

  • Separação entre frontend e backend excessivamente tênue.
  • Displicência quanto a seguir padrões e protocolos.

API?

Frontend

Backend

Secure Scuttlebutt

  • Protocolo muito interessante;
  • Bem documentado;
  • Mas... baseado em implementação.

Secure Scuttlebutt

  • Frontend: "Patchwork". Javascript.
  • Backend: "ssb-server". Javascript.
  • Efeitos colaterais:
    • o hash das mensagens é feito sobre um objeto JS serializado como string;
    • o hash é incluído neste mesmo objeto;
    • a verificação do hash é extremamente dependente do comportamento de serialização do Javascript.
    • Por isso é raro ver implementações em outras linguagens...

Secure Scuttlebutt

Recebe string.

 

Transforma em objeto.

 

Extrai o hash.

 

Serializa o objeto como string!!!

 

Verifica o hash.

Heterogeneidade favorece padrões

  • Esse problema do SSB não ocorreria se o backend tivesse sido escrito numa linguagem diferente.

Homogeneidade ou proximidade favorecem "confusão"

  • Mas não é por maldade
  • Nem por displiscência
  • Tampouco ignorância.

A lei de Fechners

É tudo questão de percepção!

Nossa percepção da intensidade do estímulo aumenta menos rapidamente que a intensidade real do estímulo.

  • Python - JS: "Uau! Precisamos seguir padrões e protocolos claros".
  • Node - JS: "Meh..."

O problema da percepção

  • É algo natural do ser humano.
  • Faz o desenvolvedor esquecer ou ignorar que cada parte, frontend e backend, é uma parte distinta.

Exceções notáveis

  • Desenvolvedores
    • muito experientes;
    • muito disciplinados.
  • Equipe muito atenta.
  • Ambiente razoavelmente são.
    • (Pressão externa e pressa dificultam as coisas.)

Problemas notáveis

As empresas em geral que buscam "fullstack" estão formando equipes com desenvolvedores muito experientes e disciplinados???

Ao desenvolver software

  • Cada um é complacente consigo mesmo.
  • Na "era das APIs", a maioria dos "fullstack" tende naturalmente a favorecer o frontend.
  • Homogeneidade facilmente nubla a percepção.
  • Heterogeneidade e "conflitos de interesse" obrigam todos a seguir padrões e protocolos.

A natureza humana

Ao procurar emprego

A natureza humana

"Eu sei de muitas coisas"

  • As equipes maduras geralmente procuram especialistas.
    • Já viu vaga de "fullstack" na Google?
  • Quem procura um especialista tende a rejeitar um "generalista".
  • Jack of all trades é interessante no começo, mas dificilmente as empresas permanecem muito tempo com muitos masters of none...
    • Os antigos se especializam.
    • Os novos já são especialistas.

Ao contratar pessoas

A natureza humana

Empresas que buscam

  • Algumas muito boas, muitas muito ruins...
  • "Está funcionando perfeitamente":
    • Na empresa ruim, é o último passo antes da entrega.
    • Na empresa boa, é o primeiro passo de um processo maior.
  • Visão de curto prazo.
    • Foco na "entrega".
    • Padrões e protocolos, mas só se der tempo.
    • Conhecimento represado.
      • Sai o desenvolvedor, foi-se o conhecimento.

Mas porém entretanto

Todavia...

  • Indícios não são provas!
  • Sempre pode ser que eu esteja redondamente enganado.
  • Contratação de "fullstack" não é garantia de haver qualquer coisa errada.
  • Há boas empresas contratando "fullstack".
  • Há tempo e ocasião para cada coisa.
  • Investigue mais sobre o assunto!

Desenvolvedor Fullstack: não seja esse cara

By Cléber Zavadniak

Desenvolvedor Fullstack: não seja esse cara

Algumas reflexões sobre o perigo desse retorno à era do PHP.

  • 435