Considere as palavras: computador e ciência. O primeiro conceito é imenso e abrange desde a onipresença vitalícia dos registros médicos eletrônicos até a oportunidade de participar de uma briga de bar virtual a qualquer hora do dia no Twitter. A segunda palavra, ciência, representa um movimento intelectual que produziu grandes avanços como a vacina contra a poliomielite, algumas viagens à lua e muitas outras para listar. Então, por que a combinação das duas palavras é tão curta, especialmente quando procuramos formar nossas equipes de programação?
Não é que o campo não tenha sido entregue. Há petabytes de arquivos LaTeX por aí repletos de ideias brilhantes, como novas linguagens de programação, algoritmos de busca inteligentes, algoritmos de visão de máquina e uma infinidade de noções intermediárias. Muitos desses são maravilhosos.
O problema é que poucos realmente precisam de muito disso. Existem casos, por exemplo, onde a equipe de desenvolvimento florescer ao passar por graduados em Ciência da Computação e contratar apenas físicos, contadores ou algum outro tipo de pessoa com conhecimentos de matemática. Esses novos funcionários são mais práticos e focados em entregar as máquinas, o que é praticamente o que quase todas as empresas querem fazer.
Não é que as graduações de ciência da computação sejam ruins; é só que elas não vão falar dos problemas que a maioria dos profissionais precisa resolver. Então, aqui está uma lista do porquê seria melhor ignorá-las:
Teoria distrai e confunde
Muitos cientistas da computação são matemáticos e a mentalidade obcecada por teoremas permeia a disciplina. As provas matemáticas são apenas programas e vice-versa, pelo menos em sua mente. O teórico não está realmente interessado em entregar código que faz o trabalho, tanto quanto provar que seu código está correto.
É raro que um aluno de graduação se forme sem obter uma boa dose de máquinas NP-completude e Turing, duas belas áreas da teoria que seriam agradáveis se não criassem maus instintos. Um biólogo pediu para um especialista resolver um problema na correspondência de sequências de DNA e ele voltou com a alegação de que era NP-completo, uma classe de problemas que pode levar muito tempo para ser resolvida. Ele não se importou. Ele precisava resolvê-lo de qualquer maneira. E acontece que a maioria dos problemas NP-completos é muito fácil de resolver. Existem apenas alguns exemplos patológicos que atrapalham nossos algoritmos. Mas os teóricos estão obcecados com o conjunto que confunde os algoritmos simples, apesar de raramente serem observados na vida cotidiana.
O mesmo problema acontece com as máquinas de Turing. Alunos de computação gráfica competentes aprendem resultados niilistas como o Teorema de Rice, que mostra que realmente não podemos analisar algoritmos de computador. Mas as máquinas de Turing são um modelo muito ruim para o funcionamento de nossas máquinas comuns, e geralmente é muito fácil criar softwares que façam coisas inteligentes com nosso código. Qualquer graduação em Ciência da Computação que não tome esses resultados teóricos com uma boa dose de sal arrisca desistir quando uma resposta perfeitamente utilizável está à mão.
Idiomas acadêmicos são raramente usados
Não é surpreendente que a academia crie esnobismo e amor por soluções arcanas. Isso acontece em todos os campos. Há muitas grandes ideias por aí, daquelas obcecadas por idiomas, mas às vezes essas ideias acabam criando bagunça e confusão. Se um membro da equipe adora algum recurso estranho e começa a incluí-lo na base de código, todo mundo vai ter que aprender. Se todos fizerem o mesmo, a hora de se atualizar torna-se muito mais difícil.
É por isso que o Google escolheu um caminho mais fácil quando construiu o Go. Os criadores insistiram que a linguagem deveria ter poucas construções e ser simples de aprender no menor tempo possível. Essa simplicidade ajudou a todos porque todos conheciam muito bem esse núcleo.
Muitos professores são matemáticos, não programadores
Um dos segredos sobre a maioria dos departamentos de ciência da computação é que a maioria dos professores não programam computadores. Seu trabalho real é dar palestras e subvenções. A última vez que muitos deles realmente programaram um computador foi quando eles próprios estavam na pós-graduação.
Muitos assuntos requeridos são raramente usados
Estruturas de dados são frequentemente o tópico principal para o curso que os alunos estudam em ciência da computação. É muito ruim que poucos usem muitas estruturas de dados. Eles colocam as coisas em tabelas de hash de objetos ou em um banco de dados que faz o pensamento. Ainda é muito útil para todos pensarem um pouco sobre a complexidade algorítmica, mas muito poucos precisam se preocupar com árvores B ou mesmo com listas vinculadas. Não apenas isso, mas muitos já perceberam que é melhor confiar em uma biblioteca padrão do que se envolver com estruturas de dados.
Há muitos outros exemplos de assuntos no currículo clássico que não são mais tão importantes. Os compiladores são complexos e essenciais, mas as únicas pessoas que os escrevem são os alunos que são obrigados a criar versões de brinquedos em um curso de um semestre. Até mesmo a Apple usou ferramentas de código aberto quando criou o compilador para o Swift.
Modelos matemáticos levam ao caminho errado
Qualquer um que tenha aprendido a teoria do banco de dados descobriu a inteligência da Forma Normal de Boyce – Codd, a maneira como se divide uma elaborada estrutura de dados em pequenas tabelas. É tudo muito elegante e eficiente – até alguém ter que esperar para sempre uma resposta à sua consulta SQL preenchida com comandos JOIN.
A maioria das equipes de desenvolvedores aprende rapidamente a “desnormalizar” seus bancos de dados para melhorar o desempenho. Em outras palavras, eles eliminam toda a esperteza e colam os dados em uma enorme mesa. É meio feio e um desperdício, mas geralmente é muito rápido.
Uma vez que eles começam a colocar sua educação em prática, muitos desenvolvedores gastam alguns anos desaprendendo toda a inteligência matemática de seus cursos de ciências da computação.
Instituições criam arrogância
Todos pensamos que estamos certos, mas a própria natureza dos diplomas acadêmicos é projetada para dar aos formandos a capacidade de argumentar a superioridade com autoridade. Isso pode ser verdade às vezes, mas mesmo nos melhores dias, é difícil saber o que é realmente certo, especialmente em um campo em movimento rápido.
Muitas habilidades modernas são ignoradas
Muitas das habilidades modernas não são abordadas em muitos departamentos. Quem quiser entender o Node.js, o React, o design do jogo ou o cloud computing, encontrará muito pouco no currículo médio. Uma lista de cursos de escolas medianas concentra-se nos fundamentos – isto é, conceitos profundos que farão parte da computação bem depois que palavras como Node.js ou React são esquecidas. Esse é um objetivo nobre, mas 99% do que a maioria dos programadores faz é lidar com as tecnologias atuais.
É muito comum que os departamentos de ciência da computação produzam pensadores profundos que entendem alguns dos desafios fundamentais sem qualquer conhecimento superficial dos detalhes que dominam o dia dos funcionários comuns. É por isso que as empresas acham que vale a pena contratar alguém de um laboratório de física que acabou de usar o Python para desenvolver alguns fluxos de dados de um instrumento.
O acadêmico de ponta é longo
Aprendizado de máquina e inteligência artificial são a principal tendência e muitos estão correndo para experimentá-los. Mas eles foram estudados por décadas pelos departamentos de ciência da computação. Faz sentido investigar todas as ideias que emanam das escolas hoje – ou esperar pacientemente até que estejam finalmente prontas para uso geral?
Posse pode gerar complacência
Há muitas razões maravilhosas por trás da instituição da posse e a maioria dos professores que desfrutam de suas proteções merecem todos os benefícios por suas contribuições desde quando. O problema é que, em campos de rápido movimento, os alunos de hoje têm pouca necessidade de insights até de uma década ou mais. No entanto, a estabilidade garante que muitos dos professores estarão lá dez, vinte ou até trinta anos depois dos dias em que tiveram os maiores insights.
O intelectualismo raramente produz resultados
Não há muitos alunos que possam justificar gastar cerca de meio milhão de dólares imaginando se 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 empresa precisa enviar algo na próxima semana até o prazo final, ninguém tem tempo para olhar para o umbigo e imaginar as verdades eternas.