Amadores e Profissionais

De todos os feeds RSS que eu tenho assinado em meu leitor, o dZone é um dos que têm mais informação inútil pra mim. Porém, como é um feed voltado para programadores e analistas de sistemas, volta e meia surge uma agulha no meio do palheiro.

O artigo Coders and Professional Programmers, de David Betz é um exemplo. Achei ele tão bom que, com a autorização do autor, fiz a tradução para o português e publico aqui para vocês. Ao final, compartilho minha opinião.

***


Tenho que admitir que há uma enorme falta de competência no mundo da tecnologia, até mesmo entre programadores experientes. Talvez eu tenha padrões altos demais, mas quando eu vejo alguém lidando com uma tecnologia, eu espero que essa pessoa tenha as competências necessárias para o trabalho. Sempre fico abismado quando eu vejo um desenvolvedor, até mesmo um experiente, que não sabe o básico do seu próprio sistema (por exemplo, um desenvolvedor de ASP.NET que não entenda de posicionamento via CSS ou um desenvolvedor .NET que não entende o funcionamento básico do framework). Estas pessoas podem até ter diplomas e anos de experiência, mas não têm competência.

Semana passada eu estava em uma livraria vendo uns livros de padrões de projeto quando um sujeito com cara de engenheiro da NASA dos anos 60, vestido de terno e gravata, parou perto de mim, vestido de jeans e camiseta, e começou a olhar o mesmo tipo de livros. Eu reparei que ele pegou um livro bem vagabundo, então me intrometi e mostrei a ele o livro da Gangue dos Quatro dizendo "este aqui é o melhor, um clássico". Ele agradeceu e deu uma folheada. Um minuto depois eu não resisti e perguntei o que exatamente ele estava procurando ali. Ele disse que procurava um livro que desse um exemplo de máquina de estados. Peguei outro livro, folheei e entreguei a ele mostrando a página com o que ele queria. Sua resposta foi "uau, valeu... diz aí, onde você estudou?". Já me perguntaram muita coisa em livrarias, mas esta foi a primeira vez em que esta foi a primeira pergunta. Sua pergunta não parecia pura curiosidade, havia um quê de arrogância ali. Parecia que ele queria comparar sua formação com a minha. Eu respondi: "Escola? Bem, você está olhando para ela.", enquanto apontava para a estante de livros de informática. Na mesma hora ele cortou a conversa e se afastou. Não sei se ele pensou que eu fosse um leproso ou se eu tinha destruído sua noção de educação acadêmica, mas saquei na hora que a conversa tinha ido por água abaixo.

Entretanto, pouco depois encontrei o livro que eu estava procurando e falei "aha! Isso vai dá-los o que pensar.". O mesmo cara perguntou, curioso, o que eu queria dizer com isso. Expliquei que estava procurando um livro para recomendar a alguns programadores para ajudá-los a entender o que era arquitetura de software. Ele fez cara de quem sabia do que eu estava falando e disse algo que nunca tinha me ocorrido: "Sim... eu entendo como é isso. Tem gente que não vê a diferença entre amadores e profissionais.". Naquela hora eu me vi seis anos antes, quando eu ainda era um amador.

O ano era 2001 e eu era programador de PHP, rato de Linux e estudante de matemática na Universidade do Kansas. Pra mim, programar significava olhar os manuais do PHP, ler os comentários e então copiar e colar código até que o programa estivesse pronto. Eu acreditava saber o que estava fazendo, pois estava no ramo havia cinco anos, e terminava misturando PHP, HTML, JavaScript e CSS na mesma página, formando uma montanha de bagunça que funcionava.

Um amigo meu, que na época trabalhava na Microsoft, olhou para o que eu estava fazendo e foi curto e grosso: "cara, isso não é programar, é digitar código. Você nem mesmo tem uma camada de acesso a dados, tem?" Sem a mínima idéia do que ele estava falando, eu disse: "Sim, tenho! O PHP tem uma classe que faz a conexão com o mySQL. Eu não estou acessando o mySQL diretamente, estou usando a API do PHP." Lembrando disso agora, acho que ele teve vontade de me socar a cara por um comentário tão burro. Verdade seja dita, eu não era um programador profissional mesmo depois de cinco anos trabalhando com JavaScript como um louco, dois anos de desenvolvimento em Ajax, dois de ASP, dois de SQL e um de PHP. Eu era apenas um amador.

Depois daquele dia, passei muito tempo com os livros aprendendo mais sobre tecnologia. Passava horas estudando sobre programação de jogos, programação gráfica, C/C++, história da computação, teoria de redes e desenvolvimento para internet. Ou então novas tecnologias, como XHTML/CSS. Depois que me formei na faculdade, trabalhei como programador em PHP. Depois de um tempo decidi mudar para .NET. Neste ponto passei muito tempo estudando seus conceitos, o framework, ASP.NET e C#. Em pouco tempo fiz as provas e me certifiquei em ASP.NET e design de banco de dados. Foi a hora, então, de estudar componentes .NET e administração de banco de dados.

Naquela época, eu vi que a Fundação Mozilla tinha finalmente lançado um programa que prestasse. Este programa não só prestava, mas era até então um dos produtos mais revolucionários desde o surgimento da própria internet: era o Firefox 1. Com isso passei a estudar padrões web com muito mais profundidade.

Nesta mesma época eu cheguei à conclusão de queria ser um programador profissional e não mais um mero amador. Dei então adeus ao Visual Studio e voltei para o EditPlus, usando-o para fazer todo o meu trabalho de .NET. Eu não queria mais confiar que o corretor automático fizesse o meu trabalho e já conhecia o perigo de aprender uma linguagem de programação pelas mensagens de erro. Durante todo o ano seguinte, fiz todo o meu trabalho de programação sem aquelas firulas de textos coloridos ou corretor automático.

Se eu tivesse que fazer algo, veja só, eu tinha que realmente ler o manual. Não havia nada para copiar e colar e eu não corria para os fóruns a cada dificuldadezinha que surgia. Se eu tinha um problema, eu antes analisava e resolvia o dito cujo do jeito certo e não fazendo uma gambiarra em cima da outra.

Claro que com isso eu perdi muito tempo. Sim, no início isso era um problema sério, mas eu estava determinado a ser um programador profissional a qualquer custo, e nunca mais ser um amador. Eu queria que programar fosse tão natural quando dirigir um carro. Depois da lentidão inicial, eu passei a programar mais rápido do que qualquer outra pessoa, pois já tinha memorizado a maior parte do manual. Enquanto os outros suavam para usar a combinação de SqlConnection, SqlCommand, SqlDataAdapter e DataSet, eu digitava tudo como se estivesse escrevendo uma carta.

Ao mesmo tempo, passei a estudar testes de unidade, design orientado a objetos (não confunda isso com programação orientada a objetos), arquitetura em camadas, JavaScript moderno, e um depois passei um tempo estudando mecanismos de comunicação, até o ponto de tornar tudo natural para mim. Em 2005 finalmente pude dizer que era um programador profissional.

Como você pode ver pela minha história, eu sei como é ser um amador e sei como é grande a tentação de se manter assim. Você acha que o "seu" jeito funciona e que as coisas devem permanecer assim. Na verdade, você odeia as outras tecnologias porque elas não são do "seu" jeito. Entendo este pensamento, mas na verdade isso é só preconceito com a outra tecnologia.

Meu primeiro programa em ASP.NET (um álbum de fotos) foi feito basicamente com comandos Response.Write. Eu não fazia idéia do que estava fazendo, pois a ficha sobre o poder do ASP.NET ainda não tinha caído. Se eu fosse fazer o mesmo programa hoje, ele seria muito mais elegante.

Eu também sei o que significa dizer "mas é assim que eu faço isso nesta linguagem", mas esta é uma frase vazia de significado. Cada tecnologia tem seus próprios paradigmas, esquemas de nomeação, regras e conceitos. Ser fera em Java não significa que você vai conseguir fazer algo parecido em .NET em menos de seis meses. A regra é a mesma para programadores de VB que vão para o PHP.

Também sei o que é dar de cara com um problema e se perguntar "como posso resolver isso?", que é uma pergunta típica de um amador. Um programador profissional se pergunta "como isso foi feito antes com essa linguagem, como resolveram isso no passado?". Caso você não saiba, a maioria das linguagens de programação já tem anos e anos de vida, e pode estar perdendo seu tempo tentando reinventar a roda, quando o problema já foi resolvido antes, quando as discussões já aconteceram, quando muitas pessoas já devem ter aprendido a resolver o mesmo problema. Você tem que aceitar que outros já fizeram o mesmo trabalho antes.

Então, se você está numa situação em que as coisas são geralmente feitas do "seu" jeito, ou que "sempre foram feitas deste jeito", ou se você vive se perguntando "como eu vou resolver este problema?", talvez você precise dar uma parada para ver se está na hora de deixar de ser um amador para ser um programador profissional. É um ótimo investimento, e com a quantidade de bons livros que há por aí, o processo pode até não demorar muito. Há um velho ditado do mundo da informática que diz: "qualquer um pode escrever código que um compilador entenda, mas é preciso ser profissional para escrever código que um humano entenda". Talvez seja a hora de pensar no assunto e pendurar este pensamento na parede da sala.

***


Quanta verdade há neste texto, não é? A melhor das idéias que encontrei nele foi a de aprender uma linguagem de programação pelas mensagens de erro. Quantas vezes eu já fiz isso: tentar uma coisa, dar erro, tentar várias vezes arranjar um jeito de contornar o erro, conseguir, dar outro erro, arranjar outra gambiarra, e por aí ia, até que aquele ninho de gato funcionasse. É por isso que sempre compro livros técnicos e gasto uma boa parte do meu tempo lendo e relendo todos eles.

Mas o pior é que os amadores não são um problema apenas para si mesmos: eles são um problema sério contra a classe. Volta e meia aparecem programadores amadores, bem vagabundos, que amontoam um monte de código, chamam aquilo de programa de qualidade e saem prestando um serviço porco ao mercado. Daí que o mercado acha que aqueles programas são o que há de bom e acham o preço que você cobra é abusivo, só porque inclui todo o seu tempo de estudo e dedicação ao ofício e à arte de programar.

Uma coisa que eu acho que faltou no texto é ressaltar a diferença entre amador e iniciante. Estes são dois conceitos bem diferentes. Iniciantes são aqueles que não têm conhecimento necessário para fazer um programa, mas estão estudando o assunto com afinco e dedicação, dispostos a se tornar profissionais, enquanto que amadores são aqueles que acham que já são os profissionais mais qualificados, quando na verdade estão na base da cadeia alimentar.

Eu já fui iniciante e também já fui amador. Até hoje me surpreendo quando vejo que uma loja daqui de Cachoeiras de Macacu ainda usa o programa de folha de pagamento que fiz para eles em 2001. Saí de lá em 2002, hoje eu e dono somos camaradas, e quando digo a ele que aquele programa é uma porcaria ele se acaba de tanto rir. Na época que fiz aquele programa eu era apenas um amador.

Já há alguns anos decidi deixar de ser um amador para ser um profissional. Ainda não cheguei lá, mas este artigo me deu ainda mais convicção de que estou no caminho certo.

E você, o que é? E o que você quer ser?

***


Veja outros artigos que já escrevi sobre análise de sistemas e afins

***


Gosta do que eu escrevo e quer retribuir? Vá ao Submarino entrando aqui pelo Sarcófago e compre alguma coisa que eu ganho uma comissão. A casa agradece.

6 comentários:

Diego Carrion disse...

Muito bom o artigo e muito boa a tradução também.

Mário Marinato disse...

Obrigado pelos elogios, Diego. Fique ligado que vêm outros por aí.

Tiago Frossard disse...

Mto bom, hein Mário. O engraçado é que até hoje confundem programistas com programadores. Quantas são as vezes que a gente ouve "mas o amigo do meu sobrinho faz por 200...".

Fica difícil competir assim.

Mário Marinato disse...

Valeu, Frossard.

O triste é que parece que esta situação vai permanecer assim por um longo tempo, se não piorar. É muito difícil ensinar às pessoas o que é qualidade, quando todos se contentam com pouco e nivelam a qualidade por baixo.

Alex Starr disse...

Parabéns pelo artigo.
Realmente, muitos se julgam "profissionais" na área, mas são poucos os que têm qualificação para tal.
E admitir que se é um amador é o primeiro passo para uma evolução (ou mudança de ramo de atividade).

Mário Marinato disse...

Valeu, Alex.

Adorei a tirada sobre estar na hora de mudar de ramo. Pior é que é a maior verdade. Tem hora que a pessoa precisa se tocar.