Claro, você não tem que saber essas coisas para escrever código sob a supervisão de outros. Mas estas pessoas deveriam ser especialistas.
Muitos acreditam que ser especialista em algo significa que você não sabe outras coisas. Eu poderia, por exemplo, chamar minha mãe de especialista em Windows,
porque ela nunca usou o Linux ou Mac OS X. Ou, eu poderia dizer que meus paren-
tes na zona rural do Arkansas são especialistas em música country, porque nunca
ouviram nada diferente.
Imagine que você visite o seu médico da família, reclamando
de um nódulo es-
tranho no seu braço direito. O seu médico indica um especialista para fazer uma
biópsia. E se esse especialista fosse uma pessoa cujas únicas credenciais como especialista eram que ele não compareceu às aulas na escola de medicina ou nunca teve experiência em residências que não eram diretamente ligadas ao procedimento específico que ele vai realizar hoje em você? Eu não quero dizer que eles foram mais fundo nos temas relacionados ao procedimento de hoje. E se ele tivesse apenas visto por cima essas assuntos e não soubesse de mais nada? E se essa máquina ali começar a apitar durante o procedimento?, você pode perguntar. Ah, isso nunca aconteceu antes. Não vai acontecer desta vez. Eu não sei o que a máquina faz, mas ela nunca apita.
Felizmente, a maioria dos desenvolvedores de software não é responsável por si-
tuações de vida ou morte. Se eles fracassarem, isso geralmente vai resultar em atrasos nos projetos ou bugs que simplesmente custarão dinheiro de seus empregadores, não vidas.
Infelizmente, a indústria de software tem movimentado um monte desses espe-
cialistas rasos, que usam o termo especialista como uma desculpa para saber só uma 34
Casa do Código
Capítulo 8. Seja especialista
coisa. Na indústria médica, um especialista é alguém com profundo conhecimento
de alguma área específica. Doutores encaminham os pacientes para especialistas,
porque, em certas circunstâncias, o especialista pode cuidar melhor do paciente do que um clínico geral.
Então, o que um especialista de software deve ser? Eu posso lhe dizer o que eu
estava procurando por toda a parte durante a viagem de recrutamento. Era por pessoas que entendessem profundamente programação Java e ambiente de implantação.
Eu queria pessoas que pudessem dizer estive lá, fiz isso em 80% das situações e cuja profundidade de conhecimento passasse tranquilidade para as outras 20% das situa-
ções. Eu queria alguém que, ao lidar com abstrações de alto nível, entendesse os detalhes da implementação dessas abstrações. Eu queria alguém que pudesse resolver qualquer problema de implantação que encontrássemos ou que ao menos soubesse
a quem pedir ajuda se necessário.
Este é o tipo de especialista que vai sobreviver na indústria de TI. Se você é um especialista em .NET, isso não é uma desculpa para não saber nada, além de .NET.
Isso significa que, se tem a ver com .NET, você é o cara. Servidores IIS travados e precisando de reboot? Não tem problema. Integração de código fonte com o Visual Studio .NET? Eu lhe mostro como. Clientes à beira de um ataque de nervos por
conta de problemas de performance que ninguém sabe o que é? Dê 30 minutos.
Se isso não é o que ser um especialista significa para você, então eu espero que não saia falando que é um.
Faça algo
Você usa uma linguagem de programação que compila e roda numa máquina
virtual? Se assim for, levará algum tempo para aprender sobre os detalhes
de como a VM trabalha. Considerando Java, .NET e Smalltalk, muitos livros
e sites são dedicados ao tema. É mais fácil aprender sobre elas do que você
imagina.
Independente de a sua linguagem se basear em uma VM, leva algum tempo
para estudar o que acontece quando você compila um arquivo fonte. Como é
que o código que você digitou passa de texto legível para as instruções que um
computador pode executar? O que significaria escrever o seu próprio compi-
lador?
Quando você importa ou usa bibliotecas externas, de onde elas vêm? O que
realmente significa importar uma biblioteca externa? Como é que o seu com-
35
Casa do Código
pilador, sistema operacional, ou máquina virtual liga vários pedaços de código
para formar um sistema coerente? Aprender esses pontos fará com que você
fique muitos passos mais próximos de ser um especialista na sua tecnologia
preferida.
Encontre uma oportunidade no trabalho ou fora dele de dar uma aula
sobre algum aspecto de uma tecnologia em que você gostaria de se aprofun-
dar. Como você verá em Seja um mentor, capítulo 14, o ensino é uma das
melhores maneiras de aprender.
36
Capítulo 9
Não coloque todos os seus ovos
num só cesto
Uma vez, enquanto gerenciava um time de desenvolvedores, eu perguntei a um dos
meus funcionários: O que você quer fazer com sua carreira? O que você quer ser?
Fiquei muito decepcionado com sua resposta: Quero ser um arquiteto J2EE Eu
perguntei: Por que não
um designer Microsoft Word ou um instalador RealPlayer?
Ele queria fazer sua carreira em torno de uma tecnologia específica, criada por