tutorial - que es python
¿Las mejores formas de enseñar a un principiante a programar? (30)
Pregunta original
Actualmente estoy comprometido en la enseñanza de mi hermano para el programa. Es un principiante total, pero muy inteligente. (Y él realmente quiere aprender). Me he dado cuenta de que algunas de nuestras sesiones se han atascado en detalles menores, y no creo que haya sido muy organizada. ( Pero las respuestas a este post han ayudado mucho. )
¿Qué puedo hacer mejor para enseñarle con eficacia? ¿Existe un orden lógico que pueda usar para ejecutar el concepto por concepto? ¿Hay complejidades que debería evitar hasta más tarde?
El idioma con el que estamos trabajando es Python , pero cualquier consejo en cualquier idioma es bienvenido.
Como ayudar
Si tiene buenos, agregue lo siguiente en su respuesta:
- Ejercicios para principiantes e ideas de proyectos
- Recursos para la enseñanza de principiantes.
- Screencasts / publicaciones de blog / libros electrónicos gratuitos
- Imprimir libros que son buenos para los principiantes.
Describa el recurso con un enlace a él para que pueda echar un vistazo. Quiero que todos sepan que definitivamente he estado usando algunas de estas ideas. Sus envíos serán agregados en esta publicación.
Recursos en línea para la enseñanza de principiantes:
- Una introducción suave a la programación usando Python
- Cómo pensar como un informático
- Alice: un programa 3d para principiantes.
- Scratch (Un sistema para desarrollar habilidades de programación)
- Cómo diseñar programas
- Estructura e interpretación de programas informáticos.
- Aprender a programar
- Robert Read es cómo ser un programador
- Microsoft XNA
- Generando la próxima generación de hackers
- COMP1917 Conferencias de informática superior de Richard Buckland (requiere iTunes)
- Sumérgete en Python
- Python Wikibook
- Proyecto Euler - problemas de muestra (principalmente matemáticos)
- pygame - una biblioteca de python fácil para crear juegos
- Inventa tus propios juegos de computadora con Python
- Fundamentos de Programación para un siguiente paso más allá de lo básico.
- Squeak por ejemplo
- Snake Wrangling For Kids (¡No es solo para niños!)
Libros de impresión recomendados para principiantes de enseñanza
¡Sólo hazlo divertido!
Sorprendentemente, Scala podría ser lo más fácil si intentas Kojo
Algo que debes tener en cuenta al enseñar a tu hermano a programar es que no confíe demasiado en ti. A menudo, cuando me encuentro ayudando a otros, empiezan a pensar en mí como el libro de respuestas a todas sus preguntas y, en lugar de experimentar para encontrar una respuesta, simplemente me preguntan. A menudo, el mejor maestro es la experimentación y cada vez que tu hermano tiene una pregunta como "¿Qué pasará si agrego 2 a una cuerda?" Deberías decirle que lo pruebe y que vea por sí mismo. También me he dado cuenta de que cuando no puedo transmitir un concepto a alguien, es útil ver un código de ejemplo en el que podemos ver cada segmento individualmente y explicarlo pieza por pieza. Como nota adicional, las personas nuevas en programación a menudo tienen problemas con la idea de la programación orientada a objetos, dirán que lo entienden cuando se lo enseñan, pero no obtendrán un concepto claro hasta que realmente lo implementen.
Creo que Python es una gran idea. Le daría algunas tareas básicas para que lo hiciera por su cuenta y le diría que cualquier callejón sin salida que golpee puede ser resuelto por un viaje a google. Para mí, al menos, resolver un problema por mi cuenta siempre lo hacía mejor que alguien que me dijera la solución.
Algunos proyectos posibles (sin ningún orden en particular):
-
Simulador de tirón de moneda. Permita que el usuario ingrese un número deseado de intentos para el lanzamiento de la moneda. Ejecútelo y visualice los resultados junto con el porcentaje para cabezas o colas.
-
Haga un convertidor de temperatura con un menú que tome la entrada del usuario para elegir qué tipo de conversión desea hacer. Después de elegir la conversión y hacerlo, debería volver al menú principal.
Aquí hay un ejemplo de un convertidor extendido con la misma idea: http://pastebin.org/6541
-
Cree un programa que tome una entrada numérica y muestre el grado de letra al que se traduciría. Terminará evaluando la entrada en contra de las declaraciones if y elif para encontrar dónde encaja.
-
Haga un cuestionario simple que pase por varias opciones múltiples o complete las preguntas en blanco. Al final se mostrará cómo lo hizo el usuario. Él puede escoger cualquier pregunta que quiera.
-
Toma una entrada de un número (probablemente grande) de centavos y conviértelo en denominaciones más grandes. Por ejemplo, 149 centavos = 1 dólar, 1 trimestre, 2 monedas de diez centavos y 4 centavos.
-
Crear un gestor de listas simple. Poder agregar / eliminar listas y agregar / eliminar entradas en esas listas. Aquí hay un ejemplo de un administrador de listas navideñas: http://pastebin.org/6543
-
Cree un programa que se compile y luego pruebe si los números ingresados forman un cuadrado mágico (con una matriz 2D). Aquí hay un código de ejemplo, pero realmente debería imprimir el cuadrado en cada paso para mostrar dónde está el usuario en términos de buliding el cuadrado: http://pastebin.org/6544
También sugeriría hacer algunas cosas con xTurtle u otro módulo de gráficos para mezclar las cosas y evitar que se vuelva aburrido. Por supuesto, esto es una práctica de programación y no un script para el que mucha gente realmente estaría usando python, pero los ejemplos que di son muy directamente tomados de cuando estaba aprendiendo a través de python y funcionó muy bien para mí. ¡Buena suerte!
Creo que una vez que tenga lo básico (variables, bucles, etc.), deberías intentar ayudarlo a encontrar algo específico en el que esté interesado y ayudarlo a aprender las necesidades para que esto suceda. Sé que estoy mucho más inclinado y motivado a hacer algo si me interesa. Además, asegúrate de dejarlo luchar por algunos de los problemas más difíciles, nada es más satisfactorio que el momento en que lo resuelves por tu cuenta.
Después de leer algunos libros electrónicos gratuitos, encontré que el mejor libro para aprender a programar fue Head First Programming, publicado por O''Reily Press. Utiliza Python como lenguaje y le brinda programas para trabajar desde el principio. Todos ellos son más interesantes que ''Hola Mundo''. Vale la pena el dinero que gasté en él, y como ha estado fuera durante un tiempo, es posible que pueda encontrar una copia usada más barata en Ebay o Amazon.
En primer lugar, comience como todos los demás: con un programa Hello World . Es simple, y les da una sensación básica para el diseño de un programa. Intente y recuerde cuándo fue la primera programación y cuán difíciles fueron algunos de los conceptos: comience de manera simple.
Después de Hello World, continúe con la creación de algunas variables básicas, aritmética, luego en la lógica booleana y las declaraciones if / else. Si tienes uno de tus viejos libros de programación, revisa algunos de los primeros ejemplos y pídele que los lea. Simplemente no intentes introducir demasiado de una vez, o será abrumador y confuso.
Este es un libro fantástico que mis hermanitos solían aprender:
http://pine.fm/LearnToProgram/
Por supuesto, lo más importante es comenzar INMEDIATAMENTE un programa real y útil de algún tipo después de terminar el libro.
La clave es que la persona en cuestión debe tener algún problema que quiera resolver. Si no tienes un programa que quieras escribir (y algo sensato y bien definido, no "¡Quiero escribir el próximo Quake!") No puedes aprender a programar porque no tienes nada que te motive . Quiero decir, podrías leer un libro y tener una comprensión aproximada de la sintaxis y la semántica de un idioma, pero hasta que no tengas un programa que quieras escribir nunca entenderás la ortiga.
Si ese ímpetu existe, entonces todo lo demás son solo detalles menores.
Le dejé escribir toneladas de código. Deje que él maneje todo lo que ustedes hacen, y simplemente esté disponible para responder preguntas.
Lo creas o no, después de unos meses de escritos toneladas de código de mierda, comenzará a tener la idea y comenzará a escribir mejores programas. En ese momento, puede quedar atascado en los detalles (memoria, etc.) y también hablar sobre los principios generales de diseño.
He oído que lo que separa a los grandes artistas de los mediocres, es que cada vez que practican, mejoran en algo, no importa cuán pequeño sea. Deja que tu hermano practique, y él mejorará cada vez que se siente en el teclado.
Edición: [Justin Standard]
Esteban, esto me recuerda a una reciente publicación de horror de codificación , y creo que tienes razón. Pero creo que todavía vale la pena encontrar métodos para guiar su práctica. Sin lugar a dudas, quiero que escriba todo el código que sepa hacer. Esa es una razón por la que estoy pidiendo ejemplos de proyectos.
Me enseñaron a aprender a resolver problemas de una manera independiente del lenguaje utilizando diagramas de flujo y PDL (Lenguaje de diseño de programas). Después de un par de semanas, aprendí a convertir el PDL que había escrito a un idioma. Me alegro de haber aprendido así porque he pasado la mayor parte de mis años programando, resolviendo problemas sin estar atado a un idioma. El lenguaje que utilizo siempre ha sido un detalle de implementación y no parte del diseño.
Tener que resolver el problema dividiéndolo en sus pasos básicos es una habilidad clave. Creo que es una de las cosas que separa a aquellos que pueden programar de aquellos que no pueden.
En cuanto a cómo aborda el orden de los conceptos de un lenguaje, creo que la forma más fácil es decidir que es tener un proyecto en mente y abordar los conceptos según sea necesario. Esto le permite aplicarlos según sea necesario en algo que le interesa hacer. Al aprender un idioma, es bueno tener en mente varios proyectos simples y algunos con complejidad progresiva. Decidir sobre eso le ayudará a trazar los conceptos que se necesitan y su orden.
No sé si alguien ha mencionado esto aquí todavía, pero es posible que desees revisar Python the Hard Way de Zed Shaw
Espero que esto ayude
Paquete Python VPython - Programación 3D para Mortal Ordinario ( video tutorial ).
from visual import *
floor = box (pos=(0,0,0), length=4, height=0.5, width=4, color=color.blue)
ball = sphere (pos=(0,4,0), radius=1, color=color.red)
ball.velocity = vector(0,-1,0)
dt = 0.01
while 1:
rate (100)
ball.pos = ball.pos + ball.velocity*dt
if ball.y < ball.radius:
ball.velocity.y = -ball.velocity.y
else:
ball.velocity.y = ball.velocity.y - 9.8*dt
Podrías intentar usar a Alice . Es un programa 3D diseñado para su uso en clases de programación introductoria.
Los dos mayores obstáculos para los nuevos programadores son a menudo:
- errores de sintaxis
- Motivación (escribir algo significativo y divertido en lugar de artificial).
Alice utiliza una interfaz de arrastrar y soltar para construir programas, evitando la posibilidad de errores de sintaxis. Alice te permite construir mundos en 3D y tener tu código (simple) personajes y animación en 3D, lo que suele ser mucho más interesante que implementar listas enlazadas.
Los programadores experimentados pueden mirar a Alice como un juguete y burlarse de arrastrar y soltar líneas de código, pero la research muestra que este enfoque funciona.
Descargo de responsabilidad: trabajé en Alice.
Realmente depende del estilo de aprendizaje de tu hermano. Muchas personas aprenden más rápido ensuciándose las manos y simplemente adentrándose en ellas, cristalizando los conceptos y el panorama general a medida que avanzan y desarrollan sus conocimientos.
Yo, prefiero comenzar con el panorama general y profundizar en el meollo de la cuestión. Lo primero que quería saber era cómo encaja todo, luego todo ese desordenado orientado a objetos, luego sobre clases e instancias y demás. Me gusta saber los conceptos subyacentes y un poco de teoría antes de aprender la sintaxis. Tuve un poco de ventaja porque escribí algunos juegos en BASIC hace 20 años, pero no mucho desde entonces.
Tal vez sea útil seguir un proceso de producción comenzando con una declaración de misión general, luego un plan y / o diagrama de flujo, luego elaborar un pseudo código (inclinándose hacia la sintaxis que finalmente utilizará) antes de escribir el código.
La regla de oro aquí es evaluar el estilo de inclinación de su estudiante.
Recomiendo Logo (también conocido como la tortuga) para entender los conceptos básicos. Proporciona una buena caja de arena con retroalimentación gráfica inmediata, y puede demostrar bucles, variables, funciones, condicionales, etc. Esta página proporciona un excelente tutorial.
Después de Logo, muévete a Python o Ruby. Recomiendo Python, ya que está basado en ABC, que fue inventado con el propósito de enseñar programación.
Al enseñar programación, debo respaldar la sugerencia de EHaskins de proyectos simples y luego proyectos complejos. La mejor manera de aprender es comenzar con un resultado definido y un hito medible. Mantiene las lecciones enfocadas, le permite al estudiante desarrollar habilidades y luego desarrollar esas habilidades, y le da al estudiante algo para presumir a sus amigos. No subestime el poder de tener algo que mostrar para el trabajo de uno.
Teóricamente, puedes seguir con Python, ya que Python puede hacer casi cualquier cosa. Es un buen vehículo para enseñar programación orientada a objetos y (la mayoría) de algoritmos. Puede ejecutar Python en modo interactivo como una línea de comandos para tener una idea de cómo funciona, o ejecutar scripts completos a la vez. Puede ejecutar sus scripts interpretados sobre la marcha, o compilarlos en binarios. Hay miles de módulos para ampliar la funcionalidad. Puede hacer una calculadora gráfica como la que viene con Windows, o puede hacer un cliente IRC, o cualquier otra cosa.
XKCD describe un poco mejor el poder de Python:
Puedes cambiarte a C # o Java después de eso, aunque no ofrecen mucho que Python no tiene ya. El beneficio de estos es que utilizan sintaxis de estilo C, que utilizan muchos idiomas (¿me atrevo a decir más?). Aún no tiene que preocuparse por la administración de la memoria, pero puede acostumbrarse a tener un poco más de libertad y menos manejo del intérprete de idiomas. Python aplica espacios en blanco y sangría, lo cual es bueno la mayoría del tiempo pero no siempre. C # y Java le permiten administrar su propio espacio en blanco mientras se mantiene fuertemente tipado.
A partir de ahí, el estándar es C o C ++. La libertad en estos idiomas es casi existencial. Ahora está a cargo de su propia gestión de la memoria. No hay recolección de basura para ayudarte. Aquí es donde enseña los algoritmos realmente avanzados (como mergesort y quicksort). Aquí es donde aprendes por qué "falla de segmentación" es una maldición. Aquí es donde se descarga el código fuente del kernel de Linux y se observa el Abismo. Comience escribiendo un búfer circular y una pila para la manipulación de cadenas. Luego, sigue tu camino.
Robert Read escribió una guía útil, Cómo ser un programador , que cubre una amplia área de problemas de programación que un principiante podría encontrar útil.
Si a tu hermano le gustan los rompecabezas, te recomendaría Python Challenge . No lo usaría como una herramienta de enseñanza formal en un tutorial 1 a 1, pero es algo que puede hacer cuando no están juntos para desafiarse y divertirse.
Si desea enseñar los conceptos básicos de la programación, sin ser específico del idioma, existe una aplicación llamada Scratch que se creó en MIT. Está diseñado para ayudar a las personas a desarrollar habilidades de programación. A medida que los usuarios crean proyectos de Scratch, aprenden a crear condiciones, bucles, etc. También hay una comunidad de proyectos de scratch, desde donde se pueden descargar los proyectos, de esta manera puede explorar los programas de otras personas y ver cómo se crearon.
Si está interesado, ¿no son los detalles menores las partes buenas? Usando python, ya has cortado la GUI para que la confusión se haya ido. ¿Por qué no elegir un proyecto, un juego o algo, y ponerlo en práctica? El clásico juego de adivinación de números hi-lo se puede implementar simplemente desde la línea de comandos en 20-30 líneas de código (según el idioma, por supuesto) y le brinda variables, condiciones, bucles y entradas de usuario.
Si su hermano tiene acceso a iTunes, puede descargar conferencias de video de un curso introductorio de informática impartido por Richard Buckland en la Universidad de Nueva Gales del Sur. Es un instructor atractivo y cubre los fundamentos de la computación y el lenguaje C. Si no es nada más, dígale a su hermano que reproduzca los videos en segundo plano y algunos conceptos podrían penetrar a través de la ósmosis. :)
COMP1917 Higher Computing - 2008 Session 1 http://deimos3.apple.com/WebObjects/Core.woa/Browse/unsw.edu.au.1504975442.01504975444
Si el enlace no funciona, aquí hay una ruta:
Inicio -> iTunes U -> Ingeniería -> COMP1917 Higher Computing - 2008 Session 1
Solía enseñar programación y tu hermano tiene una ventaja principal sobre la mayoría de mis alumnos que quiere aprender :)
Si decide optar por C, un amigo tiene un sitio que tiene el tipo de programas que las aplicaciones de generaciones anteriores recuerdan como entradas de tipo básicas. El más complejo de ellos usa ncurses que de alguna manera niegan su uso como ayuda de enseñanza, pero algunos de ellos son pequeñas cosas y puedes aprender mucho sin que te enseñen a hacerlo.
Personalmente creo que Python y Ruby serían excelentes primeros idiomas.
EDITAR: la lista de tareas de programación para principiantes que aparecen durante la noche puede ser justo lo que está buscando.
También recomendaría ver algunos screencasts: generalmente se crean en el contexto de una tecnología específica, no de un idioma, aunque si se muestra el código Python, eso funcionará :). El punto es que están creados por algunos buenos programadores y ver cómo un buen programa de programadores es bueno. Tú y tu hermano podrían hacer también alguna programación entre pares, eso podría ser una idea aún mejor. Simplemente no olvides explicar POR QUÉ haces algo de esta manera y no de esa manera. Creo que la mejor manera de aprender a programar es a partir de buenos ejemplos y tratar de no ver los malos.
Tuve que trabajar con varios programadores principiantes (nunca escribí una línea de código), y haré un taller después de la escuela con estudiantes de secundaria este otoño. Esto es lo más cercano que tengo a la documentación. Sigue siendo un trabajo en progreso, pero espero que ayude.
1) FizzBuzz. Comience con los programas de línea de comandos. Puede escribir algunos juegos o herramientas divertidos muy rápidamente, y aprende todas las funciones de lenguaje muy rápidamente sin tener que aprender primero las herramientas GUI. Estas primeras aplicaciones deben ser lo suficientemente simples como para que no necesite utilizar ninguna herramienta de depuración real para que funcionen.
Si nada más cosas como FizzBuzz son buenos proyectos. Sus primeras aplicaciones no deberían tener que lidiar con bases de datos, sistema de archivos, configuración, etc. Estos son conceptos que simplemente confunden a la mayoría de las personas, y cuando está aprendiendo la sintaxis y las características básicas del marco, realmente no necesita más complejidad.
Algunos proyectos:
- Hola Mundo!
- Tome el año de mi nacimiento y calcule mi edad (solo (ahora - entonces) sin correcciones mensuales). (Matemáticas simples, entrada, salida)
- Pida una dirección (arriba, abajo, izquierda, derecha), luego diga al usuario su destino (caer en un agujero, encontrar una torta, etc.). (Lógica booleana)
- FizzBuzz, pero cuenta una vez cada segundo. (Bucles, temporizadores, y más lógica)
- Dependiendo de su edad, a algunos les gusta mucho una aplicación que llama a los usuarios un insulto aleatorio en algún intervalo. (Bucles, matrices, temporizadores y aleatorios si hace el intervalo aleatorio)
2) Proyecto simple Una vez que tengan un buen conocimiento de las características del lenguaje, puede comenzar un proyecto (los juegos simples y divertidos funcionan bien). Debe intentar que el primer proyecto se complete dentro de 6-12 horas. No dediques tiempo a la arquitectura temprana. Deje que lo diseñen incluso si apesta. Si se desmorona, hable sobre lo que pasó y por qué falló, luego elija otro tema y comience de nuevo.
Aquí es donde comienza a introducir las capacidades de depuración de sus herramientas. Incluso si puede ver el problema leyendo el código, debe enseñarles cómo usar las herramientas y luego mostrarles cómo podría verlo. Eso tiene el doble propósito de enseñar las herramientas de depuración y de cómo identificar los errores sin herramientas.
Una vez, o si el proyecto se vuelve funcional, puede usarlo para introducir herramientas de refactorización. Es bueno si luego puede expandir el proyecto con algunas características simples que nunca planeó. Por lo general, esto significa refactorización y depuración significativa, ya que muy pocas personas escriben un código medio decente la primera vez.
Algunos proyectos:
- Juego del ahorcado
- Experimentando con robótica ( Vex y Mindstorms son opciones)
3) Proyecto real Comience un proyecto real que puede tomar algún tiempo. Use el control de fuente adecuado y haga un punto para tener un horario. Ejecute este proyecto como un proyecto real, si nada más, es una buena experiencia tener que lidiar con las herramientas.
Obviamente necesitas ajustar esto para cada persona. Lo más importante que he encontrado es hacer que incluso las primeras aplicaciones simples se apliquen a lo que a la persona le interesa.
Algunos proyectos:
- Tetris
- Motor de blog basado en archivos de texto.
- Trabajos de robótica más avanzados.
Un buen curso de python es A Gentle Introduction to Programming Using Python de MIT. Todo es gratis en línea, y no tienes que ser un superestrella del MIT para entenderlo.
Editar [ Justin Standard ]
Este curso utiliza este libro en línea gratuito: Cómo pensar como un científico informático
Definitivamente lo encuentro bastante útil.
hay un wikibook que es bastante bueno para aprender python .
No sé cómo son los wikibooks para otros idiomas, pero personalmente aprendí python del wikibook como era en febrero de 2007
ps: si no estás familiarizado con los wikibooks , es básicamente la versión en wikipedia de la creación de libros. Es un poco difícil de describir, pero si echa un vistazo a algunos de los libros de allí verá cómo funciona.
http://tryruby.hobix.com/">Pruebe Ruby (en su navegador)
Comience con gráficos de tortuga en Python.
Yo usaría los gráficos de tortuga que vienen de serie con Python. Es visual, simple y podría usar este entorno para introducir muchos conceptos de programación como iteración y llamadas a procedimientos antes de adentrarse demasiado en la sintaxis. Considere la siguiente sesión interactiva en python:
>>> from turtle import *
>>> setup()
>>> title("turtle test")
>>> clear()
>>>
>>> #DRAW A SQUARE
>>> down() #pen down
>>> forward(50) #move forward 50 units
>>> right(90) #turn right 90 degrees
>>> forward(50)
>>> right(90)
>>> forward(50)
>>> right(90)
>>> forward(50)
>>>
>>> #INTRODUCE ITERATION TO SIMPLIFY SQUARE CODE
>>> clear()
>>> for i in range(4):
forward(50)
right(90)
>>>
>>> #INTRODUCE PROCEDURES
>>> def square(length):
down()
for i in range(4):
forward(length)
right(90)
>>>
>>> #HAVE STUDENTS PREDICT WHAT THIS WILL DRAW
>>> for i in range(50):
up()
left(90)
forward(25)
square(i)
>>>
>>> #NOW HAVE THE STUDENTS WRITE CODE TO DRAW
>>> #A SQUARE ''TUNNEL'' (I.E. CONCENTRIC SQUARES
>>> #GETTING SMALLER AND SMALLER).
>>>
>>> #AFTER THAT, MAKE THE TUNNEL ROTATE BY HAVING
>>> #EACH SUCCESSIVE SQUARE TILTED
Al tratar de cumplir las dos últimas tareas, tendrán muchos intentos fallidos, pero los fracasos serán visualmente interesantes y aprenderán rápidamente a medida que intentan descubrir por qué no generó lo que esperaban.