Você já pensou: como explicar a programação para quem nunca a enfrentou antes? Pode ser um problema, desde que um novo não o entenda.
Então, vamos imaginar - você tem um amigo, que não é manchado pela ciência da computação, nunca tentou automatizar algo, nunca jogou fatorio, nunca escreveu uma única linha de código.
Então, vamos imaginar um ser humano normal.
E vamos chamá-lo de Bill . Ele não é muito bom em matemática, apenas “não é bom”, mas adora doces !

Sua tarefa é ensinar a Bill algumas coisas básicas (ou mágicas) de TI, que você está fazendo todos os dias. Os mais simples.
Então, o que você deve fazer primeiro? Basicamente - ALIMENTE-O!
Alimente-o!
Para encurtar a história, mas um dia Andrey Alexandrescu perguntou a Bill:
- Andrey: Oi Bill, você quer um doce?
- Bill: Sim, claro!
Então Bill pegou o doce, desembrulhou-o da embalagem de doces e comeu a carga útil .
Simples? E nós usamos duas palavras mágicas!
Poucos dias depois, Wirth perguntou a Bill:
- Wirth: Oi Bill, você quer um doce?
Bill: Sim! CERTO!
- Wirth: Ei, eu tenho outro, você também quer?
Bill: Sim! CERTO!
Este é um loop controlado por condição ou um ciclo .
- Wirth: Ei, eu tenho outro, você também quer?
Bill: Sim! CERTO!
Mas não havia doces, e Bill recebeu uma exceção comum de ponteiro nulo .
Cuidado - se Alexandrescu voltar repentinamente e continuar alimentando Bill com doces - ocorrerá um estouro de buffer . Contanto que Bill sempre aceite um novo doce.

No dia seguinte, Wirth estava preparado. Ele tem um grande saco de doces.
- Wirth: Ok, deixe-me verificar a minha bolsa ....
- Wirth: eu ainda tenho doce. Bill, você quer um doce?
Bill: Sim! CERTO!
Nesse caso, Wirth fornecerá um doce apenas se ele tiver um.
Aqui temos um ciclo com pré-condição .
Mas um dia Bill veio à casa de Wirth, e casa:
- Bill: DÊ-ME UM DOCINHO!
- Wirth: nada dura para sempre! Você comeu tudo!
- Bill: Mas eu aceito EM QUALQUER CASO !!!
- Bill: VOCÊ TEM DOCES ???
Foi um ciclo com pós-condição . História triste. Graças a Deus a polícia estava por perto. Tenha cuidado da próxima vez e não alimente pássaros selvagens (e Bill).

Décadas depois, Dan Abramov chega a Bill e coloca todos os seus doces na mesa:
- Dan: sem palavras olhando para Bill.
- Bill: sem palavras olhando para um primeiro doce
- Dan: Bill, você quer um desses doces?
Bill: Sim, claro.
- Dan: Aqui está você.
Era um loop controlado por coleção .
Logo depois, Dan pegou outra sacola, colocou todos os doces na mesa, contou-os e recolocou na sacola.
- Dan: Bill, parece que ainda tenho doces. Você quer um doce?
Bill: Sim, claro.
- Dan: Aqui está você.
Era um loop controlado por contagem .

Mais cedo ou mais tarde, mas Bjarne Stroustrup vem alimentar Bill.
- Bjarne: Bill, você quer um doce?
Bill: Sim, claro.
- Bjarne: Aqui está.
- Bjarne: Bill, você quer um doce?
- Bill: - - -
Bill estava mastigando um doce. Ele estava ocupado e nada pode incomodá-lo. Ele criou um mutex , o fio ficou bloqueado e o tempo para ...

Bjarne era muito inteligente e encontrou uma solução:
- Bjarne: Bill, você quer um doce?
- Bill: - - -
- Bjarne: Ok, vou esperar até terminar de mastigar ...
Aqui temos uma sincronização de threads .
Ok, desta vez ligaremos para Peter_Norton.
- Peter: Bill, você quer um doce?
Bill: Sim! Claro!
- Peter: vou fornecer um pacote inteiro. Munch sozinho.
O próximo projeto de lei pega doces, um a um, de uma sacola e os come, um a um.
Esta operação ou sequência é chamada LIFO - Last it, First out. Desde que o doce do fundo da embalagem seja comido por último.
Ao mesmo tempo, a digestão de Bill é um FIFO - primeiro a entrar, primeiro a sair. Você tinha que saber isso antes.

Donald_Knuth também se juntou à equipe de alimentação. Mas um dia ele se cansou de comprar novos doces para Bill e pediu a uma empresa de catering que o fizesse.
- Donald: Ei, meu amigo, você pode comprar os melhores doces na loja mais próxima e apresentá-los a Bill? Aqui estão o endereço e o dinheiro de Bill ...
Desde então, Bill sempre traz novos doces de Donald.
Nesse caso, uma empresa de catering é uma função , e endereço e dinheiro são argumentos . E um doce é um valor de retorno .
Se, para o mesmo endereço e a mesma quantia de dinheiro, Bill sempre receber os mesmos doces - isso será chamado de função pura .
Mas apenas no caso de a empresa transferir apenas doces do ponto A para o ponto B, e uma loja sempre será uma função não pura, desde que perca doces vendendo-os ... e ganhando dinheiro! Então isso muda o estado interno .

Mas Dennis_Ritchie foi até inteligente!
- Dennis: Oi Bill, você quer um doce?
- Bill: Você sabe disso!
- Dennis: Então aqui está um endereço. Você encontrará o seu doce tão desejado lá.
Foi um ponteiro .
Mas, então, Bill chegou a esse endereço e encontrou apenas um objeto militar secreto. Ninguém o viu desde então.

Alguns meses depois, depois de escapar da prisão, ele tentou repetir, mas mais uma vez não conseguiu alcançar "o alvo". Dessa vez, algo o deteve a distância - paredes invisíveis e indestrutíveis de verificação de limites .
Mas um dia ... Até, para dizer a verdade - noite - Cyberdemon chega à casa de Bill e grita:
- Cyberdemon: VOCÊ QUER UM DOCINHO?
- Bill: SIM! AO DIA, E ENTÃO AS ESTRELAS BRILHAM! SEMPRE!
Então, Bill pegou seus doces mais uma vez. Mas essa é uma história um pouco triste, desde que ele se esqueça de verificar o tipo de carga ou executar qualquer outra validação de dados . ️

Depois disso, Bill acordou no vazio e ouviu:
- Cosmos: Bill! Você quer um doce?
Bill: Sim!
- Cosmos: Bill! Você quer um doce?
Bill: Sim!
- Cosmos: Bill! Você quer um doce?
Bill: Sim!
É assim que o ping funciona.
Nos sistemas perturbados com latência diferente de zero, pode parecer assim:
- Cosmos: Bill! Você quer um doce?
- Cosmos: Bill! Você quer um doce?
- Cosmos: Bill! Você quer um doce?
Bill: Sim!
Bill: Sim!
Bill: Sim!
Mas este caso é válido apenas para TCP / UDP . No caso do TCP / IP , pode ser
- Cosmos: Bill! Você quer um doce? Bill! Você quer um doce?
- Cosmos: Bill! Você quer um doce?
Bill: Sim! Sim Sim
Desde que pacotes irmãos sejam unidos por fator de tempo ou tamanho (também conhecido como MTU ).

O fim
Eu tenho muitas histórias não contadas, como um Bill e um Gang-of-Four , ou um doce que não seja entre navegadores .
Mas deixe-me contar a última, sobre The Indivisible Candy:
Bill come centenas de vezes, mas ele volta para sua mão, inalterável e até doce!
Portanto, doces indivisíveis podem ser um singleton ou um vazamento de memória , desde que o coletor de lixo não consiga digeri-lo.
Então, você pode descrever algo da TI em estilo doce? Para alimentar ensinar Bill e colocá-lo em TI.

Bill ainda está com muita fome e está morrendo de fome. Você tem que alimentá-lo. Aqui. Nos comentários.
PS: Esta é uma tradução de um artigo de 10 anos . O artigo original “The Val`s Candies” foi lançado há 8 anos e, desde então, ganhou muitos exemplos novos como comentários de usuários - recursão, delegação, interfaces, estouro de pilha, procedimentos versus funções, classes, árvores B e assim por diante Mas ... em outra dimensão.