O senhor sabe o que é universalmente considerado não divertido pela maioria dos programadores? Escrever código em linguagem assembly.
Como Steve McConnell disse em 1994:
Os programadores que trabalham com linguagens de alto nível obtêm melhor produtividade e qualidade do que aqueles que trabalham com linguagens de nível inferior. Acredita-se que linguagens como C++, Java, Smalltalk e Visual Basic melhoraram a produtividade, a confiabilidade, a simplicidade e a compreensibilidade por fatores de 5 a 15 em relação às linguagens de baixo nível, como assembly e C. O senhor economiza tempo quando não precisa fazer uma cerimônia de premiação toda vez que uma instrução em C faz o que deve fazer.
Assembly é uma linguagem em que, por motivos de desempenho, cada comando individual é comunicado em detalhes excruciantes de baixo nível diretamente à CPU. À medida que passamos de CPUs rápidas para CPUs mais rápidas, para vários núcleos de CPU absurdamente rápidos no mesmo molde e para “nossa, nós meio que paramos de nos preocupar com o desempenho da CPU há cinco anos”, não houve muita necessidade do tipo de desempenho ajustado manualmente que o senhor obtém com o assembly. Claro, existem os atos heroicos ocasionaise eles são incríveis, mas em termos de Getting Stuff Done, o assembly tem estado bem fora do radar da programação convencional há provavelmente vinte anos, e por um bom motivo.
Então, quem, em sã consciência, se dedicaria à tediosa programação em assembly hoje? Sim, ninguém. Mas espere! E se eu dissesse ao senhor que seu tio Randy acabou de morrer e deixou para trás esse misterioso computador antigo? o TIS-100?
E se eu também dissesse aos senhores que a única maneira de descobrir para que esse computador TIS-100 foi usado – e o que o bom e velho tio Randy estava fazendo – era ler um manual de referência fotocopiado (abençoadamente curto, com 14 páginas) e consertar sua sequência de inicialização corrompida … usando linguagem assembly?
Bem, agora, por Deus, é hora de aprendermos um pouco de assembly e chegarmos ao fundo desse mistério, não é mesmo? Como seu criador notas, este é o jogo de programação em linguagem assembly que o senhor nunca pediu!
Fiquei surpreso ao descobrir que meu cofundador Robin Ward gostou tanto do TIS-100 que não apenas jogou o jogo (presumivelmente até o fim), mas escreveu um emulador de TIS-100 em C. Aparentemente, esse é o tipo de coisa que ele faz por diversão, em seu tempo livre, quando não está trabalhando em tempo integral conosco programando Discurso. Os programadores precisam … programar.
É claro que há uma longa história de jogos de programação. O que torna o TIS-100 único é a forma como ele fetichiza a programação em assembly, enquanto a maioria dos jogos de programação é um pouco mais fácil para o usuário, facilitando-o com conceitos gerais e abstrações mais simples. Mas mesmo os jogos de programação “simples” podem ser bastante difíceis. Considere um dos meus favoritos no Apple II, Rocky’s Bootse sua sequência, Robot Odyssey. Eu adorei esse jogomas, no verdadeiro estilo de programação, era tão difícil que o terminá-lo em qualquer sentido significativo era basicamente impossível:
Deixe-me dizer: Qualquer criança que conclua esse jogo enquanto ainda é criança (conheço apenas um, que também é um dos programadores mais inteligentes que já conheci) tem uma carreira garantida como engenheiro de software. Qualquer adulto que consiga concluir esse jogo deveria se dedicar à engenharia. Robot Odyssey é o jogo “educacional” mais difícil já criado. Ele também é uma realização técnica impressionante e um dos jogos mais inovadores da era do Apple IIe.
Jogos visionários e absurdamente difíceis como esse ganham seguidores cult. É o jogo que mais me lembro da minha infância. É o jogo que mais amo (e desprezo), porque era o mais difícil, o mais complexo, o mais desafiador. O mundo que ele apresentava era como estar exposto às formas de Platão, um reino secreto e não físico de ideias puras e lógica. O desafio do jogo – e era um desafio sério – era entender esse outro mundo. O programador Thomas Foote tinha acabado de começar a faculdade quando pegou o jogo: “Jurei a mim mesmo”, ele me disse, “que, como Deus é minha testemunha, eu terminaria esse jogo antes de terminar a faculdade. Consegui fazer isso, mas por pouco”.
Eu me contentava em brincar com alguns robôs que faziam algumas coisas, ficavam presos e passavam para outros jogos. Fiquei um pouco desanimado com a forma como o jogo tratava a programação como engenharia elétrica; mexer com uma tonelada de portas AND OR e NOT não era a minha praia. Eu já estava começando a trabalhar com BASIC naquela época e senti que era necessário um nível de domínio aqui que eu provavelmente não tinha e não tinha certeza de que eu mesmo queria.
Prefiro uma listagem de código COBOL do que que a qualquer dia da semana. Talvez o Robot Odyssey tenha sido tão difícil porque, no final das contas, era uma simulação de programação de CPU bare metal, como o TIS-100.
Um exemplo mais suave de um jogo de programação moderno é o excelente Tomorrow Corporation’s Máquina de recursos humanos.
Ele tem exatamente o senso de humor irreverente que o senhor espera do estúdio que criou World of Goo e Little Inferno, ambos jogos excelentes e altamente recomendáveis por si só. Se o senhor já quis saber se alguém está realmente interessado em programação, recomende esse jogo para essa pessoa e veja. Ele começa com apenas duas instruções e, aos poucos, vai se ampliando até incluir 11. O trabalho pesado da empresa nunca foi tão… er, divertido?
Estou pensando nisso porque acredito que há uma forte conexão entre programar jogos e ser um engenheiro de software talentoso. É esse senso essencial de jogoA ideia de que o senhor está fazendo experimentos com esse material porque gosta dele, e o adapta à sua vontade pela pura alegria da criação, mais do que qualquer outra coisa. Como eu disse uma vez:
Joel deu a entender que os bons programadores gostam tanto de programar que fariam isso por nenhum pagamento. Não irei tão longe, mas observarei que os melhores programadores que conheci tiveram um paixão duradoura pelo que fazem. É impossível que um pequeno problema econômico os convença de que devem fazer outra coisa. De jeito nenhum. Nem como.
Prefiro sentar um potencial contratado em frente à máquina de Recursos Humanos e cronometrar quanto tempo ele leva para passar por alguns níveis do que que ele resolva o FizzBuzz para mim em um quadro branco. Essa entrevista é para demonstrar competência em uma determinada habilidade técnica que vale uma certa quantia de dinheiro ou para me mostrar como o senhor pode improvisar e se divertir?
É por isso que fiquei tão empolgado quando Patrick, Thomas e Erin fundaram a Starfighter.
Se o senhor quiser saber o grau de competência de um programador, dê a ele uma simulação real de um sistema real para invadir e experimentar, e veja até onde ele chega. Na linguagem de segurança, isso é conhecido como como CTF, conforme popularizado pela Defcon. Mas, até agora, isso raramente foi estendido à programação. Sua primeira simulação é StockFighter.
Os participantes recebem:
- Uma interface interativa de blotter de negociação
- Um conjunto real e funcional de locais com livro de ordens limitadas
- Uma API HTTP JSON cuidadosamente documentada, com um explorador de API
- Uma série de missões de programação.
Os participantes são solicitados a:
- Implementar a negociação programática em relação a uma bolsa real em um mercado densamente negociado.
- Executar estratégias de negociação de compras em bloco.
- Implementar formadores de mercado eletrônicos.
- Realizar um elaborado golpe comercial de HFT.
Este é um seriamente uma estratégia de contratação de nível superior, muito além de qualquer outra coisa que já vi por aí. É tão avançada que, para ser sincero, fiquei com muita inveja ao ler sobre ela, porque Há muito tempo eu acho que o Stack Overflow deveria fazer eventos anuais de jogos de programação exatamente como essecom emblemas especiais que só podem ser obtidos se o usuário completar determinados níveis naquele ano específico. O Stack Overflow é já é uma espécie de jogo, mas as pessoas iriam nozes para um evento anual de programação de jogos. Com certeza louco.
Sei que já falamos sobre o sobre a ideia de contratar os melhores, mas se isso é realmente o que o senhor deseja fazer, os melhores programadores que já conheci se destacaram exatamente na situação que o Starfighter simula – solução de problemas ao vivo e engenharia reversa de um sistema existente, até o ponto de encontrar exploits raros.
Considere a dedicação desse participante que construiu um dispositivo de negociação sem fio completo para o StockFighter. Isso era necessário? Foi prático? Não. É o jogo de programação que nunca pedimos. Mas aqui estamos, independentemente disso.
Um jogo de programação arbitrária, especialmente um que se esforça muito para simular um sistema fictício, é uma expressão maravilhosa da alegria inerente ao jogar e experimentação com código. Se eu pudesse encontrá-los, teria o prazer de contratar uma dúzia de pessoas como essas a qualquer momento e soltá-las em nosso projeto de programação muito real.
[advertisement] No Stack Overflow, colocamos os desenvolvedores em primeiro lugar. Já o ajudamos a encontrar respostas para suas perguntas difíceis sobre programação; agora, deixe-nos ajudá-lo encontre seu próximo emprego. |