911, emergência?
911, qual é a sua emergência?
911, qual é...
A 9 de abril de 2014, os serviços do 911 pararam
para milhões de pessoas nos Estados Unidos.
Estiveram em baixo durante seis horas.
Mais de 6000 chamadas de emergência não foram atendidas.
O governo localizou o problema num computador
numa instalação em Englewood, Colorado.
Foi um simples erro de programação.
Os responsáveis pelo código do computador
escolheram fazê-lo com um limite máximo do número de chamadas que registava,
um limite que acharam ser impossível de atingir.
Mas, nessa noite de 2014, atingiu.
O computador seguiu as instruções perfeitamente.
Atingiu o limite e parou de redirecionar chamadas.
O problema não era o computador,
nem um mau funcionamento do código.
Era o código,
o processo de tomada de decisão no qual as pessoas comunicam
com o computador.
Este tipo de poder vem com muita responsabilidade ética.
Não há nada igual.
Não há nada que o substitua.
Tal como
os construtores duma cidade determinam como a vida é aí vivida,
acho que o código controla como vivemos online, ou seja, como vivemos.
Não só quando vamos à Internet,
mas ao contactar serviços de emergência...
... ir ao médico...
... ou entrar num carro.
Estamos todos perto do código todos os dias.
Porém, só cerca de um terço de um 1 % de nós sabe como o escrever.
Para a maioria, é uma caixa negra.
Mas não tem de ser.
Como é que o código funciona mesmo?
E que novo mundo estamos a construir com ele?
UMA SÉRIE DOCUMENTAL ORIGINAL NETFLIX
O computador.
Um conjunto engenhoso de hardware eletrónico
criado pelo homem.
Não é que não tenhamos máquinas adequadas para resolver problemas,
mas faltam-nos as descrições adequadas de como resolvê-los.
Quando alguém fala em programação, pensa-se que é muito difícil.
É importantíssimo lembrar que tudo o que usamos num computador
foi criado por um ser humano.
PROGRAMAÇÃO
Aparecia um alien e dizemos: "Ok, que importa o código?
O que é?"
Eu diria: "Bem, sabes,
vivemos nesta espécie de terra física e, há 50 anos,
um pequeno grupo de pessoas começou a criar outro planeta.
Mas não era físico. Era virtual.
Olha em redor na rua, vês as pessoas a descer a rua
cabeça baixa, a olhar para o telemóvel?
Estão nesse outro mundo.
É isso que o código é.
Os blocos de construção desse mundo.
Este tear é o antepassado de todos os computadores e telemóveis
da Terra.
Foi inventado em 1804
e a grande inovação eram estes cartões.
Os buracos em cada cartão só permitiam passagem a certos pinos.
Com milhares de buracos em centenas de cartões,
os tecelões podiam fazer padrões mais complexos do que nunca.
Os xailes elaborados tornaram-se populares na Europa.
E os designs tecidos eram tão elaborados que pareciam desenhos,
como este feito no tear do inventor.
Antes destes teares, os fios individuais tinham de ser escolhidos a dedo
por "rapazes de palhas".
A matemática da época era feita à mão,
pelos supostos "computadores".
Os primeiros computadores eram pessoas.
E as melhores máquinas ao nosso dispor
só podiam resolver um tipo de problema,
como o ábaco para somar e subtrair.
O matemático britânico Charles Babbage queria uma máquina
para resolver qualquer problema matemático
que lhe fosse pedido, ou melhor,
programado para fazer.
Ele propôs uma máquina a que chamava "Máquina Analítica".
A sua ideia dar-lhe-ia um lugar na História.
Os computadores foram inventados primeiro
por Babbage,
um inventor britânico excêntrico.
Babbage tivera inspiração sobre como funcionaria.
Tinha uma cópia desta imagem pendurada em casa.
A Máquina Analítica de Babbage, como o tear de Jacquard,
tinha partes físicas: "hardware".
E, tal como o tear,
podia dar-se instruções ao hardware na forma de cartões com buracos.
Os pinos passavam pelos buracos
e a ausência de buracos obrigava os pinos a recuar,
ativando uma cadeia de cálculos mecânicos.
Os cartões com buracos diferentes
são software.
Babbage nunca acabou a sua Máquina Analítica,
mas uma jovem que trabalhava com ele viu o seu enorme potencial
além da matemática.
Ada Byron, Condessa de Lovelace, escreveu:
"os limites da aritmética foram ultrapassados assim que a ideia
de aplicar os cartões ocorreu..."
Ela viu o que Jacquard vira:
os buracos podiam representar mais do que só números.
Podiam ser padrões,
músicas...
... ou frases inteiras.
È como um tipo de código Morse.
Cada letra do alfabeto do código Morse é expressa em apenas dois sinais:
... ou...
É binário.
E, com estes sons, podemos fazer qualquer coisa,
como este pedido de ajuda enviado pelo Titanic em 1912.
SOS não é algo sem significado.
É só muito fácil de enviar em Código Morse.
Da mesma forma, podemos pensar em todas as letras como uma combinação
de zeros e uns.
Parece-vos familiar?
Isto é código binário.
E é assim que cobrimos a diferença entre as máquinas e a linguagem humana.
Cada um ou zero é um dígito binário, ou "bit".
Estes são os átomos da computação moderna.
Podem conhecê-los por outro nome:
oito bits são um byte.
Sabem aquela imagem no computador, com 1,1 megabytes?
São oito milhões e oitocentos mil uns e zeros.
Tal como traços e pontos do código Morse são uma forma de escrever... e...,
os uns e zeros do código binário são só a forma como escrevemos
o que se passa num computador moderno:
com ou sem bateria.
Isto é um simples circuito elétrico.
Imaginem milhões a funcionar juntos.
É um computador atual.
Num circuito elétrico, isto é um bit.
A lâmpada está apagada? Zero.
Acesa? Um.
Os computadores só percebem eletricidade,
então tudo o que os programadores fazem num computador é,
no fim de contas,
uma série de cargas ligadas e desligadas.
E funciona porque, ligadas corretamente,
estas cargas podem representar a lógica.
A lógica é uma série previsível de factos ou eventos,
tal como desligar este botão...
... e este para tocar a campainha.
Na verdade, o pessoal dos computadores chama a isto "Circuito Lógico AND".
Ou "portão" de lógica.
Vamos ver se faço isto sem fazer um buraco na mesa.
Num portão AND, ambos os circuitos têm de estar fechados
para a luz acender.
E há portões OR,
onde a luz se acende se um dos circuitos estiver fechado.
Por outras palavras.
Se um dos circuitos estiver fechado, então a luz acende-se.
Esse tipo de afirmação "Se... então...",
é um algoritmo.
Na cultura pop atual, a palavra algoritmo causa muita confusão.
Já vimos isto antes, quando os algoritmos endoidecem!
A forma como os algoritmos trabalham é um mistério para a maioria.
Mas que raio é um algoritmo?
Mas um algoritmo é só um conjunto de indicações.
Imaginem que entram numa loja.
Podem virar à esquerda, depois à direita.
Ou podem só virar à direita e depois à esquerda.
Ou podem virar quatro vezes à esquerda,
correr pelo parque,
atravessar a rua
e virar quatro vezes à direita.
Tal como há direções diferentes para ir ao mesmo sítio,
na programação, pode haver muitos algoritmos diferentes
para o mesmo problema.
O objetivo é encontrar o mais elegante, o mais eficiente.
Código bonito não se repete.
É muito elegante. É poderoso.
Os computadores que usavam algoritmos só faziam o que lhes pediam,
mas muito mais depressa,
o que tornou as pessoas mais poderosas.
Quando os cientistas desenvolveram a bomba de fusão,
usavam, principalmente, computadores humanos.
Mas depois começaram a usar este:
o computador ENIAC, durante 6 semanas, fez cálculos termonucleares.
Os resultados contribuíram para isto,
o primeiro teste bem-sucedido, em 1952,
de uma bomba muito mais poderosa do que as bombas de fissão atómica
largadas em Hiroshima e Nagasaki
durante a Segunda Guerra Mundial.
O poder do código ampliou o poder das pessoas para
fazer o que quisessem.
Mas... nos anos 40, ainda exigia muito trabalho.
Escrever programas com zeros e uns não é fácil de escalar.
As pessoas queriam mais do poder que a programação dava.
Mas queriam uma forma fácil de programar.
A história da programação desde então foi a história de aproximar a programação
da linguagem humana
inventando o que quase todos programadores usam atualmente:
linguagens de programação.
Comparadas com uns e zeros, estas linguagens são muito abstratas.
A abstração é uma palavra difícil.
As linguagens mais abstratas resumem-se aos mesmos uns e zeros,
só arranjámos melhores formas de os organizar.
Pode-se pensar em termos biológicos.
Os humanos são complexos,
mas 99 % dos nossos corpos são feitos de apenas seis elementos.
É possível aumentar até às grandes moléculas.
Entre essa camada de organização e a camada
do ser vivo mais simples
está um grande passo.
E os humanos têm cérebros,
que fazem coisas tão avançadas
que custa a crer que são feitos da mesma coisa.
Os computadores são assim, mas mais simples.
São as boas notícias.
A história da programação é a história de elevar esta caixa,
afastando-a do binário para darmos a nós mesmos
formas mais fáceis, rápidas e mais poderosas de programar
sem termos de lidar com ou sequer perceber,
os portões binários e de lógica subjacentes.
É isso que permite aos programadores fazer os produtos
que todos conhecemos.
O primeiro passo para chegar aqui foi...
"Linguagem de montagem", que é mais fácil de ler e escrever,
onde, em vez de dizer 0-1-0-0-0-1-1-1,
chamamos-lhe "somar",
depois temos um programa chamado Assembler a traduzir as letras
S-O-M-A-R aos zeros e uns equivalentes e apropriados.
Neste nível, o binário é organizado por letras e números,
tal como os átomos são organizados em moléculas.
Mas a programação na linguagem de montagem ainda não é exatamente fácil
porque todos os computadores usam linguagens diferentes.
Ao escrever um programa num computador, não funcionaria em nenhum dos outros.
Rapidamente, começou-se a pensar
que o que queremos dar ao computador
são coisas em termos que usamos todos os dias.
Temos linguagens de programação
que construímos usando
a linguagem de montagem
e, com essas linguagens, construímos mais.
Já devem ter ouvido falar delas.
- LISP... - BASIC...
- Java... - C++...
- Python 3... - HTML 5...
PEARL, PHP, um pouco de C...
Tal como as línguas faladas são formas diferentes
de expressar a mesma ideia a outras pessoas,
linguagens de programação são só formas diferentes de expressar
a mesma ideia a computadores.
Temos mais de uma linguagem de alto nível
porque, antes de mais, linguagens diferentes
respondem a necessidades diferentes.
Vejam estas duas.
Esta, COBOL, foi criada no fim dos anos 50
para tornar facilitar a programação para as empresas.
Parece-se com inglês mas se todas as conversas
acabassem com "STOP RUN".
Esta, CPL, foi criada nos anos 60 e inclui mais computação científica.
É como evolução biológica.
Ao se tornarem mais complexos, os organismos adquirem traços
que os tornam melhor preparados para ambientes específicos.
E, francamente, é uma questão de gosto.
Há quem goste de diferentes ferramentas para se expressar.
Por exemplo, a linguagem C++...
O Elon Musk não é fã.
Podíamos inventar uma.
Esta é uma linguagem de alto nível criada só com a palavra "moo".
A sério. Chama-se COW.
Esta é feita com citações de filmes do Arnold Schwarzenegger.
Sempre que penso: "Ok, já devemos ter suficientes",
aparece alguém com uma nova e ganha um grupo de fãs.
Não vejo um fim à criação de novas linguagens.
E todas estas linguagens ainda se baseiam na lógica.
Por exemplo, um programador na Netflix poderia dizer:
"Se estão a ver há mais de duas horas,
mostra isto."
Mas para a programação impactar a vida de mais pessoas,
a maioria tinha de usar computadores.
Ou seja, estes tinham ser mais fáceis,
intuitivos,
e isso exigia outro grande salto.
O que começou aqui,
numa demonstração de Doug Englebart em 1968.
Num segundo, vamos ver o ecrã em que trabalha
e a forma como o ponto se move
em combinação com os movimentos daquele rato.
As pessoas, atualmente, não programam escrevendo afirmações
num pedaço de papel e dando-o a outra pessoa
que o escreve à máquina.
Sentamo-nos à frente do ecrã, há uma interface gráfica de utilizador.
Hoje, chamamos-lhes GUIs.
Com os GUIs, pode-se programar sem escrever nada.
Ou usar código de forma mais fácil.
Tipicamente, usamos ambientes de programação
do tipo que o Alan e os seus colegas
criaram de forma tão bela
no Centro de Investigação da Xerox em Palo Alto, no início dos anos 70.
"Alan."
Este Alan.
Penso nele como o pai da computação pessoal
porque foi o primeiro que articulou essa visão.
E confesso que, na altura, achei que era fição científica.
Quando são feitas grandes coisas,
costuma haver uma grande comunidade.
E o Park era fantástico com isso.
Era como magia.
A interface gráfica do utilizador permitiu a milhões de pessoas
usar computadores duma forma que lhes era natural.
Quando a Xerox anunciou GUI's em 1979,
mostraram como a programação podia mudar a vida quotidiana.
Entra no seu escritório e uma máquina Xerox
apresenta-lhe o correio matinal num ecrã.
Em breve, sistemas da Xerox como este
vão ajudá-lo a gerir o seu recurso mais precioso:
informação.
Havia pessoas como eu e muitas pessoas
nesta comunidade de investigação
queriam melhorar o mundo.
Tinham uma ideia relacionada
com a melhoria humana.
Algo que iria interagir connosco,
o público,
uma pessoa normal e que nos tornaria capazes
de fazer mais do que nunca.
Tornou-nos capazes de fazer mais.
Os GUIs foram um grande salto nesta área.
E depois veio a inovação revolucionária seguinte.
Uma nova forma de distribuir tudo
o que podíamos fazer com código.
Na televisão, começou-se a prever o que o acesso súbito
a todo este código significaria.
Imaginem que se sentam para tomar café,
ligam o computador de casa para ler o jornal do dia.
Imaginem um mundo onde todas as palavras já escritas, todas as imagens de quadros,
todos os filmes já filmados, podem ser vistos em casa.
Acho que estamos no cume de algo excitante e aterrador.
Mas é só uma ferramenta, não é?
Não, não é.
Os produtos de software de maior impacto usam todas estas inovações.
Um aluno universitário usou uma linguagem de alto nível, PHP,
para fazer algo partilhado em toda a Internet,
para ser usado em computadores com GUIs.
Descreveu-o na sua primeira entrevista em 2004.
É um diretório online que liga as pessoas
em universidades e faculdades
através das suas redes sociais.
Agora temos 100 000 pessoas, quem sabe o que vamos alcançar.
O que iam alcançar era mais de dois mil milhões de pessoas
no Facebook, mensalmente.
Atualmente, os programadores moldam a vida de milhões de pessoas.
Como trabalham, compram, comem, namoram e relaxam.
O que estão a fazer agora?
Estão a ver-me num navegador web da Netflix.
A Netflix em si é código e é ativado num navegador web
que é código,
executado num computador que é feito usando código.
É algo interminável.
Programar bem é como ser o arquiteto dum museu
em que milhões de pessoas pensam,
ao qual vão passear e usam todos os dias.
Acho que não há nada como programar, porque se parece com criação pura.
Há uma ideia sobre como algo deve funcionar.
Depois, sentamo-nos em frente a um computador
e tornamo-la realidade.
Acho que há muita responsabilidade nesse papel.
Há um limite de velocidade.
Não ultrapassar 96 quilómetros por hora.
Está bem.
Mas se tivessem um carro e o computador dissesse:
"Este carro não vai ultrapassar 96 quilómetros por hora?"
É uma forma diferente de controlar o comportamento.
Controlando as nossas escolhas, a programação na nossa vida exerce
um efeito regulatório quase mais profundo do que uma lei conseguiria.
E isso pode ser algo bom.
Há seis milhões de acidentes de carros nos EUA, todos os anos,
e uma análise descobriu que 94% deles foram causados pelo condutor.
Os avanços na programação podem salvar milhões de vidas.
Mas também podem pôr vidas em risco de novas formas.
Tenho algo chamado cardiomiopatia hipertrófica,
que é o termo médico para ter um grande coração.
O meu coração é literalmente grande.
É três vezes maior do que o coração duma pessoa normal.
Descobri quando tinha 30 anos e o meu risco de morrer aos 40 anos
era muito grande.
O eletrofisiologista disse: "Isto não é problema
porque pode usar um pacemaker desfibrilhador."
Este aparelho funciona com código.
Há um par de anos, quando estava grávida, o meu coração estava a palpitar.
Cerca de um quarto das mulheres tem palpitações, é perfeitamente normal.
Mas o meu aparelho achou que era um ritmo estranho
e chocou-me.
Os produtores dos aparelhos não querem que mulheres grávidas sejam chocadas.
É literalmente a última coisa que querem.
Só não o tinham considerado.
Há um grande conjunto de decisões
e são os programadores que as vão tomar.
E, inevitavelmente,
vai haver uma combinação de circunstâncias
que não terão antecipado.
O que tentamos ensinar
quando ensinamos
a programar
é como pensar
em todas estas condições diferentes.
Como tentar ser exaustivo
sem ficar paralisado pelo número de coisas
que se devem considerar.
E isso tornar-se-á mais verdadeiro porque começámos a programar
duma forma completamente nova.
Na programação tradicional, são escritas instruções para um computador.
Mas agora podemos dar ao computador conjuntos de recursos
e resultados,
e fazer com que ele escreva as instruções.
O que se faz é
dar ao computador
muitos exemplos
e dizer: "Isto é uma festa."
E depois há outras coisas.
Um consultório: não é uma festa.
Uma sala de aula: não é uma festa.
Um computador vai olhar para isto e tentar construir
um sistema de classificação.
Isto é aprendizagem de máquina.
Atualmente, se alguém fala de inteligência artificial,
é a isto que se referem.
É toda uma nova forma de abstração
e de fazer coisas
porque não corresponde à forma como fazemos estas coisas.
Chamam-se algoritmos de aprendizagem de máquina porque o computador cria
o seu próprio conjunto de instruções a seguir.
Mas, no fim de contas, também são traduzidos
em pequenas instruções.
O Google Tradutor tinha mais de um milhão de linhas de código.
São pessoas a escrever um milhão de pequenas instruções.
Atualmente, o Google Tradutor tem 500 linhas de código
e usa a aprendizagem de máquina.
Suponhamos que, por causa dum erro, nenhuma das fotos de festas inseridas
incluía pessoas negras ou hispânicas.
O computador pode decidir que uma regra das festas
é que só pessoas brancas e asiáticas são convidadas.
Há muitas pessoas brancas e asiáticas que programam.
Devíamos expandir quem está na sala de design,
por muitas razões.
Colocarão melhores questões se houver mais experiência de vida.
Mas, no fim de contas, ao alimentar o sistema de dados de aprendizagem
como o sistema de justiça criminal com racismo estrutural nos dados,
digamos que os programadores
parecem um anúncio da Benetton,
com raças diferentes, caras diferentes, diferentes contextos socio-económicos...
... o sistema de aprendizagem aprenderá com os dados.
Sem as pessoas a tentarem corrigir isso ativamente,
os dados históricos podem levar-nos a repetir os erros do passado.
A história da programação é uma história de ambição
e criatividade.
Lançamento do foguetão Falcon 9.
Vimos o que pensávamos ser impensável.
Um buraco negro.
Estamos a criar um mundo novo
com mais ferramentas intuitivas
que um maior número de pessoas pode usar
para ajudar a garantir que o mundo é melhor.
Estamos numa jornada para tornar os computadores mais acessíveis
aos seres humanos e a um maior conjunto de seres humanos.
Estamos a ver esta revolução a decorrer à nossa frente nos últimos 50 anos.
Daí ser excitante estar vivo hoje.
É muito importante lembrarmo-nos de que tudo o que usamos no computador
foi criado por um ser humano.
Podes ser uma dessas pessoas e é muito importante
que o sejas.
Podes mudar o mundo duma forma fundamental.
Há um mundo que vai ser governado usando aprendizagem de máquina
e dados e programação tradicional em cada vez mais formas.
Como sociedade, devemos dizer:
"Ok! Temos esta nova tecnologia potente
e, de certa forma, pode ser ótimo mas não o será sozinho."