¿Cuáles son los libros o documentos que debe leer para estudiantes de ciencias de la computación?

Lea un artículo en Comunicaciones de ACM hace unos meses que menciona algunos “documentos CS clásicos” que un estudiante de CS orientado a la investigación debe leer. No puedo decir cuán beneficiosos son para un estudiante de maestría, pero algunos de ellos seguramente hacen una lectura interesante. Aquí está el artículo.
Leyendo CS Classics
—– EDITAR —–
El enlace anterior podría no funcionar.
El artículo es contenido premium de la Biblioteca digital de ACM, por lo que debe ser miembro de la biblioteca de ACM para obtener acceso. Para aquellos que no pueden, a continuación se encuentra la lista de algunos documentos clásicos de CS mencionados en el artículo,
1. “La ropa vieja del emperador”, CAR Hoare
2. “Teorema de la indecidibilidad de Godel” – SF Andrilli
3. “Maquinaria de computación e inteligencia”, AM Turing
4. “Reflexiones sobre la confianza en la confianza”, K.Thompson
5. “El programador humilde”, – EWDijkstra
6. “Una entrevista con Edsger W. Dijkstra,” – P. Frana
7. “La programación de computadoras como un arte” – D. Knuth
8. “El” arte “de ser Donald Knuth”, E. Feigenbaum
9. “Donald Knuth: el trabajo de una vida interrumpido”, E. Feigenbaum

De todos los artículos que leí en la universidad, aquí están mis favoritos:

  • Paxos – http://pdos.csail.mit.edu/6.824/ … – Proporciona una columna vertebral para comprender cómo pueden los sistemas distribuidos
  • Tolerancia a fallos bizantinos -http: //pdos.csail.mit.edu/6.824-… – Si tiene un sistema de máquinas N y X está en mal estado, ¿qué sucederá? También video: Tolerancia práctica a fallas bizantinas
  • Confiando en la confianza – http://mit.edu/6.033/www/papers/ … -Cuando se trata de errores / seguridad, no tenemos remedio. No puedes evitarlo. Sin embargo, puedes minimizar las consecuencias.
  • Sistema de registro de fallas estructuradas – http://www.cs.berkeley.edu/~brew … – Ofrece una gran cantidad de información sobre cómo hacer que los sistemas sean confiables y al mismo tiempo mantenerlos en buen estado
  • Beyond Stack Smashing – http://www.cs.ubc.ca/~norm/508/2 … – Comprender las vulnerabilidades del sistema a través del desbordamiento del búfer
  • Consejos para el diseño de sistemas informáticos – Extractos de “Consejos para el diseño de sistemas informáticos” de Butler Lampson: tuve a Butler Lampson como instructor de recitación para 6.033. Su trabajo hace un gran trabajo al caracterizar el diseño del sistema a través de un vocabulario comprensible.

1. La prueba de primalidad AKS de Manindra Agrawal, Neeraj Kayal y Nitin Saxena publicada en “Primes in P” en IIT Kanpur el 6 de agosto de 2002.

Una prueba de primitiva determinista.

http://www.cse.iitk.ac.in/users/

2. Teoremas de incompletitud de Godel .

Para cualquier sistema formal axiomático consistente que pueda expresar hechos sobre aritmética básica:

1. Hay declaraciones verdaderas que no se pueden probar dentro del sistema
2. La consistencia del sistema no se puede probar dentro del sistema.

http://jacqkrol.x10.mx/assets/ar

3. El artículo que comenzó comenzó la informática.

El trabajo de Alan Turing , “Sobre números computables, con una aplicación al problema Entscheidungs”.

http://classes.soe.ucsc.edu/cmps

Sé que habría muchos más artículos similares que todo estudiante de informática debería leer, pero estos fueron los que tenía en mente.

Cómo resolverlo por G.Polya

Trabajo clásico sobre método matemático, heurística, forma de pensar y atacar un problema. Muy recomendable, no solo para un estudiante de informática sino para cualquier persona que tenga curiosidad analítica.

“En una prosa lúcida y atractiva, Polya revela cómo el método matemático de demostrar una prueba o encontrar un desconocido puede ser útil para atacar cualquier problema que pueda ser” razonado “, desde construir un puente hasta ganar un juego de anagramas. Generaciones de los lectores han disfrutado de las hábiles, de hecho, brillantes, instrucciones de Polya sobre eliminar las irrelevancias y dirigirse directamente al corazón del problema.

En este clásico de mayor venta, George Pólya reveló cómo el método matemático de demostrar una prueba o encontrar un desconocido puede ser útil para atacar cualquier problema que pueda “razonarse”, desde construir un puente hasta ganar un juego de anagramas. Generaciones de lectores han disfrutado de las hábiles instrucciones de Pólya sobre eliminar las irrelevancias y dirigirse directamente al corazón de un problema. Cómo resolverlo popularizó la heurística, el arte y la ciencia del descubrimiento y la invención. Se ha impreso continuamente desde 1945 y se ha traducido a veintitrés idiomas diferentes.

Enlazar:
Cómo resolverlo:

Un libro más orientado a la informática relacionado con el clásico anterior es: Cómo resolverlo con computadoras por RGDromey
Cómo resolverlo por computadora

Introducción a los algoritmos. 3a edición.

  • Este es el libro de algoritmos y estructuras de datos. Solo google CLRS (las iniciales de los autores). Se vuelve un poco demasiado teórico, pero si sigue el programa de estudios para la clase correspondiente en el MIT (CS 6.006) es más aplicable y enseña Python

Conceptos de sistemas operativos, novena edición.

  • Este es el libro de sistemas operativos. Qué tipo de lo convierte en el libro C. Puede que nunca vuelva a usar esas cosas, pero tampoco volverá a pensar en un programa de la misma manera. Es posible que no necesite comprender lo que sucede debajo del capó para construir un sitio web, pero comprender los programas y una computadora es imprescindible para captar nuevos conceptos rápidamente. Especialmente si quisieras pasar del desarrollo web al aprendizaje automático o algo tan grande como eso

JavaScript, la guía definitiva. 6ta edición

  • JavaScript y ECMAScript son un nivel completamente nuevo de “qué carajo”. Este espacio no es relevante para todos los programadores, pero es más que solo para desarrolladores front-end. Comprender la web, los navegadores y http es realmente importante.

Un buen libro en tus idiomas principales.

  • Use esto como referencia y practique ejercicios

Los libros no ayudan a corto plazo. Parecerá una pérdida de tiempo leer libros en lugar de codificar durante algunos años. Después de un par de años de libros y codificación, comenzará a darse cuenta de que consumió y aplicó una gran cantidad de información, y tendrá un dominio completo en el que puede confiar.

Pero la forma más rápida de aprender a construir algo es generalmente intentar construirlo. Simple como eso.

EDITAR: esta pregunta fue cambiada, daría diferentes consejos a un estudiante de maestría.

Cómo compartir un secreto por Adi Shamir.

La idea descrita en el documento es tan simple, pero tan profunda, que tiene aplicaciones de largo alcance. Además, es solo un documento de 2 lados que sirve como un ejemplo y un recordatorio constante de que un buen trabajo de investigación no necesariamente tiene que ser arduo o tener un título complejo para demostrar que su investigación es digna. También me gustaría agregar que los documentos / libros a los que hace referencia el autor también son excelentes lecturas.

Encontré este enlace sobre los mejores artículos en CS de diferentes revistas de CS.

Mejores premios en papel en AAAI, ACL, CHI, CIKM, CVPR, FOCS, FSE, ICCV, ICML, ICSE, IJCAI, INFOCOM, KDD, NSDI, OSDI, PLDI, PODS, S&P, SIGCOMM, SIGIR, SIGMETRICS, SIGMOD, SODA, SOSP, STOC, UIST, VLDB, WWW

Para mejorar sus cs matemáticos, los libros de texto estándar son buenos. CLRS y TAOCP honestamente lo llevarán más lejos que la mayoría, si no todos los estudiantes universitarios. Para cs verdaderamente teóricos, he escuchado cosas buenas sobre “Introducción a la teoría de la computación” por Spicer.

También recomendaría cualquiera de los libros de Gilbert Strang sobre álgebra lineal, especialmente si quieres aprender sobre IA y aprendizaje automático.

Si desea aprender sobre la piratería de arriba hacia abajo, hay un buen libro llamado “Introducción a la guerra cibernética” de Paolo Shakarian que cubre cómo la piratería afecta a la sociedad en lugar de los detalles de bajo nivel. Si realmente desea conocer el cosas de bajo nivel, recomendaría seguir los blogs de seguridad en lugar de leer libros, ya que la naturaleza del campo cambia muy rápido.

No conozco ningún libro relacionado con IA que sea bueno para un estudiante de primer año. Muchos de ellos cubren muchas estadísticas y otras matemáticas con las que probablemente aún no estés familiarizado. Probablemente leería el artículo de Wikipedia sobre IA. Cuando encuentre algo que no comprende, haga clic en él y lea más. Si sigues siguiendo las madrigueras de ese tipo, eventualmente llegarás a comprender los conceptos a un alto nivel. Luego, las matemáticas vendrán intuitivamente.

El siguiente libro de estructura de datos debe leerse, no solo leerse sino también entenderse, y dominar los conceptos del libro.
Introducción a los algoritmos por Thomas H. Cormen
Charles E. Leiserson
Ronald L. Rivest
Clifford Stein

Smashing the Stack es uno de los más importantes. También recomendaría Reflections on Trusting Trust, aunque no es un artículo en sí, sino el discurso de aceptación de Ken Thompson cuando recibió un premio de Turing. Es bastante entretenido en lo que respecta a los documentos de informática.

En términos de libros, nunca vas a pasar por Knuth’s The Art of Computer Programming, pero definitivamente es un recurso valioso para tener.

Algunas que se me ocurren:

  • Reflexiones sobre confiar en la confianza por Ken Thompson.
  • Maquinaria e inteligencia informática por Alan Turing.
  • Sobre nuestro mejor comportamiento de Héctor Levesque.

Cuando estaba en mis estudios de maestría, hubo un tiempo en el que realmente estaba involucrado en investigaciones y leía muchos artículos, revistas y artículos. El mejor agregador que encontré fue http://paperity.org/ . Todavía lo uso mucho hoy en día para recopilar información detallada sobre asuntos de actualidad, ya que este es un agregador multidisciplinario.

Hay una lista de trabajos de investigación importantes en ciencias de la computación en este siguiente enlace ¿Cuáles son algunos documentos que deben leerse en ciencias de la computación?

Alguien recomendó The Art of Computer Programming, Volumes 1-4A Boxed Set (Box Set): Donald E. Knuth: 9780321751041: Amazon.com: Libros para mí, no lo he comprado, pero según las críticas, gran colección.

Godel Escher Bach, una trenza dorada eterna

Lo que todo informático debe saber sobre la aritmética de coma flotante:
https://www.ualberta.ca/~kbeach/

Berkeley tiene un curso de seminario llamado “Lectura de los clásicos”. Puede hacerse una idea siguiendo el enlace, http://www.eecs.berkeley.edu/~ch