Educação hoje, amanhã e sempre.

Investir na própria educação é o melhor investimento que você pode fazer na vida. Quanto mais você investir, mais rápido terá retorno.

Dando continuidade aos posts sobre carreira e educação eu gostaria de chamar a responsabilidade do desenvolvedor para o papel que ele desempenha.

Trabalhar com desenvolvimento de software hoje em dia é um mar de tranquilidade, existem mais vagas em aberto do que profissionais para preenchê-las. Por um lado isto é bom, de outro lado é péssimo.

O lado bom é que desenvolvedores que entregam algum resultado não ficam desempregados (dá para trocar de emprego a cada semana se quiser). Isto é sinal da falta de profissionais qualificados para atender a demanda crescente em desenvolvimento de software.

Para um desenvolvedor ficar desempregado (por meses) é sinal de que ele está muito defasado em relação ao mercado ou existe algum fator que está complicando demais sua contratação (valor hora / localização / condições especiais).

O lado ruim da demanda de empregos ser maior do que o número de profissionais disponíveis

É simples de entender, num cenário de escassez tudo passa a ser supervalorizado. Vamos fazer uma analogia com a escassez de combustível que tivemos pouco tempo atrás. O que aconteceu? Tivemos postos de gasolina vendendo combustível adulterado por R$ 10 o litro, absurdo? Havia filas de carros para abastecer (mesmo cientes da supervalorização e da baixa qualidade).

O problema de uma alta demanda de oportunidades é que isto gera um comodismo profissional, os desenvolvedores não precisam se preocupar em correr atrás de aperfeiçoamento técnico para garantir os seus empregos.

Pessoalmente eu já ouvi inúmeras vezes a seguinte frase:

Acabamos contratando o menos pior por que estamos precisando urgente! Tivemos diversas entrevistas mas não apareceu ninguém dentro do perfil que esperávamos contratar.

Em algumas profissões supersaturadas como Administradores, Advogados e etc. A situação é inversa! Além da graduação é necessário ter Pós, MBA’s entre diversos outros itens no currículo para conseguir uma boa oportunidade.

Mas nem tudo permanecerá da mesma forma para sempre, os advogados, administradores e etc já tiveram também sua época de ouro.

Existe uma geração de novos desenvolvedores chegando, eles são muito mais jovens, muito mais dispostos e aceitariam sua vaga pela metade do seu salário.

Parece uma profecia exagerada né? Eu posso confirmar algumas verdades sobre o assunto. Eu tenho muitos alunos de 17, 18, 19 anos que já dominam completamente as tecnologias atuais de mercado e conseguem entregar software com uma boa qualidade. Eles não possuem casa, filhos e contas para pagar. Eles aceitam oportunidades pelo desafio e estão em busca de experiência e não de bons salários.

Por incrível que pareça são os mais jovens que fazem mais cursos comigo, e apesar de requerer um investimento financeiro para isto (as vezes nem empregados estão) eles fazem questão de investir, eles realmente valorizam o conhecimento e estão se preparando para entrar e crescer no mercado.

58% dos brasileiros não possuem gestão financeira.

O que este número alarmante tem a ver com o assunto? Tudo!

O ideal é que todo trabalhador poupasse 40% de seu salário e que investisse 10% em sua educação / cultura. Isto está longe da realidade e muitas vezes as pessoas alegam negligenciar a própria educação por questões financeiras.

Seria por questões financeiras ou por caos na gestão financeira?
Concordo que o custo de vida em nosso país é altíssimo, mas tudo é uma questão de prioridades. Uma calça de marca, um jantar a dois em um bom restaurante não sai por menos de R$ 150,00 e cientes disto nós pagamos sem nos espantar.

Por que pagar R$ 150,00 em um livro / curso / evento aparenta ser um gasto muito maior? Provavelmente porque em questão de prioridades a educação aparenta ser um custo e não um investimento. Prazer em comer bem, usar roupas de marca e até mesmo possuir um bom carro é mais importante do que investir em seu futuro? Olhando por esse lado com certeza você respondeu não!

Investir em educação nem sempre significa investir dinheiro. Significa investir tempo e dedicação. Existem milhões de ótimos conteúdos gratuitos disponíveis, basta buscar.

Vou lhe propor um exercício / desafio, responda sinceramente a esta lista:

  • Você está satisfeito com o que ganha?
  • Seus planos futuros são suportados pelo seu salário atual?
  • Você se considera tecnicamente capacitado para ocupar uma vaga superior a sua?
  • Quantas horas você estuda por semana?
  • Qual o percentual do seu salário investido na sua educação?
  • Onde você se vê daqui 5 anos?

Estas respostas irão lhe ajudar a criar um plano e rotina de gestão financeira e estudos para que você possa alcançar seus objetivos. Tudo depende de você e de quão longe pretende chegar.

Um outro ótimo exercício é buscar a “vaga dos sonhos”, analisar a descrição da vaga, o que ela exige do profissional e criar um plano para conseguir atender a expectativa dessa vaga.

Espero ter lhe ajudado! Caso tenha alguma história ou comentário a fazer utilize o formulário abaixo:

Versionamento de APIs com WebAPI + Vídeo Aula

O versionamento de APIs é uma estratégia para implementar rapidamente mudanças e novas funcionalidades em seu negócio.

O ASP.NET Core WebAPI possui suporte nativo para versionamento de APIs. Além de facilitar a implementação, este suporte entrega outras facilidades como informar as APIs obsoletas via Header do Response e também expor informações importantes para a documentação da API.

Por que você deve versionar sua API?

Todos os desenvolvedores precisam entender que não existe condições de uma empresa evoluir e ser competitiva no mercado se ela não conseguir entregar rapidamente as soluções que o mercado precisa! Mudanças ocorrem muito rápido e você é o responsável por entregar soluções que permitam serem adaptadas rapidamente aos novos cenários.

Gostaria de contar uma história que aconteceu recentemente comigo (fatos 100% reais). No mês passado eu encerrei uma parceria de muitos anos com uma empresa de software que fornecia soluções para um de meus negócios.
De forma amigável eu enviei um e-mail para o CEO avisando de minha decisão, agradecendo pela parceria e desejando que a empresa dele não parasse no tempo devido aos processos burocráticos de mudanças que eu e os demais clientes enfrentavam.

O CEO me respondeu com um e-mail enorme e triste, contando das dores em atender mudanças simples, que 3 anos atrás havia investido praticamente todo o budget da empresa para desenvolver um software que hoje não suporta novas implementações sem um processo enorme de mudanças e burocracias internas.

O desenvolvedor além de entregar software, também é parte responsável pelo sucesso ou fracasso do negócio.

Como o versionamento de APIs pode ajudar o seu negócio a ser mais competitivo

Vamos supor que você entregue um conjunto de funcionalidades em sua API e com o passar do tempo novas mudanças e funcionalidades são exigidas, porém implementar estas necessidades em seu código resultam em breaking changes no lado do cliente.

Você pode considerar tudo que tem entregue até hoje como a V1 da sua API e implementar as novas funcionalidades como uma V2, sendo assim:

Os clientes que precisam urgentemente das novas funcionalidades poderão ser atendidos rapidamente por sua empresa, basta implementar a V2 da sua API. Os clientes que não possuem tanta necessidade de mudança continuam usando a V1, porém passam a receber o aviso que esta API está obsoleta e será desativada em algum tempo (por exemplo 6 meses).

Você passa a atender o negócio de forma ágil, facilitando a vida dos clientes que precisam rapidamente das novas funcionalidades e sem prejudicar aqueles que não precisam.

Quando é hora de versionar minha API?

Considere o versionamento da sua API necessário toda vez que uma mudança resultar em breaking changes do lado do cliente.

E claro, para prever com exatidão os breaking changes é necessário escrever uma diversidade de testes de integração que simula os inúmeros cenários de consumo da sua API do lado do cliente.

Como implementar o versionamento da minha API?

Esta é a parte mais fácil 🙂 O ASP.NET Core dá suporte nativo ao versionamento, além de facilitar muito na documentação (via Swagger por ex).

Documentação oficial:
https://github.com/Microsoft/aspnet-api-versioning

Assista esta aula gratuita do meu curso REST com ASP.NET Core WebAPI

O desenvolvedor.io é a minha nova plataforma de cursos online e já temos mais de 12 cursos anunciados, o curso sobre ASP.NET Core Web API está 100% entregue e possui diversas aulas gratuitas para você experimentar e aprender um pouco mais com nosso conteúdo.

Para aprender a implementar na prática o versionamento de APIs assista esta minha aula gratuita:

desenvolvedor.io | Cursos online de programação e tecnologia

Aprenda Arquitetura de Software, Back-end, Front-end, Testes, Banco de Dados, ORMs, Boas práticas, Kubernetes e Cloud com os cursos mais completos do Brasil!

Espero que aproveite este conteúdo e comece desde já a planejar e se preparar para esta estratégia que pode ser um grande diferencial em seu negócio.

Vamos continuar enriquecendo o assunto utilize os comentários abaixo e deixe sua contribuição 🙂

Qual é a característica mais importante que um programador deve ter?

Escrevo este post motivado por algo que venho falando faz muito tempo e também em resposta a um debate que tive entre colegas num grupo privado de uma comunidade.

O assunto a seguir pode ser incômodo, pode gerar um desconforto e até mesmo pode ser que você não concorde comigo, porém acredito que é necessário voltar a falar do assunto.

Uns dias atrás em uma das diversas comunidades que participo, um rapaz iniciante na área perguntou:

Qual é a característica mais importante que um programador deve ter?

Eu parei para refletir e estruturar uma resposta para o rapaz, então eu refleti… refleti… refleti… quando me dei conta eu passei mais de 10 minutos pensando no assunto e não tinha uma resposta pronta para dar.

Foi nesse momento que eu parei e pensei:
– Vamos mudar um pouco, vamos pensar de uma outra maneira.
Então e eu me fiz a seguinte pergunta:

Qual é a pior característica que um programador pode ter?

Incrível! Ficou mais fácil, eu realmente consegui chegar numa opinião e gostaria de dividir com você!

A resposta rápida é:

A pior característica que um programador pode ter é a falta de humildade em reconhecer que ele não sabe de tudo e nem é perfeito naquilo que faz. Sempre tem como melhorar!
A melhor característica que um programador pode ter é o comprometimento em sempre buscar o aperfeiçoamento técnico!

Acho que este pensamento é bem claro (até simples demais) e fala somente a verdade sem ofender ninguém. Pode ser que você discorde, talvez exista algo mais importante? Talvez! Mas para mim esta é a base fundamental:

Buscar conhecimento > aprender > aplicar > analisar > criticar > aperfeiçoar

Repetir este processo sempre, não importa em qual patamar da carreira você chegou!

Humildade e uma visão do “mundo real”

A seguir transcrevo o diálogo original em que participei com um grupo de colegas do qual eu defendo uma questão de humildade e visão de realidade, fiz o papel de “advogado do diabo” na conversa, pois precisava entender melhor as afirmações do colega.

[colega] – Se você não sabe arquitetura de computadores. Análise de complexidade e Estrutura de dados. Não é programador. É um amador remunerado. Se aprendeu na faculdade ou fora, tanto faz. Mas TEM QUE SABER.

[eu] – Então se a pessoa entrega software que funciona e atende o cliente, mas não sabe disto, então não é um programador?

[colega] – EXATAMENTE. Você não entrega software que funciona sem saber estrutura de dados.

[eu] – Tem certeza?

[colega] – Tenho! Você não escreve software que escala. Nem que não escala. Você entrega uma colcha de retalhos baseada em um framework que você não entende. Isso não é ser profissional!

[eu] – E como você pode garantir que uma pessoa que não sabe fazer uma análise de complexidade não entrega software que escala?

[colega] – Simples. Por que não escala. Se você não sabe nem me dizer como seu algoritmo vai se comportar quando aumentar o número de elementos que ele tem que tratar. Certeza que na maior parte das vezes vai se comportar mal.

[eu] – Ele pode usar uma ferramenta de analise de performance, testes de carga e depois pesquisar como fazer melhor, enfim… Eu que não vou ter a “audácia” em falar que 70% dos programadores são amadores remunerados, só isso…

[colega] – Não falei em percentual. Mas, sendo realista, esse número é bem maior.


O assunto foi além deste ponto, mas divagou um pouco, o que realmente me importa está nesta troca de mensagens que transcrevi.

Mais uma vez deixo claro que as afirmações (ou taxações) não eram para a minha pessoa, eu entrei no meio de uma conversa já iniciada apenas para fazer o “advogado do diabo” e entender melhor as sérias colocações feitas pelo colega, no final sugeri tratarmos disso em público para cada um expor sua opinião.

Realmente não existe maneira de discordar que estes conhecimentos são fundamentais e muito importantes, porém eu acho extremamente errado rotular praticamente todos os programadores de “amadores remunerados” uma vez que entregam software, fazem escalar, fazem otimizações e por final atendem o cliente (mesmo usando ferramentas ao invés de puro conhecimento de ciência da computação).

Humildade em reconhecer nossas limitações / deficiências é fundamental, assim como é importante ter humildade em reconhecer que existem diversos tipos/níveis de profissionais com focos diferentes no mercado.

Hoje em dia podemos dizer que a maioria dos programadores são programadores em frameworks:
(.NET, Java, Angular, React, MVC, ASP.NET etc, etc…)

São frameworks / bibliotecas desenvolvidas por pessoas que sabem muito mais do que a grande maioria dos programadores do mercado. Estes programadores do mercado utilizam IDE’s inteligentes, ferramentas de análise de código, testes de penetração (segurança), testes de carga e enfim.

Programadores utilizam tecnologia para entregar tecnologia, é uma realidade e nem por isto você deve aceitar que alguém lhe chame de amador por que existe uma forma de executar algumas tarefas sem a necessidade de uma ferramenta específica.
Eu apenas lhe recomendaria que um dia se dedicasse a aprender como fazer isto.

Antigamente era necessário ter muito mais cuidado em não esquecer de desalocar um ponteiro por exemplo, mas ai vieram os frameworks que gerenciam as pilhas Stack / Heap, que fazem uso de garbage collector, que otimizam o código naturalmente durante a compilação e executam de forma inteligente e etc.

Isto não significa que você não deve cuidar do código para evitar uma StackOverFlow Exception por exemplo, nem deixar de analisar se o seu algoritmo está performando bem (assim como as consultas em banco). Tudo isso AINDA É OBRIGATÓRIO. Porém cabe no que eu citei acima:

Buscar conhecimento > aprender > aplicar > analisar > criticar > aperfeiçoar

Você deve SEMPRE se preocupar com que está entregando, pois isto vai evitar custos desnecessários de infra, manutenções emergenciais após problemas de escala e etc, pode custar até mesmo o seu emprego. Portanto faça como você puder, use as ferramentas! Mas também estude mais para poder não depender 100% delas, porém NUNCA deixe de fazer o seu melhor!

Sobre ter humildade em rotular pessoas e medir todo profissional com a mesma régua, eu me recuso a fazer, eu deixo isso por conta do mercado e o mercado cuida disso de uma forma simples:

  • Aplica exames técnicos de contratação
  • Divide o profissional em níveis (ex Junior, Pleno, Sênior)
  • Sabe quando procurar um especialista ou um programador que entregue aquilo que se espera.
  • Realiza avaliações de 360º e fornece feedback.

O mesmo colega da conversa acima já me criticou pelo meu projeto de referência o Equinox Project, pois na visão dele o projeto influenciava os desenvolvedores a utilizar técnicas complexas para fazer um simples CRUD.

Eu acredito que o programador (prefiro o termo desenvolvedor) deve ser maduro e autônomo o suficiente para tomar suas próprias decisões, não podemos ser paternalistas ao ponto de evitar de entregar conhecimento por que ele pode ser entendido de forma errada, é absurdo!

Obviamente eu não recomendo utilizar toda complexidade do Equinox Project para entregar um CRUD, inclusive esclareço isto na própria documentação do projeto, até por que não é necessário entregar um projeto completo (que justifique a complexidade aplicada) só para conseguir compartilhar um pouco de conhecimento com nossos amigos programadores correto?

Observe esta imagem.

Observe no canto esquerdo inferior a frase:

Entenda tudo isto, mas aplique apenas o que precisar.

Eu achei impressionante a capacidade e simplicidade do autor ao recomendar o uso da complexidade apresentada. Tem a minha admiração.

E aqui entre nós: É o suficiente né?

Não somos meninos com computadores, devemos ser soberanos sobre nossas próprias decisões e eternamente conscientes da busca do constante aperfeiçoamento.

Eu aceito todo tipo de crítica (e adoro receber) mas esta me fez pensar:

“Este meu colega é um excelente profissional, a crítica dele com certeza me faz refletir em fazer mais e melhor, mas acabei de entrar no GitHub dele e encontrei apenas projetos não terminados / com um alto nível de complexidade assim como o meu / pouco documentados. Poxa!
Entrar na fila para criticar é com certeza mais interessante do que estar na fila do fazer/ajudar/compartilhar”.

Este é um post onde exponho as minhas opiniões pessoais, não entenda isto de outra forma. Eu o faço por que em todos os meus longos anos de consultorias e treinamentos eu tratei a todos de forma inclusiva e respeitosa, de outro lado se eu fosse um gestor realizando a contratação de um profissional para esta finalidade eu não aceitaria que as pessoas do meu time fossem expostas a este tipo de rotulação.

Para finalizar…

Acabei escrevendo além do que planejei, mas julgo tudo isto muito importante!

Eu já toquei no assunto neste post: “Quer ser um dos melhores ou vai ficar ai parado?“. Todo mundo tem o seu modelo, a pessoa que você admira e te inspira / influencia. Eu também tenho! E te prometo o seguinte:

  • Nunca irei me colocar como um guru conhecedor da verdade, se você aprendeu algo comigo, ótimo, espero que você faça melhor do que eu fiz inclusive.
  • Nunca irei te julgar como um amador. Se você escreve e entrega software você é desenvolvedor, foque em ser melhor a cada dia, busque identificar suas deficiências e estude para atender melhor os desafios da carreira. Estou aqui para te ajudar inclusive.

Amigo programador:
Desenvolva a melhor característica que um programador pode ter:

Busque sempre o aperfeiçoamento técnico, nunca acredite que algum conhecimento fundamental é dispensável apenas por que você entrega software que funciona.

Ao mesmo tempo busque se policiar para que seus méritos não se tornem motivos de ego e arrogância, pois somos todos eternos aprendizes, cada um ao seu tempo, cada um a sua maneira.

Em tempo, gostaria de deixar mais uma opinião minha sobre o que é ser Programador / Desenvolvedor / Engenheiro / Arquiteto:

PROGRAMADOR, DESENVOLVEDOR, ENGENHEIRO, ARQUITETO – O QUE CADA UM FAZ?

Nosso mercado não segue um padrão para classificar os papeis de programador, desenvolvedor, engenheiro e arquiteto. Aproveito para definir com base na minha experiência de mercado. Não esqueça de dar seu LIKE e inscrever-se no canal. FACEBOOK: https://fb.com/SouDesenvolvedor TWITTER: https://twitter.com/sou_dev INSTAGRAM DO EDUARDO PIRES: https://www.instagram.com/eduardopiresbr

Se você tiver algo a compartilhar utilize os comentários abaixo.
Um abraço!