Interesse-se por programar e faça alguns porque é divertido. Certifique-se de que continua sendo divertido o suficiente para que você esteja disposto a dedicar seus dez anos / 10.000 horas.
Programa . O melhor tipo de aprendizado é aprender fazendo. Em outras palavras, "o nível máximo de desempenho para indivíduos em um determinado domínio não é atingido automaticamente em função de uma experiência prolongada, mas o nível de desempenho pode ser aumentado mesmo por indivíduos altamente experientes como resultado de esforços deliberados para melhorar . " (p. 366) e "o aprendizado mais eficaz exige uma tarefa bem definida com um nível de dificuldade apropriado para o indivíduo em particular, feedback informativo e oportunidades para repetição e correção de erros". (p. 20-21) O livro Cognição na prática: mente, matemática e cultura na vida cotidiana é uma referência interessante para esse ponto de vista.
Converse com outros programadores; leia outros programas . Isso é mais importante do que qualquer livro ou curso de treinamento.
Se você quiser, faça quatro anos em uma faculdade (ou mais em uma escola de pós-graduação). Isso lhe dará acesso a alguns trabalhos que exigem credenciais e uma compreensão mais profunda do campo, mas se você não gosta da escola, pode (com alguma dedicação) obter uma experiência semelhante por conta própria ou no trabalho . De qualquer forma, o aprendizado de livros por si só não será suficiente. "A educação em ciência da computação não pode tornar ninguém um programador especialista, assim como estudar pincéis e pigmentos pode tornar alguém um pintor especialista", diz Eric Raymond, autor do The New Hacker's Dictionary. Um dos melhores programadores que eu já havia contratado tinha apenas o ensino médio; ele produziu muitos softwares excelentes, possui seu próprio grupo de notícias e fez o suficiente em opções de ações para comprar sua própria boate.
Trabalhe em projetos com outros programadores . Seja o melhor programador em alguns projetos; ser o pior em alguns outros. Quando você é o melhor, pode testar suas habilidades para liderar um projeto e inspirar outras pessoas com sua visão. Quando você é o pior, aprende o que os mestres fazem e o que eles não gostam de fazer (porque fazem você fazer isso por eles).
Trabalhe em projetos após outros programadores . Entenda um programa escrito por outra pessoa. Veja o que é preciso para entender e corrigi-lo quando os programadores originais não estiverem por perto. Pense em como criar seus programas para facilitar para quem os manterá depois de você.
Aprenda pelo menos meia dúzia de linguagens de programação. Inclua uma linguagem que suporte abstrações de classe (como Java ou C ++), uma que suporte abstração funcional (como Lisp ou ML), uma que suporte abstração sintática (como Lisp), uma que suporte especificações declarativas (como modelos Prolog ou C ++), uma que suporta corotinas (como ícone ou esquema) e uma que suporta paralelismo (como sisal).
Lembre-se de que existe um "computador" em "ciência da computação". Saiba quanto tempo leva para o seu computador executar uma instrução, buscar uma palavra da memória (com e sem falta de cache), ler palavras consecutivas do disco e procurar um novo local no disco. (Respostas aqui.)
Envolva-se em um esforço de padronização de idioma. Pode ser o comitê ANSI C ++ ou pode decidir se o seu estilo de codificação local terá 2 ou 4 níveis de recuo de espaço. De qualquer forma, você aprende sobre o que as outras pessoas gostam em um idioma, quão profundamente elas se sentem assim e talvez até um pouco sobre o porquê delas se sentirem.
Tenha o bom senso de sair do esforço de padronização de idioma o mais rápido possível.