¿Por qué la programación de computadoras no se enseña “al revés”, donde los estudiantes deconstruyen un sitio web popular, en lugar de aprender piezas abstractas individualmente?

Porque necesitas caminar antes de poder correr.

He tenido estudiantes de primer año que quieren saber cómo construir el próximo juego de Elder Scrolls, o un MMOG antes de que incluso escribieran un programa de “hola mundo”.

Intentar enseñarles las complejidades de un proyecto que requiere cientos de miles de líneas de código es mucho más desalentador que enseñarles lo básico en un programa de calculadora que puedo escribir en JavaScript con quizás 20 líneas de código.

Los proyectos grandes también tienen una TONELADA de análisis de requisitos y trabajo de diseño de software que lleva meses, incluso antes de que se escriba un código (si se hace correctamente). No hay forma de hacerlo en un semestre típico.

Sin embargo, puedo enseñarle sobre matrices, bucles, estructuras de datos y las mejores prácticas mostrándole pequeños programas que son muy fáciles de entender con bastante rapidez. También puedo mostrarle cómo depurar un programa simple mucho más rápido que uno que tiene toneladas de piezas móviles.

Estos fundamentos lo ayudarán a aplicarlos a proyectos más grandes que tengan un montón de complejidad cuando llegue a esa etapa. Algunas cosas, como la administración de memoria, la codificación multiproceso, los problemas de bloqueo de subprocesos, la conmutación por error, etc., tardan años incluso para que los buenos ingenieros aprendan y descubran, e incluso aún, el código con errores se libera constantemente.

Básicamente, si la ingeniería / programación de software fuera tan fácil, todos lo harían. Hay una razón por la cual los ingenieros de software son una de las profesiones mejor pagadas y tienen una gran demanda: no todos pueden hacerlo, y se necesita un tiempo para obtener la experiencia para hacerlo.

En un entorno privado, 1 a 1, el instructor puede adaptar exactamente sus intereses mientras mantiene las cosas en el nivel exacto de desafío para mantener su interés y al mismo tiempo observarlo para asegurarse de que permanezca comprometido.

En un entorno grupal, además del hecho de que hay diferentes niveles de habilidad y es mucho más difícil mantener a todos involucrados todo el tiempo en relación con sus intereses particulares y nivel de habilidad, también existe la presión de los compañeros para parecer cool o no parecer tonto (dependiendo del grupo), por lo que medir el compromiso, la comprensión y el interés se vuelve MUCHO más difícil.

Entonces, en lugar de enseñar a cada estudiante (lo que tal vez los instructores talentosos aún pueden hacer), debe tener un proceso de instrucción que logre enseñar algo significativo para la mayoría de los estudiantes la mayor parte del tiempo.

Es probable que la deconstrucción de un sitio web grande existente para un grupo de estudiantes principiantes falle como un proceso de instrucción, porque

a) va a haber una cantidad abrumadora de código para leer, por lo que dejar que los estudiantes pierdan el código por completo podría resultar en frustración, no saber por dónde comenzar y pocos o ningún resultado que mostrar por sus esfuerzos.

b) centrar la atención de los estudiantes en una porción muy pequeña de código para leer y modificar tampoco es excelente ya que el resto del código parecerá mágico y la mayoría no obtendrá la confianza y el sentido de propiedad como responsables de la mayoría de la funcionalidad en un proyecto mucho más pequeño. Peor aún, los estudiantes curiosos, los que más quieres alentar, aún se desviarán buscando otros fragmentos de código y “caerán por un precipicio” de conocimiento y se frustrarán.

c) muchas de las cosas interesantes que aprender de un gran proyecto son el diseño y la arquitectura, y es difícil hablar sobre aquellos con estudiantes principiantes comprometidos sin pasar por un agujero de conejo de preguntas de seguimiento hasta que los estudiantes que hacen las preguntas encuentren terreno en para anclar todo este nuevo conocimiento. esto probablemente solo sea interesante para los estudiantes que hacen las preguntas directamente y luego la mayoría de los demás podrían perder interés.

d) si sigue estrictamente un plan de conversación / discusión planificado previamente sin dejar que las preguntas de seguimiento se hagan cargo de la discusión, es probable que toda la clase pierda interés, porque la mayoría de los estudiantes no podrán fundamentar el nuevo conocimiento en conocimiento preexistente ya que la brecha entre los dos es demasiado grande.

El resultado más probable es tener un instructor dando clases a una clase desconectada.

Ahora, si podemos suponer que cualquiera de los estudiantes ya tiene una comprensión decente del desarrollo de software y obtendrá una instrucción más personalizada, entonces es mucho más probable que su propuesta tenga éxito.

Es muy desafortunado leer respuestas tan sesgadas.

Tantos de ustedes son nerds informáticos naturales que están cegados por sus propios intereses y habilidades.

Esta pregunta hace referencia a cómo se podría enseñar la programación informática, potencialmente a los no nerds, que carecen de interés en la teoría abstracta y el proceso de construir calculadoras aburridas o juegos que no juegan.

¿Qué niño juega al blackjack? ¿Qué miembro de la familia mencionó la “concatenación de cuerdas” o las “secuencias de fibonacci” en la mesa de la cena anoche?

¡Despierta! Las escuelas de programación de computadoras están potencialmente pasando por alto a estudiantes creativos y talentosos que podrían aprender de una manera más visual y cinestésica.

Algunos niños simplemente no resuenan con la prueba rSpec sin un posible uso para ello. Escribir exámenes no es divertido para estos niños; en todo caso, es aburrido y sin alma.

¿Por qué un niño dejaría de practicar deportes por una sintaxis de revisión mientras usa palabras que no puede deletrear o pronunciar?

Muchos de ustedes deberían considerar un traductor en su clase o un tipo de servicio de revisión laico antes de sus presentaciones.

Los libros de programación de computadoras a menudo se escriben horriblemente porque son increíblemente secos y densos sin ningún sentido de su audiencia.

Solo espero que aquellos de ustedes que enseñen comiencen a cuestionar sus métodos y evaluar objetivamente si los niños que están enseñando realmente comprenden sus ejemplos.

Simplemente relacionar el código con los sitios web que estos niños usan y reconocen es un mejor enfoque que las aburridas demostraciones de “Hola mundo”.

Deje que Steve descanse en paz y considere un enfoque actualizado.

Porque necesitas aprender a caminar antes de que puedas aprender a correr.

Puedes pensar que quieres que te sirvan un montón de recetas pre-masticadas que crees que te ayudarán a convertirte en un “programador” e inmediatamente comenzar a construir sitios web súper lucrativos y sorprendentes, pero aquí hay algunos datos:

  • Ese enfoque te convertirá en un mono de codificación, en el mejor de los casos; copiar y pegar el código de otras personas, sin entender lo que sucede debajo del capó y siempre tratando de encajar las piezas con un martillo;
  • La programación no se trata únicamente de “sitios web” y “aplicaciones móviles”. Si está en el sueño de un próximo plan para hacerse rico rápidamente, quedará desilusionado de manera rápida y contundente.

La forma en que invierte en su educación corresponde exactamente a la recuperación que recibirá a lo largo de su carrera. La “programación” no es algo que se aprende en un campo de arranque de codificación, por lo que podría aprovecharlo al máximo y aprender algunos ABC, y luego tratar de desarrollarlo en una línea de tiempo muy, muy larga.

Porque no puedes ir y cocinar una comida deliciosa antes de aprender a cortar y preparar tus ingredientes.

Tome a alguien que no sepa nada sobre software e intente enseñarle cómo construir un sitio web directamente, sin enseñar nada sobre la seguridad subyacente, sobre algoritmos, etc., y lo construirán mal.

Será lento, inseguro o ni siquiera funcionará.

Construir una calculadora no se trata de construir una calculadora . Se trata de aprender cómo una computadora necesita que escribas pasos muy específicos para poder hacer algo.

Se trata de pasar parámetros, tomar información del usuario, hacer algunos cálculos, mostrar información.

De acuerdo, podría ser una calculadora. Pero el mismo concepto se aplica a una aplicación grande, solo a mayor escala.

Debe comenzar a aprender de abajo hacia arriba, no puede enseñar los de nivel más alto antes que los de nivel más bajo.

Si no comprende cómo funciona algo debajo, no sabrá cuándo está bien usarlo y cuándo no.

Además, tus intereses no son los intereses de todos. Tal vez el que está a tu lado quiere aprender a construir videojuegos, aprendizaje automático o cualquier otra parte de CS. Sería imposible crear un plan de estudios para enseñar según los intereses de los demás.

Entonces siempre comenzamos con lo básico. Con algo que siempre necesitará saber cómo usar, ya sea en el desarrollo de videojuegos, aplicaciones móviles, desarrollo web, etc.

Puede decir “Pero no necesito saber cómo funciona la función xyz . ¡Solo quiero usarla!”. Por supuesto, entiendo eso, pero tal vez necesites usar eso en un idioma que no lo proporcione. O tal vez cambie de opinión y comience a desarrollar idiomas. O oye, ¡tal vez incluso te guste y encuentres formas de mejorarlo!

Es posible que no necesite saber todo debajo de un marco para crear un sitio web. Hay constructores web fáciles en todo Internet. Pero necesita conocerlos para construir un sitio web bueno, confiable y exitoso . Lo mismo vale para cualquier campo. Mientras no sepa cómo se realizan los pasos debajo del capó, no podrá mejorar ni innovar. Serás solo otro ladrillo en la pared. Y cualquiera puede aprender eso en Google, sin la necesidad de un maestro.

Vamos a universidades y campos de código para aprender cosas en profundidad, para que podamos entender lo que está sucediendo en un momento dado y poder mejorar cosas malas o desarrollar cosas nuevas.

Ya hay buenas respuestas a esta pregunta, pero me gustaría agregarle un aspecto.

Cuando escribo software empiezo “fácil”, y luego repito muchas veces. El código se vuelve cada vez más complicado con cada iteración, a medida que agrego pruebas adicionales, variables temporales y todo tipo de otras cosas. También puedo detectar errores tipográficos al principio del proceso (y todavía tengo muchos de esos).

Seguir ese proceso de pensamiento de principio a fin es más fácil (para mí, y probablemente para la mayoría de las personas) que leer y comprender un programa completo con muchos bucles, estructuras temporales y demás.

El otro día creé un programa con código de bolsillo para mostrarle a mi hija: una mosca zumbando por la pantalla. En el momento en que hice 4 iteraciones, la mosca zumbaba muy bien y al azar, pero el código consistía en demasiadas líneas para que un niño de 8 años entendiera de inmediato. Ella misma podría llegar fácilmente, pero para la explicación del concepto: cómo programar, las cosas deben ser simples.

Si me están enseñando un concepto, no quiero mirar el desorden, sino solo lo que importa. Una vez que entiendo eso, podré transferir lo que he aprendido a otro contexto.

Por cierto: escribir un buen código significa escribir un código comprensible y manejable, y todo debería comenzar con una comprensión adecuada del problema.

Debido a que el blackjack, las calculadoras y otros enfoques llamados “cojos” son factibles dentro del marco de tiempo de un campo de entrenamiento de codificación y por un individuo o un pequeño grupo de individuos poco organizado. también son buenos demostradores de prácticas y principios generales de codificación que deben dominarse en la microescala antes de intentarlo en la macroescala.

El desarrollo de un sitio web viable o una aplicación móvil destinada a ser distribuida al mundo puede llevar meses. Y, una vez que se implementa la primera versión, el codificador deberá mantener el código: tomar informes de errores, abordarlos e implementar actualizaciones según sea necesario hasta que el sitio web o la aplicación se venda o elimine de la web.

Además, la mayoría de los “sitios web populares” utilizan software propietario y su deconstrucción podría considerarse una violación de los derechos de propiedad intelectual, específicamente ingeniería inversa, y por lo tanto posiblemente ilegal dependiendo de la jurisdicción (los sitios que usan servicios de fondo y back-end de FOSS están, por supuesto, exentos de esto )

Cualquiera puede escribir código, pero se necesita práctica y mucho estudio para escribir código efectivo . practique y estudie más allá del alcance de un bootcamp de codificación.

¿Por qué la programación de computadoras no se enseña “al revés”, donde los estudiantes deconstruyen un sitio web popular, en lugar de aprender piezas abstractas individualmente?

Yo sé lo que quieres decir. Quería aprender español, y ellos querían que yo aprendiera a decir cosas tontas como “El hombre cocina” en lugar de analizar literatura.

Hay una razón para eso. Realmente no se puede ver cómo funcionan las cosas sin comprender las piezas de las que se componen. Saltar a “Usaron esta cosa en particular en este sitio web en particular por alguna razón desconocida” no es útil si no sabes qué es y no entiendes el problema que estaba destinado a resolver.

Por la misma razón, la física no se inicia con la teoría de la relatividad. Las estructuras de conocimiento son jerárquicas y sin el conocimiento de la base es difícil de entender las cosas más complicadas.

La idea de que los sitios web están programando me horroriza. Sí, algunos sitios web contienen programación. Pero la programación es mucho, mucho más grande que la programación web. La idea de que podría comprender la generalidad de la programación al deconstruir cualquier sitio web es fundamentalmente ridícula.