Programadores e… programadores

January 11th, 2007 § 9 comments

O Luiz Rocha, em uma entrada comentando outra do Osvaldo Santana, escreve sobre o desenvolvimento de software no que tange ao uso de ferramentas e o que isso implica em termos de conhecimento de programação,

A analogia usada é de uma mecânico versus um engenheiro-mecânico, pensando sobre a diferença entre saber usar determinadas ferramentas e saber porque as ferramentas existem em primeiro lugar. Ferramentas aqui significando primeiramente um IDE.

Em termos gerais, eu acho que o argumento já quebra na própria analogia. Por mais que precisemos de engenheiros-mecânicos, se eliminássemos os mecânicos teríamos um mundo em que carros são produzidos mas não rodam mais depois do primeiro problema. Aliás, a ironia de que isso é basicamente o que acontece no mundo do desenvolvimento não deixa de ser óbvia.

Eu acredito que o programador-mecânico é uma ferramenta indispensável no processo de desenvolvimento. É claro que, enquanto profissional, é do interesse dele passar para o próximo nível. E, por mais que o código produzido seja uma grande função da ferramenta, se o programador entende os princípios mais básicos por trás do que está fazendo, a tendência natural é chegar a um entendimento maior do seu trabalho.

Agora, por entendimento maior é possível considerar duas coisas diferentes: uma, é saber os princípios que levam a uma elegância e concisão maior nas soluções; outra coisa, completamente diferente, é entender a base matemática da qual toda a computação é derivada. A minha opinião é que a primeira é fundamental enquanto a segunda é mais uma escolha que depende de circunstâncias de carreira.

Um exemplo básico é entender como compiladores funcionam. Entender os conceitos por trás, principalmente os matemáticos, é algo que certamente ajuda extremamente um programador ou analista. Mas não é um impedimento para que o mesmo produza código conciso e elegante. Nesse sentido, e voltando ao ponto original, saber programar sem um IDE não é absolutamente uma indicação de eficiência.

Obviamente, há contra-exemplos em ambos os sentidos. Hoje mesmo, eu observei um programador usar código tirado de outra biblioteca e depois perguntar: alguém pode me explicar como esse código funciona? Em minha carreira, já perdi a contas de quantos programadores formados em ciência da computação eu conheci que tiveram basicamente que aprender novamente a programar quando confrontados com o mundo real de desenvolvimento–e não estou pensando em prazos limitados e qualidade variável.

O que eu quer dizer com isso tudo, é que o uso ou não de ferramentas é um desvio do problema real. Ferramentas jamais são o problema. Eu acredito que a diferença está basicamente na perspectiva do programador ou analista.

Eu tomo como exemplo disso um programador que trabalha comigo. Até pouco tempo atrás, ele era muito dependente de ferramentas e receitas de bolo para programar. Mas eu continuo muito satisfeito ao ver o progresso dele em juntar pequenas coisas que ele aprende no dia-a-dia para compor soluções melhores a cada novo momento–com pouca ou nenhuma necessidade de ser informado de que aquela solução é melhor. Para um programador isso deve vir naturalmente ou a pessoa não merece o título.

Pessoas assim escolhem suas ferramentas não porque não entendem o que estão fazendo, mas porque sabem muito bem o valor agregado das mesmas. Eu programo em ASP.NET a maior parte do meu tempo. Trabalhar sem o IDE nesse caso seria um figurativo tiro no pé. E saber trabalhar sem o IDE–o que eu poderia muito bem fazer com um pouco de documentação–não me faria um programador melhor. Smalltalk, mais um exemplo, é uma linguagem onde o IDE é parte da mesma.

Na entrada do Santana, ele fala sobre dois programadores que tiveram, aparentemente, muita dificuldade em passar de Delphi para Python. Eu não sei as particularidades do acontecido, mas, conhecendo o Delphi, eu tenho a grande impressão que os dois provavelmente só aprenderam a programar quando passaram para o Python, o que torna a distinção sem valor mais uma vez. Se ele dissesse que os dois faziam programação MVC em Delphi (algo que eu pratiquei com sucesso durante anos nesse IDE/linguagem), eu diria que ele tem razão. Mas não parece ser o caso.

Para resumir esse texto que ficou bem maior do que eu pretendia, a distinção é entre programadores reais e pretendentes a programadores. Depois de tantos anos programando e ensinado outros a programar, em minha opinião não existe meio termo.

§ 9 Responses to Programadores e… programadores"

  • Já pensei sobre isso algumas vezes e pra mim, quando um programador bom faz uso de uma IDE, ele ganha produtividade. Quando um programador inexperiente faz uso de uma IDE ele pode: aprender com as “ajudas” da IDE, ou pode virar um escravo da mesma.

    Pra mim o que vai definir se ele é bom ou ruim é o que ele consegue aprender com aquilo.

    No final, depois de um certo tempo, ele vai ser capaz de mostrar se é bom ou não(o certo tempo depende de cada um).

    Também concordo que a pessoa não precisa, necessesáriamente, conhecer tudo por traz de uma IDE, mas isso se torna um plus!

    No meu trabalho, uso sempre frameworks para desenvolver projetos(seja Drupal[meu preferido], seja Zope/Plone, seja CakePHP) e nem por isso deixo de conhecer como eles fazem suas “mágicas” . Às vezes eu preciso inclusive olhar as suas “entranhas” pra poder fazer o meu trabalho, mas isso nem sempre é necessário.

    Enfim, não é o que a pessoa usa que a define. Não é porque eu uso o bloco de notas(no meu caso o vim) que eu sou melhor que quem usa IDE.

  • Eu acho que o Osvaldo anda lendo muito Paul Graham. É, aquele de que para ser hacker tem que ter um Mac. :-)

    Eu acho que a IDE/RAD não tem muita relação com a dificuldade dos programadores Delphi (não gosto quando o cara é programador de uma linguagem ou ambiente).

    Ao passo que quem utiliza Delphi programa para Windows e utiliza uma orientação a eventos, onde qualquer coisa pode acontecer a qualquer momento, quem programa em Ruby, Python, Unicon, etc, utiliza uma aproximação seqüêncial. O programa inicia em um ponto predeterminado e segue por um ou mais caminhos em uma seqüência logica dependendo de determinados resultados.

    Eu acho que uma IDE é desejável em *qualquer* circunstância. Seja ela com mais ou menos recursos, está ali para auxiliar o programador no desenvolvimento.

    Certamente o vim e o Emacs não são meros blocos de notas. Nem um SciTE, Kate e tantos outros. A quantidade de recursos é um mero detalhe.

  • Ronaldo says:

    Rafael, Tudo bom?

    Vim de novo? Seu herege! 😛

    O que eu discordo realmente é que programadores viram escravos de um IDE. Para mim, isso não existe. Eu acho que se uma pessoa não consegue programar a não ser naquela linguagem e naquele IDE, ela não pode ser descrita como um programador. A própria definição de programador vai contra isso.

    Eu já vi muita gente conseguir usar o Delphi ou o PowerBuilder ou o Visual Studio e fazer algo funcionar. Mas se você olhar o código, não dá nem para chamar de código espaguete–é muito pior. Com o tempo, a pessoa realmente pode aprender “truques”, mas não passar disso. Por isso não são programadores

    O verdadeiro programador é um mecânico quando preciso e um engenheiro quando preciso. Ele evolui. Testes interessantes são verificar o entendimento de valores e variáveis e parâmetros e endereços em memória com ponteiros, abstrações, etc. Isso mostra que programação real.

    Uma pessoa que copia um código e depois pergunta se alguém pode explicar o código encaixa mais na definição de um cultuador da carga. :-)

    Guaracy,

    Sobre o Paul Graham, nem vou comentar. Pode dar briga. :-)

    Concordo sobre o Delphi. Eu programei durante anos no Delphi e a curva de aprendizado do GTK foi relativamente íngreme com as diferenças nos modelos. O que não mudou, obviamente, foram as abstrações por trás, MVC, banco de dados, etc.

    Sem um IDE, estamos de volta à era de cartões, o que parece ser o desejo inconsciente do Osvaldo pela menção saudosa dos tempos antigos. E pensar que o Lisp é de 58. Grande distinção aqui.

  • Luiz Rocha says:

    Para resumir [..] a distinção é entre programadores reais e pretendentes a programadores.

    Não sei, talvez vc tenha razão nesse ponto. Não importa a ferramenta, se o programador não quiser ir para frente, ele não vai.

    No que diz respeito a IDEs, não tenho nada contra, a princípio. Mas vejo em quase todos os projetos que já tomei parte, programadores muito mais interessados em usar geração de código do que entender e compreender o que eles estão fazendo. E uma ferramenta que tenha muito desses recursos, facilita no processo de alienação do desenvolvedor.

    Em um dos projetos, só a título de exemplo, a ferramenta usada gera código já compilado. Ou seja, nenhum programador sequer vê o código que ele desenvolve e põe em produção.

    Eu vejo nisso algo muito negativo. Não acho que um programador, contratado para gerar código em massa com mais outros 99, precise ficar pensando em compiladores e toda a teoria matemática por detrás do que ele está fazendo.

    Por outro lado, se ele só arrastar objetos e clicar em geradores, como macaquinhos treinados, de que adianta ter programadores em primeiro lugar?

    E isso, ao meu ver, é prejudicial. Se só existissem mecânicos, só existiria Ford T no mercado. :-)

    Mas talvez vc tenha razão. A ferramenta, independente do que ela ofereça, é passiva. Quem faz alguma coisa ou não é o programador.

  • Ronaldo says:

    Eu não discordo que existam pessoas que são meros apertadores de botões. Eu só discordo de chamar essas pessoas de programadores, ou seja, acho que elas não merecem nem o título de mecânicos. :-)

    Eu lembro de trabalhar na marcenaria de meu pai, polindo peças de maneiras. Elas ficam lindas, bem polidas, mas eu não poderia ser chamado de marceneiro. Eu fazia uma série de tarefas que contribuíam para o produto final, mas nada que fizesse de mim um profissional.

    Talvez o problema maior esteja com as empresas que contratam essas pessoas como mão de obra barata e com isso atribua um status maior do que esses aprendizes merecem. Eles podem virar programadores, mas não são ainda.

    E mesmo em contextos de geração de código em massa, há uma diferença. Eu já perdi a conta de cadastros que criei na vida–código repetitivo e facilmente implementável–mas não considero isso desperdício porque estou sempre procurando maneiras novas de otimizar o processo.

    Bem, acho que meio que me repeti na explicação. Mas ainda digo que é entre programadores e pretendentes. E eu tenho muito respeito pelo Henry Ford. :-)

  • Walter Cruz says:

    Voltando à vaca fria, eu achei engraçado o comentário do cara da IBM onde ele diz que *todos* os bons programadores que ele conhece usam IDE e faz uma referência que eu considerei irônica ao vi e ao emacs (é o que dá… ele pode não estar sendo irônico e eu simplesmente interpretei errado).

    Agora, alguém pode me explicar o quá de errado com o Paul Graham?

  • Ronaldo says:

    Qual comentário? Acima?

    Sobre IDEs, eu acho que talvez o problema esteja na definição de IDE como gerador de código em massa, e não como o que a sigla significa realmente.

    Quanto ao Paul Graham, excelente homem de negócios, mas acha que você só é um programador real se usar Lisp para suas aplicações Web escritas em Macintoshes. Nada contra, ele ficou rico assim. Mas o mundo não é só isso obviamente.

  • Walter Cruz says:

    O comentário ao qual eu me referi está no próprio post original, do Osvardo :)

Leave a Reply

Your email address will not be published. Required fields are marked *

What's this?

You are currently reading Programadores e… programadores at Superfície Reflexiva.

meta