Comecei a programar quando estava no ensino médio. Eu fui ensinado Pascal e HTML, entre outras coisas. Mas eu também estava fazendo algumas aulas de programação de verão em um instituto de TI. Foi lá que aprendi o Visual Basic e o design de software e bancos de dados (na época, usamos o MERISE (Méthode d'Etude et de Réalisation Informatique pour les Systèmes d'Entreprise)). Acabei instalando o Visual Basic no meu computador doméstico, para poder praticar sozinho, com livros.
Embora só depois que me formei no ensino médio comecei a aprender e aplicar C # quase em período integral durante os estudos superiores, e foi o que considerei o meu verdadeiro começo em programação e engenharia de software.
Aprendi algumas lições na última década e achei que levaria um momento para reunir meus pensamentos sobre esses assuntos. Levei cerca de dez anos e muita experimentação para assimilar algumas dessas coisas.

 

1. Aprender uma linguagem de programação é a parte mais fácil: cuidado com as plataformas
Toma C# por exemplo. Aprender a linguagem C# não é difícil. Se tu já possuis um bom entendimento dos fundamentos das linguagens de computador e se possuis alguma experiência em outras linguagens orientadas a objetos, poderás se tornar um programador C# competente dentro de alguns dias, pelo menos no que diz respeito à própria linguagem. No entanto, o preço real a pagar pelo aprendizado não é sobre a linguagem, é sobre a plataforma. Para desenvolver com o C# no .NET, tu precisas saber:
- o .NET Framework
- uma ou mais tecnologias .NET, como ASP.NET ou WPF
- e o ambiente de desenvolvimento do Visual Studio.
O tempo necessário para se tornar proficiente no desenvolvimento do .NET geralmente é medido em meses, mesmo para um desenvolvedor experiente. Aprender uma plataforma é sempre mais caro do que aprender uma linguagem específica; portanto, escolher a plataforma é a decisão mais crucial.
O aprendizado sempre tem um custo e esse custo é um dos principais fatores a serem considerados ao escolher a tecnologia que tu desejas aprender. O custo real do aprendizado está no tempo, o aprendizado sempre leva tempo. Como tu não tens tempo para aprender tudo, é importante pensar estrategicamente sobre o que desejas aprender. E como as linguagens são fáceis, é preciso ter cuidado com as plataformas: as tecnologias associadas à linguagem, as ferramentas de desenvolvimento e implantação, os sistemas operacionais e outras infra-estruturas.

 

2. Repito, aprender uma linguagem de programação é a parte mais fácil: conhecer os conceitos fundamentais da engenharia de software
A sintaxe em si, as palavras que tu usas ao aplicar a linguagem são relativamente simples e tu podes buscá-las facilmente à medida que avança. No entanto, isso está longe de ser suficiente para produzir código de qualidade, que geralmente envolve princípios OOP, TDD, BDD e SOLID, testes de unidade, padrões de design, e outros conceitos técnicos que estão além do escopo deste artigo. Então...

 

3. Na verdade, escrever código é apenas uma (pequena) parte do trabalho
É esperado que um engenheiro de software esteja envolvido em pesquisas de tecnologia, configurações de ferramentas e projetos, DevOps e tarefas administrativas, procedimentos de depuração e teste, documentação e dívida técnica (corrigindo e refatorando o código existente). Além disso, ele deve pensar em soluções e projetar sistemas : às vezes, o trabalho mais importante é feito enquanto estamos longe do teclado.

 

4. Receitas comprovadas e eficazes: antigas técnicas chatas às vezes são as melhores
Não é realmente "velho contra novo", ou mesmo "legal versus chato", mas sim a técnica com a qual tu tens mais experiência. Como diz o ditado, não confio no desenvolvedor que praticou 1000 tecnologias uma vez, mas confio no desenvolvedor que praticou a tecnologia relevante 1000 vezes. Se o objetivo é criar algo da maneira mais eficiente e rápida possível, seria mais produtivo usar as tecnologias que tu dominas melhor.
Por exemplo, um dos meus contatos ganha US $ 25.000 por mês com um SaaS que ele criou com uma combinação chata: ASP.NET + SQL Server + Angular 1, porque era isso que ele sabia. Ele o hospeda no Windows, porque ele sabe como tornar o Windows rápido e seguro. Ele teve sucesso porque dedica todo o seu tempo à criação da funcionalidade que seus clientes exigem, em vez de aprender as tecnologias mais populares.
É importante perceber que a esteira tecnológica nunca para. Sempre há coisas novas para aprender. Ainda outra estrutura JavaScript poderia ter sido lançada enquanto tu estiveres lendo isso. A tecnologia de ponta de hoje nem existia quando eu estava começando (EF Code First, Xamarin, ASP.NET Core, Razor), e isso nos leva aos dois próximos pontos.

 

5. Foco em tecnologias sustentáveis
A única constante no mundo é a mudança. O gerenciamento de ações e tempo é uma habilidade importante para os desenvolvedores, principalmente porque estamos em uma esteira rolante tecnológica que continua em movimento ou mesmo acelerando.
Por exemplo, as tecnologias da Web que eram populares por volta do ano 2000 (Flash, ASP Classic e Java Applets) estão se tornando quase obsoletas e cada vez menos comercializáveis. Hoje, estamos falando sobre o ASP.NET Core, SignalR, Angular2, React e VueJS. Nenhuma dessas tecnologias existia no ano de 2000 e é provável que essas novas tecnologias sejam obsoletas dentro de 10 anos.
O que realmente não mudou? Os fundamentos de linguagens como C++ / C#, suas implementações de algoritmos e seus princípios ainda são relevantes após várias décadas. Se tu dominas o básico de um sistema estável, poderás te adaptar melhor às mudanças, poderás apreciá-lo e usá-lo para evoluir.

 

6. Equilíbrio entre descoberta e implementação
A descoberta envolve aprender coisas novas, estudar novas técnicas, ler livros, assistir a tutoriais em vídeo, praticar e aprimorar habilidades. A implementação, no entanto, é aproveitar o que já sabemos para resolver problemas da vida real. Trata-se de pensar criativamente sobre maneiras de usar o conhecimento que já temos para criar valor para os outros.
Então, sim, essas duas tarefas são necessárias e importantes. O risco é ser excessivamente focado em uma dessas atividades.
Com uma descoberta excessiva, tu nunca alcançarás um nível útil de conhecimento na tecnologia escolhida. Há um enorme custo de oportunidade com esse tipo de aprendizado leve, porque, embora ele expanda tua mente, o tempo necessário implica que tu realmente não aprimoras as habilidades que já adquiriste.
Por outro lado, uma implementação excessiva pode impedir que tu evoluas em novas tecnologias e pode limitar tuas oportunidades de emprego.

 

7. É fácil ser excelente... É difícil ser consistente.
É fácil ser ótimo por 2 minutos. É difícil permanecer ótimo constantemente, todos os dias.
Quando tu tens uma boa ideia para um novo projeto, sentes um grande desejo de começar a pesquisar, projetar e programar. Tu sentes uma pressa em transformar tua ideia em algo real e tu te tornas super produtivo. Mas o problema é que essa motivação desaparece com o tempo.
Sim, é divertido e é fácil ter novas idéias e começar a trabalhar nelas. Mas existem os esforços a serem feitos, os ajustes, o lançamento, a manutenção, as correções, as melhorias e assim por diante. Durante vários meses. É aqui que fica difícil. É difícil manter o foco na mesma idéia, no mesmo projeto por meses e anos. É preciso muita disciplina.
É fácil ser excelente. É difícil ser consistente.

 

8. Diversifique tuas habilidades
Não sejas apenas um "programador", torna-te um "especialista que programa", um especialista em outro campo relevante pelo qual tu és apaixonado. Tu podes ser um empreendedor, gerente de projeto, cientista de Big Data, pesquisador, especialista em segurança etc. Se tu és um especialista que programa, além de poder programar (talvez em período integral), também possuis um credibilidade adicional relacionada a algo que não seja a engenharia de software.
Daí a importância de efectuar o ensino superior. Se tu vais para a universidade e já sabes programar, provavelmente não aprenderás muito sobre programação. Isso não significa que tu não deves ir a esse tipo de escola. Tu precisarás de uma certa cultura, e as universidades são ótimos lugares para obtê-la. Tu adquires cultura estudando e compreendendo o mundo que os humanos criaram, de diferentes ângulos. Seria difícil adquirir esse tipo de conhecimento se tu não fizeres nada além de estudar programação.

 

9. Escolha seus nichos para se destacar
Quanto menor o nicho que tu escolhes, maior será tua chance de ser visto como um destaque em teu campo. Por exemplo, é muito difícil para os desenvolvedores se destacarem com um título como "Desenvolvedor PHP". Eles são competentes, versáteis, úteis, mas não notáveis. Eles se sentem facilmente substituíveis porque existem muitas pessoas com um conjunto de habilidades comparáveis. Essa área é muito ampla para tu te destacar facilmente do grupo. Se, por outro lado, tu te tornar conhecido por um nicho, como o Xamarin.Forms ou Visualizações JavaScript, é muito mais provável que sejas valioso para quem procura especificamente esse conjunto de habilidades.

 

10. Era das Habilidades
Informação é o conhecimento específico necessário para resolver problemas. As habilidades representam a capacidade de implementar soluções usando teu conhecimento.
Em um mundo onde a maior parte do conhecimento e das ferramentas é praticamente gratuita, o que faz a diferença? As habilidades, é claro. Não somos mais uma sociedade baseada no conhecimento, somos uma sociedade baseada em habilidades. Houve um tempo em que quase todos os diplomas universitários garantiam um bom emprego. Agora isso não é mais o caso. Ninguém se importa com o que tu sabes. As pessoas se preocupam com o que tu podes fazer. Eles pagam para tu fazer coisas, não para saber coisas.

 

Aprenda a programar em 10 anos
Os pesquisadores mostraram que são necessários cerca de dez anos (ou 10.000 horas) para desenvolver conhecimentos em um campo.
A solução é a prática ponderada: não basta repetir as mesmas coisas repetidamente, mas tu deves desafiar-te com uma tarefa que exceda tua capacidade atual, analisar teu desempenho e corrigir todos os erros. Então repita. E repita novamente. Parece que não há atalhos reais. Aprender através da leitura é bom. Mas sujar as mãos na prática é melhor. O melhor tipo de aprendizado é aprender fazendo.
Pessoalmente, pequenos projetos e protótipos realmente me ajudaram a melhorar. Mas ainda há coisas interessantes para dominar, portanto, vamos continuar aprendendo.