Considerar as duas palavras computador e ciência. Os presentes da primeira ao mundo são enormes e vão desde a ubiquidade salvadora dos registos médicos electrónicos até à oportunidade de entrar numa luta de bar virtual a qualquer hora do dia no Twitter. A segunda palavra, ciência, representa um movimento intelectual que proporcionou grandes avanços como a vacina contra a poliomielite, algumas viagens à lua e demasiadas outras para listar. Então, porque é que a combinação das duas palavras em informática é tão curta, especialmente quando estamos à procura de pessoal para as nossas equipas de programação?
Não é que o campo não tenha dado resultados. Há petabytes de ficheiros LaTeX por aí cheios de ideias brilhantes como novas linguagens de programação, algoritmos de pesquisa inteligentes, algoritmos de visão artificial e um gazilhão de noções no meio. Muitos destes são maravilhosos.
O problema é que poucos de nós precisam realmente de muito de qualquer um deles. Um amigo confessou ter visto uma equipa de desenvolvimento florescer ao passar por cima de graduados de CS e contratar apenas físicos, contabilistas ou algum outro tipo de pessoa com conhecimentos de matemática. Estes novos empregados são mais práticos e concentrados em conseguir que as máquinas entreguem, que é praticamente o que quase todas as empresas querem fazer.
Não é que os graus de CS sejam maus; é apenas que não vão falar dos problemas que a maioria de nós precisa de resolver. Portanto, aqui está uma lista bastante incompleta das razões pelas quais podemos estar melhor se os ignorarmos.
A teoria distrai e confunde
Muitos cientistas informáticos são matemáticos de coração e a mentalidade teoricamente obcecada permeia a disciplina. Um teórico disse-me que todas as provas matemáticas são realmente apenas programas e vice-versa, pelo menos na sua mente. Ele não está realmente interessado em entregar código que faça o trabalho tanto quanto em provar que o seu código está correcto. Ok.
É raro para um major de CS formar-se sem obter uma dose saudável de máquinas NP-completeness e Turing, duas belas áreas da teoria que seriam agradáveis se não acabassem por criar maus instintos. Um biólogo pediu-me para resolver um problema de correspondência de sequência de ADN e eu voltei a ele com a alegação de que era NP-complete, uma classe de problemas que pode demorar muito tempo a resolver. Ele não se importou. Ele precisava de o resolver de qualquer maneira. E acontece que a maioria dos problemas NP-completos são bastante fáceis de resolver a maior parte do tempo. Há apenas algumas instâncias patológicas que gomam os nossos algoritmos. Mas os teóricos estão obcecados com o conjunto fino que confunde os algoritmos simples, apesar de raramente serem observados na vida quotidiana.
O mesmo problema acontece com as máquinas Turing. Bonitos estudantes de CS aprendem resultados niilistas como o Teorema de Rice, o que mostra que não podemos realmente analisar algoritmos de computador de forma alguma. Mas as máquinas Turing são um modelo bastante mau para a forma como as nossas máquinas normais funcionam e é frequentemente muito fácil criar software que faz coisas inteligentes com o nosso código. Qualquer grande CS que não aceite estes resultados teóricos com uma dose saudável de sal corre o risco de desistir quando uma resposta perfeitamente utilizável está perto.
Línguas académicas são raramente utilizadas
Não nos devemos surpreender que a academia crie snobismo e um amor por soluções arcanas. Faz isto em todos os campos. Quando perguntei a um licenciado do MIT a sua língua favorita, ele disse-me orgulhosamente que tinha a certeza de que eu não fazia a menor ideia do que era. Só depois de me empurrar um pouco, é que ele cedeu e disse-me que era o CLU. Ele tinha razão.
Existem muitas ideias fantásticas por aí dos obcecados com línguas, mas por vezes estas ideias acabam por criar desordem e confusão. Se um membro da equipa adora alguma característica estranha e começa a incluí-la na base de código, todos os outros vão ter de a aprender. Se toda a gente fizer o mesmo, o tempo para se actualizar é brutal.
Foi por isso que o Google escolheu a estrada baixa quando construiu o Go. Os criadores insistiram que a linguagem deveria ter poucas construções e ser simples de aprender no mais curto espaço de tempo possível. Esta simplicidade ajudou toda a gente porque todos conheciam muito bem este núcleo.
Muitos professores de CS são matemáticos, não programadores
Um dos segredos sujos da maioria dos departamentos de informática é que a maioria dos professores não consegue programar computadores. O seu verdadeiro trabalho consiste em dar palestras e conceder bolsas de estudo. Eles compreendem folhas de cálculo e propostas de bolsas, não fazendo realmente a investigação. É por isso que Deus lhes deu estudantes graduados. A última vez que muitos deles programaram realmente um computador foi quando eles próprios estavam na escola de pós-graduação. Desde então, a podridão dos bits e as teias de aranha instalaram-se e os compiladores nas suas máquinas provavelmente não arrancarão.
Muitas disciplinas necessárias são raramente utilizadas
As estruturas de dados são muitas vezes o tópico principal para os alunos do segundo curso de ciências informáticas. É pena que poucos de nós já não utilizem muitas estruturas de dados. Ou mergulhamos coisas em tabelas de hash de objectos ou empurramo-las para uma base de dados que nos faz o pensamento. Ainda é bastante útil para todos pensar um pouco sobre a complexidade algorítmica, mas muito poucos precisam de se preocupar com árvores B ou mesmo listas ligadas. Não só isso, mas muitos de nós percebemos que é melhor confiar numa biblioteca padrão do que mexer em estruturas de dados nós próprios. É demasiado fácil cometer erros. Muitas organizações proíbem explicitamente, com boas razões, rolar as suas estruturas de dados.
Existem muitos outros exemplos de disciplinas do currículo clássico que já não são tão importantes. Os compiladores são complexos e essenciais, mas as únicas pessoas que os escrevem são estudantes que são forçados a criar versões de brinquedos num curso de um semestre. Até a Apple usou ferramentas de código aberto em stock quando criou o compilador para Swift.
Modelos matemáticos levam-nos pelo caminho errado
Anyone who’s learned database theory has discovered the cleverness of Boyce-Codd Normal Form, a forma como decompomos uma elaborada estrutura de dados em pequenas tabelas. É tudo muito elegante e eficiente – até que se espere para sempre por uma resposta à sua consulta SQL preenchida com comandos JOIN.
A maioria das equipas de desenvolvimento aprende rapidamente a “desnormalizar” as suas bases de dados para melhorar o desempenho. Por outras palavras, elas retiram toda a esperteza e colam os dados numa enorme tabela. É um pouco feio e esbanjador, mas é muitas vezes gritante e rápido. Quanto ao inchaço, o espaço em disco é barato.
Após começarem a pôr em prática a sua educação, muitos programadores passam alguns anos sem aprender toda a esperteza matemática dos seus cursos de CS.
Instituições geram arrogância
Todos achamos que temos razão, mas a própria natureza dos graus académicos foi concebida para dar aos graduados a capacidade de argumentar a sua superioridade com autoridade. Isto pode ser verdade por vezes, mas mesmo nos melhores dias é difícil saber o que está realmente certo, especialmente num campo em rápida evolução.
Uma pessoa com quem trabalhei adorou os “padrões de codificação” que trouxe para o departamento e adorou todas as oportunidades de citar os padrões durante a revisão do código. Estas normas equivaliam a opiniões agitadas sobre onde colocar espaço branco, mas uma vez que começou a falar delas com precisão académica, começou a empunhá-las como fofos nas revisões de código. Ele dingria código com espaço branco diferente com a sinistra afirmação de que o código não cumpria as normas. E assim ficámos todos presos a contar espaços para que tudo pudesse encaixar num padrão quase académico.
Muitas competências modernas são ignoradas
Muitas das competências modernas simplesmente não são cobertas em muitos departamentos. Se quiser compreender Node.js, React, design de jogos ou computação em nuvem, encontrará muito pouco disso no currículo médio. Uma lista de cursos de escolas médias concentra-se nos fundamentos – ou seja, conceitos profundos como condições raciais que farão parte da computação, bem depois de palavras como Node.js ou React serem esquecidas. Este é um objectivo nobre, mas 99% do que a maioria dos programadores faz é lutar com as idiossincrasias da actual buzzword du jour.
É muito comum que os departamentos de informática produzam pensadores profundos que compreendam alguns dos desafios fundamentais sem qualquer conhecimento superficial dos detalhes que dominam o dia do funcionário médio. É por isso que as empresas consideram igualmente vantajoso contratar alguém de um laboratório de física que acabou de utilizar Python para massajar alguns fluxos de dados a partir de um instrumento. Podem aprender os detalhes pouco profundos tão prontamente como o génio da CS.
A vanguarda académica é longa a chegar
A aprendizagem da máquina e a inteligência artificial são toda a raiva e muitos estão a correr para experimentar com eles. Mas eles têm sido estudados há décadas pelos departamentos de CS. Faz sentido investigar todas as ideias que emanam actualmente das escolas – ou esperar pacientemente até que estejam finalmente prontas para uso geral?
Tenure pode gerar complacência
Existem muitas razões maravilhosas por detrás da instituição de posse e a maioria dos professores que gozam plenamente das suas protecções merecem todos os benefícios pelas suas contribuições há muito tempo atrás. O problema é que nos campos em rápida evolução, os estudantes de hoje têm pouca necessidade das percepções de há cerca de uma década atrás. No entanto, a posse garante que muitos dos professores terão passado dez, vinte ou mesmo trinta anos nos dias em que tiveram os maiores conhecimentos.
E depois há as distracções que podem levar os professores a afastarem-se. Um génio de tenra idade parece blogar interminavelmente sobre os vários torneios de póquer e as más batidas que o enviaram para casa. Outro investiu numa equipa de basebol da liga menor e gaba-se de andar com os jogadores de basebol e de foder bolas enquanto eles praticam o batedor.
Intellectualismo raramente produz resultados
Quando disse a um membro da faculdade que um dos meus alunos conseguiu um emprego graças a algumas palestras sobre Angular e Reagir, ele sorriu e disse: “A última coisa que eu quero fazer é transformar isto numa escola de comércio.”
Isso é óptimo, mas não há muitos que possam justificar o gasto de cerca de meio milhão de dólares em pensar se os anjos polinomiais ou exponenciais podem dançar na cabeça de um alfinete. A tradição das artes liberais é uma coisa maravilhosa, mas encoraja um desdém pelo conhecimento prático. É tudo sobre algumas verdades profundas e eternas. Mas quando a sua empresa tem de enviar algo na próxima semana até à data limite, ninguém tem tempo para olhar para o umbigo e questionar-se sobre verdades eternas.