Cómo construir un núcleo fuerte y fundamentos en informática

Estarás mucho mejor que la mayoría de los estudiantes de estas clases si haces el trabajo. Muchos de ellos leen el libro, pero se meten en la computadora lo menos posible mientras lo hacen. Estarás mucho mejor si te gusta escribir el código.


Diseño y Análisis de Algoritmos:
Consigue un buen libro de algoritmos y escribe el código. He visto la Introducción a los algoritmos recomendada varias veces, pero aún no la he leído. Hay clases más avanzadas que solo son análisis de algoritmos, pero francamente encontré que la que tomé fue en gran medida una pérdida de tiempo. El libro fue bueno, pero el curso no valió la pena: terminas con 5 o 6 notaciones diferentes, que incluyen gran O, pequeña o gran theta, pero generalmente cuando la gente habla de algoritmos, siempre dice “gran O”. (Pero normalmente quieren decir theta grande. Esa es la única cosa que supongo que salí de esta clase es una pequeña contracción cada vez que la gente habla sobre la gran notación O.)


Principios de los sistemas informáticos:

Subprocesos: escriba algún código donde tenga múltiples subprocesos que acceden a los mismos datos. Lea sobre esto y comprenda los mutexes / bloqueos, y escriba el código. Básicamente, cualquier cosa en la que desee descargar el trabajo de larga duración fuera del subproceso de la interfaz de usuario es un candidato principal para esto.

Procesos / redes: escribe programas que quieran hablar entre ellos. Tal vez un cliente de juego y servidor. Puede escribirlo como interproceso primero, luego usar la red para permitir clientes remotos.

Almacenamiento / administración de archivos: aquí es donde es más probable que lea un poco. Echa un vistazo a los diferentes sistemas de archivos y cómo funciona la memoria virtual.


Organizaciones y Sistemas Informáticos:
Si conoces C o ensamblaje, eres una buena parte del camino. Si no lo hace, debería considerar aprender uno o ambos. Recomendaría aprender C si esto le interesa, y tratar el ensamblaje como más opcional. Sin embargo, entender la pila es importante incluso con C: la forma en que las cadenas se tratan normalmente en C y la forma en que funciona la pila presenta una clase fea de error de desbordamiento de búfer.

Comprender los compiladores es una actividad más única. La mayoría de la gente no hace nada con los compiladores, aunque a menudo es una clase separada. Si esto es algo que le interesa, el libro que he visto recomendado es Compiladores: Principios, técnicas y herramientas (2ª edición): Alfred V. Aho, Mónica S. Lam, Ravi Sethi, Jeffrey D. Ullman: 9780321486813 : Amazon.com: Libros. El libro que usamos en cambio fue bastante horrible.

Leer Libro de sistemas integrados: Arquitectura de computadora: un enfoque cuantitativo [Libro]

Leer para redes: Redes de computadoras

Lea CLRS para el diseño y análisis de algoritmos básicos: 9780262531962 – Alibris Marketplace

Probablemente puedas encontrar copias en pdf de estos libros en línea.

Hay una cantidad asombrosa de recursos en línea gratuitos disponibles para aprender ciencias informáticas en todos los niveles. Estos no le brindarán las discusiones de los compañeros, la tutoría o la asistencia profesional que vienen con un programa de ladrillo y cemento, pero ayudarán mucho.

Puede encontrar una lista recientemente compilada de cursos de ciencias de la computación a nivel de pregrado y posgrado que puede encontrar en línea en esta página de aprender a codificar:
http://socialmatchbox.com/wp/lea

Pon tus manos en el barro.

Los estudiantes de CS que toman cursos generalmente leen libros y no practican mucho.
Los libros pueden aportar conocimientos, pero la práctica puede aportar habilidades.

El conocimiento es lo que te permite hablar un poco sobre las cosas, la habilidad es lo que te hace capaz de hacer las cosas.

Practicar te traerá conocimientos, habilidades y seguramente un trabajo.

Y mucha diversión !

El problema con una pregunta como esta, creo, es que cualquier proyecto que sea lo suficientemente interesante como para mostrar este tipo de temas en una aplicación del mundo real necesita cierta comprensión de los demás. Un instructor inteligente probablemente podría solucionarlo, pero es más difícil por tu cuenta.

Dicho esto, con la experiencia de programación, probablemente me gustaría comenzar con un compilador. Si tiene un lenguaje que es simple pero tiene aritmética, subrutinas y salida (incluso podría tomar un lenguaje existente y omitir las otras funciones), generar el código objeto (y tal vez vincularlo más adelante) le indicará la mayoría de sus características. Quisiera saber sobre memoria y arquitectura por necesidad.

De la mano, no necesariamente para ejecutarse en un procesador real (aunque esté loco, si está acostumbrado a la programación de bajo nivel), pero un sistema operativo bien vale la pena. Una vez más, podría ser abstracto, en el sentido de que los “programas” pueden ser simplemente códigos de tiempo con recursos para solicitar y liberar en ese momento, en lugar de realizar un trabajo productivo. Pero es suficiente para lidiar con la programación, el interbloqueo, la prioridad, etc.

Lo que ha enumerado en los “principios”, diría que son temas relativamente pequeños (a menos que quiera investigar o trabajar en el área, en cuyo caso explotan en detalles), por lo que probablemente sea mejor que lea. Aunque las comunicaciones de red son fáciles de manipular, y cualquier persona debería poder hackear un simple navegador web “solo muéstrame el HTML” en una hora o dos.

Los algoritmos también son un campo difícil, ya que cualquier proyecto específico sería, por su naturaleza, demasiado específico. Las preguntas tradicionales del examen son cosas intrincadas, como diseñar un algoritmo para este problema que tiene exactamente esta complejidad , por ejemplo.

Con suerte, eso es de al menos un poco de ayuda. Lo más importante es tener en cuenta que no necesita todo de una vez. Si el trabajo de bajo nivel te aburre, puedes postergarlo hasta que estés más aburrido que eso …

Si puede gastar $ 2200 en un curso, tome la Programación del Sistema y la Organización de la Máquina de la Escuela de Extensión de Harvard. CSE61. Esto cumplirá al menos el 33.33% de tu necesidad. Aprenderá mucho y ayudará a construir una base sólida que necesita.

Contribuye a proyectos en GitHub. Algunos de ellos pueden tener errores. Arreglalos. Obtenga una pasantía por un par de horas por semana para que pueda trabajar en proyectos de la vida real.