Depois de inventar o cálculo, as tabelas atuariais e a calculadora mecânica e cunhar a frase “o melhor de todos os mundos possíveis”, Gottfried Leibniz ainda sentiu que o trabalho de sua vida estava incompleto. Desde a infância, o polímata do século XVII sonhava em criar o que ele chamou de característica universalis– Uma linguagem que representava perfeitamente todas as verdades científicas e tornaria as novas descobertas tão fáceis quanto escrever frases gramaticalmente corretas. Esse “alfabeto do pensamento humano” não deixaria espaço para falsidades ou ambiguidade, e Leibniz funcionaria nele até o final de sua vida.
Uma versão do sonho de Leibniz vive hoje em linguagens de programação. Eles não representam a totalidade do universo físico e filosófico, mas, em vez disso, a próxima melhor coisa-os sempre flutuantes e zeros que compõem o estado interno de um computador (binário, outra invenção do Leibniz). Cientistas da computação corajosos ou loucos o suficiente para construir novos idiomas perseguir seus próprios característica universalisum sistema que poderia permitir que os desenvolvedores escrevam código tão expressivo que não deixa cantos escuros para os insetos ocultarem e tão evidentes que comentários, documentação e testes de unidade se tornam desnecessários.
Mas a expressividade, é claro, é tanto sobre o gosto pessoal quanto a teoria da informação. Para mim, assim como ouvir Contagem regressiva para o êxtase Quando adolescente, consolidou uma afinidade ao longo da vida de Steely Dan, meu gosto por linguagens de programação foi mais moldado pelo primeiro que aprendi sozinha-o objetivo-C.
Argumentar que o Objective-C se assemelha a uma linguagem metafisicamente divina, ou mesmo uma boa linguagem, é como dizer que Shakespeare é melhor apreciado no latim de porco. Objetivo-C é, na melhor das hipóteses, polarizando. Ridicularizado por sua verbosidade implacável e suportes parecidos peculiares, é usado apenas para criar aplicativos Mac e iPhone e teria desaparecido na obscuridade no início dos anos 90, se não fosse por uma Quirk da História improvável. No entanto, no meu tempo trabalhando como engenheiro de software em São Francisco no início de 2010, eu me vi repetidamente em bares de mergulho em Soma ou nos comentários de Hackernews defendendo suas opções de design mais pesadas.
Objective-C veio até mim quando eu mais precisava. Eu era um veterano em ascensão e descobri um interesse em ciência da computação tarde demais para se formar nela. Quando adulto, tem idade suficiente para beber, eu assisti os adolescentes correndo círculos ao meu redor em aulas de engenharia de software de nível básico. Os smartphones estavam apenas começando a proliferar, mas percebi que minha escola não oferecia nenhuma aula de desenvolvimento móvel – eu havia encontrado um nicho. Eu aprendi Objetivo-C naquele verão com uma série de livros com tema de cowboy intitulada O Big Nerd Ranch. A primeira vez que escrevi código em uma tela grande e o vi iluminar pixels na tela pequena da minha mão, caí com força para o Objective-C. Isso me fez sentir o poder intoxicante da auto-expressão ilimitada e deixe-me acreditar que eu poderia criar o que eu poderia imaginar. Eu havia tropeçado em uma linguagem verdadeiramente universal e amei tudo sobre isso – até que não.
Torção do destino
O Objective-C surgiu nos primeiros dias da era de programação orientada a objetos e, por todas as contas, nunca deveria ter sobrevivido a ele. Na década de 1980, os projetos de software haviam crescido demais para uma pessoa, ou mesmo uma equipe, para se desenvolver sozinha. Para facilitar a colaboração, o cientista da Xerox Parc Alan Kay criou a programação orientada a objetos-um paradigma que organizou código em “objetos” reutilizáveis que interagem enviando “mensagens”. Por exemplo, um programador pode criar um objeto de timer que poderia receber mensagens como Start, Stop e ReadTime. Esses objetos podem ser reutilizados em diferentes programas de software. Na década de 1980, a emoção sobre a programação orientada a objetos era tão alta que um novo idioma estava sendo lançado a cada poucos meses, e os cientistas da computação argumentaram que estávamos no precipício de uma “revolução industrial de software”.
Em 1983, Tom Love e Brad Cox, engenheiros de software da International Telephone & Telegraph, combinaram programação orientada a objetos com a sintaxe popular e legível da linguagem de programação C para criar o Objective-C. A dupla iniciou uma empresa de curta duração para licenciar o idioma e vender bibliotecas de objetos, e antes de ser uma barriga, eles desembarcaram o cliente que salvaria sua criação de cair na obscuridade: a seguir, a empresa de computadores Steve Jobs fundou após sua expulsão da Apple. Quando Jobs retornou triunfantemente à Apple em 1997, ele trouxe o sistema operacional do Next-e Objective-C-com ele. Nos 17 anos seguintes, a criação de Cox e Love alimentaria os produtos da empresa de tecnologia mais influente do mundo.
Eu me familiarizei com o Objective-C uma década e meia depois. Vi como objetos e mensagens assumem uma estrutura de frase, pontuada por colchetes, como [self.timer increaseByNumberOfSeconds:60]. Essas não eram frases de Hemingwayesque, mas longas, florais, proustianas, sintaticamente complexas e evocando imagens vívidas com nomes de funções como scrollViewDidendDragging: WillDecelerate.