traduccion science mit engineering degree computer book computer-science

computer-science - mit - computer science pdf



¿Qué libros debería leer para tener una educación universitaria en Informática? (22)

Antes que nada, lee Computer Science: a Modern Introduction . Esto le dará una buena base y una visión general de los temas que hay que seguir.

Introducción a Algoritmos es muy bueno. Para una introducción a la programación funcional, recomiendo trabajar a través de ML para el programador en funcionamiento .

Áreas que diferencian al científico de la computación del programador: una base en matemáticas discretas, una comprensión básica de VLSI y arquitectura de sistemas, una comprensión de los principios básicos de la criptografía y la seguridad, una comprensión de la teoría de la computación y una comprensión de la teoría de la información.

Siempre he sido un aprendiz en gran medida independiente, recogiendo lo que puedo de Wikipedia y varios libros. Sin embargo, me temo que puedo haber predispuesto mi autoeducación por omisión inadvertida de temas y conceptos. Mi objetivo es enseñarme el equivalente a una licenciatura en Informática de una universidad de alto nivel (no importa cuál).

Con ese fin, compré y comencé a leer algunos libros de texto académicos:

Además de algunos libros de texto que me sobraron de las clases que tomé en una universidad estatal mediocre al mejor:

Mis preguntas son:

  • ¿Qué temas no están cubiertos por esta colección?
  • ¿Hay algún libro que sea más riguroso o minucioso (o incluso más fácil de leer) que un libro enumerado aquí?
  • ¿Hay algún libro que sea una pérdida de mi tiempo?
  • ¿En qué orden debería leer los libros?
  • ¿Qué aprende un MIT o un Stanford (o UCB o CMU ...) que podría extrañarme?

Los libros de ingeniería de software son bienvenidos, pero en el contexto del estudio académico solo por favor. Conozco Code Complete y el programador pragmático, pero estoy buscando un enfoque más teórico. ¡Gracias!


Creo que puedes usar la mayoría de los otros libros como referencia y simplemente absorber Programming Pearls en su totalidad. Hacerlo te haría mejor que el 90% de los programadores que he conocido.


El mejor enfoque que he encontrado es elegir su universidad favorita, ir a su sitio web y ver los cursos para el grado. Muchos de los grandes tienen sus lecturas requeridas publicadas para cada curso. Open Course Ware de MIT es un buen ejemplo.

Esto, dicho sea de paso, también funciona para los programas de grado sin CS.


Esta es una muy buena lista. Los dos temas que definitivamente agregaría a la mezcla son matemática discreta y redes. Otros temas que pueden interesarle son compiladores, gráficos de computadora, sistemas operativos distribuidos. También hay interesantes subcampos de inteligencia artificial, como la visión artificial y el aprendizaje automático. Y para poder manejar todo eso, definitivamente necesitas álgebra lineal y probabilidad.

Y es evidente que no se puede hacer ciencia de la computación simplemente leyendo libros. Para comprender realmente cada tema, debes hacer proyectos en él. También sugiero consultar el Open Courseware de MIT, donde los profesores publican el programa, las notas de clase y las tareas.


Las dos omisiones más grandes que veo:

Para los sistemas operativos, prefiero el Tanenbaum en lugar del Silberschatz, pero ambos son buenos:

Y sobre el orden, eso dependería de tus intereses. No hay muchos requisitos previos, el autómata para compiladores es el más obvio. Primero lea el libro del autómata y luego el del dragón.

No conozco todos los libros que tienes, pero los que conozco son lo suficientemente buenos para que los demás también sean decentes.

También te faltan algunos libros de lógica y discretos de matemáticas .

¡Y no olvidemos algunos libros de teoría de base de datos !


Los libros sobre desarrollo profesional de software que cubren cómo funcionan los proyectos de software, diferentes metodologías y patrones de diseño son geniales. El conocimiento del diseño web también es muy útil cuando se trata de empleo.

Aunque no entiendo por qué intentas hacer esto tú mismo. Incluso una universidad "mediocre en el mejor de los casos" podrá enseñarte las habilidades mucho mejor de lo que puedes enseñarte a ti mismo. Se trata de conocer personas que tienen experiencia trabajando realmente en la industria de la informática.

No se trata de la universidad sino del esfuerzo que pones para determinar qué tan bien lo haces.

Sin embargo, mi respuesta quizás no sea útil porque no sé de dónde eres. En Escocia, donde vivo, tengo que ir a la universidad gratis, este puede no ser el caso para ti.


Matemáticas concretas


No sé cómo es en los Estados Unidos, pero en mi país estudiamos matemáticas discretas y una introducción a la teoría de grafos antes de los lenguajes formales y los autómatas.

Además, no veo ningún libro que cubra redes de computadoras ... ¿por qué no pruebas las Redes de Computadoras de Andrew Tanenbaum?




  • Discreto Matemáticas I y II (mi escuela privada)
  • Física I (la mayoría de las escuelas estatales de Missouri)
  • Estadísticas I
  • Criptografía (opcional pero me gustó)
  • OpenGL en C ++ (opcional pero ordenado)
  • Análisis y diseño de sistemas (Ingeniería de software desde la perspectiva empresarial. La clase era muy buena).

  • Ética.

  • Redes (enseña algoritmos de red, patrones de bits que tratan con datos de red).

    Hay algunas cosas que para comprenderlos requieren ayuda; no necesariamente un profesor (si lo hacen para ganarse la vida), pero tal vez un amigo que ha tomado la clase o estudió el campo.

Leer libros sobre estos temas no significa que los conozcas. Hacer matemáticas en la matemática, codificar en el código, etc., es lo que lo ayuda a comprender, y muestra que sabe el tema al final.


File Structures: un enfoque orientado a objetos con C ++

Mucha información buena sobre dispositivos de bloque y estructuración de archivos que no encontrarás en ninguno de los libros que enumeró. Obtuve algunas críticas en Amazon porque a la gente no le gustaban los ejemplos de código, pero el objetivo del libro es enseñar los conceptos, no dar ejemplos de código de cortar y pegar.

También asegúrate de obtener un libro sobre compiladores


Muchos cursos en las mejores universidades no usan un libro de texto porque ninguno de los libros disponibles es lo suficientemente bueno. (Fui educado en Princeton y enseñé durante 8 años en Harvard.) Cuando alguien recomienda un libro, pregunte si el libro es realmente bueno o si es el mejor disponible en el campo .

Por ejemplo, en compiladores , no soy un gran admirador del ''Libro del Dragón''; Nunca me gustó el enfoque, y la edición actual está muy desactualizada. Creo que estarás mejor con un libro como Programming Language Pragmatics de Michael Scott, que aunque es un poco disperso es un libro encantador para leer. (Nunca he enseñado con eso, así que no puedo decir lo que los estudiantes piensan de él.) No conozco un libro realmente bueno sobre la construcción de compiladores para el autodidacta, aunque podría ver a Cooper y Torczon''s Engineering como compiladores. porque está actualizado y escrito por dos de los mejores ingenieros de compilación del negocio.


Lo siento, no puedes reemplazar cuatro años de universidad leyendo un libro o una serie de libros, sin importar lo buenos que sean los libros. Si pudieras, ¿por qué alguien iría a la universidad?


Primero, no me preocuparía. Pero si desea que un libro aprenda algunas de las ideas abstractas de CS, recomiendo The Turing Omnibus o Introducción teórica a la programación .

Si decidiera contratar dos programadores y ninguno tenía mucha experiencia, pero uno tenía un título de CS y el otro no, contrataría uno con el título de CS. Pero cuando se llega a comparar dos programadores con una docena de años de experiencia, el grado apenas importa.




Probablemente no pueda sugerir los mejores libros, pero hay varios temas importantes que te hacen falta:

  • Estadística
  • Álgebra lineal
  • Teoría de gráficos y matemática discreta
  • Gráficos de computadora
  • Computación científica
  • Red de computadoras
  • Ingeniería de software
  • Estructuras de datos

Algunos temas que podrían considerarse más "opcionales" podrían ser:

  • Criptografía
  • Procesamiento y reconocimiento de imágenes / patrones
  • Bioinformática
  • Computación por Internet
  • Física clásica

Los elementos de los sistemas de computación

Este libro lo lleva desde los conceptos básicos del diseño de hardware hasta los programas de escritura en lenguajes orientados a objetos. Usando un simulador, construyes una computadora completa. Luego, escribe un ensamblador, un sistema operativo, un compilador (para un lenguaje orientado a objetos compilado para ejecutarse en una VM) y luego un juego escrito usando ese lenguaje.

Es mucho trabajo, pero los autores han hecho la tarea lo más simple posible. Tendrá que trabajar duro para trabajar en esto, pero le brinda una perspectiva completa de la programación de computadoras.

Puede ver algunos capítulos de muestra, así como jugar con los simuladores aquí .

¡Muy recomendable! (Incluso para graduados de CS)


El libro " Patrones de diseño de la pandilla de los cuatro". El curso de Patrones de diseño que tomé en la universidad fue probablemente la clase más beneficiosa que he tomado.