Uma simples explicação de simplicidade. Capítulo 1: Teoricamente Simples

Uma explicação simples da simplicidade


imagem
PAC com áreas que teremos que visitar para responder à pergunta PRINCIPAL.

Prefácio


Muitas vezes ouvi conselhos: facilite.

E o que significa simples? Quando dizemos que o objeto X é simples, quais são nossas expectativas para X? Quando dizemos que algo é mais fácil que outro - como o avaliamos?

O que é mais fácil:
“Uma sentença pequena de cinco palavras” ou a palavra “desoxirribonucléico”?
"6 * 5" ou "481"?

Ou então:
Você tem uma tela de configurações. Cinco deles estão relacionados à programação, os outros cinco a notificações. Você precisa criar itens separados de "agendamento" e "notificação" no menu principal? Ou deixar todos os 10 pontos em uma tela? O que será mais fácil para o usuário?

Você pode dizer que isso é subjetivo. Que isso é determinado por um tipo de "senso de simplicidade", que para uma pessoa algo pode ser simples e para outro complexo.

Ok, então me diga por que o professor gasta tempo explicando algo mais fácil? Por que editar o texto, tentando facilitar? Por que os programadores gastam tempo revisando o código tentando descobrir em qual solução é mais fácil entender e expandir?

Se a simplicidade se correlacionar de alguma forma com a nossa avaliação, a melhor estratégia é a persuasão. Vamos fazer com que os leitores acreditem que o texto é simples. Ou colegas, acreditavam que nossa decisão não era difícil.

Mudará qualitativamente a interação deles com o resultado do nosso trabalho?

Não.

Seu texto não será mais fácil de ler porque é considerado simples. Não será mais fácil trabalhar com seu código, mesmo que todos ao seu redor pensem que sua complexidade é a mesma de uma banqueta.

Se você foi informado em uma entrevista que a empresa possui código limpo e boa documentação, e você acreditou, isso não afetará a simplicidade de trabalhar com o código.
Além disso, mesmo que todo o departamento acredite que o código esteja bem escrito e haja docas, isso também não afetará o resultado. Sua crença em seu código pode estar errada.

Se o código era espaguete - será espaguete. Se a "documentação" é o comentário do formato "aqui adicionei 2 números" - o código não possui documentação.
E nenhum desejo, confiança, etc. não ajudará aqui.

Isso não funciona pelo mesmo motivo ( ru , pt ), pelo qual você não pode dar a 1 de seus amigos 1 cupcake se você tiver apenas 2 caixas de 2 cupcakes cada. Mesmo se você meditar toda a empresa por um ano que 2 + 2 = 5, isso não mudará a triste situação dos cupcakes.

Mais uma vez Existe um objeto, e algumas de suas características podem fazer você pensar ( ru ) que é simples. E se amanhã sua avaliação mudar e parar na marca "difícil", o objeto não se importará.

Pode-se concluir que simplicidade ou complexidade não depende de nossas expectativas. Pelo contrário, o objeto determina qual característica iremos dar a ele.

Eu queria entender que tipo de objeto espero ver na realidade, se estou convencido ( ru ) de que é simples. E vice-versa, que características de um objeto real me fazem pensar que é simples.
Porque Bem, talvez isso facilite minha vida?)

Se você está lendo pela primeira vez
Estatísticas
Tempo de leitura: ~ 30 minutos.
Número de caracteres: ~ 25k.

Como ler um artigo
Geral
Eu não tenho autoridade em seus olhos. Intencionalmente, não forneço informações sobre mim. Gostaria que você lesse este artigo como se tivesse sido escrito por um aluno do primeiro ano. Em certo sentido, é.

Se você encontrar um momento incompreensível ou controverso - escreva sobre ele. Isso ajudará você a melhorar este artigo.

E em nenhum caso, não acredite em mim. Não quero que minhas palavras o convencam da minha inocência. Quero que o significado deles o convença da verdade.

Sobre convenções
  1. Sumário Cada capítulo começará com ele. Ele lista brevemente os problemas discutidos no capítulo e fornece links para navegar pelas subseções relevantes.
  2. Links para recursos externos. Eles são apresentados como * palavra ou frase * (links com código de idioma ) ou links regulares. Tentei fazê-lo para que você tivesse uma escolha, leia uma fonte em russo ou inglês. Infelizmente, nem sempre consegui encontrar os dois. Isso será especialmente perceptível no segundo capítulo. Runet é pobre em informações relevantes sobre neurobiologia.
  3. Spoiler "brevemente". Está localizado imediatamente após o título da subseção do capítulo. Seu objetivo é simplificar o trabalho com o artigo, se você já o leu. Você pode usá-lo para ler rapidamente um artigo. Mas tenha cuidado! Primeiro, você pode não entender o que está escrito lá sem ler a própria subseção. Esta é uma tese condensada, e não o caminho ( ru , en ) para ela. Em segundo lugar, ainda mais perigoso - pode parecer que você entende tudo. O que é uma falsa compreensão e por que ela surge será explicado nos próximos capítulos.
  4. Spoiler "É TEMPO DE MATEMÁTICA". É usado para não assustar você com cálculos matemáticos. Duplica as informações que antes eram apresentadas na forma de texto, mas de maneira mais formal.



Informação geral
Sobre a série
Uma explicação simples é simples - é uma série de artigos unidos por uma pergunta comum: "O que é" simples "do ponto de vista humano?"

No momento, estão planejados 3 capítulos:

  • Teoricamente simples - este capítulo é dedicado à redação da pergunta e às principais definições associadas a ela. Você está aqui.
  • Machine Ex Homo é um capítulo em que olhamos para nossa consciência, começando no nível comportamental superior e terminando com conexões neurais em nosso cérebro. O capítulo foi escrito e está sendo editado.
  • Apenas lendo - é dedicado a pessoas que leem qualquer modelo, seja esquemas, códigos, gráficos, texto. Este será o primeiro capítulo prático de nossa série, aqui aplicaremos nosso conhecimento e veremos como a informação deve ser estruturada para facilitar seu entendimento. Chefe no processo de escrita.

Esta não é uma lista completa de perguntas para as quais gostaria de encontrar uma resposta. Mas eu quero começar com eles.

Um artigo separado será publicado sobre o motivo pelo qual eu lido com essa questão. Digamos apenas sobre a motivação do autor e como ele vê esta série. Este artigo será escrito após os três primeiros capítulos.

Por que este artigo apareceu?
Já deparei com essas frases muitas vezes: "Escreva o texto mais facilmente" ou "Torne a decisão mais fácil".
Às vezes, ouvi a palavra “apenas” como argumento em uma disputa: “Eu fiz isso porque é mais fácil!”. Muitas vezes, os oponentes tentavam provar que "eles têm mais facilidade", e alguns argumentos estranhos levaram a isso.

Mas quando perguntei às pessoas o que, na opinião delas, significa "simples", ouvi:
"Isso é subjetivo." Ou "Este é um senso comum". Ou "Bem, para cada pessoa de maneiras diferentes".
Fiquei confuso com o fato de pessoas muito inteligentes discutirem por muito tempo sobre algo que elas não podem determinar com precisão e considerar subjetivas. Afinal, se é saboroso, como preferências musicais, por que eles gastam tempo com isso? Repito, essas pessoas eram espertas e não passavam um tempo em holivares sobre as preferências musicais umas das outras.

Pensei muito sobre isso e, um ano depois, um simples pensamento me ocorreu: e se a simplicidade for uma característica de um objeto que ainda possa ser medido? Isso pode resolver todas as disputas e economizar uma quantidade enorme de tempo. E embrulhe ...

Por que sua explicação simples leva três capítulos? Não poderia ser mais curto?
Porque a realidade é complexa. E a complexidade deste artigo depende diretamente da complexidade dessa parte da realidade que ele descreve.

Esta série é o resultado de milhares de horas de pesquisa e combinação de informações. E também centenas de milhares de horas gastas por pessoas cujo trabalho eu usei para ela.

Você passará algumas horas lendo a série inteira. Uma dúzia, para ser sincero, você seguirá todos os links.

Reduzi a quantidade de tempo e esforço que você gastará para obter a resposta para nossa pergunta centenas de vezes. E economizou o tempo necessário para configurá-lo corretamente.

Não tenho certeza se esta é a melhor explicação possível. Meu trabalho ainda não terminou. Talvez no processo eu entenda como melhorá-lo. No momento, essa é a explicação mais simples que tenho.


Capítulo 1. Teoricamente simples


Neste capítulo, veremos os seguintes tópicos:


No final do capítulo, falaremos um pouco sobre a Navalha de Occam ( Blade Runner ). Um artigo sobre simplicidade pareceria estranho sem mencionar esse princípio.

1.1 Sequência de perguntas


Brevemente
Perguntas que não limitam as respostas possíveis são inúteis.
A característica "simples" pode ter dois significados:

1) Elementar
2) Simples para alguma ação

Estamos interessados ​​no segundo.

Nossa próxima pergunta: como avaliar a complexidade de uma ação e como relacioná-la a um objeto?

Nossa pesquisa começa com uma pergunta. Fazer uma pergunta corretamente é muito importante. Uma pequena digressão:

- Ok, Deep Thought, qual é a PRINCIPAL CONDIÇÃO DE SIMPLICIDADE?
Eu preciso pensar sobre isso.
...
...
N milhões de anos depois ...
- < 42

// Baseado em um lindo livro

Temos uma resposta, mas não dá nada. Todas as informações sobre ele estão contidas na pergunta, mas a pergunta não era muito específica. Não podemos provar que < 42 - realmente a condição principal e não pode mostrar o contrário.

A pergunta deve limitar o escopo de possíveis respostas.

"O que é simples?" - Não é uma pergunta muito específica. Vamos esclarecer isso. No início do artigo, já fizemos parte desse caminho:

Quando dizemos que o objeto X é simples, o que esperamos dele?

De acordo com minhas observações, existem dois casos principais:

  1. X é um objeto que não se divide em suas partes componentes. Aqui a palavra "simples" pode ser substituída pela palavra "elementar".
    imagem
    Isto é um tijolo. E, de certa forma, ele é simples.
  2. X é simples de executar a ação que precisamos com ele. Por exemplo, um sofá é simples, se quisermos deitar, e complicado, se precisarmos elevá-lo ao nono andar.

O caso em que o objeto é elementar é compreensível. Mas e se estivermos interessados ​​em complexidade no contexto da ação?

Vamos pensar sobre isso. Realizamos ações com o objeto.

Existem três entidades principais nesta frase:

  • Ações - uma descrição do que está acontecendo.
  • Executores de ações - estamos escondidos sob a palavra.
  • Objetos são o que a ação ocorre.

Então, estamos interessados ​​nas seguintes perguntas:

  • Como avaliar a simplicidade de uma ação, dependendo do objeto com o qual é executada?
  • Qual é a relação entre a ação e seu executor?

Responderemos abaixo.

1.2 Facilidade de uso


Brevemente
Agimos por analogia com complexidade algorítmica.

A complexidade de nossa ação é a soma das complexidades das ações investidas nela.

A sequência de ações é chamada de algoritmo.

A ação tem um resultado - é uma alteração no estado do sistema em que a ação foi executada.

Ações e objetos podem ser interconectados usando o conceito de uma interface. Uma interface é um objeto que armazena informações sobre quais ações são possíveis com um objeto que a implementa.

Diferentemente da complexidade algorítmica, não podemos apenas encontrar operações elementares e teremos que considerar o executor de nossas ações.

Nossa próxima pergunta é qual é o impacto do artista nas ações?

Vamos olhar para a ação.

Simplicidade de ação é algo que depende inversamente de sua complexidade. Quanto mais complexa a ação, menos simples - é óbvia. Chegamos à seguinte pergunta:

Como determinar a complexidade da ação?


O que podemos fazer com a ação? Podemos dividi-lo em uma sequência de outros! A ação “leia o artigo” pode ser dividida em: “leia o primeiro parágrafo”, “leia o segundo”, etc. Eles, por sua vez, se decompõem como "leia a primeira frase", "leia a segunda" ...

imagem

Dessa maneira, chegamos a ações cuja diferença de complexidade não será importante para nós e não dependerá do objeto com o qual ele é executado (por exemplo, leia uma carta). Vamos chamar essas ações de elementares.

Em seguida, a complexidade da ação para um objeto específico pode ser medida nas ações elementares nas quais ele é dividido.

As ações são equivalentes quando divididas na mesma sequência de ações.

O que mais caracteriza a ação?

Algoritmo


Descrição da sequência de ações que constituem outra ação, chamarei de algoritmo ( ru , en ) .

O algoritmo pode ser descrito genericamente, por exemplo:
Leitura: leia frases até o texto acabar.
Nesta forma, a leitura é aplicável a muitos textos.

No entanto, como você entende, o número de ações de “leitura de sentenças” dependerá do número de sentenças no texto.

Resultado


As ações são realizadas por uma razão, elas levam a alguma coisa. Então deixe nossas ações terem resultados!

O resultado é uma alteração no estado do sistema em que a ação ocorreu. Você pressionou o botão, e sua transição para o estado “ligado” e a luz que acendeu na cozinha é o resultado dessa ação. Você lê uma palavra e o resultado é uma mudança no estado do seu cérebro.

Ações diferentes podem levar ao mesmo resultado.

imagem

Comunicação com objetos


De volta aos objetos. Como dissemos, você pode executar ações diferentes com eles. Precisamos de uma maneira de entender para quais ações essa ou aquela entidade é "pretendida".

Vou começar com um exemplo.

"E como eu arrasto esta mala?"
- Ele tem uma caneta do lado!

A alça é uma tira de couro do lado de fora da mala, pregada com rebites. Mas nós, neste caso, não nos importamos. Estamos preocupados que haja um objeto na mala em que você possa se agarrar.

Todos esses objetos chamaremos de identificadores. Eles podem estar no copo, porta, mala ou balde.

imagem

Chegamos à conclusão de que temos duas descrições de caneta do exemplo:

  1. Como tiras de couro pregadas em uma mala.
  2. Como um conceito para um assunto a ser abordado.

O primeiro é uma descrição da implementação ( en ) .

O segundo é a descrição da interface.

Uma interface é um objeto que armazena informações sobre como você pode interagir com um objeto que a implementa.

Por que eles são necessários? É simples: na maioria das vezes não estamos interessados ​​em como um objeto é implementado.
Quando queremos acender a luz, estamos procurando um interruptor, e não importa como ele funcione, é importante que possamos ativar / desativar seu estado.
Quando vemos um botão, já sabemos que ele pode ser clicado.
Quando nos dizem que em algum lugar há uma caneta - já sabemos que você pode pegá-la.
E é muito conveniente.

Sumário


Uma ação é uma sequência de outras ações que definem seu algoritmo. O resultado da ação é algum tipo de alteração do sistema.

A complexidade de uma ação é igual ao número de ações elementares de seu algoritmo para um objeto específico.

O relacionamento entre objetos e ações determina a interface do objeto. Ele armazena informações sobre quais ações podem ser executadas com o objeto.

Nossa próxima pergunta:
Qual é a relação entre a ação e seu executor?

1.3 Subjetividade objetiva


Brevemente
Para avaliar corretamente a complexidade de um objeto em uma situação com diferentes executores de ações, podemos definir nossas ações para cada artista ou grupo de executores específico.

Nossa próxima pergunta é como calcular a complexidade agora?

Você pode razoavelmente notar:

“Mas se você executar as mesmas ações, os resultados poderão ser diferentes! Se um professor de física puder ler rapidamente um artigo sobre teoria das cordas e entender tudo, então não alcançarei nada com a mesma abordagem. E para obter um resultado semelhante, tenho que procurar definições através da palavra, ler outros artigos e gastar muito mais ação. ”

Este é um bom ponto. Eu tenho uma resposta para isso.

Como qualquer tarefa, a nossa tem condições iniciais. Se você os alterar, altere a tarefa em si. E isso leva ao fato de que sua implementação requer ações diferentes.

Você está lendo um artigo. Suponha que você leia algumas páginas e deixe de lado. Agora, para que o artigo seja lido, você precisa gastar menos ação. Mas a complexidade do artigo em si mudou disso? Não. A ação que você executará com ela foi alterada. Foi: “leia o artigo”, tornou-se: “folhear o artigo até o momento em que terminei e ler até o final”.

O que devemos fazer com as ações? Vamos corrigir o resultado desejado. Como lembramos, pode ser alcançado de diferentes maneiras.

Além disso, podemos dividir os artistas em aproximadamente os mesmos grupos. Há um número limitado desses grupos, se não tivermos um número infinito de artistas.

Agora, para cada grupo, descrevemos as ações que o levarão ao resultado desejado.

Temos um conjunto de ações para cada um dos grupos de artistas. Mas o que fazer agora com complexidade?

1.4 Provavelmente apenas


Brevemente
Em uma situação com vários artistas, podemos calcular a expectativa matemática da complexidade do objeto. Para fazer isso, você precisa avaliar a probabilidade de ações sendo executadas por diferentes artistas.

Teorema de Bayes ( ru , en ) .

A próxima pergunta: como descrever os objetos com os quais trabalhamos?

Temos um conjunto de ações. Cada um deles pertence a um determinado grupo de artistas. Sabemos como calcular a complexidade de cada uma dessas ações para cada objeto específico.

Mas e se tentarmos definir a probabilidade do artista entrar em um dos grupos?
O problema se transforma em uma tarefa teórica clássica.

Temos a magnitude da complexidade das ações.Temos a probabilidade de executar cada uma das ações por uma pessoa aleatória.

Podemos encontrar a "média" da nossa complexidade. Essa é a chamada expectativa matemática ( ru ) . Para fazer isso, precisamos multiplicar cada complexidade da ação com o objeto pela probabilidade de sua ocorrência.

De onde obter essas probabilidades e como dividir os artistas em grupos, se você ainda não sabe quem executará ações especificamente com o objeto? Boa pergunta!

Sua consideração está além do escopo de nosso artigo, mas darei um exemplo interessante em minha opinião.

Você é um autor. E sua tarefa é escrever um artigo em um site que tenha seções temáticas. Quando você publica um artigo, ele aparece no feed geral e no feed de sua "seção". Seções têm assinantes, elas representam uma porcentagem da audiência do site. O feed compartilhado é mostrado para todos. Assumimos que aqueles inscritos em uma seção compreendem seu tópico, mas não os assinados - não.
Deixe nosso artigo ser sobre física. Analisamos o público e sabemos que 3% do público do site está inscrito na seção "física". Aprendemos que a probabilidade de um assinante desta seção inserir um artigo é de 80%. Também aprendemos que a probabilidade de visitar um artigo do feed geral é de 5%.

Quem é o nosso leitor em potencial e devemos "otimizar" o artigo para uma pessoa que não está inscrita na seção "física"? Em outras palavras, qual é a probabilidade de nosso artigo ser lido por uma pessoa versada em física?

Então, atenção, essa probabilidade é ... Cerca de 33%.

Um pouco mais de dois terços dos nossos leitores em potencial não entendem a física, e devemos levar isso em consideração.

Como isso aconteceu? Em resumo: uma alta probabilidade de visitar um artigo por uma pessoa versada em física é compensada por seu pequeno número. Uma pequena chance de visitar um artigo de um feed comum começa a desempenhar um papel significativo em nossa avaliação. Deseja saber mais sobre isso? Aqui está um link para um bom artigo sobre o teorema de Bayes ( ru , en ) .
Se você deseja verificar:

É TEMPO DE MATEMÁTICA:
3% , 80% . — 0.03*0.8 = 0.024 = 2.4%.

, - = . «» , . , = 0.05*0.03*0.2 = 0.0003, 0.03%.

5% , 4.97%

. (2.4% + 0.03%) .
(2.4+0.03)/(2.4+4.97+0.03) = 0.328.
: ~33%

Conversamos sobre as ações e quem as executa. Hora de passar para a última pergunta.
Muitas vezes usamos a palavra objeto, mas ela não nos fornece nenhuma informação. Precisamos de alguma descrição, suficientemente abstrata para poder aplicá-la a muitas entidades e informativa o suficiente para podermos trabalhar com ela.

Como descrever os objetos com os quais trabalhamos?

1.5 Sistematização da modelagem


Brevemente
.

— , .

— , ( ).

Decidi tentar descrever genericamente textos, tabelas, diagramas ... etc. Mas como fazer isso?

Vamos dar um passo atrás e ver como a “criação” deles acontece, talvez isso nos ajude.

Nós escrevemos o texto. Temos uma certa idéia, a formulamos em palavras e a anotamos. Além disso, a ideia pode não estar apenas na forma de outras palavras. Podemos descrever uma imagem, música, objetos matemáticos.

Estou escrevendo código. Eu tenho requisitos que eu traduzo em código. Eles podem ser expressos verbalmente ou representam uma imagem, por exemplo, um esboço da interface.
Nós fazemos um diagrama. Temos alguns objetos, os relacionamentos entre os quais descrevemos com esse esquema.

Há algo em comum nesses processos. Nós temos algum tipo de sistema. Nós o traduzimos para outro sistema, embora não necessariamente use os mesmos "termos".

Parece-me que a palavra "Modelagem" é adequada para descrever esse processo.

Portanto, um modelo é um sistema que descreve outro sistema usando a notação fornecida (termos).

Essa definição leva a uma pergunta razoável:

O que é um sistema?


Um sistema é uma coleção de alguns componentes. É definido pelo conjunto de seus possíveis estados e seu estado atual. Componentes do sistema frequentemente chamarei objetos.
Eles podem ser elementos (algo predefinido) e outros sistemas consistindo nesses elementos. Ainda existem coisas como conexões - elas aparecem quando queremos limitar ou determinar os possíveis estados de um objeto, dependendo de outros.

Um exemplo:
Existe um sistema de 2 moedas. Um deles está no estado "águia", o outro está no estado "caudas".
"Águia" e "caudas" são elementos do nosso sistema.

Uma moeda é um subsistema que consiste nos elementos "cara" e "coroa" e pode estar em um desses estados. Para a primeira moeda:

imagem

suponha que não possamos jogar moedas e, portanto, fazer alterações no sistema. Nesse caso, nosso sistema pode ser descrito como:

imagem

Se podemos jogar moedas, nosso sistema é descrito como:

imagem

Existem dependências entre alguns sistemas. Suponha que o estado da segunda moeda não possa ser igual ao estado da primeira.

Então, o conjunto de estados possíveis da moeda 2, levando em consideração nossa restrição, são todos os estados possíveis anteriores, exceto aquele em que a moeda 1 está localizada.

imagem

Nesse caso, podemos dizer que o estado da moeda 2 determina o estado da moeda 1.

Agora vamos ver o que acontece se mudarmos o conjunto de estados possíveis das moedas adicionando uma "aresta" lá.

Podemos fazer todos os pares para os estados das moedas 1 e 2.

imagem

Nesse caso, estamos falando em limitar os possíveis estados da moeda 2.

ATUALIZAÇÃO:


Eu criei uma implementação de um exemplo de moeda em Java. Aqui está o repositório . Além disso, mostra como calcular a complexidade se você fizer um sorteio para uma ação elementar.

É TEMPO DE MATEMÁTICA:
S — .
E(S) — .
V — .
e — .
: S=e=E(S)={E(S1),E(S2),E(Sn)},SkS
Sk — , , .. .
: S=(V,e),V={E1(S)En(S)},eV .
.

, , , .

:
\ {S_j ... S_k \}\ {S_j ... S_k \} cujo estado determina o conjunto de estados possíveis Si .
Pegue o produto cartesiano X=V(Sj)...V(Sk) - temos muitos conjuntos ordenados de estados x=(En(Sj),...,Em(Sk)) .
Coloque Y=V(Si),y=Et(Si) .
Pegue muitos pares ordenados a=(x,y) emXY .
Se pelo mesmo x são iguais y - condição determinada x .
Se pelo mesmo x vários y , então a condição é limitada.

PS
A propósito, você pode provar que, tendo apenas dois elementos (0 e 1, por exemplo), pode descrever qualquer sistema cujo número de objetos seja contável. Desde que você possa criar seqüências de elementos ilimitadamente. Na minha opinião, este é um fato interessante.

Eu fui inspirado por artigos sobre teoria de sistemas ( ru ) e autômatos abstratos ( ru ) . Esta versão da descrição matemática do conceito de "sistema" é um pouco menor do que o que encontrei.

Voltar para os modelos


Chamamos o modelo de outro sistema, que é o primeiro mapeamento. Em geral, pode ser construído a partir de outros elementos. O modelo do sistema é o mapa, o próprio sistema é o território ( en ) . Ninguém se preocupa em construir modelos de outros modelos. Você pode desenhar um mapa do mapa ( en ) .

Vamos tentar construir modelos.

Vamos começar com os clássicos: a caixa preta.
Você tem: "entrada", "saída" e caixa. Você indica os componentes que gostaria de alterar para obter o resultado como "entrada", os componentes que representam o resultado como "saída" e o restante como uma caixa preta. Esse modelo não descreve as dependências internas do sistema, mas as oculta. Não sabemos como o resultado é obtido.

imagem

Essa abordagem é frequentemente usada nos casos em que queremos estudar a operação de um sistema, mas ao mesmo tempo não podemos "abri-lo". Por exemplo, em psicologia. Testamos as pessoas, elas as resolvem. Não sabemos o que está acontecendo na cabeça das pessoas neste momento. Mas, tendo coletado dados suficientes, você pode descrever a caixa do dispositivo, que fornecerá resultados semelhantes. Na parte Machine Ex Homo, examinamos isso com mais detalhes.

Agora vamos construir um modelo que exibe todo o conjunto de componentes e seus possíveis estados.

Você mora na Grécia antiga. Seu vizinho Zeno ( ru ) já o pegou. Esse filho Aidov invade sua casa todas as noites com outro mistério de quebrar o cérebro ( ru ) , e depois disso você passa uma noite sem dormir pensando. Você precisa dormir e, para isso, precisa calá-lo pelo menos por alguns dias.

A última vez que ele recorreu a uma história sobre Aquiles correndo atrás de uma tartaruga. Durante esta noite, seus olhos caíram em um dos baldes. Um pensamento interessante me ocorreu: examinar sua aporia com mais detalhes, usando baldes e pedras.

Você deseja permitir que você descubra a posição de Aquiles e a tartaruga em relação ao ponto de partida, em cada etapa da tartaruga. Temos: uma tartaruga que anda, Aquiles, que é 10 vezes mais rápida que uma tartaruga. E suas posições iniciais: 1000 etapas e 0 etapas.

Nosso modelo ainda não sabe representar números. E é absolutamente impossível distinguir onde fica Aquiles, onde está a tartaruga, onde está o caminho.

A representação dos números naturais é simples : pegue um balde, coloque o número de pedras igual a esse número.

Agora podemos descrever a velocidade e o caminho. Em um balde que indica a velocidade de Aquiles, haverá 10 pedras. No balde para a velocidade da tartaruga - uma pedra. Agora vamos para os "baldes do caminho" . Colocamos mil pedras na tartaruga, deixamos Aquiles vazio. Quando a tartaruga dá um passo, mudamos as pedras da velocidade para o caminho. Você terminou?

Ainda não. Não temos tinta para assinar baldes. Apenas pedras. Como lidar com isso?

Como alternativa, podemos colocar a "velocidade" do balde de tartaruga à direita do seu "balde de caminho". Faça o mesmo com os baldes de Aquiles. E empurre os baldes da tartaruga. Agora sabemos que, na combinação "dois baldes" - o balde direito é de alta velocidade e o esquerdo está viajando.

Você olha para dois grupos de dois baldes. Para descobrir qual dos grupos de Aquiles você precisa subir, olhe no balde, conte as pedras nele, lembre-se de que a velocidade de Aquiles é de 10 passos e faça uma conclusão sobre a pertença dos baldes a Aquiles. E se queremos fazer algumas mudanças e igualar a velocidade de Aquiles à velocidade de uma tartaruga? Então, nossa maneira de verificar Aquiles geralmente deixa de funcionar!

Portanto, diante de baldes de velocidade e caminho, colocaremos um “balde de nome”. Agora tornou-se o mais à direita. E deixe nossa regra ter a seguinte aparência: se o balde do nome estiver vazio, os baldes que o seguem são tartarugas. E se houver uma pedra, esse grupo de baldes significa Aquiles.

imagem
Não desenhei pedras em S, mas acho claro que, no primeiro passo, o balde de Aquiles está vazio e a tartaruga contém 1000 pedras.

Você está se regozijando. Agora, Zenon terá que pensar muito sobre por que decidiu que poderia continuar para sempre o processo de divisão de pedras. Pelo menos você realmente espera que sim.
Infelizmente, isso não ajudou a melhorar seu sono. Zenão realmente não apareceu na noite seguinte, mas agora você mesmo está pensando profundamente. Chegará o momento em que as pedras não poderão ser divididas ( ru ) ?

Veja, para cada etapa, temos algum tipo de estado de cada um dos objetos que estamos considerando. A posição de Aquiles corresponde a um balde, as tartarugas ao outro. Para velocidades, a situação é semelhante. Nosso modelo descreve completamente todos os estados possíveis de todos os objetos do sistema simulado.

O texto também é um modelo do sistema. Os termos neste caso são palavras. Eles são definidos pelo seu significado, ou pela multiplicidade de significados, que é limitada dependendo do contexto.
Nossas sensações também são um modelo que nosso cérebro cria com base em informações vindas de fora.

Em resumo, você encontra modelos o tempo todo.

Você ainda se lembra por que todos nós fizemos isso? Apenas no caso: demos uma definição para o modelo e depois calculamos sua complexidade. Chegou a hora, vamos ver como isso pode ser aplicado.

Você é um designer de UX. Sua tarefa: fazer a página de configurações do aplicativo. Você sabe que eles não mudarão no futuro. Existem dez no total: cinco configurações gráficas e cinco de notificação.

Você pode deixá-los todos em uma tela. Você também teve a ideia de criar itens de "agendamento" e "notificações" na primeira tela e alternar para a tela correspondente com cinco configurações.

imagem

Vamos supor que nosso usuário tenha pouca memória e o hábito de ler de cima para baixo. Mas, ao mesmo tempo, ele é inteligente o suficiente para não cometer erros na seção, no caso em que agrupamos as opções. Ele não lê os nomes das telas e vai diretamente para os itens do menu.

Temos apenas 10 configurações, elas podem ser exibidas na tela com uma lista e o usuário simplesmente cutuca o item desejado. Acreditamos que o usuário não precise rolar a planilha nesse caso. Por outro lado, se o usuário precisar de configurações a partir do final, será mais fácil encontrá-las, porque ele não precisará ler a lista inteira; poderá pular metade dos pontos que não precisa.

Qual modelo nos dará uma interação mais simples?

Ações que um usuário pode executar com um item da lista: leia e cutucá-lo. Traduzido para o idioma da interface: o item de menu possui as propriedades de legibilidade e capacidade de PokéBoo. Como todos os pontos são curtos, a diferença na dificuldade de lê-los é negligenciada. Assumimos que as ações de “puxão” e “leitura” são elementares em nosso contexto. Sua complexidade é 1.

Esperamos que o usuário tenha a mesma probabilidade de exigir qualquer um dos itens. Não faz sentido aceitar qualquer um deles.

Claro, você já tem algum tipo de palpite sobre a resposta. Eu sugiro que você escreva, assim como escreva sua confiança de que sua resposta está correta. Por exemplo, em uma escala de 1 a 10, em que 10 tem certeza absoluta, 1 não tem certeza. Você precisará desses dados para compará-los com o resultado. Sob o spoiler "Decisão", haverá uma pesquisa. Infelizmente, o habr não permite fazer pesquisas em nenhum lugar do texto; portanto, o link leva aos formulários do Google. Lá você pode passar por isso e ver estatísticas sobre os resultados gerais.

Aconselho que você pegue uma caneta, um pedaço de papel, abra a calculadora e calcule a dificuldade você mesmo. E só então abra o spoiler.

Solução:
Se o usuário precisou do segundo item, o algoritmo de suas ações se parece com o seguinte:
Leia o primeiro parágrafo -> leia o segundo -> cutucar o dedo e a dificuldade, respectivamente: 2 + 1 = 3.
Para encontrar a complexidade média, precisamos encontrar a complexidade da navegação para cada um dos itens, adicioná-los e dividir por 10.
Para itens em uma tela: ((1 + 1) + (2 + 1) + (3 + 1) + (4 + 1) + (5 + 1) + (6 + 1) + (7 + 1) + ( 8 + 1) + (9 + 1) + (10 + 1)) / 10 = 6,5
Agora vamos à complexidade da opção do submenu. Para encontrar a opção desejada, primeiro precisamos selecionar a seção desejada e cutucá-la. Para o primeiro item, as ações são assim:
Leia o nome da primeira seção -> puxão -> leia o nome do primeiro parágrafo -> puxão.
Dificuldade 4.
Vamos honestamente calcular:
((2 + 1 + 1) + (2 + 2 + 1) + (2 + 3 + 1) + (2 + 4 + 1) + (2 + 5 + 1) + (3 + 1 + 1) + ( 3 + 2 + 1) + (3 + 3 + 1) + (3 + 4 + 1) + (3 + 5 + 1)) / 10 = (4 + 5 + 6 + 7 + 8 + 5 + 6 + 7 + 8 + 9) / 10 = 6,5

Eles são iguais ?!

...
...
...

Honestamente, quando eu vim com esse exemplo, estava esperando uma resposta diferente. Pareceu-me que o método com agrupamentos nesta tarefa é melhor.

Como prometi, você pode participar da pesquisa e ver as estatísticas das respostas. E não use o fato de poder enviar várias respostas. Não quero forçar você a fazer login na sua Conta do Google para que seja mais conveniente responder e assistir ao resultado. Em troca, peço que não interfira na coleta de estatísticas.

Então, se deixarmos o exemplo da mesma forma, mas considerar um número diferente de pontos? 4 e 4, 3 e 3, 6 e 6?

Mais uma vez, sugiro que você faça você mesmo. Dica: leia sobre a soma da progressão aritmética e faça uma equação, dependendo do número total de pontos.

Abaixo está apenas a resposta; portanto, se você quiser saber como ficou, terá que trabalhar um pouco.

A resposta é:
Se você tiver 5 pontos em cada seção, as dificuldades serão iguais.
Com 6 e mais, a opção dividida vencerá.
Com 4 ou menos, a opção de lista única vencerá.


Inseri este exemplo no artigo na fase final de edição. Era importante para mim resumir do que estávamos falando. Vincule as informações dos capítulos anteriores de maneira compreensível. Para que você possa imaginá-lo facilmente e tentar usar o que falamos.

Eu estava enganado. Quando escrevi este exemplo, pensei que sabia qual seria a resposta. E agora estou muito surpreso. Não, isso não é verdade. Quando honestamente realizei todos os cálculos, o resultado me atingiu com muita força. Na minha cabeça, aconteceu algo como o seguinte:

- * Em uníssono * ESTAMOS ERRADOS ?!

E embrulhe ...
- * Voz 1 * O quê? Como assim! Eu, sua mãe, desenvolvedora de aplicativos móveis! E, a julgar pelos comentários de meus colegas, sou um bom desenvolvedor! Minha competência nesse assunto não me causa muita dúvida!

- * Voz 2 * Bem, sim. E daí?

- * Voz 1 * Sim, eu vejo esses aplicativos dia e noite. Eu li várias orientações. Eu já fiz centenas dessas listas. Tenho qualificações suficientes na minha área para corrigir os erros de nossos designers!

- * Voz 2 * Sim, e depois?

- * Voz 1 * Eu escrevi essa porra de artigo! A maior parte do meu trabalho é facilitar a interação de outras pessoas com minhas decisões! Eu venho fazendo isso há anos! Não apenas durante o horário de trabalho, mas também quase tudo é gratuito. Minha experiência excedeu há muito 10k horas banais!

- * Voz 2 * Garoto, na verdade eu também sou você. Você não disse nada de novo, vá direto ao ponto.

- * Voz 1 * Concluo que meu exemplo é sintético. Não reflete a realidade, tudo será diferente nela e, portanto, a resposta, que sugeri primeiro, estará correta. Minha experiência me permitiu levar em consideração muito mais do que era neste exemplo.

* Sirenes e lâmpadas vermelhas acendem *

- * Voz dos alto-falantes * A parte da sua consciência que configuramos para detectar padrões errôneos no pensamento está falando. Erros notados: efeito de excesso de confiança , confirmação de viés , percepção seletiva . O padrão de apelo à autoridade foi reconhecido, mas essas informações ainda estão sendo verificadas. Devido ao perigo de auto-engano, você deve respirar mais fundo e beber chá.

- * Voz 1 * Sem auto-engano! Você sabe que tudo o que eu disse consideramos verdadeiro!

- * Voz 2 * E você sabe que há uma grande diferença entre a realidade e sua opinião sobre o que deveria ser.

- * Voz 1 * Bem, bliiiiiin, novamente essas palestras.

- * Voz 2 * Imagine que você acreditava que as pessoas sabem voar. Será que vai te salvar quando pular do telhado?

- * Voz 1 * Não posso. Vejo que outras pessoas não voam, então não vou fazer uma conclusão tão idiota sobre mim. E, em geral, você é hiperbolizante.

- * Voz 2 * Você é louco. Ou você estava drogado. Ou eles colocam em você um traje ideal da realidade virtual, você passou 5 anos nela e todas as pessoas que voaram, você sabia voar, seu cérebro adaptado e “sabe” como fazê-lo. Nossos pensamentos, sensações, expectativas e, geralmente, somos o estado do nosso cérebro. Pelo menos essa é a nossa hipótese de trabalho. E sabemos que há situações muito mais estranhas que a confiança na possibilidade de um voo. Lembre-se do livro "O homem que levou sua esposa de chapéu".

- * Voz 1 * Ok, o cérebro pode realmente falhar, mas no seu exemplo eu realmente cairei, mesmo que eu pense em voo que estou voando. Se eu tiver tempo suficiente, notarei que estou voando para o lado errado, mas será tarde demais.

- * Voz 2 * Ok, e agora de volta ao debriefing. Heh, trocadilho legal. Você veio com este exemplo. Você sabia das regras dele. Você sabia que simplificou bastante, em comparação com a realidade. Você sabia como resolver isso. E você cometeu um erro em sua suposição inicial.

- * Voz 1 * Não sou eu! Eu fiz uma escolha intuitivamente, você sabe como funciona!

- * Voz 2 * E você sabe que isso geralmente não funciona corretamente. E aqui está outra prova para você.

- * Voz 1 * E o meu último argumento? Afinal, isso é realmente uma aproximação e, na realidade, tudo será diferente.

- * Voz 2 * Este argumento é verdadeiro. Na realidade, tudo será diferente. Só disso não se segue que você estava certo.

Imagine: você está começando a aproximar um exemplo da realidade. Você considera honestamente o relacionamento da complexidade das ações “cutucar” e “ler”; realiza um estudo de como as pessoas olham para a tela; qual parte do nome nesta lista é suficiente para elas entenderem que esse não é o ponto.
Você complementa este exemplo com um grande número de condições, tornando-se centenas de vezes mais complicado.
Desculpe, mas neste caso, a probabilidade de você ter a resposta correta "por causa da intuição" é muito menor do que os ~ 50% de uma escolha aleatória.
Você tem tanta certeza de que a realidade estará do seu lado? Porque Prove.

- * Voz 1 * Sim, não tenho certeza! Apenas ...

- * Voz 2 * Difícil. É difícil admitir que você estava errado, eu sei. Mas você entende por que precisamos disso. O fato de que essa situação ocorreu apenas indica que somos um freio e aprendemos mais lentamente do que gostaríamos. Mas nós sabemos o que fazer.

- * Voz 1 * Simples releitura da verdade , ou o quê?

- * Voz 2 * Muito boa opção. Isso sempre nos tranquiliza em tais situações. Você também pode respirar profundamente. E sim, descobrimos essa situação em menos de 1,5 minutos. Vi com que rapidez o sistema de detecção de erros funcionou? Acho que merecemos uma torta. Ele não está na prateleira, existe um maldito Potential Bucket , mas nós o compraremos por nós mesmos.

- * Voz 1 * E ainda é interessante o que acontecerá na realidade ...

- * Voz 2 * Você esqueceu por que estamos escrevendo um artigo ?!

...
...
...

Peço desculpas por uma digressão e exemplo tão volumosos. Talvez você não esteja pronto para ler mais e queira pensar novamente. E é uma boa escolha.

No início, há um índice, você pode marcar o artigo como favorito e retornar rapidamente a este local.

Você decidiu continuar? Então, temos o último tópico daqueles que eu queria levantar.

1.6 Blade Runner


Brevemente
A navalha de Occam e a probabilidade de uma hipótese.

A navalha de Occam em termos de simplicidade do sistema.
Denote a complexidade da mudança de Ce complexidade do sistema até como C e depois como C .
k=(CC)/Ce .
Se k mais de 1 é uma boa mudança.
Se k menos de 1 é aceitável, mas não compensa a mudança.
Se k menos de 0 é uma mudança muito ruim.

Se assumirmos que a complexidade aumenta com o número de objetos no modelo e que já temos um determinado conjunto de modelos, obtemos que a melhor opção é um modelo com um número mínimo de objetos, que é muito semelhante à redação do Razcam de Occam.

Provavelmente você conhece a Navalha de Occam, mas, por precaução, lembrarei:
"Novas entidades não devem ser atraídas, a menos que seja absolutamente necessário."

Em geral, esse princípio é interpretado da seguinte forma: de todas as hipóteses, a mais provável é a descrita pelo subprograma mais curto (ou, mais simplesmente, a mais curta) ( ru , en1 , en2 ) .

Como é a vida real:
Se você acendeu a luz e a luz acendeu, as hipóteses podem ser as seguintes:

  1. O interruptor fechou um circuito elétrico e a corrente passou através de uma lâmpada.
  2. O interruptor chutou o pequeno gnomo, que ligava os fios, como resultado do qual o circuito se fechou e a corrente passou pela lâmpada.
  3. O interruptor chutou o pequeno gnomo, que empurrava o carrinho em que o pequeno dragão estava sentado, assustado com uma chama, que derreteu a solda, que ligava os fios, como resultado do circuito fechado e a corrente atravessar a lâmpada.

Dessas hipóteses, é preferível uma que contenha menos entidades sem um gnomo. Se, ao ligar a lâmpada, você ouviu um palavrão silencioso no comutador, a segunda hipótese é preferível, porque o primeiro não explica por que o comutador xinga e o segundo contém entidades redundantes.

Eu serei honesto. Quando ouvi falar da Navalha de Occam pela primeira vez, não pensei em hipóteses. E sua formulação vaga na forma verbal me levou à idéia de que esse é um princípio geral - reduza o número de entidades que estão no seu sistema e tudo ficará legal.

Eu estava muito enganado .

Mas quando eu tinha uma descrição da simplicidade do sistema, percebi como corrigir minha interpretação incorreta desse princípio. E faça algo útil com isso.

Temos um sistema antes e depois de algumas mudanças.

Se a diferença na complexidade Antes e Depois for maior que a complexidade do processo de fazer a alteração, essa alteração será justificada. Entende-se que a mudança não afetou o resultado (pelo menos a parte que precisamos). Vamos chamá-lo ... Uma condição necessária para simplificação.

Mais uma vez: A

simplificação esperada do sistema após a mudança deve ser maior que a complexidade da própria mudança.

Se denotarmos a complexidade da mudança paraC e , complexidade do sistema atéC e depois comoC então temos:

C - C > C e .
Também podemos expressar algum análogo de eficiência para nossa mudança.
k = ( C - C ) / C e .
Se k maior que um é uma alteração boa e kosher correspondente à condição de simplificação necessária. Se
k é menor que 1, mas maior que 0 - isso significa que você simplifica o sistema, mas gasta mais esforço nele do que obtém lucro. Se
k é menor que 0, então isso indica que não vale a pena fazer essa alteração. Você complica. Por que é necessário? Bem, por exemplo, você age em condições em que possui tempo limitado e gostaria de priorizar as alterações que deseja fazer. Muda com grande

k deve ser considerado primeiro.

Um exemplo:

Temos dois textos, um com um exemplo do outro sem.

Por um lado, aumentamos o volume do texto, complicando-o. Mas, por outro lado, graças a isso, alguns leitores não colocam no Google um "exemplo de navalha Occam", que é uma ação mais complicada do que apenas ler. Se, em nossa opinião, houver muitos desses leitores, a introdução de um exemplo simplificará nosso artigo.

Não devemos esquecer que também realizamos algumas ações para descrevê-lo, e eles tinham sua própria complexidade. Se gastássemos muitas ações e a simplificação não bastasse - a introdução de nossa essência “não compensa”.

Hmm, como tudo isso está relacionado à Navalha de Occam?

Vamos assumir que já temos vários sistemas. E sua complexidade depende diretamente do número de entidades (no mundo real isso nem sempre é verdade, como já descobrimos). Os resultados das ações com esses sistemas nos convêm.

Como o sistema já existe, entãoC e0 (você não precisa fazer nada para fazer alterações no sistema). Vamos pegar um sistema com um número mínimo de entidades e calculark em relação a outros sistemas. Nós entendemos issok será igual a menos infinito. Do ponto de vista da simplicidade, em tais condições, escolher um sistema diferente daquele que contém o menor número de objetos é uma solução infinitamente estúpida. Isso nos diz que, de todos os sistemas, devemos escolher o que contém o menor número de objetos. Hum.Suspeita semelhante à Navalha de Occam.

O que mais pode ser descrito usando essa condição?
Por exemplo, você pode avaliar quando vale a pena aplicar várias práticas de aprimoramento de código e quando é inútil.

De fato, se você escrever uma tarefa em uma universidade, cujo código será lido uma vez (ou não será lido, mas apenas veja como funciona), não se preocupe com a boa leitura.

Mas se você estiver escrevendo para um projeto OpenSource e centenas de pessoas trabalharem com seu código, ou escrever seu projeto que planeja desenvolver, você deverá cuidar da qualidade.

Se você estiver escrevendo um compêndio, avalie se precisará dele no futuro. Se o professor apenas verificar sua disponibilidade e todas as informações forem mais fáceis de encontrar no Google, por que complicá-las?

Se você estiver escrevendo um artigo, determine como vê a interação com ele. Por exemplo, este artigo não pretende ser lido apenas uma vez. Tentei otimizá-lo para uma pesquisa rápida. É por isso que, em cada parte, há um spoiler “Breve” e um sumário no início.

Ah, se tivéssemos uma maneira de descrever de alguma maneira como uma pessoa lerá nosso modelo e descobriremos a complexidade desse modelo para leitura. Poderíamos dizer com certeza como nossas ações afetarão a complexidade desse processo e aplicar nossa teoria em um grande número de problemas práticos.

Infelizmente, para isso, você precisa criar um algoritmo geral para ler pessoas de qualquer modelo. Se lhe pareceu que esta é uma tarefa muito difícil - você está certo.

Felizmente, eu já fiz parte deste trabalho.

No próximo capítulo, que será chamado Machine Ex Homo, veremos como nosso cérebro trabalha com informações. Falaremos sobre compreensão e como as informações que já conhecemos afetam a percepção do novo. Vejamos os estudos de psicólogos e neurobiólogos no campo do estudo da memória humana e criamos com base em nosso próprio modelo de memória. Com sua ajuda, explicaremos alguns efeitos psicológicos interessantes, como o efeito da frequência da palavra, o efeito da borda, ilusões de ótica. E haverá muito mais fotos.

Em suma - será interessante, eu prometo.

PS
.

, — . , , .

.

: , . , , - .

, , . .

, , . .
, , . , , .
, , simple.explanation.of.simple@gmail.com . , , . , , -, .

Licença:
CC BY-NC-SA 4.0

Source: https://habr.com/ru/post/pt432460/


All Articles