Melhor resposta
A verdadeira resposta é “Depende!”. Depende de qual segmento lhe interessa mais – front-end, full-stack, back-end, ciência de dados, etc. A base para todos eles pode ser resumida como abaixo:
- Escolha seu favorito linguagem de programação. E aprenda todos os conceitos dessa linguagem praticando como usá-la em algum problema de código. Isso estabelecerá uma boa base para o aprendizado de outra linguagem de programação, mesmo que o paradigma seja completamente diferente. Para apreciar A, você deve gostar de B, porque em certo sentido tudo é relativo. Você começaria a comparar idiomas com base em como isso resolve alguns problemas.
- Faça Code Katas. Tente resolver o mesmo problema de maneiras diferentes. Pense nas diferentes abordagens que você tentou. Faça isso para todos os outros kata de código que você fizer. Ajuda!
- Faça um miniprojeto resolvendo algum problema. Reveja-o depois de algum tempo e veja se você pode adicionar recursos. Você provavelmente deveria estar abusando de si mesmo pelo mau trabalho que fez. Esta é uma boa percepção. Pense sobre seus erros, pense sobre qual foi a melhor maneira que você tomou. Aprenda com seus erros. Isso é a experiência real. A experiência não está em número, mas sim no que você aprende enquanto trabalha com as coisas.
- Escolha algum miniprojeto ou código de biblioteca do Github e leia o código para ver como algum problema é resolvido. Ler e pensar por meio de códigos de outras pessoas ajuda.
- Leia livros, blogs, etc.
- Comece a escrever suas idéias em blogs. Com certeza ajuda no seu aprendizado.
- Participe de encontros e conferências, para saber o que está acontecendo ao seu redor. Isso pode induzir seu aprendizado. Afinal, todos nós precisamos de uma dose de motivação e um senso de propósito induzidos de vez em quando.
- Tente compartilhar seus aprendizados em encontros e conferências. Faz mágica em você – sério.
Dica especial: eu mencionei, ao longo do caminho, você provavelmente encontrará muitos curingas que minariam sua energia e seu tempo, desencorajando-o de o que você faz. Aprender a diferenciar críticos de piadistas é uma grande salva de vidas.
Isso é o que eu fiz desde o início da minha carreira e continuo fazendo tudo até hoje.
Resposta
Depende do que você entende por engenheiro de software. O melhor recurso para engenharia de software que encontrei é a experiência. Tenha paciência comigo um momento. A maioria das respostas aqui parece ser sobre programação e, de fato, existem muitos recursos excelentes sobre programação (com muitos bons exemplos nas respostas aqui). Sempre achei que o problema se dividia em três categorias:
- Programação. Escolha uma linguagem razoável para os tipos de problemas que você gostaria de enfrentar hoje. Aprenda bem. Muita prática. Muita leitura do código de outros especialistas respeitados. Escreva um pouco mais. Adicione uma linguagem conforme necessário ou conforme o interesse.
- Algoritmos, estruturas de dados, linguagens comparativas e o corpo de conhecimento geralmente conhecido como ciência da computação. Isso é o que levanta o jogo desde a resolução de problemas pequenos até a resolução de grandes problemas, resolvendo-os de forma eficaz (não apenas eficiente) e compreendendo os limites das soluções para que você possa explicá-los.
- “Engenharia de software ”É uma coisa diferente para mim do que as duas ideias acima. É o processo pelo qual o software é entregue aos “clientes”. É uma entrega confiável e consistente e repetível da solução. É entender que uma GUI é boa para construir soluções iniciais de prova de conceito / protótipo em seu desktop, mas insuficiente para entregar em “produção”. É a compreensão do pipeline de entrega em cada etapa e por que cada etapa é realizada. É tudo automação e disciplina. Sem disciplina, o software não escala. Ainda estou para ver um curso sobre isso, porque na maior parte é o treinamento no trabalho. E muitos lugares erram. Erros custam caro.
Talvez a melhor metáfora que posso lhe dar seja cozinhar. Você pode aprender a cozinhar para si mesmo muito rapidamente. Você pode ficar bom em um punhado de receitas e a prática o torna mais rápido. Prepare-se para cozinhar uma refeição sofisticada para amigos e família e você sairá um pouco da sua zona de conforto, talvez precisando de novas habilidades, novas ferramentas, novas receitas. Faça uma aula ou duas e você pode melhorar drasticamente o seu jogo, e as aulas abrangem tudo, desde aulas noturnas na faculdade local até Le Cordon Bleu. Depois, há a etapa de “restaurante” que muda tudo. Agora é sobre a entrega confiável e repetível de alimentos para pessoas com expectativas. Você fornece, agrupa, pré-prepara, prepara e utiliza ferramentas de maneira diferente. A “industrialização” do processo é “engenharia”. E agora você faz parte de uma equipe. E há um cliente. Não importa se você é uma barraca de tacos ou um restaurante com estrela Michelin, é diferente. Nenhuma quantidade de trabalho em sala de aula prepara você totalmente para todo o aprendizado no trabalho.
E você pode começar a aprender todos os três de uma vez. Apenas entenda em qual dos três conjuntos de habilidades você está trabalhando e não se esqueça dos outros dois conjuntos de habilidades. Os dois primeiros tendem a vir com a prática, mas o último vem com a experiência.