Estrutura de Dados e Algoritmos são importantes para Ciência de Dados?

Há algum tempo que, em áreas de tecnologia computacional e suas diversas vertentes, poucas coisas são mais discutidas do que quais disciplinas devem compor o repertório teórico de um profissional. Em ciência de dados não poderia ser diferente. É possível definir algumas justificativas para essa busca da combinação perfeita de competências:  áreas computacionais figuram entre as mais novas do conhecimento humano, estão em evolução extremamente acelerada e esta se dá muitas vezes fora da academia, no mercado competitivo das empresas privadas. Na indústria de software, a qual podemos associar a imagem de “irmã mais velha” da ciência de dados, as mesmas preocupações existem. E a resposta ao questionamento – que muitas vezes não agrada – costuma ser: depende.

Objetivamente, estruturas de dados e algoritmos são partes intrínsecas da ciência de dados. Estas teorias e suas implementações, juntamente com outras partes do pensamento computacional, compõem o aparato tecnológico necessário para a viabilidade prática do estudo de grandes quantidades de informações. Sem isto estaríamos tratando somente de modelos matemáticos e estatísticos, portanto não precisaríamos definir uma nova ciência. Considerando somente estes fatos seria justo concluir que sim, estas disciplinas são importantes. Por outro lado, são elas importantes para todos os cientistas de dados? Um pouco de história pode nos ajudar a compreender melhor a questão.

Por volta de 1960 vivíamos uma incipiente indústria de software. Cartões perfurados estavam sendo gradualmente substituídos por fitas magnéticas e havia uma força de trabalho bem diferente da atual (chegando a ser composta por cinquenta por cento de mulheres). Nesta nova profissão de “programador de computador”, quais os conhecimentos esperados? Antes da criação dos departamentos de ciência da computação, ninguém sabia ao certo. Então fizemos o melhor que podíamos, agregando matemática, lógica, estatística, física, eletrônica e muito da formalidade de engenharia[1]. Sessenta anos depois, temos excelentes programadores que não fazem ideia de como um transístor funciona, ou que pouco sabem sobre métodos numéricos. A formalidade e o pesado planejamento da engenharia foram, em maior ou menor grau, substituídos por abordagens mais orgânicas de atuação, desburocratização, empirismo e adaptação às mudanças. Isso não faz das disciplinas citadas menos importantes para alguns tipos específicos de profissionais da computação. Em softwares para a indústria aeronáutica, por exemplo, elas são essenciais. Mas para outras tipos de sistemas foi possível, graças a diversos níveis de abstração (e.g. drivers, protocolos, bibliotecas de código aberto) criados ao longo dos anos e ao aumento colossal da capacidade computacional disponível, concentrar nossos esforços em outros problemas de produção de software que não a complexidade da computação per se.

O momento atual da ciência de dados se parece muito com o da indústria de software nos anos sessenta. Em 2011, Marc Andreessen cunhou a famosa frase “software is eating the world”[2] (software está comendo o mundo – em referência às gigantes de software “engolindo” as empresas tradicionais), porém hoje sabemos que não era só de empresas que o software se alimentava, mas também de dados. Em pouco mais de uma década passamos de 5 para 97 zetabytes em volume de informação total estimada no mundo[3]. O crescimento é enorme, assim como as dúvidas sobre as melhores formas de tratar toda essa informação e quais disciplinas formam um bom profissional.

Olhando pelo lado positivo, a nova ciência tem a vantagem de ter nascido no borbulhante mundo digital dos anos 2000, já trazendo muito da cultura tecnológica contemporânea nos seus cromossomos. As práticas de compartilhamento e reaproveitamento de ideias, padrões de implementação, abstração de problemas complexos em componentes reutilizáveis, práticas essas que demoraram 50 anos para se tornarem comuns no mundo de software, estão presentes na ciência de dados desde sua criação. Muitos dos conceitos de estruturas de dados e de diversos tipos de algoritmos se encaixam nesta categoria. Desta forma, é comum ver cientistas de dados relutantes em dedicar tempo a aprender conceitos que já estão “embutidos” nos produtos que utilizam. E eles estão certos em, se possível, economizar este tempo, aplicando-o em outras competências.

Sempre existirão problemas que requerem estruturas de dados que, para serem efetivas, precisam ser totalmente customizadas. Produzir um algoritmo eficiente de análise também pode economizar muito dinheiro. Nem todos os cientistas de dados enfrentarão esses problemas, mas alguns sim. Portanto, a importância de saber estes conceitos vai depender dos recursos disponíveis e do resultado que está se tentando atingir, e é difícil para o profissional antecipar estas situações. Em determinados casos o conhecimento das teorias pode ser a diferença entre o sucesso e o fracasso, principalmente nesta fase inicial das ciências de dados. Na dúvida, é melhor fazer a lição de casa.

[1]ACM – ASSOCIATION FOR COMPUTING MACHINERY. Communications of the ACM, Volume II, Number 3. CURRICULUM 68: Recommendations for Academic Programs in Computer Science, [S. l.], março 1968. Disponível em: https://dl.acm.org/doi/pdf/10.1145/362929.362976. Acesso em: 22 mar. 2022.

[2] ANDREESSEN, Marc. Why Software Is Eating The World. The Wall Street Journal, [S. l.], p. 1, 20 ago. 2011. Disponível em: https://www.wsj.com/articles/SB10001424053111903480904576512250915629460. Acesso em: 22 mar. 2022.

[3] BERISHA, BLEND & MËZIU ENDRIT. Big Data Analytics in Cloud Computing: An overview, fevereiro de 2021. Gráfico disponível em https://www.researchgate.net/figure/Volume-of-data-information-created-captured-copied-and-consumed-worldwide-from-2010-to_fig1_348937287

Leave a Reply

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