Evangelistas vs. Lobisomens


O nome pode fingir ser um filme B, mas, na verdade, será sobre coisas muito mais mundanas, a saber: amor apaixonado e às vezes completamente irracional de programadores e outras pessoas que estão promovendo soluções de tecnologia para o “pool de prata” - a crença de que A solução possui uma ampla gama de aplicações.

Programas são particulares


Começarei um pouco de longe: o código do programa, no sentido amplo, é sempre uma função específica que funciona estritamente em um certo intervalo de valores possíveis. Qualquer saída fora do alcance é uma situação de emergência e um problema sério, que muitas vezes leva a uma parada (no entanto, existem outros pontos de vista sobre essas questões, como, por exemplo, a ideologia de Rust). Na eletrônica moderna, muito mais código funciona em caixas de proteção cercadas gerenciadas por um código diferente e, assim, isenta-se da responsabilidade de falhas "sérias": seu telefone provavelmente não será corrompido e nem precisará ser reinicializado se um dos aplicativos travar. Mas isso não altera as especificidades de cada bloco de código individual, nem altera a necessidade de uma correspondência exata do hardware no qual o programa é executado com as expectativas desse programa: não importa o quão seguro seja o Rust, você não poderá executar seu código,compilado para uma arquitetura de processador diferente. E quaisquer extensões ao intervalo de valores aceitáveis ​​para processamento - digamos, a capacidade dos navegadores de ignorar e pular o html "ruim", processando e mostrando todo o "bom" - devem ser descritas explicitamente no mesmo código.

O código do programa não tem a capacidade de replicar, graças ao qual vivemos mais ou menos normalmente por 60 a 90 anos, apesar dos trilhões de pequenas falhas em nossos corpos no nível celular, e não pode nem mesmo "vencer" naturalmente as leis da física, digamos: da segunda lei da termodinâmica e da interação fraca, devido à qual você pode acidentalmente soltar algo de suas mãos, mas pegá-lo do chão ou do chão - porque ele não voará para longe do chão. Se o código do programa quebrar, ele quebra.

Obviamente, tudo isso se opõe à nossa realidade objetiva. Se o código funcionar (não vamos falar sobre computação quântica aqui) em um conjunto de certos estados discretos, mesmo que existam muitos, muitos deles, o mundo real funcionará em um número infinito de estados em determinados intervalos. Ou em estados muito maiores (ordem astronômica) e mais discretos, se você acredita que a realidade tem uma natureza discreta.

Bem, por que foi tudo isso?


Não, não pelo fato de o código padrão ser mais "frágil" do que muito mais na realidade - embora seja assim, não é o principal. E o principal aqui é que, pelo fato de sua solução de software poder, teoricamente, funcionar em um certo intervalo de valores (isto é, resolver certos problemas específicos), não se segue que os resolva na realidade - estados possíveis muito mais, e a adequação teórica do programa entre eles pode ser completamente irrelevante.

Por exemplo, o idioma do sinal no jogo Factorio é Turing-complete:


E com ele você pode até mostrar clipes. Agora levante a mão, quem acredita que o software comercial será escrito nele - apesar do fato de que, em teoria, isso é inteiramente possível?

No entanto, ao ler artigos sobre tecnologias, muitas vezes encontro o fato de que as pessoas que os escrevem preferem ser matemáticos fortes e morrer tecnicamente corretos (o melhor pior tipo de correção).

Em teoria, a teoria não é diferente da prática


Porque é que eles estão a fazer isto? Essa é uma excelente pergunta, e eu pessoalmente me deparei com duas versões: primeiro, algumas entendem honestamente a diferença entre "talvez na teoria" e "talvez na prática", mas preferem ignorá-la em artigos de maneira bastante intencional, guiada pelo princípio "você grita em voz alta - mais ele descobrirá sobre as pessoas. É verdade que a ironia aqui é que esse princípio também não é uma bala de prata e, se você gritar muito alto sem motivo, a maioria das pessoas não saberá coisas lisonjeiras sobre você.

Bem, e em segundo lugar, alguns realmente não entendem muito bem a diferença, que dá origem a todo um conjunto de situações ruins, de “um cientista estuprou um jornalista”, quando uma pessoa que escreve artigos não é um autor direto da tecnologia e, em geral, até mesmo feliz por ser estuprada. como ele acredita que uma descrição mais radical e "convexa" é do seu interesse ou da tecnologia descrita; para situações em que o autor simplesmente acredita em suas próprias teses amplas, mesmo que não haja basicamente base para essa crença.

E seria muito bom se a tese do artigo continuasse sendo um problema teórico não muito importante, mas, infelizmente, se traduz em realidade. Do meu pessoal: há pouco tempo, passei mais de um dia útil explicando ao meu colega que existe a remoção de código não utilizado no webpack (tremor de árvores), mas funciona com princípios bastante primitivos, razão pela qual o escopo dessa coisa é bastante modesto , e você não pode confiar cegamente nele sem muitos truques e verificações adicionais(um excelente artigo, a propósito, mas eu mesmo estava cavando esse material muito antes dele). Você pode, é claro, culpar um colega - mas eu me lembro do grande número de artigos e materiais sobre o tópico "agora há tremores de árvores no webpack, banzai!" o fato de que agora nossas montagens se tornarão pequenas e tudo isso é absolutamente automático devido à "mágica" do webpack.

Quem é o culpado e o que fazer?


É claro que não acho que a voz de alguém chorando no deserto (e até no habr) mude drasticamente, e no final - existe uma proporção bastante grande daqueles que descrevem de maneira ampla e intencional o escopo de suas tecnologias para parecerem mais atraentes. . Mas se alguém fizer isso de propósito - PENSEpor favor, pense sobre isso. Pelo menos, esteja ciente de que se o seu programa ou tecnologia é capaz de fazer algo - a partir daí, com a ajuda do seu programa ou tecnologia, você pode realmente fazer algo na prática, especialmente para aqueles que não são os autores - por muito tempo. caminho. Reconheça que se você tiver feito algo que funcione em um caso específico em um projeto de um assunto específico com uma lista específica de problemas, isso não lhe dará nenhum motivo para assumir automaticamente que sua tecnologia será útil em qualquer lugar. Por fim, lembre-se de que o código para "seu" e o código para todos são duas grandes diferenças. Se você colocar o código "para seu" em código aberto, isso não o tornará automaticamente um código útil para outros desenvolvedores.

All Articles