Sou um engenheiro de software bastante proficiente, mas não conheço muita teoria. Eu quero aprender mais teoria. Os tópicos específicos que me interessam são: complexidade computacional, linguagens formais e teoria dos tipos. Mas não sei como começar a aprender sobre esses campos.
Quais recursos você recomendaria para alguém que deseja aprender mais teoria através do auto-estudo? Existem guias teóricos de auto-estudo de ciência da computação para engenheiros de software?
soft-question
teaching
books
Henry H.
fonte
fonte
Respostas:
É um campo amplo, com algumas áreas bem diferentes.
Eu começaria com algumas das idéias mais fundamentais sobre o que os computadores são: Hopcroft e Ullman, "Introdução à teoria de autômatos, linguagens e computação".
A razão pela qual eu recomendo isso, em particular, é a ênfase deles nas provas. Eles o guiam através de uma maneira rigorosa de pensar. Essa é a diferença entre escrever programas e ser científico.
fonte
Existem várias maneiras de aprender sobre a teoria dos tipos. Para um programador que trabalha, Tipos e linguagens de programação de B. Pierce é um bom começo. Fundamentos práticos para linguagens de programação de R. Harper também podem ser bons. Se você quiser um pouco de conhecimento fácil de ler sobre semântica operacional, recomendo G. Winskel, The Semântica Formal de Linguagens de Programação: Uma Introdução . Com T. Nipkow, G. Klein, Semântica Concreta, uma variante do livro de Winskel foi formalizada para o assistente de prova interativa Isabelle / HOL. Eu suspeito que é realmente difícil lidar com um provador apenas deste (ou de qualquer outro) livro, você gostaria que um especialista por perto fizesse perguntas. Se você deseja uma abordagem mais matemática da teoria de tipos, pode olhar para JR Hindley, JP Seldin, Lambda-Calculus e Combinators: An Introduction , ou H. Barendregt, Lambda Calculi with Types , de H. Barendregt . Embora eu não recomendo a partir de Barendregt.
Se você quiser uma única recomendação, eu diria que leia tudo de Pierce, exceto a Parte VI (Sistemas de Ordem Superior), e implemente as linguagens de brinquedos discutidas no livro. Você terá uma forte base na teoria dos tipos e provavelmente um programador melhor também.
fonte
Eu recomendo Computabilidade, Complexidade e Idiomas de Martin Davis, Ron Sigal e Elaine Weyuker.
fonte
Eu sou um grande fã de teoria e algoritmos. Uma vez tive a oportunidade de visitar a Ciência da Computação Teórica no Instituto Indiano de Tecnologia, Madras (IIT-M), na Índia. Conheço muitos teóricos no IIT-M. Quando fui para lá, não fazia ideia do que era a teoria, mas hoje sou totalmente apaixonada por ela.
Graças a @Kate F pelo ponteiro, sim Hopcroft e Ullman são um excelente lugar para começar.
No entanto, aqui está como eu comecei,
Leia a Introdução aos algoritmos de Cormen. <\ Br> Este é um excelente lugar para começar. Ao estudar, tente entender cada prova o máximo possível. Se você entende bem a prova, tente codificar a mesma lógica em qualquer idioma de sua escolha. (Demora um pouco mais, mas vale a pena tentar)
Siga as principais conferências em Teoria como
FOCS
SODA
STOC
EC (Comércio Eletrônico) - Teoria Algorítmica dos Jogos
COLT (Conferência sobre Teoria da Aprendizagem) - Teoria da Aprendizagem
CRYPTO - Criptografia
SOCG (Simpósio em Geometria Computacional) - Geometria Computacional
CCC (Conferência sobre Complexidade Computacional) - Teoria da Complexidade
Mesmo que você não entenda muito, tente ler e PENSAR o máximo possível. Você precisa fazer o máximo de provas possível.
fonte