Soy un ingeniero de software bastante competente, pero no conozco mucha teoría. Quiero aprender más teoría. Los temas particulares que me interesan son: complejidad computacional, lenguajes formales y teoría de tipos. Pero no sé cómo comenzar a aprender sobre estos campos.
¿Qué recursos recomendarías a alguien que quiera aprender más teoría a través del autoestudio? ¿Hay alguna guía teórica de autoaprendizaje de informática para ingenieros de software?
soft-question
teaching
books
Henry H.
fuente
fuente
Respuestas:
Es un campo amplio con algunas áreas bastante diferentes.
Comenzaría con algunas de las ideas más fundamentales sobre qué son las computadoras: Hopcroft y Ullman, "Introducción a la teoría de los autómatas, los idiomas y la computación".
La razón por la que lo recomendaría en particular, es su énfasis en las pruebas. Te guían a través de una forma rigurosa de pensar. Esa es la diferencia entre escribir programas y ser científico.
fuente
Hay varias formas de aprender sobre la teoría de tipos. Para un programador que trabaja, Tipos y lenguajes de programación de B. Pierce es un buen comienzo. Los fundamentos prácticos para los lenguajes de programación de R. Harper también podrían ser buenos. Si desea un poco de información fácil de leer sobre semántica operativa, le recomiendo G. Winskel's, La semántica formal de los lenguajes de programación: una introducción . Con T. Nipkow, G. Klein, Semántica de hormigón, una variante del libro de Winskel se ha formalizado para el asistente de prueba interactivo Isabelle / HOL. Sospecho que es realmente difícil familiarizarse con un probador solo de este (o cualquier otro) libro, querrás que un experto cercano haga preguntas. Si desea un enfoque más matemático de la teoría de tipos, puede consultar JR Hindley, JP Seldin, Lambda-Calculus and Combinators: An Introduction , o H. Barendregt's, Lambda Calculi with types . Aunque no recomendaría comenzar desde Barendregt.
Si desea una sola recomendación, le diría que lea todo Pierce excepto la Parte VI (Sistemas de orden superior) e implemente los idiomas de los juguetes que trata el libro. Terminará con una sólida base en la teoría de tipos, y probablemente también sea un mejor programador.
fuente
Recomiendo computabilidad, complejidad e idiomas por Martin Davis, Ron Sigal y Elaine Weyuker.
fuente
Soy un gran admirador de la teoría y los algoritmos. Una vez tuve la oportunidad de visitar Ciencias de la Computación Teóricas en el Instituto Indio de Tecnología, Madras (IIT-M), India. Conozco muchos teóricos allí en IIT-M. Cuando fui allí, no tenía idea de qué era la teoría, pero hoy estoy totalmente enamorada de ella.
Gracias a @Kate F por el puntero, sí, Hopcroft y Ullman es un excelente lugar para comenzar.
Sin embargo, así es como empecé,
Lea la Introducción a los algoritmos de Cormen. <\ Br> Este es un excelente lugar para comenzar. Cuando estudies, trata de entender cada prueba con la mayor longitud posible. Si comprende bien la prueba, intente codificar la misma lógica en cualquier idioma de su elección. (Tarda un poco más pero vale la pena intentarlo)
Siga las principales conferencias en Teoría como
FOCS
SODA
STOC
EC (Comercio Electrónico) - Algorithmic Game Theory
COLT (Conferencia sobre Teoría del Aprendizaje) - Teoría del Aprendizaje
CRYPTO - Criptografía
SOCG (Simposio sobre Geometría Computacional) - Geometría Computacional
CCC (Conferencia sobre Complejidad computacional) - Teoría de la complejidad
Incluso si no comprende mucho, intente leer y PIENSE tanto como sea posible. Tienes que hacer tantas pruebas como sea posible ...
fuente