¿Quién puede aprender a programar? [cerrado]

17

Siempre dudo cuando hablo con los profesores sobre tratar de mejorar el porcentaje de personas que se gradúan con un título de tipo CS en comparación con el número que comienza pensando que eso es lo que quieren. Por un lado, realmente creo que es importante que los profesionales se involucren y den su opinión, por otro lado, sería mejor si los estudiantes con menos calificaciones terminaran con títulos de CS.

No creo que todas las mentes estén construidas para este campo y tienes que ser un buen estudiante de por vida. Debes tener un alto grado de paciencia y habilidades para resolver problemas solo para buscar. Si tiene el cerebro "correcto", esos problemas difíciles son los que lo impulsan a continuar. Si solo obtiene una larga lista de problemas fáciles, se aburre, por lo que estas personas en realidad no son buenas para trabajos más repetitivos. No necesito entrar en todos los detalles ... si está leyendo esto, probablemente sepa a lo que me refiero.

Entonces, la pregunta es: ¿cómo encuentra el equilibrio de un programa de grado que sea accesible para suficientes personas para ser financiado y considerado exitoso, pero que tampoco resulte en personas que realmente no están preparadas para el trabajo? Tal vez una mejor pregunta es, ¿qué métrica utiliza para saber si los cambios que está haciendo en un programa de grado lo están mejorando? No sé si una tasa de graduación más alta es una buena métrica. Y parece que la retroalimentación que podría intentar capturar muchos años después sobre los trabajos que tienen los graduados se retrasaría demasiado.

He luchado con esta pregunta durante mucho tiempo, principalmente porque no creo que haya una respuesta. Pero pensé en preguntar si alguien sabe de alguna investigación que realmente se haya hecho al respecto.

Además: recientemente tuve un profesor muy sabio que me recordó que no todos los que se gradúan con un título de CS incluso quieren ser programadores de tiempo completo una vez que realmente han descubierto lo que eso significa. Pero, con la educación que recibieron, podrían ser excelentes Gerentes de Proyecto, Gerentes, administradores de sistemas, etc. Creo que este fue un muy buen punto que no pensé considerar aquí. Hay un porcentaje muy alto de personas que no terminan trabajando en el campo en el que se especializaron, CS no es una excepción a eso. Tener la gente adicional ayuda no solo en el presupuesto para el título, sino también para expandir el porcentaje de no programadores que aún saben lo suficiente para trabajar con programadores.

Beth Whitezel
fuente
@ Job- Gracias, ese es un gran punto y me hace sentir mucho mejor.
Beth Whitezel
2
@job: hablando como psicólogo, ahora programando máquinas de RMN, puedo dar fe de eso.
Matt Ellen

Respuestas:

33

Ok, por demanda popular ... Deje que el libre mercado se dé cuenta. Ya sabes, el 95% de los estudiantes de psicología terminan haciendo otra cosa. No todos los que tienen un título de CS / menor terminan programando, pero son mejores gerentes, analistas, gerentes de proyecto que los que no lo tienen. No lleve el peso del mundo sobre sus hombros. El título de CS es solo un pedazo de papel. Aquellos con títulos en matemáticas, física, química y biología se convierten en programadores, y no todos los que tienen un título de CS se convierten en programadores. Sin millones de niños que aspiran a ser el mejor jugador de béisbol, no tendríamos estrellas tan grandiosas. El sistema es autorregulador.

Trabajo
fuente
Estoy de acuerdo en cierta medida, pero también he tenido que apoyar el código escrito por personas con títulos en física, matemáticas e ingeniería mecánica que pensaban que eran programadores. El hecho de que alguien haga algo por su trabajo no significa que lo haga bien ...
Joel C
77
He visto muchos códigos malos escritos por estudiantes de CS. He visto código increíble escrito por personas de matemáticas o física o lo que sea. Prácticamente no hay correlación entre lo que estudiaste exactamente y la calidad de tu código.
jhocking
1
¡también, ve a la biología!
jhocking
11

Si bien creo que es importante tener en cuenta la respuesta de Job, la misma respuesta podría aplicarse a una fábrica de títulos. "Pagué mis $ 199.95, ahora dame mi título de CS".

Conocer al alumnado de acuerdo con un estándar de lo que son los "programadores reales" no es realmente tu trabajo. Enseñar a los estudiantes cómo programar / diseñar es (¿presumiblemente?). Si no cambiaste tu forma de pensar en la universidad, perdiste tu tiempo allí. Su objetivo es mostrar a cualquier estudiante que muestre interés que convertirse en programador cambia su forma de pensar para mejor. Lo haces indirectamente mostrándoles ...

  1. qué es realmente la programación y ...
  2. que pueden hacerlo

Lo hacemos mal

Existe una extensa investigación que muestra que la forma en que el 95% de nuestros programas universitarios enseñan programación / CS es terrible. El programa de CS promedio comienza con

  • Un semestre de programación básica en C ++ / Java / C #, que pasa 16 semanas enseñando algunas cosas más avanzadas que "este es un bucle for". Una analogía podría ser si el departamento de Física pasara un semestre estudiando el alfabeto griego antes de comenzar la cinemática.
  • El segundo semestre de primer año entra en estructuras de datos básicos y generalmente deja completamente a un tercio o la mitad de los estudiantes.
  • El segundo año se gasta en una combinación de ensamblaje, estructuras de datos, análisis algorítmico, un curso de ética y quizás su primer curso de actualidad. Tiende a perder otra mitad de sus estudiantes entrantes durante este año.
  • Juniors y Seniors entran a clases con nombres como "Gráficos", "Redes I y II", "Sistemas operativos", y es el primer material realmente interesante que los estudiantes pueden ver.

Casi todo lo demás es mejor

Casi cualquier experimento mejora la situación, medido en términos de la comprensión de los temas por parte de los estudiantes y las tasas de inscripción y graduación del programa. Algunos de los experimentos que he visto en los diarios de ACM CSE son ...

  • Construyendo desde máquinas de estado teóricas muy simples hasta el ensamblaje y hasta C, terminando con C # / Java en su último año. El enfoque está en gatear lentamente por las capas de abstracción.
  • Elegir un lenguaje muy "simple" para enfocar a los estudiantes en estructuras de datos y abstracción. He visto buenos resultados con estudiantes que escriben aplicaciones web bastante complejas en una variante de esquema para el final del primer año. (Era una wiki modificada que ejecutaba el texto de la página a través del esquema antes de mostrar ... algo divertido)
  • Centrar a los estudiantes principiantes en un área particular (redes) y enseñar cada estructura / declaración de Java como un "aparte". Los estudiantes de la segunda semana hacen ping al servidor de correo para ver una lista de su correo electrónico, el proyecto final es un simple cliente de mensajería instantánea. El objetivo es mostrar a los estudiantes cómo los programadores hacen que una parte del mundo funcione.
  • Algunos programas se centran en la robótica. Los estudiantes de primer año juegan con las tormentas mentales de Lego ... los estudiantes de segundo año usan la API tipo C, Juniors y Seniors trabajan con los ME y EE en una colaboración entre campus para construir sistemas bastante complejos.
  • Un programa enfoca a los estudiantes en el código de LECTURA para el primer semestre. Analizan el código en el sistema X11 para enseñar el control de flujo y la sintaxis básica durante 8 semanas más o menos, incluso antes de comenzar a escribir el código. Sus primeros programas son pequeños parches para modificar un poco de comportamiento.

Cada uno de estos experimentos vio mejoras masivas en el interés inicial de los estudiantes, la transferencia de conocimientos y la retención hasta la graduación. Algunos son más apropiados para ciertos entornos universitarios que otros, pero si sigue la estructura descrita en el párrafo anterior, pregúntese: "¿Me quedaría durante los primeros dos años de este programa?"

jkerian
fuente
Estoy de acuerdo con usted en que deberíamos centrarnos en mostrarles de qué se trata la programación y cómo puede cambiar su proceso de pensamiento independientemente de lo que haga después. Buenos pensamientos.
Beth Whitezel
2

Programar es instruir de manera lógica para lograr el resultado deseado. En otras palabras, le está diciendo a la computadora que haga alguna tarea. La única forma de avanzar es practicando.

Al igual que aprender inglés o cualquier otro idioma, debe comenzar aprendiendo la sintaxis (alfabeto) y luego pasar a la gramática y otras construcciones. La cantidad de tiempo requerida varía según la complejidad del idioma. Codificando en lenguajes de nivel superior como SQL, Python es casi como escribir en inglés.

nayan
fuente
2

Creo que algunos aspectos ayudarían:

  • Profesores que conocen el mundo real moderno . Si pueden hablar sobre la tecnología actual y cómo encaja en los marcos teóricos, eso es mucho más relevante para los estudiantes de secundaria que no conocen la historia que las disecciones de VAXen sin referencia a la tecnología actual.

  • Pasantías apoyadas por el departamento. Si el departamento puede garantizar al menos 2 veranos de trabajo remunerado con empresas tecnológicas, entonces hay un gran incentivo para quedarse.

Francamente, los estudiantes modernos de informática son mucho más bendecidos que los que viven incluso hace 5-10 años. La capacidad de comprar un sistema de gama baja y luego instalar una máquina virtual y aprender varios idiomas, sistemas operativos, etc. de forma gratuita es un habilitador, es difícil exagerarlo.

Por supuesto, las personas seminales como Hopper y Knuth se enseñaron a sí mismas sin los brillos. El genio saldrá.

Paul Nathan
fuente
Si bien la idea es genial ... dos veranos de trabajo remunerado entre pasadas garantizado desafortunadamente no son realistas. Sí, hay pasantías remuneradas, pero la mayoría de los graduados tienen la suerte de recibir una remuneración en este momento y, a menudo, tienen que conformarse con la no remunerada. Esto puede ser diferente en otros estados. Sin embargo, creo que tienes razón acerca de que tienen más oportunidades. Pueden contribuir a muchos más proyectos de código abierto que hace unos años también.
Beth Whitezel
@ BitOff: nunca he oído hablar de una pasantía CS no remunerada.
Paul Nathan
¿En serio? Debe ser una cosa localizada entonces.
Beth Whitezel
1

Cree un área de preparación para estudiantes potenciales y exitosos fuera de su programa de grado para mitigar el riesgo. Esto podría incluir patrocinar clases AP CompSci en escuelas secundarias locales para separar preventivamente el trigo de la paja. Si esto resulta ser demasiado difícil, intente infiltrarse en los capítulos locales de DECA (o cree uno nuevo) con un programa orientado a CS en las divisiones de la escuela secundaria o la universidad. Por el contrario, les mostrará a los estudiantes emprendedores que buscan habilidades de gestión, posiblemente con un potencial CS no realizado, una nueva vía para cumplir sus aspiraciones comerciales a través de su medio académico.

Travis J
fuente
Sí, estoy completamente de acuerdo en que necesitamos hacer más para introducir CS en edades más tempranas que la universidad. Sé que la mayoría de las escuelas secundarias ofrecen una o dos clases avanzadas de informática que pueden entrar en un lenguaje de programación, pero no creo que sea suficiente. A menudo he pensado que si pudieras enseñar un lenguaje simple y amigable para los niños a los alumnos de 4to a 6to grado, estarías captando su interés a la edad adecuada. La primera vez que aprendí lo básico fue cuando tenía 8 o 9 años y, aunque me tomó otros 10 años más o menos, realmente me dejó con un gran recuerdo de la "programación".
Beth Whitezel
1

Yo diría que la clave está en comprender los diferentes niveles de tales programas:

Universidades: tiende a ser donde uno puede estudiar solo por estudiar. En este caso, puede existir un estándar muy diferente en términos de crear programas y ajustarlos, ya que esto puede ser bastante teórico, o al menos eso es lo que recuerdo de estudiar Ciencias de la Computación en mis cursos superiores.

Universidades: tienden a estar más orientadas a la carrera, que es donde los comentarios de la industria y la conexión de las empresas con las universidades es un punto clave. Mirar las ubicaciones de 6 a 12 meses después de la graduación podría ser una medida utilizada para ver qué tan bien están las personas después de graduarse, ya que la pregunta clave es si alguien vio o no su tiempo y dinero para que valga la pena esa educación. La actualización del programa probablemente será más frecuente ya que los programas aquí pueden ser un poco más cortos, por ejemplo, los programas universitarios de Honor Bachelor tendieron a ser de 4 años, mientras que un programa de diploma universitario puede ser de 18-24 meses. Por lo tanto, el desafío es más lograr que esta parte tenga conexiones con las empresas para que las personas puedan exponerse al trabajo y ver qué funciona o no funciona para ellas.

JB King
fuente