¿Cuáles son algunas buenas tareas para un curso introductorio para llegar a los estudiantes de hoy? [cerrado]

25

Periódicamente enseño un curso de introducción a la programación usando Java . Quiero dar a mis alumnos algunas tareas interesantes con las que puedan relacionarse o encontrar interesantes . Por lo menos, quiero tareas que tengan sentido y tengan una cohesión interna (por ejemplo, algunos ejercicios de programación muy malos parecen inventados solo para que tenga que usar la construcción de programación más reciente cubierta).

Para darle una idea del alcance, esto es lo que se está cubriendo :

  • Las asignaciones deben estar en Java, se puede usar una biblioteca externa, pero debería ser una API simple y no un marco completo
  • Variables, primitivas y cadenas
  • Consola de entrada y salida
  • if` for`while
  • Operadores aritméticos y lógicos.
  • Gráficos simples con dibujo de líneas y formas.
  • Métodos estáticos
  • Matrices unidimensionales

Los estudiantes no entrarán en temas avanzados (por ejemplo, sin recursión, sin énfasis en la herencia). Por lo tanto, estoy no en busca de proyectos complejos: "Haga que escriban un compilador C lo hice cuando tenía 5 y que era la única manera que he aprendido."

Si tiene ideas que son más avanzadas que el alcance, publíquelas en la pregunta "Desafiante" vinculada a continuación, y no en esta.

En cambio, lo que estoy buscando son ideas interesantes que se puedan lograr en un programa corto. Por ejemplo:

  • Los estudiantes pueden escribir una versión de consola del generador "Star Wars Name" . Esto es efectivamente leer cadenas y usar substring, pero creo que es divertido. Una variación similar sería un programa " Mad Libs ". Utilicé este hace cinco años, y tal vez ya está "rancio".

  • Usando algunos trigonométricos que se les proporcionan, los estudiantes pueden dibujar polígonos regulares y crear interesantes formas en espiral.

  • Tampoco está fuera de discusión usar una clase de animación simple con la mayor parte del código que se les proporciona. Y si conoces un servicio de Twitter o Facebook al que se pueda acceder con una API simple, estaría muy interesado en saberlo.

Tenga en cuenta que esta pregunta es diferente de la pregunta "Preguntas desafiantes de Java para principiantes ". No busco desafíos per se, solo interesantes. Creo que si los estudiantes trabajan en algo donde puedan responder fácilmente "¿por qué alguien querría programar eso?" entonces aprenderán mejor.

Incluso problemas simples como calcular millas por galón pueden ser buenos. Aunque, si hay una manera de actualizarlo para que sea más relevante, mucho mejor. Si tiene un ejercicio de otro lugar (un libro o un sitio web), cite la fuente.

Para ayudarlo a pensar en el estudiante de primer año típico de hoy, consulte la lista de mentalidad de Beloit , para ver muchos ejemplos que seguramente lo harán sentir viejo.

Macneil
fuente
Solo por curiosidad, ¿a qué nivel de estudiantes estás enseñando que crees que temas como la recursividad y el diseño orientado a objetos son demasiado avanzados? Estos temas fueron cubiertos en profundidad en mi primer semestre, la clase de programación introductoria. Creo que estás perjudicando a tus alumnos si intentas mantener el curso demasiado simplista.
Mayra
@Mayra: Esto es para el curso de introducción a la programación, el primer curso para estudiantes de CS. Estoy buscando problemas emocionantes para que los estudiantes usen en las primeras 5 semanas (o incluso el primer día), y no solo al final. Es un verdadero desafío trabajar en estos requisitos (y créanme que algunos problemas están fuera de mi control), por lo tanto, les pido ayuda a ustedes.
Macneil

Respuestas:

9

Dadas las limitaciones, sugeriría implementar una versión de Hangman. Permitiría a los estudiantes demostrar todas las técnicas que les está presentando, sin ser demasiado complejo.

También se puede utilizar como un proyecto en desarrollo a medida que avanza el curso. por ejemplo, una vez que haya cubierto las cadenas y las variables, comienza como una versión de texto

p.ej

You have 10 guesses left.      * * * E * * T
What is your next guess?

a continuación, introduzca bucles para eliminar el elemento de cortar y pegar del código a medida que las 10 conjeturas cuentan hacia atrás ... acumulando hasta tener gráficos de líneas y que la persona del palo sea colgada / guardada al final del curso de 5 semanas.

Como la mayoría de las personas que tienen experiencia en reclutar y entrevistar a programadores, realmente me da vergüenza que este nivel de matrícula sea necesario en la universidad, pero lamentablemente, probablemente seguirá siendo necesario hasta que las escuelas traten la programación como un tema serio a la par con matemáticas o ciencias

Michael Shaw
fuente
¡Gran idea! Creo que voy a usar este. :-) Por cierto, ¿qué quieres decir con "nivel de matrícula"? Como en los costos?
Macneil
Es más una queja sobre la falta de matrícula de programación antes de la universidad. Imagínese llegar a la Universidad para hacer química y pasar el primer término informando sobre átomos, moléculas y electrones. 3 años es demasiado poco tiempo para entender la informática.
Michael Shaw
Realmente me gusta esta idea, sin necesidad de gráficos complejos, se puede hacer en una línea de comandos razonablemente bien. Es divertido y no es otro solucionador de problemas matemáticos.
Joppe
7

Parece que un juego de aventura de texto podría ser una tarea excelente en algún lugar a mediados del semestre. Tuve una clase que nos hizo jugar Colossal Cave Adventure y luego crear nuestro propio juego. Me enseñó muchas de las construcciones básicas desde el principio, y fue muy divertido hacer que todos se metieran en ello.

Morgan Herlocker
fuente
2
Suena divertido, pero que sea pequeño.
7

¿Qué tal usar un problema o dos de http://projecteuler.net/? Algunos de estos son bastante interesantes y uno podría ver el beneficio de escribir un programa para resolverlos. Son lo suficientemente pequeños como para que se puedan hacer varios como tareas. Otro que me gusta usar es encontrar $ 1.00 palabras. Cada letra en el abecedario vale su posición en centavos, es decir, a = 1, b = 2. ¿Cuántas palabras de $ 1.00 dólares puedes encontrar? Esto podría involucrar E / S de archivos (lectura en un diccionario), matrices, bucles, etc.

Gratzy
fuente
1
+1 para el Proyecto Euler. Muy genial. Aunque algunos de los problemas son demasiado avanzados, hay muchos que no lo son.
Macneil
Me encanta el Proyecto Euler, pero no estoy seguro de si hubiera sido divertido si tuviera que hacer los ejercicios en la universidad.
Oliver Weiler el
No, no todos serían divertidos, pero algunos creo que somos buenas opciones
Gratzy
6
  • Implementa un juego de Monopoly. El monopolio tiene una secuencia obvia y se presta a la división en funciones con mucha facilidad. También solo requiere una matriz unidimensional y algunas clases básicas. La lógica es lo suficientemente simple como para que los estudiantes piensen más en "cómo" que en "qué", y da como resultado algo que se puede demostrar a los demás.

  • Dales un archivo encriptado que haya sido encriptado con alguna regla reversible y pídeles que escriban un decodificador (aunque sea bastante simple). Esto ofrece un incentivo adicional para resolverlo debido al misterio sobre el contenido del mensaje.

  • No sé por qué solo cubres matrices unidimensionales y no matrices (realmente no son tan diferentes), pero si estás dispuesto a incluir eso en el programa de Juego de vida de Jon Conway también es relativamente fácil y resulta en algo divertido.

  • Un juego como el ajedrez requiere algo de reflexión, pero aún está dentro de los límites de lo que un principiante puede hacer con una herencia mínima (las piezas específicas se heredan de una Pieza de clase general, y el tablero contiene objetos de tipo Pieza) y matrices 2D (puede elegir simplifíquelo al no requerir la implementación de cosas difíciles como la detección de stelmate o la incapacidad de enrocar si las piezas enemigas amenazan el camino del enroque).

EpsilonVector
fuente
+1 para la sugerencia de juego Monopoly. En cuanto a las matrices 2D, estoy totalmente de acuerdo en que pueden conducir a tareas muy interesantes. Sin embargo, existen limitaciones que hacen que las matrices 2D no sean viables (por ejemplo, el libro de texto ya está arreglado, y mil millones de otros problemas de política de la facultad con los que no te aburriré, ni te aburriré con mi opinión personal sobre estos asuntos fuera de mi control).
Macneil
Ah, tuvimos que crear un juego de monopolio en la escuela. Y un interruptor de cifrado.
Carra
+1 para el monopolio. Una vez que los estudiantes lo hayan codificado, pídales que generen las probabilidades de aterrizar en las diferentes propiedades. Ese conocimiento realmente ayuda estratégicamente.
joshdick
4

Creamos bastantes proyectos con solo E / S, funciones y operadores condicionales en la escuela. Todo hecho antes de aprender sobre la programación orientada a objetos. Estos proyectos avanzaron lentamente para ser cada vez más difíciles. Basta decir que las 4 horas que tuvimos cada semana no fueron suficientes para el final del año.

Todos estos proyectos se realizaron solo con funciones y E / S:

  • Un juego que aprende. Toma una cantidad de palos, la PC toma una cantidad de palos. Repetir. El último que sostiene un palo pierde. Tuvimos que crear un programa simple de autoaprendizaje que mejoró después de cada juego. Buen ejemplo para aprender matrices 2D.

  • Un descifrador de códigos. Conoces el cifrado César, elige una letra y agrega el valor de la letra a cada letra de tu palabra. Por ejemplo, clave = 'a' y la palabra = "secreto". Esto se convertiría en "tfdsfq". Se puede hacer leyendo el archivo y luego creando una tabla de frecuencias para cada letra. También lees en una Biblia en inglés. Luego, simplemente puede ver que la letra más utilizada en el alfabeto inglés es una 'e' y resolverla. Reto agregado: use una tecla como 'ab', que fue nuestra tarea. Buen ejercicio para entender las E / S.

  • Un fabricante de códigos de barras. Este programa fue un ejercicio para llamar a una biblioteca externa. Obtuviste un código y tuviste que generar una imagen con el código de barras. Se usó una biblioteca externa para generar la imagen.

  • Un algoritmo genético para resolver el problema de los vendedores ambulantes. Este fue un proyecto más avanzado para 2 o 3 personas. Comienza con una ruta aleatoria y esta ruta mejora todo el tiempo hasta que tenga una "buena ruta". Bonificación: crea un mapa con la ruta.

  • Un programa de compresión de trabajo lzw . Este fue el proyecto final de 4 personas. Los parámetros fueron bastante simples. "Zip file.txt file.zip" o algo similar. Proyecto divertido pero entender el algoritmo lzw tomó un tiempo.

Carra
fuente
Muy interesante ... ¿A qué escuela fuiste? ¿Fue todo esto en tu primer año?
Macneil
Fue un curso para calentar personas para la especialización en ingeniería informática. Aún podría cambiar su especialización después de ese año. Los estudiantes conocían bucles básicos, algunas entradas / salidas a la pantalla / archivos y funciones.
Carra
3

Una calculadora sería un buen proyecto para aprender operaciones aritméticas. Puede convertirlo en una simple aplicación de consola basada en menús o una GUI. Cuatro funciones (+, -, *, /) para comenzar, con puntos adicionales para cosas más complejas como la raíz cuadrada, etc.

Para el manejo de cadenas, sugeriría algunos problemas de validación. Me vienen a la mente las direcciones de correo electrónico: dejarlas sin marcar puede provocar agujeros de inyección SQL u otras cosas, y son relativamente fáciles de validar. Para agregar, tal vez tenga un programa que pueda tomar nombres, apellidos y apellidos, y juntarlos con espacios, y también tomar un nombre completo y analizarlo en cada componente. El primero se usa más que el segundo en la vida real, pero no he podido pensar en otro escenario de análisis que sea lo suficientemente simple.

Para demostrar métodos estáticos, puede asignar un problema de búsqueda de correo electrónico. Tenga un archivo de nombres y correos electrónicos, y el constructor estático podría poner los nombres / correos electrónicos en una lista, con un método estático para encontrar el correo electrónico para un nombre dado.

Espero que estos te den algunas ideas! Buena suerte con tu clase.

Michael K
fuente
1
+1 ¡Gracias! Este es exactamente el tipo de respuesta que estoy buscando.
Macneil
Los juegos son más divertidos que las calculadoras.
3

Una cosa muy interesante y genial para una tarea es escribir una implementación de Conway's Game of Life en 2D. Se asigna muy bien a estructuras de datos de matriz básicas, es divertido y bastante fácil de hacer, pero aún requiere algo de reflexión. Puede abrir algo de curiosidad y experimentación también (AI).

Los estudiantes avanzados pueden escribir una versión en 3D para obtener puntos extra.

Martin Wickman
fuente
3

Me gustaría iterar en un generador de números primos.

Asignaciones

  1. Imprime primos del 1 al 100.
  2. Imprima primos de input1 a input2.
  3. Registre e imprima datos de rendimiento de primera generación.
  4. Gráfico de datos de rendimiento de primera generación.
  5. Iterar en la optimización del algoritmo del generador de números primos.
dacracot
fuente
2

Estoy usando la Biblioteca ACM para ayudar a los estudiantes de introducción a hacer gráficos y juegos simples. Hemos podido hacer juegos básicos basados ​​en clics para dos jugadores con nada más que las habilidades que describiste. Esta semana están haciendo el juego Fox and Hounds .

He tratado de mantenerme alejado de la E / S de la consola el mayor tiempo posible. Es un concepto extraño para muchos estudiantes en estos días, ya que todos han crecido con GUI. Así que me concentro en MVC, obteniendo el modelo correcto y agregando la GUI solo después de que hayan probado su modelo. Las pruebas se realizan a través de pruebas unitarias automatizadas y Code Pad en BlueJ . No public static void main()es necesario, nunca.

Barry Brown
fuente
interesante. ¿Quizás escribirías tus experiencias en un artículo o una entrada de blog?
2

Enseñé introducción en el siglo pasado, y fue BÁSICO, pero como tú quería que los estudiantes emprendieran un proyecto divertido de su propia creación. Entonces sugerí un montón de posibilidades:

  • Juego de aventura simple, como Wumpus
  • Simulación deportiva (solo texto, gráficos para ambiciosos) para béisbol o lo que sea
  • La ciencia, como simular la evolución genética.
  • Deporte / ciencia, como las carreras de veleros
  • Finanzas, como tener su propio banco para las personas de su hogar o inversiones
  • Música o juegos gráficos simples.

... o lo que los estudiantes pensaran. Ellos venían a mí y me decían "¿qué tal un programa para hacer XYZ?" y yo siempre decía "Genial", y luego los guiaba un poco para que no fuera demasiado complicado.

Por lo general, sus proyectos terminaron siendo unos cientos de líneas de código, y siempre lo disfrutaron.

PD: di esta tarea después de que los estudiantes eran competentes con las estructuras básicas de control, E / S, matrices y archivos secuenciales. Era un proyecto a término, una parte importante de su calificación, y tenía asignaciones de hitos intermedios, como un esquema a mitad de camino, por lo que no trataron de hacerlo todo al final y chocaron contra una pared. Quería incluirlos en esto lo más temprano posible en el semestre, cuando tenían suficientes habilidades para comenzar, generalmente alrededor de la semana 6 u 8.

Mike Dunlavey
fuente
1

Un maestro escribió un programa para el que tú escribiste módulos. Básicamente, era un juego y había que escribir un algo para resolverlo, todo estaba allí para que fuera gráfico y bonito y funcionara bien. Tal vez deberías escribir tu propio marco de juego y darles herramientas básicas que son versiones simplificadas de cosas geniales que pueden hacer más tarde fuera de la caja en la que las has puesto.

Incógnito
fuente
1

En mi curso de introducción, me quedaron tres proyectos

Escribe un programa para mostrar una pintura aleatoria de Mondrian
Escribe la primera parte de un juego BrickBreaker, haz que la pelota rebote dentro de un área determinada
Escribe un juego de aventura basado en texto

Desde mi clase de algoritmos
Implementar un triángulo de Serpinski

Estos cuatro proyectos me dieron una gran comprensión del procesamiento de cadenas, la aleatorización, los gráficos, la recursividad y la animación.

Jason
fuente
1

¿Están todos los estudiantes en la clase CS mayores? Mi conjetura no sería. Se me ocurrirían tareas que se adapten a los mayores en la clase.

Ejemplos:

  • Los estudiantes de arte podrían escribir un programa que tome las dimensiones de una pieza de lienzo y un marco para calcular la cantidad de lienzo que no estaría disponible para pintar (debido a envolver y engrapar el lienzo alrededor del marco).

  • Los estudiantes de Econ pueden calcular el interés compuesto en un artículo.

  • Los estudiantes de matemáticas podrían elegir problemas del Proyecto Euler.

Kavet Kerek
fuente
1
La clase es para mayores y no mayores. Muchos están en biología.
Macneil
Interesante. Idea: encontrar una imagen de organismos unicelulares nadando en el agua. Convierta la imagen a B / N. Escribe un programa para contar la cantidad de organismos en el agua. Con ello se abre todo tipo de interesantes temas de discusión: la detección de bordes, la diferenciación entre el agua y no agua, eliminación de polvo, etc.
Barry Brown
bueno para bio, lo obvio que me viene a la mente son los autómatas celulares. Puede obtener un botín en bioquest.org para obtener algunas ideas.
Kavet Kerek
1

En la escuela secundaria, tomé una clase de programación introductoria y usamos Karel J. Robot . Proporciona una interfaz gráfica de usuario para ver su robot, y tiene un conjunto muy básico de sensores y métodos de movimiento que debe extender para que haga cosas interesantes. Creo que es bueno porque los robots son fáciles de entender para las personas que aún no han comprendido la diferencia entre el software.

También hay Processing , que acabo de descubrir, que fue diseñado originalmente para enseñar programación, y también está en Java.

Nick Donohue
fuente
0

Voy a ser el disidente aquí. Creo que debería darles problemas de tipo de negocio válidos para resolver no playtoys. Si no son lo suficientemente serios como para estar interesados ​​y motivados con el tipo de trabajo que realmente estarán haciendo como profesionales, prefiero que los rechacen en el curso de introducción. El trabajo real no se trata de hacer cosas geniales, se trata de satisfacer las necesidades del cliente. También he visto a muchas personas que no pueden dar el salto entre lo que aprenden en un juego y usar las mismas técnicas en la programación de negocios.

Cada desarrollador senior y gerente de contratación que conozco está disgustado con la calidad de los recién graduados. Intenta concentrarte en lo que necesitan para aprender a trabajar en el mundo real y olvídate de hacerlo divertido.

HLGEM
fuente
Creo que muchos estudiantes encontrarían interesante un problema de negocios. Si puede sugerir algo concreto y mejorar su respuesta, sería útil. Estoy buscando detalles.
Macneil
1
Debería ser un problema que no pueden hacer (fácilmente) en su calculadora TI-83. Sin embargo, otra calculadora de impuestos no lo reducirá.
Barry Brown el
1
Estos estudiantes son nuevos en la programación y necesitan tomar sus babisteps en este curso. Hacerlo aburrido quizás no sea la forma más eficiente de enseñarles a programar y deberíamos mirar a los mejores maestros en lugar de simplemente hacer que reciten la especificación Java de principio a fin.
1
No. Estos proyectos deberían ser sobre todo divertidos. Los proyectos divertidos pueden ser difíciles. De hecho, la mayoría de mis proyectos favoritos son más difíciles que la programación diaria que hago en el trabajo.
Carra
2
Entiendo su punto de vista, pero estoy respetuosamente en desacuerdo, al menos en parte, y al menos para un curso introductorio. Hay muchos caminos de programación que uno puede tomar, y creo que un curso como este debería cubrir diferentes cosas que los programas pueden hacer. Demostrar a los estudiantes que las computadoras solo son buenas para los problemas que consideramos "necesarios para los negocios" no es un programador creativo porque limita su mentalidad. Creo que un curso bien diseñado desafiaría a los estudiantes a resolver problemas del mundo real, además de mostrar las cosas divertidas que pueden hacer las computadoras, como programar un juego
Nick Donohue
0

Una tarea para construir un widget tonto en sus teléfonos móviles. Algo que podrían mostrar a sus amigos. Tengo un teléfono AT&T súper económico y toma archivos jar de algún tipo.

Paul Nathan
fuente
0

Las tareas más importantes que he visto obligan a las personas a pensar en algo que de otro modo no habrían considerado. Algo completamente fuera del material del curso simple, algo que parece imposible. Algo que tiene múltiples soluciones válidas.

Algunos que me han impresionado:

  1. Roshambo AIs (utilizado en el curso de IA en UOA). Una función simple que devuelve -1, 0, 1 para piedra, papel, tijera. Las IA se enfrentan entre sí y las estadísticas se recopilan mediante un programa de utilidad agregado. Esta tarea sorprende constantemente a las personas en cuántos enfoques son viables (y cuántos funcionan tan mal).

  2. Problemas de clasificación simples con características imposibles. Ordenar un archivo de longitud infinita con memoria finita. Este problema sacudió mi base de pensar en algoritmos. Hay muchos problemas relacionados: promedios en ventanas sobre datos de longitud infinita, etc., cada uno obliga a una solución a algo aparentemente imposible.

  3. Problemas de simulación que parecen triviales. Simulaciones de tráfico (vehículo, red), simulaciones de autos de carrera (izquierda, derecha, más rápido, más lento), simulaciones de supermercados.

  4. Problemas de red (una gran debilidad en los graduados con los que he trabajado durante los últimos años). Problemas de red de pares con dispositivos portátiles, por ejemplo, demostrando la complejidad de los problemas de n-sync, actualizaciones de pares, confianza de pares, etc.

  5. Pequeños idiomas (otra debilidad en graduados recientes). Desarrolle un poco de lenguaje para un juego simple de inteligencia artificial (damas, roshambo, tanques, CSS mojo, bots de Twitter). Pensar en los conceptos de diseño del lenguaje, interpretación y acciones es fundamental.

Bruce Alderson
fuente
¿Las IA de papel, piedra o tijera llegan a conocer el resultado o ven cuál fue la historia?
Macneil
Sí, los historiales están disponibles a través de matrices en el ejemplo C (pero se aplicaría igualmente a Java, Ruby, etc.). Echa un vistazo a la página original de la competencia: webdocs.cs.ualberta.ca/~darse/rsbpc.html
Bruce Alderson el