Recentemente, deparei com uma idéia apresentada por Jaron Lanier chamada "programação fenotrópica".
A idéia é usar interfaces de "superfície" em vez de interfaces de ponto único em programas de computador que utilizam estatísticas para descobrir erros menores que normalmente causariam um programa "clássico" travar catastroficamente.
A descrição de duas linhas está aqui:
De acordo com Jaron, a "diferença real entre a idéia atual de software, que é a aderência ao protocolo, e a idéia [que ele está] discutindo sobre reconhecimento de padrões, tem a ver com os tipos de erros que estamos criando" e se "não" Se não encontrar uma maneira diferente de pensar e criar software, não escreveremos programas maiores que 10 milhões de linhas de código, independentemente da rapidez com que nossos processadores se tornem.
A explicação um pouco mais longa está aqui . E a explicação ainda mais longa está aqui .
Então, a pergunta, olhando para além das óbvias conotações de robô-senhorio que as pessoas tendem a entender, como alguém realmente projetaria e escreveria um "programa fenotrópico"?
phenotropic program
.Respostas:
Lanier inventou uma palavra de 50 centavos na tentativa de lançar uma rede em torno de um conjunto específico de idéias que descrevem um modelo computacional para criar programas de computador com certas características identificáveis.
A palavra significa:
A ideia vem em grande parte da biologia. Seu olho faz interface com o mundo, não através de uma função como
See(byte[] coneData)
, mas através de uma superfície chamada retina. Não é uma distinção trivial; um computador deve verificar todos os bytesconeData
um por um, enquanto o seu cérebro processa todas essas entradas simultaneamente.Lanier afirma que a última interface é mais tolerante a falhas, o que é (uma única
coneData
falha pode quebrar todo o sistema). Ele afirma que ele permite a correspondência de padrões e uma série de outros recursos que normalmente são difíceis para computadores, o que faz.O mecanismo "fenotrópico" por excelência em um sistema de computador seria a Rede Neural Artificial (RNA). É preciso uma "superfície" como entrada, em vez de uma interface definida. Existem outras técnicas para alcançar alguma medida de reconhecimento de padrões, mas a rede neural é a mais alinhada com a biologia. Fazer uma RNA é fácil; é difícil fazer com que ele execute a tarefa que você deseja que seja executada de maneira confiável, por vários motivos:
Se você estiver disposto a se separar da biologia, poderá dispensar o modelo biológico (que tenta simular a operação dos neurônios biológicos reais) e construir uma rede que seja mais intimamente aliada aos "neurônios" reais de um sistema de computador digital (lógica portões). Essas redes são chamadas de redes lógicas adaptativas (ALN). A maneira como eles funcionam é criando uma série de funções lineares que se aproximam de uma curva. O processo é mais ou menos assim:
... onde o eixo X representa alguma entrada no ALN e o eixo Y representa alguma saída. Agora imagine o número de funções lineares expandindo-se conforme necessário para melhorar a precisão e imagine que o processo ocorra em n dimensões arbitrárias, implementado inteiramente com portas lógicas AND e OR, e você tenha alguma noção da aparência de um ALN.
Os ALNs têm certas características muito interessantes:
Portanto, um programa fenotrópico se pareceria com isso; teria uma "superfície" para entrada, uma arquitetura e comportamento previsíveis e seria tolerante a entradas barulhentas.
Leitura Adicional
Uma Introdução às Redes Lógicas Adaptativas com um Aplicativo para Auditar a Avaliação de Riscos
"Orientado a Objetos" vs "Orientado a Mensagens", de Alan Kay
fonte
See(List<Cone> cones)
(onde cada umCone
é independente um do outro), sim?Acho que estamos no começo de uma das etapas necessárias para chegar lá e que está reunindo muitos dados em formatos que podem ser analisados. Internet, pesquisas no Google, Fitbit (todos os passos que você der, todos os seus passos, estarei observando você.), FourSquare, uma localização geográfica de smartphones, postagens no Facebook e dados de perguntas do SO estão sendo reunidos. Não estamos nem perto da quantidade de dados sensoriais que o ser humano médio compila ao longo da vida, mas estamos chegando perto.
Comece a categorizar milhões de fotos de pássaros e obtenha feedback de pessoas dizendo que não é um pássaro e comece a criar um algoritmo. A partir daí, uma impressão mais confusa (eu chamaria de modelo, mas isso é muito exato para o que estamos tentando codificar).
Como um cão de estimação sabe tanto sobre o dono? Porque isso a assiste muito. O cão ouviu carros entrando na calçada e correlacionando isso com o proprietário abrindo a porta da frente que parece que o cachorro pode reconhecer um carro pelo som. Poderíamos fazer isso também, mas não vemos razão para atender a isso. E é isso que está errado com o software atual, ele não presta atenção ao que o usuário está fazendo. Apenas espera que o usuário faça o que a TI espera que ele faça.
Algo tão simples como definir um despertador poderia ser feito com uma pequena observação / análise dos meus hábitos atuais. Desistimos de definir os cronômetros do videocassete antes que a tecnologia fosse substituída pelo digital. E isso teria acontecido tão rápido se pudéssemos conectar o TV Guide com o videocassete? Eu assisti ao mesmo programa de TV 4 semanas seguidas ao mesmo tempo, mas no quinto, eu nem liguei a TV. Obviamente, eu quero gravá-lo. Você não pode dizer que estou ficando atrasado no trabalho escrevendo este post e com o meu trajeto típico não chegará em casa a tempo? Você tem os dados, faça as contas.
Reúna mais e mais dados e, em seguida, você poderá encontrar maneiras melhores de analisá-las, reconhecê-las e encobri-las. Estamos indo além do que pode ser inserido apenas a partir de um teclado com nossas câmeras de telefone e, em breve, câmeras de vidro ocular. É apenas o começo.
fonte
Aqui está um conjunto de slides para definir uma linguagem de programação probabilística no Scala .
É o primeiro exemplo de implementação decente para alguns dos componentes principais do sistema que Jaron Lanier propõe.
fonte
Um pensamento que tive recentemente:
Se você usou idéias de alto nível, como o Haskell, talvez o Monad, para agrupar chamadas de procedimento remoto para outros sistemas. Você envia uma solicitação ao servidor. Mas nada volta (o servidor está quebrado). Ou uma promessa volta (o servidor está ocupado) e seus programas continuam trabalhando com esses valores Nenhum ou Prometido. É como a tolerância a falhas que Lanier está procurando.
Talvez haja maneiras de encapsular outras eventualidades. Por exemplo, chamadas remotas que retornam com uma aproximação cada vez mais refinada ao longo do tempo por algum tipo de negociação em segundo plano. ie o que volta é algo como uma promessa, mas não apenas "continue segurando e trabalhando com isso e um valor adequado aparecerá em breve" mas "continue segurando e trabalhando com isso e uma melhor aproximação aparecerá em breve". (E de novo e de novo). Isso poderia ocultar muitas falhas do programador, assim como os protocolos de rede ocultam muitas falhas de rede de baixo nível do programador.
fonte