Diseñaré un grado demasiado específico y demasiado general, pero bastante completo para producir un científico informático completo. Dado que la informática es actualmente la amalgama de las matemáticas de los datos, la programación y la ingeniería informática, cada semestre debe tener al menos una teoría, una clase de sistemas / programación y una clase de matemáticas / aplicaciones / ece.
Este también será un curso agnóstico de idiomas: no quiero jugar idiomas favoritos (aunque jugaré paradigmas favoritos). También estoy diseñando esto alrededor de un sistema semestral y no un sistema trimestral, ya que esto es lo que todas las escuelas en las que he estado han tenido.
Freshman Fall: elimine algunos requisitos previos.
- Física con E&M : esto es necesario y útil para aprender ( realmente aprender) cualquier espacio, gráficos, simulación física e incluso algunos aspectos de la visión por computadora.
- Álgebra lineal: el álgebra lineal debe ser sobre pruebas. No es necesario multiplicar las matrices a mano, pero el álgebra lineal aparece una y otra vez en casi todos los aspectos de todo. También es bueno acostumbrarse a las pruebas temprano.
- Introducción a la prueba discreta de matemáticas y teoremas: se requiere para comenzar el recorrido teórico. la mayoría de las personas ni siquiera saben que este es un tema hasta que lo toman, por lo tanto, debe tomarse temprano.
- Lenguaje de programación funcional de elección (haskell, ml, lisp, python ?, prolog ?, ruby ?, javascript?): Se ha demostrado que las personas aprenden mejor los lenguajes funcionales declarativos si se les enseña como primer idioma. Estos lenguajes también tienden a tener excelentes bibliotecas para crear cosas.
- Comunicación para estudiantes de informática: no me refiero a cómo escribir documentos técnicos aquí, me refiero a cómo decir las cosas en general de una manera hermosa.
Freshman Spring: ahora prepárate para la investigación o la primera pasantía.
- ¿Cómo pagaste la universidad?
- Si tuviera que diseñar un plan de estudios básico de la universidad, ¿qué clases incluiría?
- ¿Cómo debo pasar mi primer año de verano en Berkeley?
- ¿A dónde debe viajar un estudiante universitario en el verano?
- Universidad Tecnológica de Delhi: ¿Cuáles son las conversaciones memorables que tuvo con sus mayores?
- Algoritmos y estructuras de datos : el siguiente paso después de las matemáticas discretas. Esto debería abarcar una variedad de estructuras de datos que han demostrado ser útiles una y otra vez, así como cómo crear algoritmos con ellos y cómo analizar el tiempo de ejecución de los algoritmos.
- Lenguaje de programación de sistemas de elección (fortran, c, c ++, básico, ensamblaje): Esta es una pista de informática. Si no puede manejar el sistema, no sea cs major.
- Encuesta teórica de informática: teoría de la complejidad, teoría de la computabilidad, teoría de los autómatas, teoría de los gráficos, teoría de los números, teoría del lenguaje de programación, teoría de grupos, geometría computacional, lenguajes formales, combinatoria. Debería pasar un poco de tiempo en cada uno.
- Introducción a la ingeniería informática: circuitería, un poco de ciencia de los materiales, lógica de tablas, organización y arquitectura de una computadora, organización y arquitectura de un chip.
- Escritura creativa: a menudo se dice que la programación y la escritura son actividades muy similares. De ello se deduce que fortalecer uno beneficiará al otro. Además, este es un gran alivio del estrés durante un semestre tan difícil.
Otoño de segundo año: Comienza a obtener algunos detalles.
- Introducción a los sistemas informáticos: cualquier cosa que le permita leer y escribir ensamblajes x86 y escribir en bajo nivel C. Una versión perfecta de esto también introduciría Verilog y, por lo tanto, combinaría un poco de ingeniería informática.
- Combinatoria: Realmente no puedes ser bueno para analizar algoritmos si no sabes un poco más que lo básico en combinatoria.
- Lenguajes de programación e ingeniería de software: una clase en lenguajes como Java, Scala, C ++, Fortran y Haskell diseñada para que pueda escribir código mantenible en lenguajes diseñados para proyectos gigantes. Al mismo tiempo, debe presentarle conceptos como frp, mvc, visitantes, oop, actores, refactorización, separación de preocupaciones, reflexión y encapsulación.
- Gestión, liderazgo y emprendimiento: una vez más, una clase de comunicación con el mundo. ¿De qué te servirá si al salir de la carrera no puedes hablar con los humanos? Casi todas las personas exitosas terminan en algún momento u otra tarea de administrar a otras personas en un proyecto (ni siquiera puedes escapar de esto en la academia). También lo ayudará cuando esté buscando trabajo.
Sophomore Spring: Las cosas se ponen difíciles.
- Teoría de la complejidad: esta es una buena clase de teoría para tener desde el principio. Tomado de escribir, te coloca en la mentalidad perfecta para resolver problemas para resolver preguntas de entrevistas.
- Sistemas distribuidos, redes: Internet no es escapable como informático. Es una teoría y una industria invasoras.
- Teoría del lenguaje de programación: Haskell, ML, Prolog, Lisp. Esto debería enseñar sobre las propiedades de prueba de los lenguajes por recursión, sobre programación lógica y sobre programación funcional con patrones.
- Economía: es realmente una pena si entras en el mundo y no sabes nada sobre por qué te pagan.
Junior Fall: terminando.
- Minería de datos / Bases de datos: existe una gran posibilidad de que en cualquier trabajo de software termine consultando una base de datos.
- Geometría computacional: se relaciona bien con la minería de datos.
- Probabilidad y estadística para estudiantes de CS: mientras haces un poco de álgebra lineal, ¿por qué no hacer también otras matemáticas continuas?
- Seguridad informática : las cookies están en todas partes. En algún momento, alguien intentará entrar en sus servidores. Mantenerlos fuera podría ahorrarle millones.
- Historia del siglo XX : idealmente una que se centre en la tecnología. Sinceramente, no soy muy fanático de la historia, pero es bueno no ofender a los profesores o jefes con hechos erróneos.
Junior Spring: se necesita algo de profundidad.
- Álgebra abstracta y teoría de números para estudiantes de CS: la relación entre estos temas y la teoría de autómatas y la criptografía y entre sí.
- Sistemas operativos: Esto no necesita estar escribiendo un núcleo. Sería bueno que salieras de esta clase después de haber escrito al menos 2000 líneas de ensamblaje en C con un compañero y aprendido a escribir un controlador.
- Aprendizaje automático e inteligencia artificial: una vez más, un subcampo extremadamente útil y frecuente de la informática.
- Finanzas computacionales: toda persona libre y trabajadora en un país capitalista debe saber algo de finanzas. Es solo una ventaja que las finanzas se puedan hacer computacionales para los informáticos.
Caída Senior: Relajándose.
- Gráficos por computadora y diseño de interfaz: no veo ninguna razón no histórica por la que estas sean clases separadas. Eventualmente te encontrarás con un usuario. Y eventualmente tendrás que mostrar algo
- Autómatas y teoría de la recursividad: esto es genial.
- Álgebra por computadora / Prueba de teorema automatizado: uno de estos podría salvarle la vida. El primero es un gran repaso para el álgebra lineal y el cálculo multivariable, el segundo es un gran repaso para la teoría del lenguaje de programación.
- Psicología: no puedes engañar a una persona si no sabes cómo piensa. Esto beneficiará a sus programas frontales, así como a su capacidad de interactuar en el lugar de trabajo, así como a su vida hogareña.
Senior Spring: Fiesta.
- Diseño del compilador: una vez más, esta no tiene que ser una clase demasiado difícil. A menudo es útil saber qué necesita optimizar en su código y qué no, incluso si nunca escribe un compilador. Es una buena idea aprender a aprovechar el recolector de basura.
- Procesamiento del lenguaje natural: este tema se puede utilizar desde el análisis de ensayos hasta las estadísticas de los motores de búsqueda.
- Teoría de gráficos / Teoría de juegos / Teoría de conjuntos / Teoría de categorías: estos temas se traducen bien a otros campos y en su mayoría son muy interesantes.
- Filosofía: Toma esto último para que no tengas la tentación de cambiar de carrera.