Quando eu estava folheando o livro de Steve Yegge volumoso corpo de trabalho recentemente, fiquei impressionado com uma entrada de 2005 sobre praticando programação:
Ao contrário do que o senhor possa pensar, o simples fato de fazer seu trabalho todos os dias não se qualifica como prática real. Ir a reuniões não é praticar suas habilidades com pessoas, e responder a e-mails não é praticar a digitação. O senhor precisa reservar algum tempo de vez em quando e praticar com foco para melhorar em alguma coisa.
Conheço muitos engenheiros excelentes – essa é uma das melhores vantagens de trabalhar na Amazon – e se o senhor os observar com atenção, verá que eles praticam constantemente. Por melhores que sejam, eles ainda praticam. Eles têm todos os tipos de maneiras de fazer isso, e este ensaio abordará algumas delas.
Os grandes engenheiros que conheço são tão bons quanto são porque praticam o tempo todo. As pessoas que estão em ótima forma física só ficam assim se fizerem exercícios regularmente, e precisam continuar assim, ou ficarão fora de forma. O mesmo se aplica à programação e à engenharia.
Essa é uma distinção importante. Posso ir de carro para o trabalho todos os dias, mas estou longe de ser um motorista profissional. Da mesma forma, programar todos os dias pode não ser suficiente para torná-lo um programador profissional. Então, o que pode transformar alguém em um piloto ou programador profissional? O que o senhor faz para praticar?
A resposta está no artigo da Scientific American A mente do especialista:
A Ericsson argumenta que o que importa não é a experiência em si, mas o “estudo esforçado”, que implica enfrentar continuamente desafios que estão além da competência da pessoa. É por isso que é possível que entusiastas passem dezenas de milhares de horas jogando xadrez, golfe ou um instrumento musical sem nunca avançar além do nível amador e que um aluno devidamente treinado possa ultrapassá-los em um tempo relativamente curto. É interessante observar que o tempo gasto jogando xadrez, mesmo em torneios, parece contribuir menos do que esse estudo para o progresso do jogador; o principal valor de treinamento desses jogos é apontar os pontos fracos para estudo futuro.
Estudo com esforço significa lidar constantemente com problemas no limite de sua capacidade. Coisas em que o senhor pode ter uma grande probabilidade de fracassar. A menos que o senhor seja falhe em parte do tempo, o senhor provavelmente não está crescendo profissionalmente. O senhor precisa buscar esses desafios e ir além do seu limite de conforto.
Esses desafios às vezes podem ser encontrados no trabalho, mas não precisam ser assim. Separando o praticando do profissão é frequentemente referida como código kata.
O conceito de kata, uma série de movimentos de prática coreografados, é emprestado das artes marciais.
Se o senhor estiver procurando por alguns exemplos de kata de código – maneiras de praticar o estudo com esforço e aprimorar suas habilidades de programação -, o Artigo de Steve tem alguns pontos de partida excelentes. Ele os chama de exercícios de prática:
- Escreva seu currículo. Liste todas as suas habilidades relevantes e, em seguida, anote aquelas que ainda serão necessárias daqui a 100 anos. Dê a si mesmo uma nota de 1 a 10 em cada habilidade.
- Faça uma lista de programadores que o senhor admira. Tente incluir alguns com os quais trabalhe, já que os pegará emprestados para alguns exercícios. Faça uma ou duas anotações sobre coisas que eles parecem fazer bem – coisas em que o senhor gostaria de ser melhor.
- Acesse o site da Wikipedia entrada para ciência da computação, role para baixo até a seção “Prominent pioneers in computer science” (Pioneiros proeminentes da ciência da computação), escolha uma pessoa da lista e leia sobre ela. Siga os links que o senhor achar interessantes.
- Leia o código de outra pessoa por 20 minutos. Para esse exercício, alterne entre ler código excelente e código ruim; ambos são instrutivos. Se não tiver certeza da diferença, peça a um programador que você respeita que lhe mostre exemplos de cada um. Mostre o código que você leu para outra pessoa e veja o que ela acha dele.
- Faça uma lista de suas 10 ferramentas de programação favoritas: aquelas que você acha que usa mais, aquelas sem as quais quase não conseguiria viver. Passe uma hora lendo a documentação de uma das ferramentas de sua lista, escolhida aleatoriamente. Nessa hora, tente aprender algum recurso novo da ferramenta que o senhor não conhecia ou descubra uma nova maneira de usar a ferramenta.
- Escolha algo em que o senhor seja bom e que não tenha nada a ver com programação. Pense em como os profissionais ou grandes mestres dessa disciplina fazem suas práticas. O que o senhor pode aprender com eles que pode ser aplicado à programação?
- Reúna uma pilha de currículos e um grupo de avaliadores em uma sala por uma hora. Certifique-se de que cada currículo seja analisado por pelo menos três avaliadores, que escrevem suas iniciais e uma pontuação (1-3). Discuta os currículos que tiveram uma grande discrepância na pontuação.
- Ouça uma tela técnica do telefone. Depois, escreva seu feedback, dê seu voto e converse sobre a tela com o avaliador para ver se os dois chegaram às mesmas conclusões.
- Conduza uma entrevista técnica com um candidato que seja especialista em algum campo sobre o qual o senhor não tem muito conhecimento. Peça a ele que lhe explique tudo desde o início, sem pressupor nenhum conhecimento prévio dessa área. Esforce-se para acompanhar o que ele está dizendo e faça perguntas quando necessário.
- Convide o senhor mesmo para a entrevista técnica de outra pessoa. Ouça e aprenda. Tente resolver as perguntas da entrevista em sua cabeça enquanto o candidato trabalha nelas.
- Encontre um colega para trocar perguntas práticas. Façam perguntas de programação um ao outro, alternando as semanas. O senhor passa 10 ou 15 minutos trabalhando no problema e 10 ou 15 minutos discutindo-o (concluído ou não).
- Quando ouvir alguma pergunta de codificação de entrevista que não tenha sido resolvida por você mesmo, volte para a sua mesa e envie a pergunta para si mesmo como um lembrete. Resolva-a em algum momento da semana, usando sua linguagem de programação favorita.
O que eu gosto na lista do Steve é que ela é um tanto holística. Quando alguns desenvolvedores pensam em “prática”, não conseguem ir além dos quebra-cabeças de código. Mas, para mim, programar é mais sobre pessoas do que sobre códigoPortanto, há um limite para o quanto o senhor pode crescer resolvendo todos os problemas obscuros de programação em entrevistas de codificação do planeta.
Também gosto das recomendações gerais de Peter Norvig para o estudo com esforço, descritas em Ensine-se a programar em dez anos.
- Converse com outros programadores. Leia outros programas. Isso é mais importante do que qualquer livro ou curso de treinamento.
- Programa! O melhor tipo de aprendizado é aprender fazendo.
- Faça aulas de programação em nível universitário ou de pós-graduação.
- Procure e trabalhe em projetos com equipes de programadores. Descubra o que significa ser o melhor programador em um projeto. e o pior.
- Trabalhar em projetos após outros programadores. Aprenda a manter o código que o senhor não escreveu. Aprenda a escrever código para que outras pessoas possam mantê-lo com eficiência.
- Aprenda diferentes linguagens de programação. Escolha linguagens que tenham visões de mundo e modelos de programação alternativos, diferentes daqueles com os quais o senhor está acostumado.
- Entenda como o hardware afeta o que o senhor faz. Saiba quanto tempo o computador leva para executar uma instrução, buscar uma palavra na memória (com e sem falha de cache), transferir dados pela ethernet (ou pela Internet), ler palavras consecutivas do disco e buscar um novo local no disco.
O senhor também pode obter mais inspiração em Pragmatic Dave’s 21 Code Katasou talvez o senhor queira participar de um Coding Dojo em sua região.
Não tenho uma longa lista de conselhos para estudar com afinco, como fazem Steve, Peter e Dave. Sou impaciente demais para isso. Na verdade, há apenas dois movimentos em meu livro de kata de código:
- Escrever um blog. Comecei este blog no início de 2004 como uma forma de estudo esforçado. Desde esse humilde começo, ele se tornou a coisa mais importante que já fiz em minha vida profissional. Assim o senhor deveria escrever blogstambém. As pessoas que conseguem escrever e se comunicar com eficiência são, com muita frequência, as únicas que são ouvidas. São elas que estabelecem os termos do debate.
- Participe ativamente de um ou três projetos de código aberto notáveis. Toda essa conversa chique de blá blá blá é ótima, mas será que o senhor está um falador ou um executor? Isso é extremamente importante, porque o senhor será julgado por suas ações, não por suas palavras. Tente deixar um rastro de coisas públicas, concretas e úteis que o senhor possa apontar e dizer: Eu ajudei a construir isso.
Quando o senhor pode escrever um código brilhante e explicando esse código para o mundo – bem, eu acho que isso é o kata de código definitivo.