¿Cuáles son los problemas en la educación en informática?

Las otras respuestas aquí ya son buenas. Agregaré un poco más de detalles a mi área: redes.

La educación en redes es abismal. Los nuevos graduados que desean trabajar en redes pueden conocer algunos de los conceptos básicos, pero los libros de texto y los materiales del curso nunca han seguido el ritmo. Las nuevas contrataciones requieren cerca de dos años de experiencia práctica antes de que realmente estén bien informados.

Sugerencias especificas:

  • Deja de enseñar el modelo ISO. Todo lo que hace es confundir a las personas. Las capas son buenas, pero hace mucho tiempo demostramos que este es el modelo equivocado . Los estudiantes solo tienen que desaprender esto. Enseñe el modelo IP en su lugar y solo.
  • Enseñe un poco de información de la capa física. Es muy útil para poner a tierra a los estudiantes motivadores.
  • Enseñe un poco de los fundamentos de la capa lógica. Abordar es importante. El árbol de expansión es esencial. El árbol de expansión rápida y TRILL son opcionales.
  • Explicar reintentos, keepalives, boff exponencial limitado de backoff.
  • Explique la diferencia entre conexión orientada y sin conexión, y los valores de cada uno. La realidad ha demostrado que óptimo es un híbrido.
  • Enseñar TCP y UDP. Los estudiantes necesitan una base en la realidad. MP-TCP para crédito extra. No reinventar TCP debería ser un ejercicio.
  • Enseñar DNS. Esta es una base de datos distribuida y jerárquica, y un modelo bastante bueno para muchos otros sistemas distribuidos.
  • Protocolos de enrutamiento: Esto debe cubrir RIP (vector de distancia), OSPF o IS-IS (estado de enlace) y BGP (vector de ruta).
  • Seguridad de la red. Este debería ser su propio curso completo.
  • Sistemas distribuidos. Otro curso completo. Por favor explique el teorema de CAP.

Tomaré un punto de vista algo contrario.

No hay problemas en la educación CS. Hay problemas con las expectativas en cuanto a lo que debe significar una “educación CS” en un ambiente post-educativo.

Para mí, una excelente educación en CS se basa firmemente en el lado teórico de todas las cosas de la computación: teoría de grafos, teoría de conjuntos, los fundamentos de la arquitectura de computadoras, integridad de Turing, pruebas de corrección, construcción de lenguajes de programación (no es lo mismo que “construcción del compilador “aunque eso es una ventaja), la teoría de los sistemas operativos, incluida la concurrencia distribuida, y un montón de basura que probablemente he omitido.

Enseñando, es obvio que para demostrar dominio en algunas de esas áreas, debe ser capaz de escribir código. Y eso para mejorar la vida de aquellos que califican dicho código, debe haber alguna disciplina sobre cómo se hace, lo que lleva a cursos que, para mejor, se caracterizan como “cursos de programación”.

Aquí es donde las ruedas se caen del autobús.

La mayoría de las personas en la industria NUNCA han enseñado un curso de CS . La mayoría de ellos tomó muchos, naturalmente. Y pueden tener una profunda experiencia en la programación como profesión, la disciplina de la programación en equipo, las revisiones de código, todo tipo de trucos del oficio que solo puede aprender a través de la experiencia. Pero no saben qué implica preparar tareas que demuestren que un alumno comprende un concepto determinado.

En un curso de encuesta de lenguajes de programación de nivel superior, por ejemplo, se entenderá que el estudiante ya sabe muchas cosas sobre programación. Entonces, ¿qué tal mezclarlo un poco? ¿Ceceo? Guay. Escribe eval . No, espera, eso es demasiado clásico. Tal vez algo de multiplicación de matrices en su lugar … ¿FORTRAN? Oh, lo sé … ¿qué tal algo de recursión, que te hará pensar? Sabes C? C ++? Excelente. Arranquemos los tipos y escribamos algo de BCPL … y para hacerlo interesante, implementemos un paradigma orientado a objetos … ¿Qué más? Tengo miles de ejemplos como este …

Nada de esta mierda tiene nada que ver con la “programación” en el sentido profesional, pero demuestra que (1) el estudiante realmente comprende los “fundamentos” previamente determinados y (2) que tiene suficiente dominio de cada idioma para escribir programa trivial en un marco de tiempo muy comprimido. Y lo más importante, es bastante fácil de calificar.

Sostengo que la educación en informática hace un buen trabajo (en la mayoría de las instituciones de educación superior) al enseñar los fundamentos teóricos de la informática. En algunos casos, hay cosas que deberían agregarse o desecharse, pero en general, es bastante decente.

El producto final, sin embargo, no es un “programador”. Es alguien que tenía una comprensión lo suficientemente grande de cómo funcionan las cosas para ENTONCES aprender los detalles de una carrera profesional o de seguir estudiando o investigando.

El PROBLEMA , en la medida en que existe un problema, es que la industria saca a estos niños de la escuela y sobre la base del pedigrí espera que se desempeñen a niveles locos, sin ninguna base sobre la cual tener esa expectativa.

Comenzaré con uno grande, pero probablemente no esté cerca del más grande.

Hay demasiados graduados de CS que salen en busca de trabajos que en realidad no saben cómo escribir un programa.
¿Por qué los programadores no pueden programar?

¿Por qué?

Tal vez sea porque tenían TA que fueron un poco demasiado útiles y escribieron suficiente código para que pudieran ctrl + c ctrl + v en sus tareas completadas. Tal vez. No puedo estar completamente seguro. Pero es una queja legítima, y ​​una que debe abordarse.

Quizás un título de CS de algunas universidades debería venir con un asterisco *:
* conoce las matemáticas teóricas, pero en realidad puede no ser capaz de escribir un programa.

Los académicos de CS solían ser conscientes del hecho de que CS no era una ciencia, pero el objetivo era que algún día se convirtiera en un verdadero campo de investigación. Mis profesores de CS solían decir que cualquier área temática con la palabra “ciencia” no es una ciencia real (como las ciencias sociales, las bibliotecas, etc.). Creo que el principal problema con CS hoy es que está convencido de que es una ciencia, cuando realmente no lo es. Entonces, irónicamente, ya no se esfuerza por ser un campo real, porque está convencido de que ya lo es.

Estoy de acuerdo con la respuesta de Anónimo de que hay una especie de crisis de identidad, una búsqueda de relevancia. Algunos están encontrando un lugar para CS en el problema de obtener rendimiento de los procesadores multi-core. El MIT, por lo que entiendo, ha cambiado su enfoque de pregrado para “descubrir la función de las bibliotecas”, de modo que puedan usarse de manera efectiva para resolver problemas de ingeniería. Otros se dirigen hacia el cambio de CS a la ingeniería de software, enseñando un conjunto central de lenguajes C (C, C ++ y Java), un conjunto central de bibliotecas grandes y las mejores prácticas en su uso, pero todavía lo llaman “CS”.

El síntoma principal del problema, la OMI, es que durante muchos años, con pocas excepciones (es decir, las mejores escuelas técnicas), el campo ha sido impulsado por las necesidades de otros campos de actividad. Las principales escuelas también solían ser impulsadas por esto, pero esas necesidades se canalizaron en un deseo de explorar qué podía hacer la informática. Parece que CS ha perdido en gran medida esa fascinación, pensando que tenemos la mayoría de las respuestas que necesitamos en lo que la computación puede hacer, y hacer más de eso sería “mirar naval”. Ahora, la tarea percibida de CS es simplemente aplicar la tecnología existente a la industria, o los campos de investigación no computacionales. En cierto modo, es víctima de su propio éxito.

Lo que el campo ha olvidado es que la razón por la que ganó la relevancia que alguna vez tuvo fue el deseo en algunos sectores de explorar la informática, y contó con el respaldo financiero del gobierno de los EE. UU. En gran parte. Así es como obtuvimos las computadoras en primer lugar, junto con las redes y los procesos coordinados automatizados. También es cómo obtuvimos el mouse, las interfaces de usuario, la interconexión de redes (Internet) e incluso la web.

Desde donde estoy sentado, el reloj se está acabando en CS, pero todavía tiene tiempo para entender lo que he esbozado aquí.

Gran descargo de responsabilidad: a pesar de que puedo sonar flipante y demás hacia la educación CS, es solo porque mi título (BA) es en educación CS. También tenga en cuenta que debido a que no tengo un título de posgrado, estoy limitado a la enseñanza y a las universidades Jr. y, por lo tanto, elegí ingresar a la industria y no hacer la parte de educación, excepto por algunos esfuerzos aquí en Quora (mis fanáticos han descrito mi estilo como el en la versión de trincheras de lo que Jessica Su hace en su blog y responde (con mucho peor inglés ;–))

Me pondré en contacto con usted más detalladamente por la mañana, pero para ser franco, toda la educación está jodida y, desafortunadamente, CS es una de las áreas en que la educación está más jodida.

Primero un poco de mis antecedentes para que puedas entender mis prejuicios. Crecí en educación especial y me dijeron cosas como que nunca sería capaz de leer o andar en bicicleta, etc. Bueno, tenían razón, aprendí a codificar antes de aprender a leer cuando tenía 11 años en mi Apple II + (AAPL es la única compañía en la que he tenido acciones en {actualmente unos pocos cientos de acciones}). Mi primer intento en la universidad fue un completo fracaso. Terminé en la industria y porque solo las nuevas empresas contratarían a alguien sin un BS (y sí, me refiero a tonterías) en CS (no debería tener que enseñarle a algunos que tenían un BA en CS de USC cómo hacer una búsqueda global y reemplazar en VI). Como resultado, estuve en el lugar correcto en el momento adecuado para ser el inventor de la transmisión de medios, protocolos de transporte en tiempo real, almacenamiento en búfer grosero de los clientes, máquinas de estado sueltas y computación en la nube actualmente segura. Regresé a la escuela en 2002 y me gradué en 2008 yendo a la universidad Jr. a sr. ruta universitaria. Es importante tener en cuenta que probé en todas mis clases técnicas, excepto en la teoría de la computación. Pagué por la escuela como tutor y eso es lo que voy a discutir aquí. Mi opinión principal final es que ODIO LAS MATEMÁTICAS

También vengo de una larga línea de educadores y profesores (mi tía enseña CS y mi papá es economista experimental, su abuela es profesora de bio y su papá es el super de las escuelas de Nueva York). Pero también creo que la universidad ha perdido su camino desde la revolución industrial.

La mayoría de los siguientes problemas son tanto de la industria como de los CS académicos:

1. Falta de calidad del profesor (demasiados complementos)
2. No enseña las grandes ideas por adelantado (CS 101 debería ser un recorrido por las grandes ideas de CS)
3. No asuma ningún antecedente dado como lo muestran los siguientes casos:
* El estudiante estaba desconcertado por la conversión de base porque nunca aprendieron sobre los restos en K-12 (hicieron todo el trabajo por calculadora)
* El estudiante de segundo año de posgrado no sabía qué era una lista entintada o cómo implementarla.
4. No se enfoca lo suficiente en la teoría y cuando lo hace en la teoría incorrecta (es decir, no se usa fuera de la academia)
5. Demasiado dinero gastado en investigación de pastel en el cielo como cuántico
6. Hay demasiado cálculo y no hay suficientes habilidades y conocimientos básicos de matemática técnica (por ejemplo, mi escuela dejó de calcular como requisito para CS el semestre después de graduarme principalmente en base a mi recomendación [Yo era el estudiante * Y * miembro de la industria del plan de estudios comité])
7.CS 101 y la computadora y la sociedad deberían ser clases OBLIGATORIAS y luego permitir que el estudiante explore un poco más el campo

No comienza lo suficientemente temprano. Comencé a programar un poco cuando tenía 8 años, y escribí programas estructurados, no del todo horribles, cuando tenía unos 10 u 11 años.

No entendí los trucos y la administración de memoria hasta años después, pero podía escribir juegos agradables y comprender vagamente el código de máquina con el que mis programas estaban compilando.

Mis hijos comenzaron a jugar con MIT Scratch a los 8 años y 5 años respectivamente. No era muy temprano para ellos.

De la misma manera que esperamos que todos los niños se alfabeticen desde una edad temprana, debemos esperar que todos los niños estén familiarizados con los conceptos de asignación, iteración, recursión. Los adultos en 2030 que no pueden automatizar las cosas estarán en grave desventaja en la fuerza laboral: posiblemente tan grave como la desventaja de alguien que no puede leer las experiencias de hoy.

Gracias por el A2A.

No soy un experto en CS y mis habilidades de programación no son de alta tecnología.

Estos son los problemas que experimenté al aprender CS.

1. Sintaxis …
Sí, la sintaxis puede ser muy molesta y desalentadora, especialmente cuando comienzas a programar. Sin embargo, muchos cursos o cursos no parecen ayudar con la sintaxis. Le permiten descubrirlo, lo que puede llevar mucho tiempo y ser ineficiente. Desearía que fueran más útiles con la sintaxis al principio.

2. Depuración
Muchos cursos solo te permiten aprender a depurar por tu cuenta. Esto es nuevamente algo ineficiente. Hay formas eficientes de depurar, pero los cursos no parecen enseñarte. Muchas cosas, lo aprendí a través de prueba y error y fuerza bruta. Sería genial si pudieran enseñar depuración.

3. Falta de ejemplos.
En mi licenciatura, un libro de texto dio un ejemplo equivalente de construir una casa de paja y luego la tarea exigió que construyera una torre de babel.
Creo que la asignación podría haber sido más fácil si hubieran dado más ejemplos sobre cómo se pueden usar comandos específicos en combinación. En lugar de decir desde ahora ya sabes cómo imprimir “hola mundo” ve a construir google.

4. Pensamiento analítico.
Nunca pensé realmente tan cuidadoso hasta que comencé a programar. Desafortunadamente, CS no parece enseñarle a pensar paso a paso. Bueno, aprendes algo por tu cuenta. Pero las horas perdidas al principio son enormes … Así que, por favor, enseñe a los estudiantes a pensar paso a paso.

En general, me gusta programar y es EXTREMADAMENTE divertido y útil. Además, los cursos han mejorado desde hace diez años, pero aún así deseo que la educación en CS se centre más en estos puntos mencionados anteriormente.

Las condiciones de mierda y los bajos salarios que afectan a la profesión docente son un gran elemento disuasorio para llevar a las personas as al campo. Sí, 40 mil después de diez años y sin beneficios para tu esposa y tu familia.

Este es un problema no pequeño que las pequeñas mentes que dirigen nuestro país simplemente se negarán a abordar.