Código de qualidade e arte de programação
Para o Desenvolvedor Sênior John Cooley, programar é simples. Mas produzir um código de qualidade é uma arte, e conseguir isto é um longo caminho. Conversamos com ele na sede da Engineering Industries eXcellence para conhecer seu trabalho e o que é o desenvolvimento de software industrias na Engineering.
P: Em poucas palavras, fale sobre o que você faz.
R: Minha função é a de um desenvolvedor back-end. Tenho uma especialização em integração de sistemas, particularmente integração ERP ao MES. Provavelmente trabalho melhor e me divirto mais sempre que estou tentando traduzir um conjunto de dados de um sistema para outro, e descobrindo semelhanças e diferenças entre os dois.
É isso que eu sei fazer, mas cada projeto é diferente. E uma parte importante do meu trabalho é poder estar em uma situação onde você não possui nenhum conhecimento prévio, então ter que pesquisar e usar os recursos existentes para tentar achar uma boa solução. Outro importante requisito do trabalho é um certo nível de confiança e ausência de medo ao trabalhar com algo altamente especializado ou técnico que você nunca viu ou tocou antes. Eu não sei se isto é facilmente encontrado em uma profissão.
P: Por que programar? Como você foi parar no mundo virtual dos códigos?
R: Minha primeira experiência com programação foi por volta dos 14 anos. Foi numa época anterior ao MySpace, então se você queria ter qualquer presença virtual, você precisava ter seu próprio site. Como um adolescente, eu tinha uma opinião sobrestimada da minha arte pessoal, pela qual que era muito apaixonado. Então, decidi aprender HTML para criar meu próprio site. Desde então, continuei aprendendo códigos sozinho. Comecei com tabelas e frames de HTML e passei para a programação server-side com PERL e PHP. Tudo de forma autodidata. Eu realmente gostava disso.
Quando entrei para a faculdade, queria cursar biologia. Na metade do primeiro semestre do meu primeiro ano, me dei conta de que eu adorava aprender biologia, mas não queria me dedicar a isso. Nesse momento percebi que a biologia não era para mim, eu já estava administrando um servidor fora do dormitório da faculdade, hospedando meus próprios sites e pensei que talvez este fosse o caminho para mim. Inicialmente estava indeciso entre engenharia elétrica e ciências da computação. Eu tinha interesse em ambas. Em engenharia elétrica, você pode fazer qualquer coisa. Quero dizer, você pode montar seu próprio computador se quiser, mas demoraria muito e seria operacionalmente inútil. Finalmente, comecei a gostar mais de ciências da computação, porque era mais interessante em termos de esforço. Eu encontrei um ambiente em que podia evoluir e nunca mais voltei atrás.
P: Todo desenvolvedor tem um sistema de crenças. Qual é o seu?
R: Em um sentido mais estrito, programar é realmente simples, e acho que pode ser feito por qualquer pessoa. Mas a verdadeira dificuldade em programação, que é um longo caminho, é produzir um código de qualidade. Há muitos livros que poderiam ocupar uma biblioteca inteira sobre o que é e o que não é um código de qualidade. Para mim, um “código de qualidade” é como o conceito taoísta de iluminação; quem sabe se pode ser realmente obtido em uma vida ou uma carreira?
P: Então como se produz um “código de qualidade”?
R: Não acho que programar seja uma ciência estrita. Com certeza há um lado artístico e criativo nisso. Sempre penso na programação como sendo metade arte e metade ciência.
Nos primórdios da programação, digamos nos anos 1960 e 1970, um bom indicador da sua habilidade para programar estava diretamente relacionado com sua experiência e conhecimento de matemática, e quão competente você era em matemática. Atualmente, usar os paradigmas mais modernos como programação orientada para objeto, um indicador maior de sucesso é a sua habilidade para pensar de forma abstrata, para estabelecer hierarquias entre conceitos e realmente entender quais semelhanças e diferenças eles têm, para categorizar elementos de forma que sirvam para o seu programa. Isto é mais fácil quando você está falando de um objeto físico mas é muito mais difícil de fazer com um conceito abstrato.
Como um programador, você está sempre lutando para escrever e desenvolver um software que irá facilitar em lugar de dificultar seu trabalho no futuro. Você pode escrever algo extremamente abstrato e genérico, um conjunto de ferramentas que podem ser aplicadas a qualquer coisa, mas o resultado é gigantesco, complexo e complicado. Implicará muito esforço para que atenda a cada necessidade individual. Ou você pode escrever algo mais especializado, mas aí você corre o risco de não atender uma nova necessidade e ter que corrigir, reescrever e reestruturar seu programa. No final, seu trabalho e objetivo deveriam ser sempre encontrar um equilíbrio entre esses dois.
P: Como você sabe que continua evoluindo como desenvolvedor?
R: Especialmente no começo da sua carreira, independentemente do método que você utilizar, inevitavelmente cometerá erros. Mas você aprende com suas experiências e tenta adaptar-se avançando. Você cria verificações e revisões organicamente através dos seus erros. Cada sucesso e cada falha cria um novo conjunto de ferramentas para utilizar e um novo conjunto de armadilhas para evitar. Basicamente, você se lembra das suas dificuldades. E na próxima vez que você estiver escrevendo, você usa essas lições passadas e as aplica. Quanto mais experiência tiver, mais fácil será para você evoluir e melhorar como desenvolvedor. Ela o coloca em um meio que funciona.
P: Como você ajuda os clientes?
R: Não há uma medida que sirva para todos os projetos, nem um projeto que atenda todas as necessidades. Se existisse um Santo Graal como este, não haveria centenas de estruturas e linguagens por aí. Haveria 1 livro com 1 resposta. E se fosse assim, não haveria necessidade para o meu trabalho! Portanto muito do meu trabalho é usar minhas competências, experiência, conhecimento e as informações disponíveis para descobrir como elas podem servir para o que o cliente que está na minha frente deseja.
P: Fale sobre seu trabalho na Engineering e sua equipe aqui.
R: O melhor em trabalhar na Engineering para mim: tudo é diferente em cada projeto. Estou trabalhando aqui há 3 anos, mas parece que tive 8 trabalhos diferentes durante este período. Cada projeto que você participa aqui geralmente é para uma nova empresa e um novo conjunto de clientes. Na maioria das vezes também significa uma nova equipe de funcionários da Engineering que você nunca teve oportunidade de conhecer ou trabalhar anteriormente. Cada cliente é uma tela em branco, um quebra-cabeças para resolver. Você está constantemente em alerta. Nunca é monótono. É empolgante, desafiador, e lhe dá a oportunidade de aprender e crescer continuamente no seu trabalho. Não haveria isto de outra forma.
Conheça John Cooley
Onde você nasceu/cresceu: Lake Forest, Illinois
Sua educação: Bacharel em Ciências da computação pela Bradley University
Seu título: Consultor analista sênior
Sua prática na Engineering: Manufacturing Operations
Localização do seu escritório: Chicago, IL, EUA
Há quanto tempo você trabalha na Engineering: mais de 3 anos
Suas áreas de especialização: Desenvolvimento de software e aplicativos, integração de sistemas industriais, projeto de sistemas