[Dúvida] Como avaliar meu nivel de programação

Hello, world!

Então, tenho estudado e trabalhado (sozinho) com programação por 1 ano, e, sinceramente, tem sido uma das melhores experiências da minha vida!

Apenas a historia, pode pular se quiser

Bem, comecei a programar por um necessidade na empresa dos meus pais. Eu era responsável pelo Marketing e Design da marca, e tínhamos um site (horrível) feito por um montador de sites do Google. Era apenas uma Landing Page para a apresentação do produto, e era feio (dói só de lembrar).

Começo de tudo

Um dia, percebi: esse site está horrível, não porque eu fiz mal, mas sim porque a ferramenta (Google Sites) é horrível! Fiquei indignado, mas não queria gastar dinheiro com montadores de sites do mercado.

Solução: Já sei, vou montar meu site com programação. Não deve ser tão difícil, basta assistir alguns vídeos no YouTube e pronto! (Também estava motivado com um anime de programação que vi.)

Claro que não foi fácil assim (demorei 1 mês para fazer uma navbar, e 3 para finalizar o projeto). Foi estressante, MAS tudo deu certo! Usei apenas HTML e CSS (eu tinha medo de JS), ele ficou completamente responsivo, e a dopamina gerada ao colocá-lo no ar com um domínio FOI SENSACIONAL!! E o melhor de tudo, ficou do jeitinho que eu queria.

2º nessecidade

Depois de uns 2 meses com o site no ar, meu pai chegou e disse: Você consegue fazer um sistema para controle de vendas? Com login, cadastro de clientes e gerenciamento de vendas?

Na minha cabeça, pensei: MANO?? ACHA QUE SOU O STEVE JOBS????

Parecia uma tarefa impossível para alguém que só sabia o básico de HTML e CSS. Não tinha ideia de como dar o primeiro passo, mas foi nesse momento que me tornei um programador e respondi: Não sei, mas vou tentar!

Bom, daí pra frente foi só código e estresse, mas no fim consegui desenvolver o sistema, adquirindo conhecimentos em:

  • HTML
  • CSS
  • JS + jQuery
  • Bootstrap (facilitou muito minha vida)
  • PHP (sem Laravel)
  • MySQL
  • GitHub para controle de código (usava apenas para hospedagem)
  • Hospedagem de banco de dados e sites PHP

Por fim

Meus 2 grandes projetos estão rodando até hoje, e tenho orgulho de mim mesmo por ter conseguido fazer tudo isso tendo apenas 15 anos.

EI!! Você mesmo que pulou a historia, aqui a parte importante

Basicamente, estudo e trabalho com programação sozinho, meu único curso foi o CS50 (ainda não terminei), e não sei se sou JÚNIOR ou algo mais. Digo isso porque sempre vejo as pessoas tratando o nível de experiência como JÚNIOR, PLENO e SÊNIOR (os que conheço).

Como posso avaliar meu nivel na programação? É tipo inglês onde você faz um teste e ele te dá um nivel como A2 e B1, ou você mesmo determina com base na sua experiencia??

Muito obrigado por ler até aqui! Desculpe pelo texto longo (acho que me empolguei). Tenha um ótimo fim de semana!!

Bacana demais! Parabéns pelas suas iniciativas, e mais ainda pelas "finalizativas"! Muita gente começa muita coisa mas não termina. Finalizar 1 projeto vale mais do que ter começado 100 projetos e não ter terminado nenhum! Ter colocado no ar dois projetos já te deixa muito à frente de muita gente!

Sobre sua pergunta, é muito difícil responder como definimos o nível de um dev.

Alguns pontos a se considerar:

  1. Trabalhar sozinho é diferente de trabalhar em equipe. Não é só saber fazer. Tem gente que diz pra ser considerado um Sênior, você tem que saber ensinar.

  2. Relacionado ao 1, temos que lembrar que outras pessoas trabalharão com nosso código. Por isso existem as métricas de qualidade de código. Fazer o site funcionar é uma coisa. Fazer outras pessoas conseguirem entender nosso código, continuar de onde paramos, e adicionarem mais coisas, é outra. Tem muita gente que acha que tem um código limpo, mas na verdade é um espaguete que só ela entende. A pessoa usa abstração? SOLID? Design Patterns? Existe duplicação de código? Quantos code smells? Qual a quantidade de "What The Fuck"s por minuto que outras pessoas soltam ao ler o código daquela pessoa? Se forem poucos WTFs, indica um nível maior de senioridade. Aqui, até a qualidade dos seus commits conta! São vários commits pequenos? Commits resolvem o problema de forma direta? As mensagens dos commits são adequadas?

  3. Existe a qualidade de código mencionada no 2, e também a qualidade de arquitetura e engenharia do sistema. DDD, DevOps, AppSec, mensageria, protocolos adequados, modelagem de BD, arquitetura de microsserviços, desacoplamento, automações, testes unitários, testes de integração... Muitas dessas coisas nem a faculdade ensina e se pega com o tempo, e principalmente com contato com outras pessoas mais experientes.

  4. Além de saber "desenvolver aplicações", tem gente que diz que também temos que ter as manhas em algoritmos e estruturas de dados. Podemos resolver um mesmo problema de várias formas diferentes, mas será que estamos fazendo da melhor forma? Por exemplo, estamos usando hashmaps quando adequado, para diminuir a complexidade computacional e a complexidade cognitiva do leitor? Estamos paralelizando chamadas assíncronas para otimizar o tempo de carregamento das páginas? E se precisar resolver um problema menos comum que um CRUD, seríamos capazes?

  5. Resumindo os pontos 2, 3 e 4: tem gente que diz que o junior adiciona poucas linhas de código, enquanto o pleno adiciona muito mais linhas que o Junior, no mesmo tempo. E o sênior... retira linhas de código! Seguindo essa ideia de otimizações, adequações, etc.

  6. Também há pessoas que dizem que um sênior é capaz de fazer uma aplicação inteira, sozinho, partindo do zero. Ele tem conhecimento de todas as etapas e áreas relacionadas ao desenvolvimento. Desde a criação do CI/CD na plataforma de DevOps, até o deploy da aplicação na Google Play (se for um app mobile, por exemplo).

  7. Além da parte técnica, ainda há todas as outras partes relacionadas a desenvolvimento de projetos como um todo: gerenciamento de tempo (previsão assertiva de entrega); priorização de tarefas; divisão de um problema maior em subtarefas; comunicação com clientes, stakeholders e pessoas de outras áreas (designers, jurídico, etc.)... Enfim, tudo que ajuda a fazer um sistema valioso e robusto, mas que não é diretamente relacionado à parte técnica. Isso também afeta a senioridade dos desenvolvedores. Nas descrições das vagas, você encontrará requsitos do tipo "experiência com metodologias ágeis", por exemplo.

Bom, essas são algumas das coisas que eu lembrei que definem a senioridade de alguém na nossa área.

Então não é tão simples quanto "tenho 5 anos de experiência" ou "já coloquei 20 projetos no ar" ou "Consegui resolver todos os problemas do LeetCode" ou "Eu criei o Facebook no primeiro ano da faculdade". Não existe uma fórmula mágica que define a qualidade/senioridade holística de um desenvolvedor... Apesar de que essa seria uma ótima tese de doutorado!

Pensando assim, só nos resta seguir em frente e continuarmos estudando, e evoluindo, independente de qual nível estamos. Seja focando em nos especializar naquilo que já sabemos, seja aprendendo coisas novas que não tivemos contato ainda. Siga em frente com suas empreitadas! Boa sorte!

Bacana toda sua história, me vejo em situação semelhante, comecei a programar em 1991, foi o único curso de fato que fiz, na época ainda o visual basic, todo o restaurante foi aprendendo na prática ou em livros, ou ainda vídeos.

Trabalhei muito pouco dentro de cempresas como programador, praticamente fui sempre freelancer ou empreendedor, como empreendedor, cheguei a liderar uma equipe de 30 pessoas entre suporte e programação, mais nunca tive a tal da carteira assinada como programador.

Cheguei a iniciar a faculdade de Engenharia de Software em 2022, mais larguei mão este ano, por ver que nada do estavam ensinado era de fato o que o mercado usa no dia a dia, ao menos não o que eu vivenciei neste anos, muita teoria e pouca prática, no fim a empresanwue contrata seus serviços quer ver a coisa funcionando e não um livro escrito. Não estou dizendo que faculdade ou estudo não seja importante, só que no dia a dia o que vai de fato funcionar é se vice consegue resolver o problema da pessoa que te contratou e nisto via que até onde fui na faculdade, não estava resolvendo em nada.

Enfim, tenho o mesmo dilema que você, por toda minha jornada eu me considero um senior, mais isto sou eu, tendo em vista que tudo que peguei para fazer até hoje, sempre consegui finalizar, desde sites simples, até sistemas mais complexos, sendo o inglês uma grande falha minha, no mais não sei como o mercado poderia me avaliar, uma pergunta muito interessante.

Por coincidência essa semana eu estava justamente assistindo uns vídeos sobre isso.

Tem vários no Youtube mas esse, do Lucas Montano, me pareceu bem apropriado para entender o escopo do tal júnior. Num outro vídeo dele também, ele analisa o dev pleno.

Acho que isso pode sanar tuas dúvidas, principalmente vindo de profissional como ele.

Por isso nem vou me arriscar a dizer nada porque eu estou voltando a estudar agora, depois de tanto tempo afastado, voltando ao básico do básico.