¿Cuál sería tu plan de estudios CS ideal?

  • Serie 1 – Matemáticas : cálculo multivariante, álgebra lineal, estadística y probabilidad. Ecuaciones diferenciales como motivación para ciertos métodos numéricos. Lógica y métodos de prueba. ETA: optimización y análisis numérico.
  • Serie 2 – Fundamentos : diseño del sistema operativo, arquitectura de computadora, lenguajes de ensamblaje, compiladores, algoritmos, teoría de la computación y estructuras de datos. Se enseñaría en C, Python y algunos Haskell.
  • Serie 3 – Avanzado : ingeniería front-end, gráficos por computadora, redes, computación paralela y simultánea, múltiples cursos en lenguajes de programación: uno para Lisp, uno para Prolog / programación lógica, y uno para Haskell y tipeo estático. Inteligencia artificial y aprendizaje automático. Diseño y programación de juegos. Bases de datos, quizás con un curso completo para relacional y otro para no relacional. ETA: criptografía y teoría de números.
  • Serie 4 – Aplicaciones : un curso sobre la ampliación de grandes empresas basadas en la web como Google o Facebook. Un curso o dos sobre bioinformática. Un curso sobre programación de alta confiabilidad. Uno en informática financiera y otro centrado en el comercio de alta frecuencia. Un curso de robótica. Un curso sobre programación altamente confiable (por ejemplo, Mars Rover). Un curso en operaciones.
  • Serie 5 – Muy recomendable / opcional: análisis real y complejo, álgebra abstracta, topología y teoría de conjuntos y teoría de categorías. Lógica avanzada (teoría de modelos, pruebas de independencia). Teoría de juego. Maquinas virtuales. Venta y compra de software empresarial. Política de software (“CS 666”) y cómo navegarlo. Startup economics. Ingenieria Eléctrica. Computación cuántica. Ingeniería de centro de datos. Consultoría: cómo encontrar y gestionar clientes.

Esto podría llevar más de 4 años y, sinceramente, creo que debería estructurarse como un programa de postgrado aplicado (es decir, “cómo convertirse en un verdadero rudo”). Para ser sincero, creo que el modelo “aprender durante 4 años, luego trabajar y dejar de aprender” es un anacronismo completo. Esto podría estructurarse, en cambio, como un programa de 15 años para personas que trabajan a tiempo completo … porque, en cualquier caso, habrá cosas nuevas que vale la pena aprender en una o dos décadas.

Me enfocaría en inspirar mentes jóvenes. En este orden específico:

  • Muéstrales lo que es posible.
  • Explica cómo se hizo realidad
  • Enséñales las herramientas

Demasiadas escuelas, colegios e instituciones hacen esto de manera incorrecta.

  • Programación
  • ¿Qué puede hacer la programación?
  • ¿Qué es posible resolver?

Muchas personas toman cursos de CS porque escucharon que es un buen dinero. Inmediatamente les enseñamos listas enlazadas, matrices, punteros, clasificación y árboles. No solo los hemos aburrido hasta la muerte , sino que están sentados con una bolsa cargada de herramientas, sin saber cómo encajan en el panorama general.

En segundo lugar, muchas administraciones no saben la diferencia entre “Informática” y “Programación” . De hecho, apuesto a que más del 90% del país piensa que son lo mismo.

Aquí está el estudio de la programación:

“El estudio de cómo las instrucciones humanas pueden codificarse en instrucciones ejecutables de máquina”.

Aquí está el estudio de la informática:

“El estudio del uso de la tecnología computacional para resolver o mejorar los problemas humanos socioeconómicos”.

Los programadores escriben código.

Los informáticos crean soluciones.

Los programadores implementan.

Diseño de informáticos.

Más del 80% de las personas que he entrevistado para puestos de ingeniería de nivel básico (pasado y presente) tienen un título en Informática pero solo saben programar. Difícilmente diseñan sistemas grandes, transmiten ideas por diagrama y / o comprenden el componente humano de por qué su trabajo es valioso.

Es similar a alguien con un título de diseño automotriz, pero en realidad solo sabe cómo reparar automóviles como mecánico. No están equipados para diseñar el diferencial de eje de rueda de última generación de última generación. Sin embargo, la industria automotriz ya lo ha resuelto, la industria del software no. A los diseñadores automotrices se les enseña mucho más que a reparar un automóvil.

Un buen plan de estudios de CS se centrará en:

  • Mentes inspiradoras
  • Explicando las innovaciones
  • Herramientas de enseñanza

Mentes inspiradoras

Creo en el poder de establecer metas. Si tiene un objetivo establecido, se convierte en este faro increíble que lo lleva en una dirección específica.

La informática es un catalizador para todos los demás campos. Es como una “herramienta súper avanzada” que puede ayudar:

  • Calcular reacciones químicas por simulación
  • Calcular rotaciones de agujeros negros para astrofísica
  • Agregar datos de salud para ayudar a encontrar las causas principales
  • Predecir las fluctuaciones del mercado en las economías mundiales.
  • Manejar papel mundano empujando por bienes raíces
  • Entregue cartas más rápido que el servicio de correo físico
  • Entregar contenido de entretenimiento a las masas
  • Conecta familias separadas por un océano

Creo que esto va sin necesidad de una gran explicación. Si una persona comprende el valor de lo que está aprendiendo, prestará más atención.

Explicando las innovaciones

La tecnología informática actual es enormemente diferente de la tecnología utilizada hace 15 años. Explicar las RPM (rotaciones por minuto) para un HDD (unidad de disco duro) le dará algunos ojos. Se dirige hacia la irrelevancia a medida que SSD (disco de estado sólido) se vuelve más barato de fabricar.

Sí, aún deberíamos enseñar la ley de Moore y todos los demás fundamentos sobre la historia de la informática. Sin embargo, debemos centrarnos en la mentalidad de los estudiantes … Ellos (la mayoría de ellos) no están allí para archivar una instantánea de la historia de la informática. Quieren saber cómo se beneficiarán de ello. Además, tenemos computadoras en Internet para ayudarnos a archivar cosas históricas.

Enseñamos historia de la informática porque muestra cómo “A” llegó a “B”. Esperamos que la magia de transición sea un ejemplo de cómo nuestros estudiantes podrían llevar “G” a “H” y luego a “I”. Nuestro problema es que la informática también es un catalizador por sí misma, ya estamos en “BD” (pasamos Z y agregamos una letra a nuestro sistema numérico de base 26). Necesitamos enseñar esto al revés. “BD” vino de “BC”, donde alguien más lo movió de “BB”.

Al explicar las innovaciones de hoy, nos estamos centrando en lo que pueden aplicar de inmediato. Es como explicar la tecnología automotriz de vanguardia de hoy. Sí, necesitan saber cómo se lanzó el modelo T al mercado, pero en última instancia, necesitan saber más sobre la industria actual que la industria de hace una década (o más).

Herramientas de enseñanza

La programación es solo una herramienta dentro de una imagen más grande que requiere múltiples herramientas. Yo diría que las matemáticas son otra herramienta. Hay muchas herramientas que un ingeniero necesitará en el mundo real, también herramientas que son específicas para la industria que intentan catalizar.

La programación generalmente se divide en diferentes lenguajes de programación. Personalmente los veo similares a los lenguajes naturales. No importa el idioma natural que hable (inglés, español, chino, italiano, etc.), todos tienen una forma de decir “hola”, “¿cómo estás?” Y “¿Dónde está el baño?”. Los lenguajes de programación son los mismos, no importa (C / C ++, Java, Python, Lisp, etc.) todos tienen una forma de hacer If-condition, for-loops y manipulación de cadenas.

Las bases de datos son otra herramienta. Yo diría que aprender a administrar una base de datos no es similar a aprender un lenguaje de programación.

La infraestructura y las redes de tecnología de la información son otra herramienta. ¡La lista es enorme!

Las herramientas son difíciles de aprender bien. Se necesita tiempo, práctica y exposición a los problemas de límites manejados mejor en una herramienta que en otra. Los mejores ingenieros saben qué herramientas funcionan mejor en qué situación.

Mi currículum

Inspirar

  • Impacto socio-económico de internet
  • Innovaciones técnicas de hoy (teléfonos inteligentes, realidad virtual, tecnología de la salud, sitios de citas, contenido dirigido por el usuario, etc.)
  • Cómo la informática ha cambiado el mundo (abarcando industrias: médicas, de investigación, civiles, etc.)
  • Lo que no pudimos hacer hace 10 años
  • Cómo podría ser el futuro

Explicando

  • Cómo funciona ______ en el mundo de hoy (Internet, teléfonos inteligentes, tecnología portátil, etc.)
  • Arquitectura de la computadora e historia de la informática (CPU, RAM, discos, sistema operativo, etc.)
  • Introducción a pseudocódigo y diagramas de flujo
  • Introducción a las estadísticas y cómo se usa hoy
  • Introducción a los algoritmos y cómo se usan hoy en día (desde una perspectiva que no sea de programación, las matemáticas o simbólicamente son suficientes)
  • Bases de datos (desde una perspectiva no programada)
  • Introducción a la visión por computadora.
  • Introducción a los dispositivos de entrada humana.
  • Comportamiento humano: introducción a la psicología.
  • Cognición humana: introducción a la ciencia cognitiva.
  • Mecánica social humana: introducción a las ciencias sociales.

Herramientas

  • Introducción a C / C ++
  • Introducción a Java
  • Introducción a Lisp / esquema
  • Introducción a la web (html / JavaScript)
  • … Entonces todas las cosas difíciles.

En este punto, debido a que el plan de estudios fue estructurado para inspirarlos, es de esperar que tengan una idea sobre a qué industria les gustaría unirse. Si me saliera con la mía, forzaría a todas las especialidades de informática en este punto a elegir una industria de enfoque (o elegir una menor).

Si los estudiantes saben lo que quieren hacer a continuación o qué industria les entusiasma, pueden enfocar su educación. Hay ventajas definitivas para saberlo todo, pero no todo será útil. Estos cursos son difíciles:

  • Compiladores
  • Sistemas operativos
  • Gestión de la información
  • Redes
  • Inteligencia artificial
  • Gráficos de computadora
  • … Etc …

Creo firmemente que todos los sistemas educativos deberían centrarse en inspirar a las mentes jóvenes primero. Una vez que consigas que aprecien el valor del conocimiento futuro, ese conocimiento será más fácil y mucho más significativo de aprender.

Realmente no me gusta tener asignaturas comunes para todas las ramas de Ingeniería en 1º y 2º semestre. Siento que es solo una pérdida de 1 año.

Según yo, este es el programa ideal.

1er semestre

  • C
  • Algoritmos
  • HTML y CSS
  • Matemáticas discretas
  • Diseño digital

2do semestre

  • C avanzada
  • Estructuras de datos usando C
  • DBMS
  • Arquitectura y organización de computadoras
  • Álgebra lineal

3er semestre

  • Programación Orientada a Objetos
  • Estructuras de datos avanzadas
  • Shell Scripting
  • Microprocesadores
  • Algoritmos Avanzados

4to semestre

  • Sistemas operativos
  • C ++ avanzado
  • Programación Java
  • Análisis de los datos
  • Diseño del compilador

5to semestre

  • Programación de aplicaciones Python
  • Principio de lenguajes de programación
  • Programacion Web
  • Minería de datos
  • Redes de computadoras (Parte 1)

6to semestre

  • Programacion del sistema
  • Procesamiento natural del lenguaje
  • Computación en la nube
  • Ingeniería de software
  • Redes de computadoras (Parte 2)

7º semestre

  • Seguridad informática y de red
  • Big Data
  • Ingeniería de sistemas móviles
  • Aprendizaje automático
  • Computación paralela

8º semestre

  • Proyecto

Esta es puramente mi opinión. Junto con estos estudiantes, se les debe alentar a participar en muchos concursos de codificación disponibles en CodeChef, HackerRank, HackerEarth, TopCoder, SPOJ, Project Euler y también a participar en Hackathons.

Año de primer año: aprenderá los conceptos básicos de OO con una clase introductoria de Java o C ++. Cumplir con las ciencias sociales y el diseño web para créditos optativos de arte, emprendimiento y economía.

Año de segundo año: aprenderá mucha teoría, estructuras de datos, matemática discreta y algoritmos en ese orden. Para las asignaturas optativas que no son CS, aprenderá la historia de la informática y las opciones de carrera en la industria del software. Esto debería preparar a los estudiantes para estar listos para tratar de obtener una pasantía durante el verano después del segundo año. También hay un curso de ética basado en tecnología que también cumplirá un curso de humanidades.

Junior Year: comenzará la especialización en roles o especializaciones con asignaturas optativas. Las especializaciones son simplemente requisitos de 3 asignaturas optativas que, si se cumplen, confieren el título de especialización. Esto es para dar incentivos a los estudiantes para que se especialicen en un dominio particular sin obligarlos a hacerlo.

Ingeniería de datos y sistemas distribuidos
Desarrollo front-end y diseño de experiencia de usuario
Desarrollo de back-end e ingeniería de software
Desarrollo móvil
Análisis de datos e inteligencia empresarial
Computación Científica y Modelado
Sistemas Operativos y Sistemas Embebidos
Teoría de la computación
Finanzas computacionales

Senior Year: es una continuación de la especialización, pero también un proyecto final. Así como cursos optativos de cursos orientados a proyectos.

Observe cómo hice mi plan de estudios es básicamente una gran parte de las asignaturas optativas generales, ya sea relevantes para el grado o no tomadas en absoluto y moviendo las clases Junior para tomarlas en el nivel de segundo año. Esto hace que los estudiantes sean más competitivos para las pasantías y les da más tiempo para que aprendan tecnología en lugar de teoría durante su AÑO VITAL JUNIOR de la escuela. El verano después del tercer año es el verano para una pasantía. Un estudiante que ya se especializa en un rol o especialización sabrá cuáles son los puestos y ya estará calificado para los puestos.

La segunda mitad del tercer año debe centrarse en la creación de productos de nivel de producción con énfasis en presentaciones en los mismos días que las ferias de carreras.
Las finales para estas clases siempre serán un proyecto final. Las clases de nivel superior se basarán en proyectos (sin tarea, sin exámenes), solo requisitos y proyectos.

En serio, si tuviera el dinero, este es el plan de estudios que desarrollaría para una escuela. Los estudiantes no ingresan a CS para aprender sobre las máquinas de Turing, CS Los estudiantes quieren aprender la teoría lo antes posible y comenzar a aplicar lo que aprenden en proyectos reales de la industria lo antes posible. Las escuelas nunca buscan hacer eso. Muchas escuelas enseñan Java pero ninguna enseña la extensión JAVA EE que usan compañías como Oracle.

A2A. Puede que no sea la persona adecuada para esta pregunta. De todos modos, aquí está mi opinión sobre esto.

Seguramente debería haber un curso sobre lenguajes de programación en los primeros semestres. Creo que es apropiado tener uno justo después de un curso introductorio sobre programación.

La mayoría de los estudiantes de CS no entienden la importancia de escribir una prueba. Odian la idea de teoremas y pruebas. Lo llamaría un esfuerzo fallido, pero no sé qué debería hacerse para cambiar la situación. No es que sea un experto en el tema, sino que realmente siento que debo hablar con fluidez para convencerme de que algo es cierto o no, porque después de hacerlo, ya no necesito pensar en su veracidad. Las pruebas de corrección para algoritmos son más importantes que averiguar la complejidad del tiempo. Dijstra creía en el rigor y lo estoy tomando con fe.

No me gustaría cambiar el plan de estudios tanto como me gustaría cambiar la evaluación de los estudiantes. Especialmente en mi universidad, puede sorprenderte saber que no hay ningún conjunto de problemas reales que los estudiantes tengan que completar. Entonces, la mayoría de los estudiantes no pueden tener una comprensión real del material porque no ha sido medible. Las calificaciones que obtienes en un solo examen, en mi opinión, no son suficientes para juzgar las habilidades de un estudiante en relación con un tema específico. Verá que no hay ningún ciclo de retroalimentación en este sistema de evaluación y, por lo tanto, no ocurre ningún aprendizaje real.

Debe haber al menos un curso relacionado con un campo específico cada semestre, por ejemplo, un curso de aprendizaje automático cada semestre para aquellos que eligen el aprendizaje automático. Después de cuatro años, el estudiante tendrá experiencia en el campo y puede seguir fácilmente una carrera en la industria.

Además, si pudiera, haría que la profesión docente en la India fuera tan atractiva y competitiva que atraiga a los niños más geniales. No los que no pudieron encontrar nada más y continuaron sus estudios y finalmente se convirtieron en maestros. No digo que todos los maestros sean así, pero la mayoría de los que enseñan a una fracción muy grande de la población estudiantil india lo son. Es vergonzoso

Estoy de acuerdo con mucho de lo que se ha dicho anteriormente, así que no piense en esta respuesta como “en lugar de” tanto como “así como”.

Agregaría un curso sobre técnicas modernas de desarrollo de software comercial donde los estudiantes aprenden sobre el desarrollo ágil, el control de versiones y preferiblemente tienen que capturar algunos requisitos de un ser humano real que está loco (es decir, casi todos los clientes / clientes que alguna vez tendrán contactar con).

También agregaría un curso sobre depuración. La depuración es un tema que todos parecen fruncir el ceño al adoptar una actitud de “Deberías hacerlo bien en primer lugar”, pero esto simplemente no es realista.

Claro, si su algoritmo central está jodido, un buen programador lo resolverá mucho más rápido al leer y comprender el código, pero mucha depuración a nivel de la industria no es así.

No se trata de descubrir por qué su b-tree equilibrado no está equilibrado en el escenario X, se trata de descubrir por qué esta biblioteca de mierda que no puede obtener en el funcionamiento interno de esta manera y cómo puede proteger su código de ella ( * tos * todo lo que has hecho con CSS NUNCA).

De 3 a 4 años después de que se les haya dicho que la depuración es malvada y todos tienen tales ridículas obsesiones por hacerlo.

A veces solo tienes que entrar allí, crear un montón de declaraciones de registro y ver qué sucede en un montón de escenarios para construir un modelo mental.

¿Por qué estos 2 cursos?

Porque lo que enseñan es muy transferible. Ambos exponen el desorden del mundo real a un estudiante de CS que, de lo contrario, experimentará un mundo relativamente limpio en toda la universidad y tendrá un fuerte choque cultural cuando lleguen al mundo real.

Ya sea que se conviertan en desarrolladores o no.

Prefiero un enfoque ‘espiral’ a la CS introductoria, que tal vez abarque tanto los años de primer año como los de segundo año, donde los conceptos de computación y sus interconexiones se introducirían y explorarían de manera coherente en lugar de dispersar los temas en una secuencia de clases conectadas impartidas por diferentes profesores especializados. y sus libros de texto para mascotas.

Las dos pistas serían:

1) Introducción al desarrollo de software, usando C y luego C ++. Estos dos idiomas se complementan bien para ayudar a los estudiantes a aprender profundamente los fundamentos de programación, ingeniería de software, arquitectura de computadoras, compilación, conceptos básicos del sistema operativo (enlazador / cargador / bibliotecas / redes). Luego extendería estos conceptos básicos a ‘modelos’ de software más abstractos de nivel superior, como el diseño orientado a objetos, la programación generativa y los marcos.

Incorporaría todo esto en la práctica del desarrollo de software: comprender un espacio problemático, análisis de requisitos, diseño y práctica de software (control de código fuente, revisiones de diseño, pruebas, gestión ágil de proyectos, etc.). En todo momento, usted aprende los costos económicos y las compensaciones del desarrollo de software en servicios y herramientas de alto nivel frente a los de bajo nivel, principios de desarrollo necesarios para la creación rápida de prototipos frente a la alta confiabilidad frente al mantenimiento.

Sí, esta es una gran clase. Tendría una duración de al menos un año, quizás 12 o más créditos semestrales, e involucraría proyectos de programación pequeños y grandes. Pero me encantaría que este contenido se unificara en una sola ‘clase’ para que esté mejor organizado, pueda cubrir una gran cantidad de material en general, pero pueda profundizar cuando sea necesario para proporcionar tanto la imagen grande como la pequeña, así como muchas interesantes apartados históricos e ilustraciones de la experiencia del mundo real.

2) Teoría de la informática. Si bien parte de esto cubre la teoría clásica, como las máquinas y las gramáticas de Turing, la mayoría se ocuparía de conceptos como espacios problemáticos, modelos abstractos de programación y sus objetivos de diseño, y los límites de la informática y los datos. Esta pista abarcaría la recursividad, la programación funcional y otros modelos de programación, gramáticas, computabilidad, algoritmos, complejidad y especialmente la descomposición, el análisis y el diseño del problema.

Me encantaría mencionar también la probabilidad, las estadísticas y los algoritmos aleatorios / adaptativos como una extensión del curso # 2. Esto introduciría la IA, especialmente las técnicas de ‘computación flexible’ y sus usos: redes neuronales, redes bayesianas, SVM y los conceptos detrás del aprendizaje automático y los muchos tipos y formas de datos.

Sería ideal integrar el álgebra lineal como parte del curso # 2 en lugar de enseñarlo por separado y de manera abstracta, como lo hacen casi todas las escuelas ahora. Es una habilidad y perspectiva tan fundamentales en el aprendizaje automático, los gráficos, el procesamiento de imágenes, la visión y en la resolución de problemas de ingeniería que es una pena que no sea más importante para los planes de estudio de CS. Lo mismo ocurre con la probabilidad y el cálculo.

Una vez finalizados estos dos cursos (tal vez al final del segundo año), los estudiantes serían libres de profundizar en la tarifa tradicional de asignaturas específicas de CS de nivel 300/400.

  1. Fundamentos: Suponiendo que no tenga conocimiento previo de programación, enseñe diseño y estructura de programas informáticos básicos. Cosas como dividir su programa en funciones fácilmente componibles que realicen una cosa y sean fácilmente comprobables. Finalmente, introduzca el estado y la OOP como una forma de administrarlo. Presente conceptos de programación útiles sin saltar al análisis todavía (así es como puede ordenar una lista, no es necesario hablar de big-O).
  2. Teoría: ahora que los estudiantes pueden escribir y comprender cómo codificar, sumérjase en cómo ese código hace lo que hace. Cosas como estructuras discretas, lógica, teoría de la computación y lenguajes de programación. Escribir un Esquema / Lisp debería ser algo que los estudiantes puedan hacer al final de esto.
  3. Aplicaciones: en este punto, los estudiantes deben estar equipados con suficiente conocimiento de la programación general para que puedan ver las diversas formas en que se aplica CS. Diseño de bases de datos, gráficos por computadora, programación de juegos, redes, etc. También sería beneficioso un curso general de desarrollo de software que lleve a un equipo de estudiantes a través del proceso de diseño e implementación de una aplicación.
  4. Avanzado: algoritmos y estructuras de datos, compiladores, sistemas operativos, etc.

La respuesta de Michael O. Church es excelente, pero agregaría algo sobre metodología y práctica, que abarca varios enfoques comunes pero con un fuerte enfoque en la agilidad, incluidas las habilidades que rodean la creación de software real: estimación, división del trabajo en pequeños fragmentos, continuo entrega, refactorización, etc.

Además, un montón de habilidades prácticas: control de versiones, revisión de código, uso de bibliotecas, desarrollo basado en pruebas, manejo de código heredado, comprensión y uso de las capacidades de un IDE moderno, diseño para usabilidad, estructuración de código para reutilización.

Y finalmente, una introducción a los antipatrones y otra sabiduría de lo que no se debe hacer: YAGNI, no allanar el camino de la vaca, la optimización prematura y mucho más. Hay una buena lista aquí: http://en.m.wikipedia.org/wiki/A

Ninguna de estas tres listas está completa, pero hay mucho más en el trabajo de ingeniero de software que solo escribir código que funcione, y realmente desearía que más se haya cubierto en la escuela. Cuando estaba obteniendo mi título de CS, literalmente no había una sola mención del control de versiones. Creo que una hora de conferencia durante el curso de Ingeniería de Software de 400 niveles podría haber sido ágil, pero merecía mucho más que eso. Cubrimos la cascada en profundidad, pero omitimos la parte donde fue adoptada contra el consejo específico del hombre que la concibió. ¡Inaceptable!

Diría que la gran mayoría de los que he encontrado útiles en más de 4 trabajos enfocados en áreas muy diferentes de CS provienen de cursos rigurosos en:

  • Algoritmos
  • Compiladores
  • Sistemas operativos
  • Arquitectura de Computadores

Yo diría que lo siguiente también es muy útil en las situaciones correctas:

  • Gráficos de computadora
  • Redes de computadoras y protocolos de red
  • Arquitectura de Computadores
  • Computación paralela
  • Bases de datos (*)
  • Aprendizaje automático (*)

Todo lo demás estaba bien

a) no aplicable
b) útil en escenarios muy limitados
c) algo que puede recoger fácilmente si tiene la configuración de la base anterior.
d) no relacionado con CS
e) un requisito previo obligatorio que era exagerar (es decir, encontré que los bits relevantes de álgebra lineal aprendidos en el contexto de los gráficos eran muy útiles, pero un curso separado sobre álgebra lineal fue mayormente exagerado).

Una parte triste de la forma en que se configuran los sistemas educativos actuales es que para obtener versiones de muy alta calidad de las clases anteriores, la mayoría de las veces tiene que asistir a un programa de 4 años que tiene mucha pelusa.

Por otro lado, un semestre básicamente no es nada cuando se trata de aprender realmente sobre los temas que son realmente valiosos en profundidad.

Me interesaría ver que los programas de grado evolucionen de manera que no diluyan la profundidad de la educación CS, tal vez incluso la hagan mucho más concentrada (es decir, tiene 2-3 semestres de cada uno de los cursos enumerados anteriormente), mientras que en Al mismo tiempo, deshacerse del material marginalmente útil y no CS.

Ah, y a pesar del estatus de escritor superior, diría que nunca obtuve nada mejor que una B en la clase relacionada con la escritura. Esto es algo que puedes aprender por tu cuenta y no hay nada que aprendas en la universidad que no puedas sacar de la escuela secundaria.

Gran parte de la escuela secundaria es inútil si quieres convertirte en programador.

En la India, si quieres convertirte en médico, debes tomar biología en la escuela secundaria y luego obtener un título médico de 5 años directamente de la escuela. Su cerebro puede absorber todos estos conceptos a esa edad, pero debido a la forma en que está configurado el sistema, no tiene acceso a las cosas buenas de los grandes maestros.

Creo que este modelo es mucho más eficiente y, aunque no veo si sucederá en el futuro cercano, me gustaría ver que los títulos de CS también evolucionen de manera similar, es decir, muchos CS introductorios universitarios sean empujados a las escuelas secundarias y hagan CS los títulos en sí mismos demoran ~ 2 años al eliminar material que no es CS y reforzar el programa para centrarse sólidamente en CS.

(*): No tomé estas clases. En el caso de las bases de datos, trabajé en sistemas de archivos durante más de 5 años, que es una especie de campo de hermanos y, por lo tanto, terminé leyendo mucha literatura al respecto. En el caso del aprendizaje automático, a veces he sentido la necesidad de hacerlo y he hecho algo de autoaprendizaje aquí.

Quiero decir, si tengo que hacer mi propia carrera, esto es lo que querría:

matemáticas discretas (1 clase)
código orientado a objetos (1 año)
estadísticas (2 años)
algoritmos (1 año)
proyecto senior (1 año)
montaje & c (1 clase)
arquitectura de computadora (1 clase)
seguridad informática (1 clase)
redes (1 clase)
desarrollo de producto (1 clase)
estructuras de datos (1 año)
depuración (1 clase)

——
y encima de eso

física (puede ser la física no ingenieril) (1 año)
química (1 año)
biografía con un enfoque en genes / más difícil de aprender más material matemático + genética (1 año)

——

Sin compiladores, sin sistemas operativos, sin programación funcional, sin cálculo, sin teoría de la computación, sin bases de datos.

Cursos matemáticos fundamentales como cálculo, álgebra lineal, teoría de la probabilidad, etc.
Además, los cursos que pueden inspirar el interés de investigación de los estudiantes también son muy importantes, como la arquitectura de la computadora, la base de datos, el algoritmo, los gráficos por computadora, etc. Los proyectos en estos cursos son muy útiles para ser un buen programador.
También quiero estudiar economía, marketing, música, historia y literatura. Dan forma a tu personalidad y amplían tus mentes.

Conceptos fundamentales, introducción a OOP, OOP, estructuras de datos, bases de datos, análisis numérico / dif. eq., introducción a algoritmos, introducción a lógica, algoritmos, algoritmos avanzados, introducción a IA, robots móviles autónomos, aprendizaje automático, lógica aplicada, aprendizaje de robots, IA avanzada, aprendizaje automático avanzado, aprendizaje avanzado de robots.

Primero, debe comprender el Currículo de Ciencias de la Computación 2013. Desde allí, puede ver los programas de estudios en las principales escuelas que se publican en línea. Por ejemplo, si estoy interesado en el curso de Lenguaje de Programación, buscaría “Programa de Lenguaje de Programación CS de Stanford” o si conociera el número del curso “CS 242 de Stanford” para obtener Cursos usando Conceptos en el programa de estudios de Lenguajes de Programación.

Creo en la reutilización: el adagio “los buenos programadores piden prestado; los grandes programadores roban” se aplica a los programas de estudio.

Después de aprender sus dos primeros idiomas (por lo tanto, tal vez como estudiantes de segundo año), se debe exigir a los estudiantes de CS o programas de ingeniería de software que tomen una clase en la que deben aprender un lenguaje de programación (pequeño / juguete pero usable y lo más importante diferente) y escribir un pequeño proyecto en él todas las semanas. El cambio de paradigma es una de las habilidades más importantes en la programación, y tenemos demasiados graduados que conocen un puñado de idiomas muy similares y no pueden o no quieren aprender nada más exótico.

Estoy convencido de que debe haber más estadísticas, tal vez 2 semestres de estadísticas y un semestre en aprendizaje automático básico. Las estadísticas simplemente aparecen mucho en la industria. El cálculo multivariado es muy importante para comprender algunos principios científicos avanzados, pero las estadísticas son lo que surge en la industria.

Un área clave de la que me arrepiento seriamente de nunca haber estado expuesto como estudiante de CS es la teoría del control. (Control de circuito cerrado de dispositivos, señales y sistemas, análisis de Fourier, etc.) Dado que una de las próximas “grandes áreas” será el “internet de las cosas”, creo que se espera que más y más personas de CS realicen algunas tareas integradas programación de dispositivos activos (mini robots, por así decirlo).

Espero que las personas que diseñen planes de estudio de informática en el futuro encuentren una manera de dar a los estudiantes al menos una exposición introductoria a esta área crítica.