Richard Hamming: Capítulo 18. Modelagem - I

"O objetivo deste curso é prepará-lo para o seu futuro técnico."

imagem Oi Habr. Lembre-se do incrível artigo “Você e seu trabalho” (+219, 2442 favoritos, 394k leituras)?

Portanto, Hamming (sim, sim, códigos de Hamming com auto-verificação e auto-correção) tem um livro inteiro escrito com base em suas palestras. Estamos traduzindo, porque o homem está falando de negócios.

Este livro não é apenas sobre TI, é um livro sobre o estilo de pensamento de pessoas incrivelmente legais. “Isso não é apenas uma carga de pensamento positivo; descreve condições que aumentam as chances de fazer um ótimo trabalho. ”

Já traduzimos 27 (de 30) capítulos. E estamos trabalhando em uma edição em papel.

Capítulo 18. Modelagem - I


(Obrigado pela tradução, Valentin Pinchuk, que respondeu à minha ligação no "capítulo anterior".) Quem quiser ajudar com a tradução - escreva em um e-mail pessoal ou magisterludi2016@yandex.ru

Uma área importante do uso do computador em nosso tempo, além de inserir e editar texto, gráficos, programas de compilação etc. é a modelagem.
Modelagem é a resposta para a pergunta: "E se ...?"

E se fizermos isso? E se foi isso que aconteceu?

Atualmente, mais de 9 em cada 10 experimentos são realizados em computadores. Eu já mencionei minha séria preocupação de que somos cada vez mais dependentes de modelar e explorar menos a realidade, e parece que estamos nos aproximando da velha abordagem escolar: o que está escrito nos livros didáticos é realidade e não requer constante verificação experimental. Mas não vou me debruçar sobre esse assunto agora.

Usamos computadores para modelagem, como este:

  • primeiro, mais barato;
  • segundo, mais rápido;
  • terceiro, geralmente é melhor
  • quarto, torna possível fazer o que não pode ser feito em laboratório.

Os dois primeiros pontos afirmam que, mesmo levando em conta o dinheiro e o tempo gasto em programação, todos os seus erros e outras deficiências, ainda é muito mais barato e rápido do que obter o equipamento de laboratório necessário para o trabalho. Além disso, se você encomendou equipamentos de laboratório caros e de alta qualidade nos últimos anos, em menos de 10 anos você descobrirá que ele deve ser desativado. Essas considerações não são adequadas se a situação for constantemente monitorada e o equipamento de laboratório for constantemente usado. Mas deixe-o ficar ocioso por um tempo e, de repente, ele deixará de funcionar corretamente! Isso é chamado de "data de validade", mas às vezes é uma "data de validade" das habilidades para usá-lo, em vez de uma "data de validade" do próprio equipamento! Muitas vezes eu fui convencido disso por minha experiência pessoal. O prazo de validade intelectual geralmente é mais insidioso do que o prazo de validade físico.

De acordo com o terceiro ponto, podemos obter dados mais precisos da modelagem do que da medição direta no mundo real. Frequentemente, é difícil obter medições em campo ou mesmo em laboratório com a precisão necessária em um ambiente dinâmico. Além disso, na modelagem, muitas vezes podemos trabalhar em uma variedade muito maior de variáveis ​​independentes do que é possível em qualquer instalação de laboratório.

De acordo com o quarto ponto, provavelmente o mais importante de todos, a modelagem é capaz de realizar o que nenhum experimento pode fazer.

Ilustrarei esses pontos com situações específicas nas quais participei pessoalmente, para que você possa entender como a modelagem pode ser útil para você. Também apontarei alguns detalhes pelos quais aqueles que têm pouca experiência em modelagem terão uma idéia melhor de como abordar sua implementação, porque não é realista realizar a modelagem, o que levará anos para ser concluído.

Os primeiros grandes cálculos dos quais participei foram em Los Alamos durante a Segunda Guerra Mundial, quando projetamos a primeira bomba atômica. Não houve oportunidade de realizar um experimento em grande escala em menor escala - ou você tem uma massa crítica ou não.

Sem entrar em detalhes secretos, lembro que um dos dois projetos era esférico simétrico e baseado em iniciação explosiva, Fig. 18.I.

Todo o volume do material da bomba foi dividido em conchas esféricas concêntricas. Foram compiladas equações de forças que atuam em cada invólucro (em ambos os lados), bem como equações de estado que descreviam, entre outros parâmetros, a densidade de uma substância dependendo da pressão sobre ela. Em seguida, o eixo do tempo foi dividido em intervalos de 10 a 8 s. Para cada intervalo de tempo, calculamos, usando computadores, como cada shell mudará e o que acontecerá nesse momento, sob a ação das forças aplicadas a ele. Havia, é claro, um estudo separado para o processo de passagem de uma onda de choque do explosivo circundante por essa área. Mas todas as leis, em princípio, eram bem conhecidas dos especialistas nos respectivos setores. A pressão era tanta que eu só tinha que especular que tudo iria acontecer da mesma maneira fora dos testes, mas mesmo uma teoria física aproximada forneceu algumas garantias.

imagem

Fig. 18.I.

Isso apenas ilustra o ponto principal em que quero me concentrar. É necessário ter amplo e profundo conhecimento especializado na área de assunto. Na verdade, estou inclinado a considerar os muitos cursos que você já estudou e ainda vem estudar como o único meio de obter conhecimentos especializados relevantes. Quero enfatizar essa necessidade óbvia de conhecimento especializado na área de assunto - muitas vezes tenho visto especialistas no campo da modelagem ignorar esse fato elementar e acreditar que eles podem executar a modelagem com segurança por conta própria. Somente um especialista no assunto pode saber se o que você não pode incluir no modelo é vital para a precisão da simulação ou pode ser negligenciado com segurança.

Outro ponto importante é que, na maioria dos casos de modelagem, existe um estágio que se repete várias vezes, com o mesmo programa, caso contrário, você não poderá inicializar os dados. No caso de uma bomba, os mesmos cálculos foram realizados para cada concha e depois para cada intervalo de tempo - uma miríade de repetições. Em muitos casos, o poder de computação da máquina é muitas vezes maior que nossos recursos de programação, portanto, é aconselhável procurar antecipadamente e constantemente as partes repetidas da próxima simulação e, se possível, realizar a simulação de acordo.

Muito semelhante a uma tarefa de bomba nuclear e modelagem de previsão do tempo. Nesse caso, a atmosfera é dividida em grandes blocos de ar e, para cada bloco, os valores de cobertura de nuvens, albedo, temperatura, pressão, umidade, velocidade etc. devem ser inicializados, veja a Fig. 18.II.

Então, usando a física atmosférica comum, rastreamos as alterações correspondentes em cada bloco durante um pequeno intervalo de tempo. Este é o mesmo método de cálculo por elementos que no exemplo anterior.

No entanto, há uma diferença significativa entre as duas tarefas, com a bomba e a previsão do tempo. Para uma bomba, pequenos desvios no processo simulado não afetam significativamente o desempenho geral
desempenho, mas o clima, como você sabe, é muito sensível a pequenas mudanças. Acredita-se que mesmo um bater das asas de uma borboleta no Japão possa afetar se uma tempestade atingirá este país e quão severa será.

imagem

Fig. 18.II

Este é um tópico fundamental no qual devo me debruçar. Se a simulação tem uma margem de estabilidade, no sentido de resistência a pequenas mudanças em seu comportamento geral, a modelagem é bastante real; mas se pequenas alterações em alguns detalhes podem levar a resultados muito diferentes, é difícil executar com precisão a simulação. Obviamente, há estabilidade no clima a longo prazo: as estações seguem o ciclo designado, independentemente de pequenos desvios. Assim, há instabilidade climática de curto prazo (dia a dia) e estabilidade a longo prazo (ano a ano). E as eras glaciais mostram que há ainda mais instabilidades climáticas a longo prazo e, é claro, estabilidade ainda mais duradoura!

Eu encontrei muitos problemas desse tipo. Muitas vezes, é muito difícil determinar antecipadamente se a estabilidade ou a instabilidade dominará a tarefa e, portanto, avaliar a possibilidade de obter os resultados desejados. Quando você realiza a simulação, estude cuidadosamente esse aspecto da tarefa antes de se aprofundar nela, para não descobrir mais tarde, gastando muito esforço, dinheiro e tempo que não é possível obter resultados aceitáveis. Assim, existem situações fáceis de modelar, situações que praticamente não são modeladas, e a maior parte do resto está entre esses dois extremos. Desconfie das promessas do que você pode fazer com a modelagem!

Quando entrei na Bell Telephone Laboratories em 1946, logo participei dos estágios iniciais do projeto do primeiro sistema de mísseis guiados pela NIKE. Fui enviado ao Instituto de Tecnologia de Massachusetts para usar o analisador diferencial RDA # 2. Lá, adquiri conhecimento sobre a interconexão de partes do analisador e muitas dicas de especialistas muito mais sofisticados em modelagem.

O design inicial incluía um lançamento de foguete inclinado. As equações variacionais me deram a capacidade de ajustar vários componentes, como o tamanho da asa. Acredito que se deva mencionar que demorou cerca de meia hora para calcular uma trajetória e, aproximadamente a metade desse tempo, tive que me convencer a prosseguir com o cálculo do próximo lançamento. Portanto, tive tempo suficiente para observação e reflexão profunda sobre por que tudo correu do jeito que foi. Alguns dias depois, gradualmente, percebi o comportamento do foguete, por que ele se comporta da maneira como se comporta de acordo com as diferentes leis de orientação que eu usei.

Com o tempo, cheguei à conclusão de que um início vertical sempre foi o melhor. Uma saída rápida das densas camadas inferiores de ar para as rarefeitas era a melhor estratégia - eu poderia muito bem acrescentar resistência ao ar depois, quando foram dados comandos para diminuir a trajetória. Ao fazer isso, descobri que reduzi significativamente o tamanho das asas. Também entendi muito bem que é improvável que as equações e constantes que me foram dadas para estimar as mudanças nos efeitos causados ​​pelas mudanças na estrutura do foguete sejam precisas em uma ampla gama de parâmetros (embora nunca tenham me dito as equações originais, adivinhei por mim mesmo) ) Por isso, pedi conselhos e descobri que estava certo - deveria ter voltado para casa e obtido novas equações.

Com algum atraso devido ao desejo de outros usuários de usar o tempo alocado a eles na RDA # 2, logo voltei ao trabalho, já mais experiente e sábio. Continuei desenvolvendo um senso de comportamento de foguete - tive que "sentir" as forças que atuavam nele, usando diferentes programas para formar uma trajetória. E o tempo de espera, quando a solução apareceu lentamente na plotadora, me deu a oportunidade de entender o que estava acontecendo. Eu sempre me pergunto, o que aconteceria se eu tivesse um computador moderno e de alto desempenho? Eu sentiria um foguete, do qual depende muito o projeto final? Duvido muito que centenas de trajetórias adicionais me ensinem da mesma maneira - simplesmente não sei. Mas é exatamente por isso que ainda suspeito de receber muitos cálculos sem a devida consideração pelo que você recebeu. O escopo dos resultados parece-me um péssimo substituto para a sensação de penetração na situação simulada.

Os resultados dessas primeiras execuções nos levaram à escolha de um lançamento vertical (que eliminou o equipamento de terra desnecessário na forma de uma guia circular e outros dispositivos), simplificou o design de muitos outros componentes e reduziu o tamanho das asas para cerca de 1/3 do tamanho que me pediram originalmente. Descobri que asas grandes, fornecendo, em princípio, maior capacidade de manobra, aumentam a resistência do ar nas partes iniciais da trajetória que, como resultado, uma velocidade de vôo mais baixa leva a menos manobrabilidade na seção final da abordagem ao alvo.

Obviamente, no estágio inicial da modelagem, foi utilizado um modelo atmosférico simples de diminuição exponencial da densidade com a altura e outras simplificações que foram alteradas nos estágios subsequentes. Isso me deu outra convicção - o uso de modelos simples nos estágios iniciais permite que eu tenha uma idéia geral de todo o sistema, que inevitavelmente será mascarado em qualquer modelagem em escala real. Eu recomendo começar com uma modelagem simples e depois desenvolvê-la para uma mais completa e precisa, para que o entendimento da essência possa chegar o mais rápido possível. Obviamente, ao escolher o design final, você deve considerar todas as nuances que podem afetá-lo. Mas (1) comece da maneira mais simples possível, desde que considere todas as principais influências, (2) tenha uma idéia geral e (3) mergulhe nos detalhes da simulação.

Mísseis guiados foram um dos primeiros estudos no campo do vôo supersônico, e houve outra grande incerteza nesse problema. Os dados dos dois únicos túneis de vento supersônicos disponíveis para nós se contradiziam abertamente.

Mísseis guiados naturalmente levaram a vôos espaciais, onde participei menos da simulação em si e mais como consultor externo e no planejamento inicial do chamado diagrama de seqüência do projeto.

Outra das primeiras simulações que me lembro foi o design de uma lâmpada de onda itinerante. Novamente, no equipamento de relé primitivo, tive muito tempo para pensar e percebi que, à medida que os cálculos eram realizados, eu conseguia entender qual forma deveria ser dada, exceto o tubo tradicional de diâmetro constante. Para entender como isso aconteceu, considere o design básico de uma lâmpada de onda móvel. A idéia é que você envie uma onda de entrada ao longo de uma espiral firmemente enrolada em torno de um tubo oco e, portanto, a velocidade efetiva da onda eletromagnética através do tubo é significativamente reduzida. Em seguida, enviamos um feixe de elétrons ao longo do eixo do tubo.

Um raio tem inicialmente maior velocidade do que uma onda que viaja ao longo de uma espiral. A interação da onda e do feixe diminui a velocidade do feixe de elétrons - o que significa a transferência de energia de feixe para onda, ou seja, amplificação da onda! Mas, obviamente, em algum momento no tubo, suas velocidades são aproximadamente igualadas e, em seguida, outras interações apenas pioram a situação. Como resultado, tive a ideia de que, se você aumentar gradualmente o diâmetro do tubo (e, consequentemente, o caminho percorrido pela onda ao longo das curvas da espiral - nota do tradutor), o feixe novamente se tornará mais rápido que a onda e ainda mais energia será transmitida do feixe para a onda. De fato, em cada ciclo de cálculo, era possível calcular o perfil ideal do tubo.

Eu também tive descobertas desagradáveis. Como regra, as equações utilizadas eram, de fato, geralmente localizações de equações não-lineares mais complexas. Por volta da vigésima ou quinquagésima etapa do cálculo, pude avaliar o componente não-linear. Descobri que, para surpresa dos pesquisadores de alguns projetos, o componente não linear estimado era maior que o componente linear calculado - matando a aproximação e interrompendo os cálculos inúteis.

Por que contar essa história? Porque demonstra claramente que uma mente indagadora pode ajudar na modelagem, mesmo se você trabalhar com especialistas na área em que você é amador. Você, sentindo com suas próprias mãos todos os pequenos detalhes, tem a chance de ver o que os outros não perceberam e fazer uma contribuição significativa, além de economizar tempo na máquina! Quantas vezes encontrei omissões na modelagem sobre as quais os usuários dificilmente descobrirão.

Há um passo importante que você deve dar, e quero enfatizar isso: dominar o jargão especial. Cada especialidade tem seu próprio jargão, que tenta esconder o que está acontecendo de fora e, às vezes, de dentro! Preste atenção no jargão - aprenda a reconhecê-lo como um idioma especial para facilitar a comunicação em uma área estreita de coisas ou eventos. No entanto, interfere com o pensamento fora da área original a que se destina. O jargão é uma necessidade e uma maldição. Você deve entender que precisa forçar o cérebro para tirar vantagem disso e evitar armadilhas, mesmo em seu próprio campo de conhecimento!

Ao longo dos longos anos de evolução, os homens das cavernas aparentemente viveram em grupos de 25 a 100 pessoas. As pessoas de fora, por via de regra, não eram bem-vindas, embora acreditemos que isso não se aplique às esposas sequestradas. Comparando muitos séculos de evolução dos homens das cavernas com o século da civilização (menos de dez mil anos), vemos que somos selecionados pela evolução principalmente para isolar estranhos, e uma das maneiras de fazer isso é usar linguagens de jargão especiais.Argo de ladrão, gíria de grupo, a linguagem privada de marido e mulher a partir de palavras, gestos e até sobrancelhas levantadas são exemplos de uso de uma linguagem privada para isolar estranhos. Portanto, esse uso instintivo do jargão, quando um estranho chega, deve sempre ser resistido conscientemente - agora trabalhamos em grupos muito maiores que os homens das cavernas, e devemos constantemente tentar reescrever esse recurso do estágio inicial de nosso desenvolvimento.

A matemática nem sempre é a linguagem mágica que você precisa. Para ilustrar isso, voltemos à simulação brevemente mencionada de interceptação marítima, que é equivalente a um sistema de 28 equações diferenciais de primeira ordem. Mas você precisa revelar o enredo. Ignorando tudo, exceto sua parte essencial, consideramos o problema de resolver uma única equação diferencial y '= f (x, y) para | y | ≤1 , veja a Fig. 18.III.

Lembre-se desta equação, e eu vou falar sobre o problema real. Programei um problema real, um sistema de 28 equações diferenciais para obter uma solução e depois limitei alguns valores a 1, como se fosse um limite de tensão. Apesar da resistência do consultor, meu amigo, insisti que ele participasse plenamente da programação binária da tarefa comigo, enquanto expliquei a ele o que acontece em cada estágio. Recusei os cálculos até ele fazer isso - então ele não teve outra escolha! Chegamos aos limites do programa e ele disse: “Dick, isso é uma limitação no estabilizador, não uma limitação de tensão”, tendo em mente que a limitação deve ser imposta em cada etapa do cálculo, e não no final. Este é o melhor exemplo que conheço para demonstrar como nós dois entendemoso que exatamente significam símbolos matemáticos - nós dois não tínhamos dúvida - mas nossas interpretações desses símbolos eram completamente diferentes!

imagem

Fig. 18.III.

Se não tivéssemos detectado esse erro, duvido que quaisquer experimentos reais e ao vivo envolvendo aviões revelariam uma diminuição na capacidade de manobra, obtida da minha interpretação. É por isso que, até hoje, insisto em que uma pessoa com um entendimento profundo do que deve ser modelado esteja envolvida em uma programação detalhada. Se isso não for feito, você poderá encontrar situações semelhantes quando o consultor e o programador souberem exatamente o que se entende, mas suas interpretações podem ser tão diferentes que levarão a resultados completamente diferentes!

Você não deve entrar em ciclos em representação de que a modelagem é realizada exclusivamente para funções de tempos em tempos. Uma das tarefas que fui encarregada de investigar usando um analisador diferencial, que montamos a partir das partes antigas do dispositivo de controle de incêndio antiaéreo M9, era calcular as distribuições de probabilidade dos bloqueios no escritório central. Não importa se eles me deram um sistema interminável de equações diferenciais lineares interconectadas, cada uma das quais definiu a distribuição de probabilidade do número de chamadas para o escritório central, dependendo da carga total. Era necessário, de alguma forma, chegar à máquina final, que tinha apenas 12 integradores, se bem me lembro.

Levei isso para a impedância de entrada do circuito. Usando a diferença das duas últimas probabilidades calculadas, assumi que elas são proporcionais à diferença das duas próximas (usei uma constante de proporcionalidade razoável obtida da diferença das duas funções anteriores). Assim, foi possível obter corretamente a contribuição da equação seguinte, ainda não calculada. Os resultados estavam em demanda no departamento de comutação e, acredito, impressionaram meu chefe, que ainda tinha uma opinião baixa sobre computadores.

Havia modelagem subaquática, menciono especialmente a matriz acústica instalada nas Bahamas por meu amigo, onde, é claro, no inverno rigoroso (o autor brinca - aproximadamente tradutor), ele muitas vezes precisava verificar tudo e realizar novas medições. Houve muitas simulações do design e comportamento dos transistores.

As estações retransmissoras de micro-ondas com suas buzinas receptoras foram simuladas, bem como o efeito de um pulso em uma extremidade da cadeia da estação retransmissora, que passa por todo o circuito, sobre a estabilidade de todo o sistema dessas estações. É possível que, mesmo com a rápida recuperação de cada estação de um impulso, seu tamanho possa aumentar à medida que atravessa o continente. Em cada estação retransmissora, a estabilidade era, no sentido de atenuação do pulso ao longo do tempo, mas a questão da estabilidade espacial permanecia em aberto - e se um pulso aleatório puder crescer indefinidamente enquanto atravessa o continente? Eu chamei essa tarefa de "estabilização espacial". Tínhamos que saber as condições sob as quais isso poderia acontecer ou não - portanto, a modelagem era necessária, porque, entre outras coisas,a própria forma do pulso mudou ao passar pelo continente.

Espero que você entenda: é fundamentalmente possível simular qualquer situação que se presta a alguma descrição matemática. Mas, na prática, você deve ter muito cuidado ao modelar situações instáveis. Embora no capítulo 20 vou falar sobre um caso extremo que tive que resolver. Isso foi muito importante para os laboratórios de telefonia da Bell e significou, pelo menos para mim, que eu precisava encontrar uma solução, independentemente das desculpas que eu me dava que era impossível. Sempre haverá algumas respostas para problemas importantes se você estiver determinado a recebê-los. Eles podem não ser ideais, mas em uma situação desesperadora, algo é melhor que nada - desde que seja confiável!

Erros na modelagem muitas vezes são forçados a abandonar boas idéias! No entanto, pouco se pode encontrar sobre isso na literatura, uma vez que foram muito, muito raramente relatados. Um modelo errôneo bem conhecido, que foi amplamente anunciado antes mesmo que seus erros fossem descobertos por outros, era o modelo do mundo inteiro, criado pelo chamado "Clube de Roma". Descobriu-se que as equações escolhidas deveriam mostrar uma catástrofe, independentemente dos dados iniciais ou da escolha da maioria dos coeficientes! Mas quando outros obtiveram essas equações e tentaram repetir os cálculos, descobriu-se que os cálculos também tinham erros sérios! Passarei para esse aspecto da modelagem no próximo capítulo, porque é um assunto muito sério - seja para relatar coisas que fazem as pessoas acreditarem no que querem acreditar, embora essas coisas não sejam assim, ou sobre coisas,o que decepcionará as pessoas de seguirem seus ideais.

( 70- XX . « » (1971). , 20- . , . – , , , , . , . – .)

Para continuar ...

Quem quer ajudar na tradução, layout e publicação do livro - escreva em um e-mail pessoal ou envie um e-mail para magisterludi2016@yandex.ru

A propósito, também lançamos a tradução de outro livro interessante - “A Máquina dos Sonhos: a História da Revolução Computacional” )

Conteúdo do livro e capítulos traduzidos
Prefácio
  1. Introdução à arte de fazer ciência e engenharia: aprendendo a aprender (28 de março de 1995) Tradução: Capítulo 1
  2. «Foundations of the Digital (Discrete) Revolution» (March 30, 1995) 2. ()
  3. «History of Computers — Hardware» (March 31, 1995) 3. —
  4. «History of Computers — Software» (April 4, 1995) 4. —
  5. «History of Computers — Applications» (April 6, 1995) 5. —
  6. «Artificial Intelligence — Part I» (April 7, 1995) 6. — 1
  7. «Artificial Intelligence — Part II» (April 11, 1995) 7. — II
  8. «Artificial Intelligence III» (April 13, 1995) 8. -III
  9. «n-Dimensional Space» (April 14, 1995) 9. N-
  10. «Coding Theory — The Representation of Information, Part I» (April 18, 1995) ( :((( )
  11. «Coding Theory — The Representation of Information, Part II» (April 20, 1995) 11. — II
  12. «Error-Correcting Codes» (April 21, 1995) 12.
  13. «Information Theory» (April 25, 1995) ( :((( )
  14. «Digital Filters, Part I» (April 27, 1995) 14. — 1
  15. «Digital Filters, Part II» (April 28, 1995) 15. — 2
  16. «Digital Filters, Part III» (May 2, 1995) 16. — 3
  17. «Digital Filters, Part IV» (May 4, 1995) 17. — IV
  18. «Simulation, Part I» (May 5, 1995) 18. — I
  19. «Simulation, Part II» (May 9, 1995) 19. — II
  20. «Simulation, Part III» (May 11, 1995)
  21. «Fiber Optics» (May 12, 1995) 21.
  22. «Computer Aided Instruction» (May 16, 1995) ( :((( )
  23. «Mathematics» (May 18, 1995) 23.
  24. «Quantum Mechanics» (May 19, 1995) 24.
  25. «Creativity» (May 23, 1995). : 25.
  26. «Experts» (May 25, 1995) 26.
  27. «Unreliable Data» (May 26, 1995) 27.
  28. «Systems Engineering» (May 30, 1995) 28.
  29. «You Get What You Measure» (June 1, 1995) 29. ,
  30. «How Do We Know What We Know» (June 2, 1995) :(((
  31. Hamming, «You and Your Research» (June 6, 1995). :

, — magisterludi2016@yandex.ru

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


All Articles