O século da galanteria está passando. Ele está sendo substituído
a era dos sofistas, economistas e calculadoras; Fama
A Europa desaparecerá para sempre.
E. Beck (Inglaterra, 1792)Porque
Tendo vivido uma vida curta como programador, pergunto-me: "Havia algo interessante na programação e, nesse caso, o que mais me impressionou e permaneceu na minha memória?" Dependendo do talento literário, a resposta pode resultar em um romance, um tratado filosófico, um poema ou uma piada. Com o talento de Chekhov, pode-se escrever uma série de histórias sobre a vida cinzenta / brilhante de programadores comuns com quem a vida virtual mata / dá à luz uma vida real. Mas onde está Chekhov, o programador?
Na melhor das minhas habilidades, limito-me a uma mistura de ensaios no estilo da "meditação no sofá". E embora o texto principal por muitos anos, eu ainda corro o risco ...
A cena é Minsk.
Como me tornei programador
Iniciar . Depois de se formar na BSU, eles não nos deram diplomas, mas deixaram para estudar no sexto ano sobre o tema da ACS. O país precisava de asushnikami. Imagine a vida no paraíso de um estudante que sabe que possui um diploma e estuda por mais seis meses.
A programação começou com o curso CCK - o sistema de codificação simbólica da máquina Minsk-32. E no começo havia algum registro básico misterioso. Muito tempo depois, fiz boa programação no assembler, mas imagine uma pessoa que não sabe nada sobre programação e que começou a aprender programação com o Assembler, e não com um livro, mas com alguma descrição técnica. Depois de um sistema harmonioso de física, era algum tipo de absurdo (suspeito que fosse mesmo um absurdo). A alma de um físico não conseguiu chegar a um acordo com esse assunto. E então as dificuldades cotidianas caíram sobre mim e eu quase não fui às aulas. Em geral, eu não conhecia o SSK absolutamente. Mas agora é hora de fazer o exame. Todos os cinco anos antes deste exame, eu sinceramente me preparei bem para o exame. O que fazer agora? E aqui encontro um amigo do shabat da Sibéria (lembro-me dele com sua disposição alegre e que nos três dias de nossa viagem à Sibéria, as piadas contavam histórias dia e noite). Ele compartilhou sua dor por uma cerveja. A solução foi encontrada com rapidez e ousadia - ele passa em um exame para mim por uma garrafa de vodka (o assunto foi facilitado pela ausência de notas extras). Tudo foi para O'key.
Uma tentativa de dar desculpas. "Eu não sou o único culpado." Culpado e professores. A qualidade do ensino era de muitas maneiras nojentas. Um professor, como uma vantagem do computador Minsk-32 em relação à IBM com o sistema OS / 360, indicou que a IBM trabalha apenas com 8 bits (bytes), e a Minsk-32 é quatro vezes maior - 32 (palavra). E, ao que parece, seguiu-se que o Minsk-32 é quatro vezes melhor que os computadores IBM. Descobriu-se que isso se aplicava apenas ao endereçamento. Tudo isso mudou exatamente o oposto.
No entanto, a situação descrita era característica não apenas na programação. No quarto ano do Departamento de Física da BSU, a disciplina "Teoria Quântica de Campos" foi ministrada por um ano. E, durante um ano inteiro, não ouvimos nada sobre ela, mas apresentamos nossos próprios resultados de um professor-acadêmico relacionado à sua parametrização original do grupo Lorentz. Isso pode ser importante, mas onde está a teoria quântica de campos do aparato básico da física fundamental? A propósito, qualquer grupo pode, como me parece, ser parametrizado por um número infinito de maneiras e cada uma delas terá algumas vantagens. Você pode imaginar quantas dissertações você pode escrever! Devido ao fato de existirem várias universidades na República da Bielorrússia, tenho uma dúvida ainda maior sobre a qualidade de sua educação. Se não havia professores suficientes para um, então onde eles foram agrupados em vários não está claro. Com a "qualidade" dos especialistas tiveram que se encontrar mais tarde. Por exemplo, na ONG Agat. Um doutor em ciências melhorou nossas qualificações dessa maneira: ele, assumindo que “... o vetor a é maior que o vetor b ...” tirou grandes conclusões. Mas os vetores estão desordenados: ninguém determinou a proporção de mais / menos para eles. O segundo usou implicitamente a proporção errada “a soma dos produtos é igual ao produto da soma:
$ inline $ ∑_i∏_ja (i, j) = ∏_j∑_ia (i, j) $ inline $ . A partir disso, ele recebeu muitas consequências. E embora ele tenha admitido o erro, por alguma razão ele considerou as conseqüências corretas ("Eu preciso disso, portanto está certo"). E o próximo caso é geralmente patológico. O engenheiro de rádio estava considerando o vetor elétrico do campo eletromagnético. De um modo geral, ele gira. Lembrando da mecânica de Newton, o engenheiro de rádio introduziu uma força centrífuga atuando no final do vetor do campo elétrico e desenvolveu toda uma teoria a partir daqui, refutando alguns Gonorovsky - aparentemente uma autoridade no campo da engenharia de rádio.
No entanto, voltando à programação, eu não gostava de gostar de programação, mas estava imbuído de respeito por ela. Mas esse é o mérito do melhor professor - a vida.
Para ser continuado . Mas a vida se vinga de nós por truques. Eu me distribuí no Instituto de Física e comecei a me esforçar no campo da teoria axiomática de campos quânticos (Uau!). Mas ele logo percebeu que, recebendo 86 rublos nas mãos e dando 30 deles por um apartamento, a teoria axiomática dos campos quânticos não se presta muito, e o problema “Como viver?” Cada vez mais surge. Conclusão: "Você não pode viver assim." A propósito, meu colega de classe, de três anos, trabalhando como ajustador no Integral, recebeu três vezes mais do que eu com um diploma da BSU. Então, como você mora? E aqui novamente uma caneca de cerveja ajuda. Em uma reunião com minhas amigas, eu me familiarizo com o diretor do Instituto Central de Pesquisa Científica de Telecomunicações e Informática - sob as mulheres, nossos homens falam sobre trabalho. E então ele me diz o que está fazendo e começa a me parecer que eu posso ser um bom gerente de tarefas. Afinal, estabelecer metas não é resolvê-las, não é? E aqui estou no Instituto Central de Pesquisa Científica de Tecnologia. Embora, infelizmente, não um diretor, mas um programador iniciante. Mas e a física "alta"? Consolava-me de estar envolvido em programação "alta" - todos os tipos de cálculos científicos. O principal é ficar longe de todos os débitos e créditos da contabilidade. A contabilidade e os bancos eram um símbolo de tédio e queriam ficar longe deles. Mas a vida teimosamente empurra nosso esnobismo para a realidade. E, na realidade, foi precisamente o débito e o crédito que mais tarde tiveram que ser tratados. Aqui está uma evolução dos quarks para a programação contábil. Sim, era contabilidade que tinha que ser programada. Afinal, "o socialismo é contabilidade e controle". Bem, como o lugar de controle já havia sido tomado (a parte controlava tudo em nosso país), tivemos que lidar com a contabilidade.
Moralidade.
Não amamos apenas as ciências que não entendemos. Você precisa ver os fundamentos. O respeito ao assunto vem com uma compreensão dos fundamentos, se é claro que são os Fundamentos.
O que é programação e o principal problema da matemática
Existe esse tédio - perguntar "O que é programação?", "O que é física?", "O que é matemática?". Não pode haver uma resposta exata para essas perguntas. A natureza não divide o mundo em física, química, ... Portanto, as fronteiras entre as ciências são arbitrárias. Eles foram entregues não pela natureza, mas pelas pessoas. A propósito, parece que Engels disse que, no final, haverá duas ciências - física e psicologia (matéria e consciência). Um físico, zangado, com a pergunta "Então, o que é física?" ele respondeu da seguinte maneira: "Física é o que os físicos fazem." E isso é completamente sério.
Então o que os programadores fazem? Qual é a essência de suas atividades? Parece-me que a principal ocupação do programador é apresentar o grande problema não resolvido como uma composição dos pequenos resolvidos. Essa composição é o caminho da preparação para a solução. Escrito em uma determinada linguagem formal, esse caminho é chamado de programa. Então a composição deve ser texto em uma determinada linguagem formal - este é o programa. A modalidade formal-textual do algoritmo é de programação e difere de outras disciplinas construtivas. Portanto, existem
dois recursos de programação: 1) Construtividade extrema 2) Estrutura sintática estrita .
Como a programação é uma disciplina construtiva, não é muito interessante para ele saber se existe uma solução, mas a solução em si. Em matemática, existem muitos teoremas da existência que afirmam que há uma solução, mas não dizem nada sobre como encontrá-la. O físico Nobel Landau propôs expulsar do curso de matemática para os físicos qualquer menção aos teoremas da existência. Qual é a utilidade de um físico para saber que uma equação diferencial tem uma solução. Você precisa conhecer a solução, não o que é. Apenas no tópico "existe uma solução?" há uma história tão interessante sobre Landau. Quando os físicos iam a algum lugar para uma festa, eles se divertiam ao longo da estrada porque, observando o número de quatro dígitos na frente do carro na frente, era necessário capturar o padrão no número o mais rápido possível, usando apenas as ações da escola sem reorganizar os números e usá-los apenas uma vez. . Por exemplo, para o número 73-85, temos 7-3 = 8-5, para o número 38-53, temos
∛8=5−3 . Landau era uma grande autoridade nesse assunto. Surgiu a questão de saber se algum número pode ser encontrado como um padrão - essa é a questão do teorema da existência. Landau respondeu: "Não, não para ninguém". "Por que você, Landau, provou o teorema da inexistência!?" "Bem, não, simplesmente porque eu, Landau, não encontrei esse padrão para nenhum número. Por exemplo, para o número 75-65 ”. Engenhoso. Mas um dos jovens matemáticos levou o teorema da existência absolutamente a sério e provou que qualquer número inteiro pode ser "igualado" a outro, uma vez que existe uma fórmula para reduzir N + 1 a N:
√(N+1)=segundo(arctg(√N)Infelizmente, após a prova do teorema da existência, o jogo perdeu a nitidez. Aqui está: "
Quanto mais conhecimento, mais tristeza" .
A solução de design distingue dois estágios:
- Algorítmico. Algoritmização do problema - redução da composição das operações padrão que as pessoas entendem. Esta é a parte mais importante. Afinal, os programas são escritos para as pessoas.
- Codificação. Redução do algoritmo para uma composição de operações elementares e frases de dados em uma linguagem de programação. No entanto, a redação do menor programa passa pelo estágio de microalgoritmização.
Exemplos de problemas construtivos privados
O conjunto de operações aceitáveis são as operações da escola executadas por uma bússola e uma régua: construindo uma linha conectando dois pontos dados, dividindo a linha pela metade, construindo uma perpendicular, extraindo a raiz quadrada ...
Aqui estão os problemas clássicos de construção:
O quadrado do círculo . Dado um círculo, você precisa usar um
número finito das operações acima para construir um quadrado com uma área igual à área de um determinado círculo.
Trissecção do ângulo . Um determinado ângulo deve ser dividido em três partes iguais usando um número finito das operações acima
Aqui, então, a abordagem “à linha do teorema da existência - nos dê uma solução imediatamente” causa um erro de ignição.
Supondo que exista uma solução, ela é procurada há muitos séculos. Mas aconteceu que não havia solução.Muitos matemáticos e amadores lutaram por essas tarefas (e, quando criança, propus minha solução para quadratar o círculo, que acabou sendo aproximado com uma precisão de cerca de 10% - mas isso já ficou claro na minha juventude). Muitas soluções foram propostas, mas todas foram aproximadas. No século 19, ficou provado que as tarefas não têm solução. Para a trissecção do ângulo, isso agora pode ser mostrado ao aluno (veja, por exemplo, o livro de Courant e Robbins "O que é matemática"), e ao quadrado do círculo para o aluno. Além disso, a situação é tal que é possível encontrar a aproximação arbitrariamente precisa, mas não pode haver solução exata. O resultado, se você pensar bem, é estranho. Como se estivesse diante da praça desejada, há uma parede que não pode ser superada. Mas vale a pena permitir outras operações também, pois a solução se torna elementar. Isso foi feito por Arquimedes em relação à trissecção do ângulo.
Formalização do conceito de um algoritmo
O que é um algoritmo foi intuitivamente claro. Mas os matemáticos não seriam matemáticos se não formalizassem o conceito de algoritmo. A intuição falhou repetidamente. Portanto, era impossível acreditar que existem funções contínuas que não têm derivado em nenhum lugar - onde quer que você toque a curva - em todos os lugares há espinhos. Intuição não permite isso.
Várias formulações de aprendizagem do conceito de algoritmo (ou explicação científica) foram propostas: funções recursivas, substituições alfabéticas de Markov, pós-máquina, máquina de Turing. A equivalência destas formulações foi gradualmente comprovada. No final, os matemáticos tomaram como axioma que essas formulações são adequadas ao conceito de algoritmo - essa é a tese de Church. A máquina de Turing, em seus termos, se aproxima de máquinas de computação reais. É fundamental simulá-lo, mas esses modelos não são necessários devido à sua primitividade e, portanto, lentidão. Mas, como aparato teórico, é indispensável. Por exemplo, foi possível formalizar o conceito de complexidade algorítmica. E, novamente, coisas incríveis vieram à tona. Portanto, a intuição do programador sugere que a multiplicação é mais difícil que a multiplicação. Multiplicar o número a pelo número n significa fazer n adições. Parece que a multiplicação é várias vezes mais complicada. E o que a teoria dá?
Suponha que haja dois números de n bits e a máquina de Turing os multiplique por U (n) e a adição por S (n). Então a intuição sugere que U (n)) / (S (n) → ∞. Mas a análise teórica mostrou que, para qualquer ε arbitrariamente pequeno, temos
$ inline $ U (n)) / [S (n) (S (n)) ^ ε] → 0 $ inline $ . E isso sugere que mais próximo do que multiplicação à adição já não há nada - eles são próximos em complexidade.
Qualquer problema construtivo pode ser representado como a programação de uma máquina de Turing universal. Surge a questão: é
possível encontrar um algoritmo universal para qualquer problema construtivo ? E aqui o problema já é radicalmente diferente da afirmação do tipo de quadratura do círculo. Lá foi possível adicionar uma nova operação construtiva permitida e o problema foi resolvido. Não há nada a acrescentar à máquina universal de Turing - esta é a máquina mais geral; ela pode implementar qualquer algoritmo. E aconteceu que mesmo aqui o criador colocou obstáculos. Foram encontrados muitos problemas construtivos que não possuem um algoritmo comum para sua solução. Por exemplo, na lógica matemática, eles tentaram por um longo tempo encontrar um algoritmo pelo qual é possível determinar se uma expressão lógica é dedutível da outra. Descobriu-se que o problema não tem solução.
Temos uma situação semelhante no grande teorema de Fermat: a equação
xn+yn=zn não tem solução em números inteiros para n> 2.
Essa afirmação pode ter um caráter que eu quero dizer: "Isso não pode ser".
Dividindo pelo lado direito, passamos para números racionais: a equação
pn+qn=1 não tem solução em números racionais <> 0.
Além disso, nos restringimos a até n. Para eles, temos uma foto:

A figura mostra as curvas de Fermat para n = 2 (círculo) en = infinito (quadrado). Para n = 2k> 2, todas as outras curvas ficam entre o círculo e o quadrado e, à medida que n aumenta, elas se tornam cada vez mais próximas ao quadrado. E, se você tomar todas essas curvas, elas preencherão cada vez mais o espaço ao redor do quadrado. E há infinitos pontos com coordenadas racionais, de modo que, se todos os pontos racionais forem pintados em cores escuras, todo o espaço do quadrado será preto - muitos pontos com coordenadas racionais serão densos em todos os lugares. E, no entanto, nenhuma das curvas de Fermat passa por pontos racionais. Parece que, para isso, você precisa enlouquecer. No entanto, o teorema de Fermat diz que uma curva perfeitamente suave não passa por nenhum ponto racional. Bem, é impossível acreditar. Algo está errado aqui.
Uma situação semelhante existe em toda a matemática. Seria bom para problemas matemáticos e abordar matematicamente. Por exemplo, imagine encontrar uma solução para o problema matemático “Se A, então B” como um movimento em um determinado espaço de objetos matemáticos dos dados originais para os necessários. Aqui está um exemplo de um caminho construtivo de A para B:

Ao se mover ao longo de um caminho, apenas os axiomas da aritmética são usados.
Isso seria para qualquer teorema "Se A, então B", alguém poderia construir por métodos construtivos a trajetória que leva de A a B. Isso seria um triunfo da matemática. Isso pode ser feito? Existe essa trajetória?
O grande matemático Hilbert (considerado por muitos os maiores do século 20) embarcou com entusiasmo no programa Leibniz - para formalizar e algoritmizar qualquer problema matemático. Esse programa foi chamado de formalização da matemática - para trazer uma base axiomática para toda a matemática, expressar todos os problemas matemáticos em uma linguagem formal como conseqüência dos axiomas e derivar todos os teoremas de acordo com as regras da lógica matemática. Foi feito um grande trabalho para formalizar totalmente a matemática. Quem quiser pode ver dois volumes grossos dos Fundamentos da Matemática, de Hilbert e Bernays. Mas, no meio da obra, apareceu a obra de Kurt Gödel, que, entre outras coisas, provou que em qualquer teoria formal que contenha aritmética é possível afirmar um teorema significativo que não será dedutível. E ela (ou, com menos justificativa, sua negação) pode ser tomada como um novo axioma. Chamamos atenção para a palavra "formal".
Para uma teoria informal, você sempre pode dizer algo como "é óbvio que ..." e todos os tipos de obstáculos serão removidos. Portanto, qualquer aplicação do teorema de Godel a teorias informais está incorreta. Isto é especialmente verdade para a filosofia, que gosta de especular sobre esse tópico.Portanto, a FORMAT MATEMÁTICA É SIGNIFICATIVA INCOMPLETA E NUNCA SERÁ COMPLETA. Isso a torna relacionada à física, que nunca reivindicou formalização devido à sua posição natural (e, além disso, o espírito de formalização é estranho à física, o que está acostumado ao fato de que todos os axiomas são temporários).Parece que alguém pode sair da situação tomando o teorema irredutível (ou sua negação) como um axioma, adicioná-lo ao sistema original de axiomas e derivar os teoremas corolários desse sistema formal estendido. Mas o teorema de Gödel é aplicável a esse sistema formal estendido. Temos um processo sem fim. Somente em um sistema infinito é possível encontrar a universalidade. Mas como trabalhar com um conjunto infinito de axiomas? O assunto é complicado pelo fato de que o axioma mais inofensivo pode dar consequências completamente inesperadas. Por exemplo, considere o axioma da escolha: se um conjunto de conjuntos disjuntos é fornecido, então, de cada conjunto, é possível selecionar um elemento e montá-los em um conjunto. Parece que há algo a discutir. Mas, usando o axioma da escolha, Banach e Tarski provaramque duas esferas S1 e S2 de raios diferentes podem ser divididas no mesmo número finito de conjuntos disjuntos em pares:S1 = A1 + A2 + ... + An e S2 = B1 + B2 + ... Bn demodo que para todos i: Ai = Bi. Então, esferas desiguais foram divididas em partes idênticas. Que bobagem é essa? Mas tudo é lógico: em que acreditar, em que rejeitar? Adicionando uma de cada vez, obtemos uma esfera e outra - uma grande.John von Neumann, usando o axioma da escolha, provou que um segmento A de uma linha com uma partição finita é menor que o segmento B de uma linha que é menor que seu comprimento. Então acredite nessa matemática. Se aceitarmos o axioma inofensivo da escolha (e o que poderia ser mais óbvio do que o fato de um aluno poder ser selecionado da primeira turma, um aluno da segunda, etc.), são obtidas conseqüências completamente paradoxais.A propósito, von Neumann também se destacou na programação - ele provou a possibilidade de auto-reprodução de autômatos e a arquitetura de computadores de von Neumann veio dele; distinguiu-se na matemática e na física quântica - ele construiu o aparato matemático da física quântica com base no conceito de espaço de Hilbert e tentou provar a impossibilidade dos parâmetros ocultos nos quais Einstein se baseava, argumentando que a teoria quântica é incompleta.Então, voltando ao desenho mais alto, lamentamos que não possamos construir a trajetória universal indicada por meios construtivos. Ai !!! Isso significa que a matemática é ainda mais complicada do que parece. Você pode vaguear pela solução arbitrariamente perto, mas nunca chegar nela. Aqui está a "quadratura" do problema matemático geral. Mas, ao contrário do quadrado de um círculo,sob qualquer expansão do conjunto de operações construtivas, ela não tem solução . Você pode programar apenas tarefas bastante particulares. O problema mais comum não tem solução construtiva. Além disso, mesmo muitos problemas específicos não têm uma solução construtiva comum e, portanto, precisam ser divididos em problemas ainda mais particulares, que talvez tenham uma solução construtiva.Voltando ao teorema de Godel, notamos que uma linguagem de programação é um sistema formal. Portanto, você pode escrever um programa para o qual não existe um programa que comprove sua correção ou incorreto. É mesmo assim? Um programa escrito ou sua negação podem ser usados para o axioma da programação.Portanto, não pode haver verificação universal de programas. E não pode haver programa universal. Bem, embora seja impossível ter um programa universal em geral, mas pelo menos obtenha um programa universal para uma área específica.Aqui está uma imagem típica do programa:
A desvantagem dessa abordagem é que ela é aprimorada por uma função específica. Claro, você pode parametrizar isso. Com essa parametrização, o tipo da função não muda, mas apenas seus parâmetros de argumento são alterados. Mas eu gostaria que os parâmetros pudessem alterar o tipo de função. Sim, você pode passar uma função como parâmetro - um programa de integração de funções, por exemplo. Mas isso não vai além da integração. Em resumo - seria bom fornecer uma descrição completa da área de assunto como parâmetro . I.e.
Aqui está o que eu gostaria:
Ba! - Mas este é um programa sobre o Prologe. O próprio prólogo atua como a função paramétrica acima mencionada. Descrição do domínio - Prologe o texto que codifica o domínio. O objetivo é um parâmetro.Fiquei agradavelmente surpreso quando tentei implementar tarefas de pesquisa em muitos relacionamentos no Prolog. Essa pesquisa foi implementada primeiro no Delphi e depois no C #. Portanto, o que foi implementado por vários programas bastante grandes no Delphi (C #), no Prologe, se encaixa em uma descrição compacta das relações e funções neles. E, em seguida, uma variedade de solicitações de destino pode ser solicitada para esta descrição. É verdade que não posso dizer nada sobre desempenho comparativo. Mas em alguns exemplos específicos, não notei uma diferença significativa. No entanto, Delphi ainda desenhava belos gráficos das relações-alvo. Eu não fiz isso no Prologe. Mas cada um na sua. A lógica deve ser implementada por uma linguagem lógica, apresentações - linguagem de apresentação, relatórios - linguagem de relatório, linguagem de entrada - linguagem de entrada, comunicação - linguagem de comunicação, interação de serviço - linguagem de distribuição,interação e orquestração de serviços.Clássico
Clássicos antigos
"Os clássicos precisam conhecer e honrar." Não há necessidade de pensar que tudo foi inventado em nosso século. "Nada é novo sob a lua." Isso vale para a programação e seus conceitos básicos. A propósito, o próprio termo “algoritmo” está enraizado no século IX e deriva do nome do matemático al-Khwarizmi. Algorítmicas muitas construções de Euclides. Portanto, seu algoritmo para encontrar o maior divisor comum ainda está vivo. Lully (os muçulmanos atiraram pedras nele - este é o papel "progressivo" da religião) no século XIII chegou à idéia de uma máquina lógica operando com símbolos. Nos manuscritos de Leonardo da Vinci, foram encontrados desenhos de um dispositivo de computação de treze dígitos. (No entanto, apenas tantos foram encontrados em seus manuscritos que alguns estudiosos afirmam seriamente que Da Vinci não era um homem, mas um alienígena.)
Em 1623, Schickard, professor de línguas (!!) da Universidade de Thuring, projetou um computador. Grande Pascal tinha uma idéia clara de um computador mecânico e construiu aritmômetros mecânicos. O grande Leibniz apresentou a idéia de declarações aritméticas para reduzir a disputa a um cálculo. ”“ Para argumentar, vamos sentar e calcular quem está certo ”!! ..“ Não é digno de uma pessoa talentosa passar horas como escravo em cálculos, que, é claro, podem ser confiados a qualquer pessoa. se eu pudesse usar uma máquina ao mesmo tempo ”, disse Leibniz, fabricou um computador e sonhou com uma máquina universal capaz de calcular tudo.
Bebbage no século 19 projetou e começou a construir uma
máquina mecânica programável universal . Este foi o primeiro computador universal. Babbage é um tanto imerecidamente esquecido, então não posso resistir e vou citar alguns fatos interessantes sobre ele.
"Acreditamos que a existência de tais dispositivos, além de economizar trabalho ao realizar operações aritméticas, viabilizará muito, o que, sendo viável, está muito próximo dos limites das capacidades humanas", disse o relatório da Associação Britânica para o Avanço da Ciência para o Estudo da Máquina Analítica de Babbage.
Se você segue a terminologia moderna - Babbage "físico". Ele não gostava de música. Na ópera, ele inventou músicas coloridas. Sobre os poemas de Tennyson
"A cada minuto que um homem morre,
Mas a cada minuto que um homem nasce ”Babbage escreveu ao autor o seguinte: “Tenho que lhe indicar seriamente que esses cálculos levam à conclusão de que a população total está em estado de equilíbrio constante. Ao mesmo tempo, é sabido que a quantidade mencionada está aumentando constantemente. Portanto, tomo a liberdade de supor que, na próxima edição de seu excelente poema, os cálculos errôneos que apontei serão corrigidos da seguinte forma:
Cada momento que uma pessoa morre
Mas 1,16 pessoas nascem ...Posso lhe dizer uma figura mais precisa: 1.167, mas isso, é claro, deve violar o ritmo do verso ... ”
Apesar disso (e, talvez, graças a isso), Babbage pretendia estudar a natureza do humor. Ele é um típico gerador de idéias. Devido ao excesso de idéias, ele não concluiu suas inúmeras propostas e projetos. Inventou o velocímetro, criou máquinas de aplainar e girar, moldes, cortadores, propôs um método de gravação em madeira. Em geral, este é o inglês Leonardo da Vinci. Em 1832, ele escreveu um livro, "The Economics of Machines and Production", no qual antecipava a análise de sistemas, a pesquisa operacional e a organização científica do trabalho. Marx conhecia bem este livro e o citava em Capital, Keynes falou com admiração. Mas a invenção mais importante é uma máquina analítica, que é um computador mecânico programável universal. Não havia dinheiro suficiente para o estado e Babbage gasta seu dinheiro na construção de um carro. Em busca de dinheiro, surgem todos os tipos de fontes. Juntamente com seu parceiro, Ada Lovelace cria um "sistema ganha-ganha" para corridas de cavalos. O sistema levou ao fato de que a dama teve que pagar com pérolas da família. Então Babbage planeja escrever um romance para o ano e gastar o dinheiro no carro. Dissuadiu seu amigo desse empreendimento. Então, o incansável Babbage planeja inundar o país com máquinas de jogo da velha e, novamente, colocar os recursos no carro. Mas era necessário dinheiro para isso.
Músicos de rua interferiram em suas performances. Babbage através da imprensa, parlamento, a polícia está lutando contra eles. Em resposta, todo bêbado considerava seu dever gritar sob as janelas de Babbage, os músicos já são de longe se divertir sob suas janelas. Após a morte de Babbage, o obituário do The Times tem a seguinte frase: "... um homem que viveu quase 80 anos, apesar da perseguição de músicos de rua". Gostaria de saber que anos ele teria vivido agora, quando os músicos de rua modernos estão armados com decibéis muito maiores?
Quando Babbage apresentou um plano para lidar efetivamente com os incêndios, mas disse: "Eu não publicarei, todos eles estarão perdidos, todas as suas casas serão queimadas". Eu odiava piedade. Quando ele viu uma bomba de água na Itália com uma inscrição dizendo que o proprietário a construía em nome do amor a Deus e seu país, para que o viajante cansado saciasse a sede, Babbage estava cauteloso, examinou a bomba de água e descobriu que toda vez que um viajante água bombeada, a maior parte caiu na casa de um mestre devoto. Após esse episódio, Babbage acrescentou: "
Só há uma coisa que eu odeio mais do que piedade é o patriotismo "
.O primeiro programador da máquina analítica Babbage foi a filha do poeta Byron, Ada. Aqui estão algumas de suas declarações.
“A
máquina analítica pode ser definida como a incorporação material de qualquer função indefinida com algum grau de generalidade ou complexidade ” !!!
"Quando consideramos qualquer nova invenção, frequentemente encontramos tentativas de superestimar o que já pensávamos interessante ou até excelente, e por outro lado, subestimar o verdadeiro estado de coisas quando descobrimos que nossas novas idéias substituem aquelas que consideramos inabaláveis".
Ada cunhou os termos "células de trabalho", "ciclo". Portanto, a linguagem de programação "Ada" usada no Pentágono tem um nome digno.
Babbage era mais um físico do que um matemático. Ele foi atraído pela incorporação prática de uma calculadora universal. Quando os matemáticos começaram a trabalhar, eles, como sempre, queriam formalizar o conceito de uma calculadora universal. Afinal, o conceito informal de uma máquina é uma coisa, e o conceito exato é outra. No final, como vimos, a intuição e o formalismo divergem. Church, Markov foram os primeiros a formalizar o conceito de um algoritmo. O primeiro como uma função recursiva, o segundo como um conjunto de permutações no alfabeto, ou seja, como uma gramática. Turing formaliza o conceito de um algoritmo em termos quase técnicos - é uma máquina de Turing.
Uma máquina de Turing universal é o equivalente teórico de uma máquina de computação universal - um computador. Acontece que existe linguagem suficiente de dois caracteres (| e um espaço), quatro comandos e memória externa infinita - e qualquer algoritmo pode ser programado em uma máquina de Turing universal. Está provado que todas as três definições acima do algoritmo são equivalentes - o que é expresso em uma definição será expresso em outras definições. Os méritos de Turing estão refletidos na existência do Prêmio Turing de Melhores Realizações de Programação. A propósito, Turing apresentou o chamado teste de Turing - um teste para distinguir uma pessoa de um computador. Este é um
teste puramente
funcional, sem substâncias místicas, como a alma humana . Se uma pessoa se senta em uma sala e uma máquina se comunica com ela através da tela, e por um longo tempo não podemos decidir onde a pessoa está e onde a máquina significa, essa máquina é intelectualmente equivalente a essa pessoa e não há necessidade de discutir quais feito e como. Isto não é essencial.
O já mencionado von Neumann provou puramente teoricamente a possibilidade de auto-reprodução de autômatos. A propósito, esse recurso é implementado na prática.
Literatura clássica
O texto está colocado em uma das tábuas da Babilônia: “Chegaram tempos difíceis, os deuses ficaram zangados, as crianças não obedecem mais aos pais e todos procuram escrever um livro”. Um grande número de livros foi lido, meio lido. Mas poucos deles foram cruciais para mim. Quais? No início de minhas atividades de TI, estas foram:
Brooks Como os sistemas de software são projetados e programadosUm clássico sobre os problemas enfrentados por grandes projetos.
Dahl, Dijkstra, Hoor. Programação estrutural .
Ele marca o início de uma nova era na programação. Você fica surpreso com o quão inesperada e profunda você pode ver os programas comuns. Ele contém muitos comentários filosóficos.
Dijkstra. A disciplina de programação.Livro absolutamente incrível. Na minha juventude, passei duas férias nele. Infelizmente, não posso garantir que entendi tudo. Quando conheci programadores tentando brilhar com seu intelecto, deixei que lessem este livro. Eles a devolveram com algum constrangimento. Uma reação semelhante foi ao “Relatório Revisado sobre Algol-68” (como uma das autoridades colocou sobre Algol-68 - “é uma linguagem para programadores e poetas”)
Wirth. Programação sistemática.O primeiro livro foi lido, mostrando que um tutorial de programação poderia ser bom.
Yodan. Programação estrutural .
O principal é notar-se em um tópico na moda. Mas aqui estava fora de lugar.
Gris. Ciência da programação“Se considerarmos o livro crucial da revelação intelectual de Dijkstra (a disciplina de programação), o livro de Gris é um ato apostólico” (Ershov).
Aho, Hopcroft, Ullman. Construção e análise de algoritmos computacionaisO contrapeso aos livros modernos de um dia como "C- + em 21 segundos, um minuto, ..." contém uma exposição de importantes algoritmos rápidos que não desaparecem por muito tempo.
Passeios. Metodologia de programaçãoHá muitas notas interessantes sobre a programação no pequeno e a programação no grande.
Kushnirenko. Programação para matemáticosÓtimo tutorial com um alto nível de apresentação.
Durante minha programação ativa, muito pouco poderia ser adicionado a esta lista. Muito tempo se passou desde então. Mas, mesmo agora, a tecnologia de programação não tem uma base fundamental, como a física, como base para a tecnologia técnica. A situação se assemelha ao estado da tecnologia medieval, quando não tinha uma base científica na forma de física. Aparecem os projetos da máquina de movimento perpétuo.
Diversos
Mitos
Qualquer um pode programar . Nesse relato, para o local da citação de Shakespeare: "
Eu posso convocar espíritos do abismo, e eu posso e todos podem, a única questão é se eles vão para a chamada ". Como em qualquer atividade profissional, a programação requer inclinação e habilidade. Parece-me que nem todos os programadores podem programar. É possível conhecer o Windows NT um pouco e ficar impotente antes de resolver você mesmo uma tarefa básica do aplicativo.
Todos podem escrever em sua língua nativa, mas não existem tantos bons escritores. Isso também se aplica à escrita em uma linguagem de programação.
A tarefa da contabilidade é fácil de escrever e desinteressante, mas a criação de uma página da web é difícil e interessante.Tanto o primeiro como o segundo podem ser variados. O principal: a tarefa cotidiana, dizem eles, é fácil de implementar e você não deve trabalhar particularmente nela. Apenas todos os tipos de kunshtyuki são dignos de atenção. Mas, assim, na minha opinião, apenas os programadores dizem, sem criar um único projeto decente. É como uma idéia da música como fones de ouvido da moda - e muitos amantes de música em fones de ouvido vagueiam, e com algum tipo de envolvimento especial em algum tipo de esotérico. Certa vez, eu próprio fiz uma homenagem ao esnobismo do programador. Aparentemente, qualquer programador passa pelo estágio "Eu sei tudo e posso fazer tudo". Mas para a maioria, não dura muito.
Esse tipo de humor pode ser do lado "alto". Em uma empresa, conheço um programador que veio de Fiztekh, que uma vez programou um voo de míssil balístico. Iniciamos uma conversa sobre o uso da matemática no setor bancário. Ele imediatamente me traz muitas páginas com um modelo matemático de um fragmento da atividade do banco - equações diferenciais com atraso (!!) (o atraso veio dos juros - o empréstimo hoje emitido gera lucro depois de um tempo - esse é o atraso). Acontece que ele parte do lucro funcional do banco e aplica os métodos conhecidos da matemática. Mas a tarefa consiste em encontrar essa funcionalidade. Mas parecia para o matemático-programador que essa era uma ninharia com a qual qualquer banqueiro lidaria, mas o banqueiro não seria capaz de acumular ainda mais um monte de fórmulas. O segundo é verdadeiro, mas o primeiro não é. E esse é o ponto. O que é necessário não é apenas matemática, mas matemática de trabalho. Caso contrário, é apenas um escolasticismo de fórmulas. A propósito, o lucro funcional certamente será uma função descontínua (quase todos os indicadores econômicos são descontínuos, a taxa de câmbio, por exemplo) e, portanto, métodos clássicos contínuos não lhe são aplicáveis - o princípio máximo de Pontryagin, por exemplo.
Me dê um computador que seja forte o suficiente e eu decifrei qualquer código . Muitos programadores garantem que qualquer código possa ser hackeado. Dê apenas um computador que seja forte o suficiente. Na minha opinião, isso é ignorância do básico da teoria da informação estabelecida por Shannon. E tudo é bem simples. Considere o ruído como uma mensagem codificada. Qualquer coisa pode ser extraída do barulho. Não pode ser decodificado de forma alguma - para extrair algo útil. Caso contrário, isso não é ruído. O ruído sobreposto à mensagem emite um ruído. Então, vamos colocar um ruído na mensagem: Ruído (W) + Mensagem (C) = Ruído1 (1). O ruído 1 não pode ser descriptografado. Obviamente, através de uma pesquisa exaustiva, você pode chegar ao final da mensagem. Mas como você sabe que esta é a mensagem certa. Deixe-nos ter a mensagem "Petya é um tolo." Uma pesquisa completa extrairá essa mensagem, mas também extrairá: "Petya é um cara esperto" e "Vasya é um tolo" etc. Então, qual tomar?
Mas você ainda pode extrair a mensagem. Para fazer isso, você precisa conhecer o ruído e o método de superposição. Então = 1-. Mas isso não precisa de um supercomputador, mas você precisa conhecer o ruído.
Aliás, um esquema semelhante parece ser aplicado nas conversas entre os presidentes americano e russo.
Programadores não precisam de matemáticaEm torno da programação, as humanidades-estetas começaram a lutar. Bem, como um programador pode desenhar uma bela página da Web sem um esteta e como se dar bem sem um esteta com uma interface GUI. E enxertos aparecem. E começa a parecer que eles são programadores.
Parece-me que, como um físico é infeliz sem matemática, também é um programador e infeliz e ridículo sem conhecimento de matemática. Na melhor das hipóteses, é um artesão. Você pode conhecer cada opção do sistema operacional, como instalar todos os tipos de drivers e não conseguir desenvolver um projeto básico. Na tecnologia, essa é uma situação familiar. Existem engenheiros e há trabalhadores. Você pode ser um excelente projetista de carros e dirigi-lo mal, ou pode ser um piloto de carros de corrida e não é nada para entender nos princípios de construção de motores.
Princípios
Que disposições gerais o impressionaram?
Dividir e conquistarO princípio mais útil. Qualquer tarefa precisa ser dividida em várias mais simples, para que as subtarefas possam ser resolvidas e combinadas, a fim de obter uma solução para o problema original. Em relação às subtarefas obtidas, pode-se fazer o mesmo. E assim por diante A arte da divisão é, sob muitos aspectos, a arte de encontrar um algoritmo. Os exemplos não têm números: a classificação rápida divide o conjunto classificado em dois, a pesquisa binária divide o conjunto de pesquisas em dois.
Deixe feio, mas uniformeNão crie variedade desnecessária. Apenas aumenta a entropia. Aceite o padrão unificador e cumpra-o inabalável. Isso se aplica a nomes, abreviações, estilo de codificação.
Nesse sentido, é surpreendente que não haja construções de linguagem necessárias que promovam o sistema. E as ferramentas mais avançadas para o desenvolvimento de aplicativos DBMS são baseadas em abordagens de arquivo. E como seria mais conveniente apresentar o projeto na forma de um banco de dados e aplicar o aparato de pesquisa e seleção a ele ...
Linguagem define pensamentoAo nos restringirmos a certas construções sintáticas, nem suspeitamos como limitamos nosso pensamento. O que seria um cálculo diferencial sem simbolismo matemático? Qual seria a sintaxe de uma linguagem de programação sem o formalismo de Backus-Naur ou equivalente a ela?
Programa = Algoritmo + DadosEm uma abordagem orientada a objetos, essa posição se estende a construções elementares - objetos que consistem em dados e métodos. A programação foi desenvolvida primeiro sob o signo de algoritmos e, em seguida, dados. O DBMS do sujeito está totalmente sob o título "dados". Mas os algoritmos também apareceram lá - métodos de pesquisa, métodos de indexação.
Modelar uma área de assuntoO modelo verbal gera uma idéia da área de assunto, acessível ao especialista em TI e contendo o mais essencial. Um modelo de informação do tipo "entidade - comunicação" gera um banco de dados. O modelo funcional “módulo M recebe na entrada In e converte para Out” define a arquitetura dos programas. Um modelo de objeto representa uma área de assunto como um conjunto de objetos em interação. O modelo de evento ajuda a descrever o movimento do sistema como uma alteração na resposta a determinados eventos.
Algumas tarefas
Algumas tarefas que me impressionaram. Cito, é claro, apenas pequenas tarefas. É difícil dizer brevemente sobre grandes tarefas, mantendo o gênero.Problema dos grãos de caféO banco possui um número conhecido de grãos de café preto e branco e um suprimento gratuito de grãos. Selecione aleatoriamente dois grãos da lata. Se eles são da mesma cor, coloque-os em estoque e coloque grãos pretos no banco. Se forem de cores diferentes, devolva o grão branco de volta e coloque o preto em estoque. Continue o processo até que um grão esteja no banco. De que cor será?Solução.O processo é claramente cíclico: a ação “tirar e colocar” é repetidaA invariante do ciclo é a paridade do número de grãos brancos. Portanto, se o número inicial de grãos brancos for par, o último grão será preto e, se for ímpar, então branco. Existem três arquivos muito longosno manual: Trabalhadores r, Estudantes s, Desempregados b. Eles são ordenados por nome. Sabe-se que existem estudantes desonestos que trabalham e estão nas listas de desempregados e, portanto, recebem benefícios de desemprego. Escreva um programa que encontre o primeiro desonesto - aquele cujo nome é o primeiro em ordem alfabética.Solução.Seja i, j, k as coordenadas dos arquivos r, s, bI, j, k: = 0,0,0; - comece do começoAté agora (r (i) <> s (j) es (j) <> b (k) eb (k) <> r (i)) repita oinícioSe r (i) <s (j ) então i: = i + 1;Se s (i) <b (j) então j: = j + 1;Se b (i) <r (j) então k: = k + 1;endi, j, k contêm coordenadas não autorizadas em seus arquivos.Mas como parece elegante na notação de Dijkstra:i, j, k: = 0,0,0;faça R (i) <S (j) i: = i + 1;S (j) <B (k) j: = j + 1; B (k) <R (i) k: = k + 1;od{i, j, k são as coordenadas desejadas}Onde o símbolo ifies identifica a chamada guarda (R (i) <S (j), etc.)É uma pena que esta notação não esteja incluída nos idiomas.A parábola dos banheiros nos trensEra uma vez um país em que cada carruagem era feita com um vaso sanitário. Mas então um economista apareceu e decidiu economizar fornecendo metade dos vagões com um vaso sanitário. Então eles começaram a fazer. Mas eles esqueceram de avisar sobre esta estação de triagem, para onde o trem está indo. Como resultado, alguns trens acabaram sem banheiros. Para corrigir a situação, cada vagão recebeu uma inscrição dizendo se havia um vaso sanitário e instruiu os acopladores: "Deveria haver cerca de metade dos banheiros no trem". Embora isso complicasse a vida dos trailers, eles seguiram honestamente as instruções. No entanto, houve reclamações de que, às vezes, os banheiros estavam na metade do trem. Para resolver o problema, eles lançaram uma nova instrução: "Ao acoplar, vagões alternados com banheiros e sem eles". Isso acrescentou trabalho aos trailers, mas eles, resmungando, começaram a seguir honestamente as instruções. No entanto, houve queixas de queque para um carro sem vaso sanitário, além disso, o vaso sanitário não estava no início de pelo menos um carro vizinho, mas nas extremidades dos dois. Terrível injustiça para um país democrático. O que fazer
Depois de pensar, os funcionários emitiram uma instrução adicional “Para abastecer cada vagão com um vaso sanitário com uma seta indicando onde ele está. Ao acoplar, todas as flechas dos vagões devem ser direcionadas em uma direção. ” Os reboques, embora não tivessem mesas giratórias suficientes, ficaram tensos e começaram a fazer isso. No entanto - oh horror! - os passageiros começaram a temer que, embora o banheiro mais próximo não passasse de um carro, não estava claro de que lado estava o banheiro. Surgiram instruções adicionais: "Em cada carro sem banheiro, desenhe a seta" Banheiro "e trave os carros para que esta seta aponte para o banheiro mais próximo". Os trailers uivavam: eles não tinham tempo a tempo. E havia um homem que notou o seguinte: se você ligar o carro ao vaso sanitário e sem ele, para que o vaso fique no meio do par e nunca o solte,então, a estação de triagem tratará, em vez de vagões orientados a N, com pares de vagões simétricos N / 2 (não orientados). Então todos os problemas de classificação desapareceram. É verdade que os trens devem conter um número par de vagões. Mas você pode aturar isso. Então eles fizeram.Os clássicos afirmam que, embora os computadores ainda não fossem conhecidos naquele país, quem encontrou a solução era um verdadeiro programador.Classificação rápidaApós a classificação e classificação de bolhas, o Shell é uma revelação. Algoritmo bonito e o resultado mais rápido.Um programa que imprime o próprio texto, cujo resultado é a impressão de seu próprio texto. Fiquei agradavelmente espantado com a forma como um jovem programador escreveu esse programa em Pascal em quinze minutos.Xadrez em várias linhasFiquei impressionado com o programa, de cerca de cinquenta linhas em C, que jogava xadrez decentemente. Pode haver várias instruções em uma linha.Estojos
Entrada polonesa
Isso foi há muito tempo. Estamos desenvolvendo um projeto no Centro de Exposições Belpromstroibank para manter dados sobre projetos de construção na república. O gerador de relatórios é plotado. Cada gráfico pode ser definido por qualquer fórmula aritmética. Como calcular? É decidido que o usuário deve preencher um formulário especial no qual ele próprio reduz a fórmula a elementar. Por exemplo, a fórmula r = (a + b) / (cd) é decomposta da seguinte forma: 1) x = a + b, 2) y = cd, 3) r = x / y. Então eles fizeram. Nós corremos. O projeto está sendo implementado. Todos os dias, dezenas de relatórios são impressos em dezenas de quilos de papel finlandês perfurado. O chefe está pensando no desenvolvimento do projeto. Gradualmente, ele teve a ideia de que a decomposição de qualquer fórmula poderia ser feita pela própria máquina. Assim, o usuário se livra do mau trabalho - decomposição da fórmula (decompondo-a em uma sequência de simples).A idéia de promover uma fórmula em um registro sem colchetes é exibida. Em seguida, vem a idéia de uma pilha. E então lembro que li em algum lugar sobre o registro polonês da expressão. Encontro um livro e vejo que meu próprio chefe teve a idéia de um registro polonês (ou, em outras palavras, um postfix) e uma pilha. Tudo isso teria sido delicioso se não fosse a invenção da bicicleta. Afinal, tudo isso um programador deve saber. Mas ele e eu éramos amadores - estrangeiros de outras profissões ... Infelizmente, nossos profissionais (que se formaram na BSU matfak e trabalhavam no Computer Research Institute) não sabiam disso. Então aqui é ainda mais triste.Afinal, tudo isso um programador deve saber. Mas ele e eu éramos amadores - estrangeiros de outras profissões ... Infelizmente, nossos profissionais (que se formaram no BSU matfak e trabalhavam no Computer Research Institute) não sabiam disso. Então aqui é ainda mais triste.Afinal, tudo isso um programador deve saber. Mas ele e eu éramos amadores - estrangeiros de outras profissões ... Infelizmente, nossos profissionais (que se formaram no BSU matfak e trabalhavam no Computer Research Institute) não sabiam disso. Então aqui é ainda mais triste.Infelizmente, parece-me que esta situação não está apenas na programação. Somos tratados por médicos de três vias, construtores de três vias estão construindo e professores de três vias ensinam. Temos "o aluno que não estuda, mas apenas os chatos aprendem". E então especialistas amadores aparecem. Como resultado, temos muitos idiotas sem instrução, muitos idiotas educados, muitas pessoas inteligentes sem instrução, mas muito poucas pessoas inteligentes e instruídas.Um pouco mais sobre amadorismo. Tendo vindo trabalhar para nós, o chefe (vamos chamá-lo de A.M.) decidiu mudar a cabeça dos programadores. Então, eu sou considerado um candidato. Parece que uma boa entrevista está acontecendo, mas os testes estão em andamento. E, por isso, me perguntam: "Como o final do arquivo é fisicamente determinado?" Infelizmente, eu não sabia disso e respondi o que eles dizem, por que eu deveria saber se o idioma me dá uma situação de EOF e não importa como ele é implementado. Como K. Prutkov disse: "... Kostaki está certo, eu estou certo." Mas, como chefe de programadores, fui invadido. No entanto, fui oferecido para liderar os diretores. (Voltando ao início da história e, lembrando os clássicos, podemos dizer - "o sonho do idiota se tornou realidade"). "Levando em conta a ampla visão de mundo", como disse A.M. Assim, as ovelhas foram separadas das cabras - generalistas de especialistas. E mais A.M. Habilmente tratado com pessoal.Portanto, minha abordagem do problema “de cima para baixo - do problema para a máquina” dominou e domina, e meu colega teve o oposto de “de baixo para cima - da máquina para o problema”. A.M. imediatamente nos levou a pólos diferentes. Um colega começou a trabalhar em drivers de dispositivos de entrada de dados sobre canteiros de obras, e eu estava trabalhando em um modelo matemático para receber relatórios sobre o status dos canteiros de obras. Em outros projetos, encontrei o contrário com outros gerentes. Como resultado, alguém fala sobre bits e o segundo sobre integrais e não se entende.Em outros projetos, encontrei o contrário com outros gerentes. Como resultado, alguém fala sobre bits e o segundo sobre integrais e não se entende.Em outros projetos, encontrei o contrário com outros gerentes. Como resultado, alguém fala sobre bits e o segundo sobre integrais e não se entende.Então eu me tornei o diretor de diretores. E programado, é claro. E os programadores foram liderados por outra pessoa, um profissional. Nós nos tornamos bons amigos. E recebi dele a caracterização lisonjeira e irônica de "um especialista em problemas incertos", reconhecendo o fato de que eu poderia levar o problema mais banal ao fundamento matemático e dar-lhe solidez, mesmo que em essência pudesse ser um blefe. O legado de um físico teórico afetado.No exemplo de A.M. Vi que um projeto é um produto que não tem tanta inteligência quanto vontade .Imbuído de respeito pelo chef, até coletamos suas frases.Exemplos:
" De e para " - não há nada para pensar apenas na sua dor, você precisa ver todo o processo." Para Bitik " - uma abordagem superficial e hacky não funcionará aqui." Arregaçando as mangas " - não há nada para liberar, trabalhe sem rede.“ É mesmo? "- Você está falando bobagem, irmão?Esses registros foram repetidos diariamente com ele. Mas estava na A.M. e propriedades mais desagradáveis. Ele gostava muito de brainstorming nos feriados. Feriado. A organização da mesa está concluída, o champanhe está aberto, e aguarde a ligação da manhã. Isso mesmo, a campainha. - “Então eu tenho algumas idéias. Proponho discuti-los. E - adeus feriado.Uma cobra preenchendo todo o espaçoAssim que as telas apareceram, os jogos visuais apareceram. Um dos primeiros é uma cobra pegando seu rabo. A cobra teve que ser conduzida, evitando obstáculos aleatórios, dando comandos para a esquerda / direita. A cobra se alongava o tempo todo, de modo que havia menos espaço. E então eu tive uma tarefa. É possível escolher uma rota de cobra para preencher todo o espaço da tela. Depois de pensar algumas horas, encontrei o caminho certo. Vamos almoçar. Enfileiro a tarefa no meu colega. E para minha surpresa, não tivemos tempo de derramar o primeiro, pois ele resolveu o problema (embora as filas fossem longas, mas não por algumas horas). Depois de pensar nesse caso, comecei a me consolar com o fato de que, aparentemente, o desejo de comer estimula o intelecto.Frases clássicas
Algumas frases médias de clássicos custam volumes de mediocridade. Aqui estão algumas instruções que definiram áreas inteiras da programação.Brooks :- Por trás do domínio está a engenhosidade, graças à qual programas econômicos e rápidos aparecem. Quase sempre, isso é resultado de um avanço estratégico, não de uma habilidade tática. Às vezes, esse avanço estratégico é um algoritmo, como, por exemplo, a rápida transformação de Fourier proposta por Cooley e Tukey, ou uma substituiçãon2comparações em n * log (n) ao classificar.
Mais frequentemente, ocorre uma inovação estratégica como resultado da apresentação de dados ou tabelas. O núcleo do programa está aqui. Mostre-me os fluxogramas sem mostrar as tabelas, e eu continuarei extraviado. Mostre-me suas tabelas e os fluxogramas provavelmente não serão necessários: eles serão óbvios .
- A apresentação de dados é a essência da programação.
- Acostumar-se aos requisitos de precisão perfeita é, na minha opinião, o mais difícil no processo de aprendizado de programação.
- Uma vez que o projeto é finalmente adotado, torna-se obsoleto no sentido de seus conceitos.
Wirth :- Programa = algoritmo + dados.
- () , , .
- . , .
- , , .
- , (, ), . , .
- , , , , . , . , . .
- ( ) ; , . , .
- , , . , :
- ,
- a decomposição escolhida permite que você obtenha instruções em algum sentido mais próximas do idioma em que o programa será finalmente formulado.
SOL :Uma rede é um computador.Ótima ideia.
Portanto, idealmente, um programa distribuído, considerado no nível de uma linguagem de desenvolvimento, não deve diferir de um programa unitário. A base distribuída no nível de uso não deve diferir de não alocada. A distribuição deve ser implementada pelo sistema operacional. A distribuição e orquestração de serviços também não devem ser uma preocupação de um programador de aplicativos.Dijkstra :- - , ( , , , ).
- -: – .
- ? : “ : . , , , – , ,
… , . , , , “” . – … , ,
– ”.
— 1/106 — 104 . . , -, .- .
, , , , , , . , , , . , , , . , , , . , , . , – , . , , , , . - … . : “” ? : ””, , ; : ””, — . , , – – , . , , , . : , .
- , .
- , , « » — ! — « ». - ,
, : « , , , , «» , ?» , , -, ." , , , , . - , , ( ), , « ». ; , , , « », . . , ,
.
Não sei :A linguagem de programação mais importante é a linguagem nativa. Um programa em um idioma formal é uma tradução de idéias formuladas no idioma nativo. Portanto, aqueles que se apresentam sombriamente em sua língua nativa também se escurecerão no formal.Marketing e programadores
Preparei materiais promocionais para a exposição em meu projeto. Os profissionais de marketing da minha empresa atacaram meu material publicitário com esses ataques:- O material tem muitos pontos negativos (uma descrição das deficiências dos projetos existentes), e isso carrega energia negativa
- Os tamanhos dos folhetos não se encaixavam na proporção áurea.
E algo mais assim.Mas esses profissionais de marketing não notaram a ausência de telefones, endereços e informações sobre a empresa nos folhetos, que meu ex-chefe gentilmente chamou a atenção quando eu estava familiarizado com meus materiais na exposição. Comecei a criticar: senhores, faço uma descrição técnica do produto e vocês, profissionais de marketing, fazem uma descrição do mercado. Onde há. Eles só concordam em criticar. Como resultado, chegou ao chefe da empresa. Ele me disse: obedecer ao profissional de marketing, afinal, ela se formou nas economias com honras. Eu: e me formei na BSU com honras. Então o chef diz: "Vocês excelentes alunos se entendem, e eu não vou entrar em suas brigas."Fiquei impressionado com isso no marketing (em geral, e não no marketing de uma empresa). Essa é a mágica dos nomes. Todo mundo precisa dar ao menos um fato significativo, um nome e, possivelmente, uma abreviação sonora. Isso já garante que você não desconsiderou esse fato. E então você precisa combinar o nome. O nome é a aplicação do princípio de "Dividir e conquistar". Quando damos um nome, destacamos o assunto. Quantas reivindicações de direitos autorais foram como: "vimos isso, mas não destacamos esse fato e não demos um nome a ele". Esse é exatamente o ponto! Então eu entendi o turbilhão de OLE -> OCX -> ActiveX -> COM ->?; E o site -> portal ->? .. Bem, o que podemos dizer sobre a interação business-to-business, mas quando dizemos B2B (Business to Business) - esse é o termo e, portanto, há algo por trás dele, embora de fato de fato, pode não haver nada, mas simplesmente uma designação.Assim que a abreviação ERP apareceu, muitos desenvolvedores começaram a apresentar seus desenvolvimentos como ERP ... Moda para termos é uma coisa poderosa.A esse respeito, o seguinte é lembrado. Quando o partido permitiu a cibernética, iniciou-se um debate sobre o que chamar de agora chamado “computador”. "Calculadora", "TsAM", "Computador" ... - tudo não rolou. A grande e poderosa linguagem nossa salvou o "Computador" antes do americanismo. Na minha opinião, isso é uma manifestação do complexo de inferioridade no Ocidente. E, devo dizer, infelizmente, um complexo completamente justificado.Sobre integração
Vi muitas implementações de sistemas bancários e, quase sempre, elas eram apontadas como sistemas integrados. Mas, na verdade, eles nunca foram assim. Eu acho que um sistema verdadeiramente integrado ainda está por vir. Esse sistema deve ter um único modelo de informação, um único modelo de objeto, um único modelo funcional, um único conceito e arquitetura: a integração deve ser alcançada através de dados, objetos, funções, eventos, interfaces. Eu não vi isso.O mais
A tarefa mais interessante
Este é um projeto de análise de negócios. O que pode divertir o orgulho como uma consciência do fato de que TK se determinou, fez a declaração, o modelo de informações, o modelo de objetos e, além disso, você também programa. A tarefa é interessante em sua novidade e amplitude. Suas bordas não são visíveis.Maior desafio
O maior projeto coletivo são os passaportes de construção de toda a Bielorrússia. O projeto foi implementado na montadora de computadores da UE. Área temática - dados sobre todos os projetos de construção na Bielorrússia. O próprio usuário definiu a estrutura e o conteúdo do relatório de construção.O maior projeto individual é o Business Intelligence. Área de assunto - análise do estado passado, atual, planejado e previsto do negócio. Ferramentas: decompositores, comparadores, cenários de simulação, séries temporais, hipóteses estatísticas. Idiomas: Delphi, C #.O desafio mais marcante
Esta é a primeira introdução à recursão. Fiquei muito impressionado com a solução do problema da torre de Hanói usando recursão - redução para o mesmo problema, mas de uma dimensão mais baixa, portanto a solução é óbvia para pequenas dimensões. O problema das oito rainhas também foi muito impressionante.O livro mais marcante
Dahl, Dijkstra, Hoar. Programação estrutural.Dijkstra. A disciplina de programação.Os casos mais ridículos
Desenvolvemos um projeto em Kobol para o EC-1020. Eu sou um programador iniciante. Havia a necessidade de um programa despachante que chamasse certos programas, dependendo da situação. Os programas no Kobol não puderam ser baixados por outras pessoas (ou eu não sabia como fazer isso). Era necessário escrever em assembler (o que não sabíamos) ou fazer outra coisa. E então eles acharam isso diferente - essa é a linguagem de gerenciamento de tarefas (JCL) do sistema operacional DOS.Havia algo como SYSIN (dispositivo de entrada lógica), SYSRDRR (dispositivo de entrada de diretiva lógica JCL), etc. Eles podem ser reatribuídos em tempo de execução. Portanto, depois de preparar um monte de SYSRDR para cada ramificação possível, você pode, em princípio, concluir a tarefa. E nós gastamos muito esforço para fazer isso. E tudo, é claro, em vão. Depois de estudar o Assembler, conseguimos tudo e, tendo gastado muito esforço com a JCL, mesmo tendo alcançado o resultado, não recebemos nada de novo. Você precisa escolher não o que está mais próximo, mas o que trará mais benefícios em geral. A propósito, o DOS foi substituído pelo OS / 360 e essa JCL é uma coisa do passado. Mas veio ainda mais sedutor, mas esse erro não foi repetido. É difícil fazer uma arma com um estilingue.O mais engraçado
No início do "toque", o produto foi colocado em operação de teste usando um exemplo de teste. Um caso de teste é um teste global compilado por economistas. O resultado de uma execução do produto geralmente era de tabulogramas - relatórios sobre o estado do problema sendo resolvido, em diferentes estágios de sua solução. Tabulagramas foram verificados em relação a um exemplo de controle e, se coincidissem, o produto foi aceito para operação de teste. Mas o projeto não está pronto. O que fazer
A solução é simples. São escritos programas que produzem tabulagramas na testa. Na entrega, eles começam. E um cliente inexperiente (e quem era experiente?) Assina um certificado de aceitação para a operação de avaliação.“Se você pode dizer, por que mostrar?” - um querido programador respondeu com essa frase quando, depois de um emocionante programa do programa que ele criou, este caiu no início do programa e passou de mostrar para contar.Um projeto está sendo desenvolvido - "Business Intelligence". Foi desenvolvido no NT. E agora precisamos demonstrar urgentemente o sistema no banco. Decidimos fazê-lo em um laptop. O Windows 98 já estava lá. Colocamos, recompilamos, corremos - tudo está bem, exceto um: o início do período é estabelecido em 1898. Começamos a suspeitar que o contexto que contém as datas foi extraído incorretamente. O contexto é recuperado pelo código do usuário, que é recuperado chamando a função GetUserName da API do Windows. Começamos a suspeitar que essa função não funciona corretamente. Definimos o ponto de observação e executamos o depurador. Está tudo bem e o programa funciona bem e as datas são normais. Eles escreveram tudo por acaso. Era noite e, felizmente, estávamos indo para casa. Amanhã no banco. Na manhã seguinte, ligamos - novamente a mesma situação com as datas. Ativamos o analisador no depurador - está tudo bem.Bem, a situação na mecânica quântica é direta: quando não espionam uma partícula, elas interferem nas ondas e, quando as espiam, são partículas. Portanto, não recebemos uma resposta. E para que tudo corresse bem, nós "canetas" inserimos os dados corretos e a demonstração foi bem-sucedida.Bem, e outro caso de demônio. Desenvolvemos o projeto de análise juntos e, portanto, usamos as ferramentas para dar suporte ao trabalho em equipe no projeto - MS SourceSafe. Este produto suporta várias versões históricas. E aqui eu descobri repetidamente que, depois de corrigir algum ramo importante, depois de um tempo, percebo que a versão antiga está ali, mas não há correções. E assim foi repetido várias vezes. Eu atribuí tudo ao analfabetismo. Mas que tipo de produto tão cruel para os analfabetos?Quase filosofia
Como descrever os recursos intelectuais de um programa, um computador com um tamanho fixo de memória? É claro que eles nem conseguem se lembrar de um número suficientemente grande. Então, o que - nós também não podemos lembrar e escrever um número suficientemente grande. Mas não nos consideramosseres não intelectuais. Então, onde está a definição formal de inteligência? Eu acho que esse é um dos problemas fundamentais. Como descrever uma medida da inteligência de um sistema com determinados parâmetros externos - memória? Como um programa pode se entender - os limites do autoconhecimento? O uso de macros - programas que se modificam, levanta questões: um programa pode ficar mais sábio ?, onde estão os limites da inteligência?Como antes, a visão de mundo era determinada pelas ciências naturais, e agora é cada vez mais determinada pela Ciência da Computação.Não quero dizer programação primitiva, mas a ciência da programação. Assim, muitos problemas filosóficos abstratos são bastante específico quando considerá-los do ponto de vista do computador. Considere este exemplo. Afinal, programas inteligentes de criaturas podem ser simulados em um computador. Você pode simular reprodução, seleção, hereditariedade, espaço, tempo ... O resultado é um mundo intra-computador. E aqui as criaturas intra-computadores (softhomo) moram lá, lutam por um pedaço de pão, conversam, filosofam e, mais cedo ou mais tarde, pensam: existe um deus no mundo? O que é primário: matéria ou consciência? Existem coisas em si mesmo? Você conhece o mundo? Há um solipsista e declara: "o mundo inteiro existe apenas na minha imaginação". Os materialistas locais levantaram um uivo a esse respeito. Quem está certo? Do ponto de vista de seu mundo, os materialistas estão certos, e do ponto de vista de nosso mundo, externo a eles, o solipsista está certo. Prova disso é desligar o computador.E em nosso mundo há muito se expressa a idéia de que tanto os materialistas quanto os idealistas estão certos. Na física, o pensamento dicotômico primitivo, como "partícula ou onda" - "E partícula e onda", foi superado há muito tempo. Assim é na filosofia. Quando perguntado sobre o que é a verdade profunda, Bora respondeu: "A verdade profunda é essa verdade, cuja negação também é verdade profunda". A negação da verdade 2 * 2 = 4 não é profunda, o que significa que essa verdade em si não é profunda. Mas a negação da verdade “a matéria é primária” é profunda, como diz todo o desenvolvimento da filosofia, quando os materialistas-leninistas apenas criticaram as inovações idealistas, sem apresentar nada de novo: eles dizem: “Sim, eles mesmos não entendem o que eles criaram. Mas assim que dermos uma interpretação materialista, tudo se tornará verdadeiramente científico ”Exemplo - cibernética, semiótica, interpretação de Copenhague da mecânica quântica, etc.E aqui está o que: não importa o que os softwares inventem, não importa quão duro seja o intelecto, eles nunca verão e ouvirão nosso mundo fora deles - o programador, por exemplo (se o programador não abrir o diálogo explicitamente). E para eles, o programador é um deus, e nosso mundo é uma coisa para eles em si mesmos, e nada do nosso mundo é incognoscível para eles, e seu preenchimento intelectual feito pelo programador é um conhecimento a priori. Parece que Kant, que falou sobre tudo isso em sua filosofia, realmente sabia muito sobre isso. Os conceitos mais abstratos de Kant de "coisa em si", "transcendental", "transcendental", "conhecimento sintético a priori" recebem coisas bastante compreensíveis nessa interpretação. Para o mundo indicado, nosso mundo inteiro é coisas em si, conhecimento sintético a priori é tudo o que um programador coloca no intelecto do mundo intra-computador; o conhecimento transcendental para ele é o conhecimento decomo um programador criou esse mundo da computação.Nesse caso, você pode se perguntar: ou talvez para alguns de nós somos o mundo da computação e Deus seja um programador? A propósito, o chamado princípio antrópico é formulado na física. Acontece que todas as leis da física estão dispostas de tal maneira que as teriam mudado um pouco e uma pessoa não teria surgido. Mude um pouco a constante gravitacional, ou a carga do elétron, ou a constante de Planck, e tudo funcionará para que o Sol não acenda ou fique muito quente. Ou seja, tudo é feito para que uma pessoa apareça. É verdade que muitos dizem que não é preciso dizer: mundos diferentes podem surgir milhões de vezes sem uma pessoa, mas se uma pessoa já apareceu, então, naturalmente, o mundo em que ele apareceu foi projetado para que ele apareça. Depois que o trator sai do transportador, é natural que o transportador seja projetado para que o trator apareça. Mas ainda, ainda ...Portanto, a programação permite que você dê uma nova olhada nos problemas de visão de mundo. Isso pode mudar fundamentalmente a própria visão de mundo.Ultimo
Em toda a jornada da minha vida, retirei a sabedoria banal: " Uma mente não é suficiente para agir com inteligência ". Quantas mulheres inteligentes estavam em nosso curso - muitas. Onde eles estão? O que mais é necessário para o sucesso? Mas Deus o conhece. E sorte, dinheiro e arrogância mundana. Infelizmente, três governantes insolentes governam tudo. Homens inteligentes também duvidam de si mesmos. Eles têm inteligência suficiente, mas não vontade suficiente.A queixa dos antigos babilônios “Os tempos difíceis chegaram, os deuses ficaram com raiva, as crianças não obedecem mais aos pais e todo mundo quer escrever um livro” modernidade modificada: “ Os tempos difíceis alcançados, os deuses estão com raiva, como as crianças não mais obedecem aos pais e todos querem escrever um livro, e ai, todos ou para criar seu próprio site / portal / blog no Internete . "