O mundo é um excelzão. Ou: Por que Pedro Abelardo adoraria programação
Já pararam para pensar que o mundo é um grande excelzão?
Tudo no mundo pode ser planilhado porque tudo no mundo pode ser categorizado. Tudo é uma parte de um todo maior. Tudo é categorizável. Tudo é planilhável.
O corpo humano é um classe de coisas que comporta várias partes: rosto, braços, tronco, pernas. Estas partes, por sua vez, também são classes de coisas que contém outras coisas: o rosto contém olhos, nariz, boca, orelha, cabelos. Por sua vez, estas coisas tem atributos azuis, castanho, claro, grande, pequeno etc.
Para ordenar estas coisas, coloca-se em uma tabela de 3 colunas:
Parte | Subparte | Atributos
Rosto | olhos | azuis
Rosto | nariz |feio
Rosto | orelhas | pontiagudas
Rosto | barba | castanha
Rosto | cabelo | loiro
Isto pode ser posto em linguagem de programação (python, através do Pandas) de modo a criar um dataframe:
linha_1 = pandas.Series({'Parte': 'Rosto', 'Subparte': 'Olhos', 'Atributos': 'Azuis'})linha_2 = pandas.Series({'Parte': 'Rosto', 'Subparte': 'Nariz', 'Atributos': 'Feio'})
linha_3 = pandas.Series({'Parte': 'Rosto', 'Subparte': 'Orelhas', 'Atributos': 'Pontiagudas'})
linha_3 = pandas.Series({'Parte': 'Rosto', 'Subparte': 'Barba', 'Atributos': 'Castanha'})
linha_4 = pandas.Series({'Parte': 'Rosto', 'Subparte': 'Cabelo', 'Atributos': 'Loiro'})
df = pandas.DataFrame([linha_1, linha_2, linha_3, linha_4])
df.
Isso vai gerar o seguinte dataframe:
Recomendados pelo LinkedIn
Agora imagine o mesmo processo feito com absolutamente TODO objeto do mundo real. Voilà! Temos um gigante excelzão do mundo: árvores, carros, pessoas, linguagens, filmes, músicas... absolutamente tudo pode virar um dataframe. Eis que temos um big data do mundo.
Ok. Mas para quê serve um planilhamento do mundo? Para satisfazer o ímpeto de organização de um virginiano doido? Não. A justificativa é bem mais filosófica e também mais utilitária.
Um dos grandes problemas da filosofia tem a ver com os universais: os universais, na idade média, eram termos de classes de coisas genéricas, mas que não existiam no mundo real. Por exemplo, mamíferos é uma classe de coisas que engloba gatos e cachorros. Contudo, não existe "O mamífero", mas coisas individuais que mamam, como gatos e cachorros. E indo mais à fundo, não existem nem gatos e cachorros, porque mesmo eles são classes de coisas individuais. No fundo só existem seres individuais, "aquele gato" ou "este cachorro", de modo que termos como "mamífero", "gato" e "cachorro" não passam de nomes genéricos universais para coisas inexistentes. No fundo, só existem coisas reais, presentes, aqui e agora. Todo o resto são nomes genéricos. Termos abstratos universais não existem nem no mundo real, nem na mente. Os conceitos não são realidade (res), mas apenas palavras (vocis). A consequência do nominalismo: presenteísmo, empirismo, experimentalismo e uma rejeição da metafísica.
Contudo, a posição oposta do nominalismo, o realismo, afirma que o termos abstratos existem objetivamente antes da coisa (ante rem) ou nas coisas (in re) ou depois das coisas (post rem). Ou seja, o termo "mamífero" provém antes dos gatos e cachorros, estão nos próprios gatos ou cachorros ou vem depois dos gatos e cachorros. Mais facilmente: quando alguém classifica algo como "mamífero" ele o faz com base em uma idéia anterior do que é um gato ou cachorro, o faz com base no fato gatos e cachorros mamam, ou o faz com base no fato de que "mamífero" é apenas um conceito mental para designar uma realidade no mundo.
Pedro Abelardo, um medieval, assumia essa posição: nomes abstratos de classes de coisas existem, porém não no mundo real, mas somente na mente como um conceito.
Dito isso, voltemos.
As linguagens de programação orientadas à objetos, como o Python, se usam o tempo todo de classes de coisas para criar seus objetos que emulam ações no mundo real. A base da OOP é exatamente isso: conseguir classificar coisas adequadamente. Classes de coisas pertencem ao mundo real, à mente ou apenas expressam conceitos mentais?
Quando criamos classes, estamos abrangendo conceitos mentais transpostos para a linguagem de programação.
Quando criamos um dataframe no Pandas estamos trabalhando no fundo, com estes mesmos problemas filosóficos de fundo. O "excelzão" do Pandas é uma representação otimizada, depurada, organizada de nomes abstratos que contem outras coisas com atributos dentro. Isso não somente para organizar o mundo real, mas porque a linguagem natural é profundamente confusa, cheia de ambiguidades que não servem para a programação. A programação é uma linguagem que tenta ao máximo depurar a linguagem natural de suas ambiguidades para ser inteligível para a linguagem da máquina. Isso soluciona inúmeros problemas e inclusive faz coisas incríveis. Com essa linguagem artificial podemos dar ordens para a máquina fazer o que queremos. É só saber pedir com jeitinho. É só conhecer a linguagem. É só pedir, e ela faz.
Pedro Abelardo, o medieval, iria adorar uma linguagem de programação OOP porque veria que, talvez, ele foi quem chegou mais perto da realidade: nomes abstratos são conceitos mentais que surgem depois da observação das coisas do mundo real e tem valor meramente utilitário. Mas não é porque não existem, que não são úteis. Nem tudo o que é útil, existe no mundo real. Nomes abstratos e classes de coisas que podem ser planilháveis não existem mas organizam tão bem nosso mundo confuso!