Pregunta

Estoy a punto de comenzar (con otros programadores) una programación & amp; Club de algoritmos en mi escuela secundaria. El lenguaje de elección es C ++; lo siento, no puedo cambiar esto. Podemos suponer que los estudiantes tienen poca o ninguna experiencia en los temas mencionados anteriormente.

¿Cuáles crees que son los conceptos más básicos en los que debería centrarme?

Sé que enseñar algo que ya es obvio para mí no es una tarea fácil. Me doy cuenta de que la primera reunión debe recibir una atención extrema, para no asustar a los estudiantes, por lo tanto, le pregunto.

Editar: me di cuenta de que probablemente la principal diferencia entre programadores y principiantes es la "forma de pensar del programador". - Quiero decir, conceptualizar problemas como, ya sabes, algoritmos. Sé que es solo una cuestión de práctica, pero ¿conoces algún tipo de ejercicios / conceptos / cosas que puedan estimular el desarrollo en esta área?

¿Fue útil?

Solución

¡Haga que la programación sea divertida!

Las posibles cosas de las que hablar serían las competencias de programación en las que tu club podría participar o podría participar localmente. Compito en competencias de programación a nivel universitario (ACM) y sé con certeza que también las tienen en niveles inferiores.

Ese tipo de eventos realmente puede atraer un poco de espíritu competitivo y acercar a los miembros del club.

Las cosas no siempre tienen que ser sobre programación tampoco. Quizás sugiera tener una fiesta LAN donde juegues, discutas programación, etc., también podría ser una buena idea.

En términos de temas reales a tratar que están relacionados con la programación / algoritmo, sugeriría como grupo intentar algunos de estos problemas de programación en este manual de competencia de programación " Desafíos de programación " ;: Amazon Link

Comienzan con problemas de programación bastante básicos y progresan lentamente hacia problemas que requieren varias estructuras de datos como:

  • Pilas
  • Colas
  • Diccionarios
  • Árboles
  • Etc

La mayoría de los problemas se dan en C ++.

Eventualmente, progresan hacia problemas más avanzados que involucran Graph Traversal y algoritmos Graph populares ( Dijkstra's , etc.), problemas combinados, etc. Cada problema es divertido y se da en una pequeña "historia". formato similar Sin embargo, ten cuidado, ¡algunos de estos son muy difíciles!

Editar: Pizza and Soda nunca está de más cuando se trata de hacer que la gente se presente a las reuniones de tu club. Nuestro club ACM tiene pizza cada reunión (una vez al mes). Aunque la mayoría de nosotros todavía apareceríamos, es un buen rompehielos. Especialmente para nuevos clubes o socios.

Otros consejos

Desglosando

Para mí, lo único de la programación es la necesidad de dividir las tareas en pasos lo suficientemente pequeños para la computadora . Esto varía según el idioma, pero el hecho de que tenga que escribir un bucle '' for '' solo para contar hasta 100 tomas acostumbrándose.

El " de arriba hacia abajo " enfoque puede ayudar con este concepto. Comienza creando una función maestra para su programa, como

filterItemsByCriteria();

No tiene idea de cómo funcionará, por lo que lo desglosa en pasos adicionales:

(Nota: no conozco C ++, así que este es solo un ejemplo genérico)

filterItemsByCritera() {
  makeCriteriaList();
  lookAtItems();
  removeNonMatchingItems();
}

Luego, desglosas cada una de ellas. Muy pronto puede definir todos los pequeños pasos necesarios para hacer su lista de criterios, etc. Cuando todas las pequeñas funciones funcionen, la grande funcionará.

Es algo así como el juego que los niños juegan donde siguen preguntando "¿por qué?" después de todo lo que dices, excepto que tienes que seguir preguntando "¿cómo?"

Listas vinculadas: una pregunta clásica para una entrevista, y por una buena razón.

Intentaría trabajar con un subconjunto C y no intentar comenzar con el material OO. Eso se puede introducir después de que comprendan algunos de los conceptos básicos.

¡Saludos!

Creo que se está adelantando WAY al forzar un idioma específico y trabajar en temas específicos y un plan de estudios. Parece que usted (y algunos de los que respondieron) son confusos y aconsejan un club de programación " con "liderar una clase de programación". Son cosas muy diferentes.

Reuniría al grupo, y el grupo debería decidir exactamente qué ellos quieren sacar del club. En esencia, haga una "carta" para el club Entonces (y solo entonces) puede hacer determinaciones como el idioma / plataforma preferido, la frecuencia con la que se reunirá, lo que sucederá en las reuniones, etc.

Puede resultar que el mejor enfoque es una "encuesta", donde se exploran diferentes idiomas / plataformas. O puede resultar que el mejor enfoque es uno '' tópico '', donde hay cambios de tema (como un club de lectura) de forma regular (este mes es punteros, el próximo mes está ordenando, el siguiente es la recursividad, etc.) y luego se dan ejemplos y debates en varios idiomas.

Como comentario aparte, consideraría un "agnóstico del lenguaje" Orientación para el club. Anime a los niños a explorar diferentes idiomas y plataformas.

¡Buena suerte y buen trabajo!

Bueno, es un club de programación, ¡así que debería ser DIVERTIDO! Así que diría sumergirse en alguna experiencia práctica de inmediato. Comience explicando qué es un método main (), luego haga que los estudiantes escriban un programa hello world. Mejore gradualmente el programa hello world para que tenga funciones e imprima las entradas del usuario.

Yo diría que no entres en un algoritmo demasiado rápido para principiantes, déjalos jugar primero con C ++.

Alguien mencionado anteriormente, "hace que la programación sea divertida". Hoy es interesante que las personas no aprendan por aprender. La mayoría de la gente quiere gratificación instantánea .

Enseñe un poco de lógica usando la programación. Esto ayuda con (y es) la resolución de problemas. La clase que tengo en mi cabeza son los juegos de adivinanzas.

  • Pídales que hagan un programa que adivine un número entre 0 y 100.
  • Pídales que hagan un clon de black jack ... He hecho esto en básico :-(

Haga las instrucciones en papel.

  1. Explique los " Huevos fritos " historia. Pregúntele al auditorio qué harían para hacerse huevos fritos. Hágales notar el paso en el que piensan. Probablemente recibirá menos de 5 pasos algoritmo. Luego explíqueles cuántos pasos deben escribirse si queremos enseñarle a una computadora a freír huevos. Algo así como:
1) Go to the Fridge 
2) Open the fridge door 
3) Search for eggs 
4) If there are no eggs - go to the shop to buy eggs ( this is another function ;) ) 
5) If there are eggs - calculate how many do you need to fry 
6) Close the fridge door 
7) e.t.c. :)
  1. Comience con los conceptos básicos de la semántica de sintaxis C e.t.c, y en paralelo con eso explique los algoritmos muy básicos como el ordenamiento de burbujas.
  2. Después de que el auditorio esté familiarizado con la programación estructurada (esto puede llevar varias semanas o meses, dependiendo de la frecuencia con la que realice las lecciones), puede avanzar a C ++ y OOP.

El contenido en la programación C ++ de Deitel & amp; Deitel es una introducción decente, y los ejercicios propuestos al final de cada capítulo son buenos problemas de juguete.

Básicamente, estás hablando de: - Estructuras de Control - funciones - matrices - punteros y cadenas

Es posible que desee realizar un seguimiento con una introducción a la STL (" ok, ahora que lo hemos hecho de la manera más difícil ... aquí hay una opción más simple ")

Comience haciéndoles entender un problema como, por ejemplo, la ordenación. Esto es muy básico y deberían poder relacionarse bastante rápido. Una vez que vean el problema, presénteles las herramientas / solución para resolverlo.

Recuerdo cómo me sentí la primera vez que mostré un ejemplo de tipo de fusión. Podría seguir todos los pasos, pero ¿para qué demonios estaba? Luego, anhela una solución a un problema y entenderán la herramienta y la solución mucho mejor.

comienza con un simple "hola mundo" programa. Esto introduce fundamentos como variables, escribir en una secuencia y flujo de programa.

A continuación, agregue complejidad desde allí (listas vinculadas, archivo io, obtención de entrada del usuario, etc.).

La razón por la que digo comenzar con hello world es porque el niño verá un programa en ejecución realmente rápido. Es una respuesta casi inmediata, ya que habrán escrito un programa en ejecución desde el principio.

IMO, Big-O es uno de los conceptos más importantes para que los programadores principiantes aprendan .

Tener un concurso de depuración. Proporcione ejemplos de código que incluyan un error. Haga un concurso para ver quién puede encontrar más o más rápido.

Hay un excelente libro, Cómo no programar en C ++, que podría usar para comenzar.

Siempre aprendes mejor de los errores y prefiero aprender de otros.

También permitirá que las personas con poca experiencia aprendan al ver el código, incluso si el código casi funciona.

Además de las respuestas a esta pregunta , hay ciertas preguntas importantes temas a cubrir. Aquí hay un ejemplo de cómo podría estructurar las lecciones.

Primera lección: terminología y sintaxis

Terminología para cubrir: variable, operador, bucle (iteración), método, palabra reservada, tipo de datos, clase

Sintaxis para cubrir: asignación, operación, if / then / else, para loop, while loop, select, input / output

Segunda Lección: Construcción de Algoritmo Básico

Cubre algunos algoritmos simples, que involucran alguna entrada, tal vez un ciclo for o while.

Tercera lección: temas de algoritmos más avanzados

Esto es para cosas como la recursividad, la manipulación de matrices y las matemáticas de nivel superior. No tiene que entrar en temas demasiado complejos, pero introduzca suficiente complejidad para ser útil en un proyecto real.

Lección final: proyecto grupal

Haga un proyecto en el que los grupos puedan participar.

Estas no tienen que ser lecciones de un solo día. Puede difundir los temas en varios días.

El pseudocódigo debería ser el primero.

Editar: si son principiantes de programación total, entonces haría la primera mitad solo sobre programación. Una vez que llegue a un nivel en el que hablar sobre algoritmos tendría sentido, entonces el pseudocódigo es realmente importante para ponerse bajo las uñas.

¡Gracias por sus respuestas!

¿Y cómo les enseñarías a resolver problemas reales?

Conozco a un grupo de estudiantes que conocen la sintaxis de C ++ y algunos algoritmos básicos, pero no pueden aplicar el conocimiento que conocen cuando resuelven problemas reales: no conocen el enfoque, la forma de transcribir sus pensamientos en Un conjunto de pasos estrictos. No hablo de enfoques de 'alto nivel' como programación dinámica, codiciosos, etc., sino de una mentalidad algorítmica básica.

Supongo que es solo por el pobre proceso de aprendizaje por el que estaban pasando. En otras ciencias, las matemáticas, por ejemplo, son realmente brillantes.

El hecho de que esté familiarizado con los algoritmos no significa que pueda implementarlos y el hecho de que pueda programar no significa que pueda implementar un algoritmo.

Comience de manera simple con cada tema (mantenga la programación separada del diseño de algoritmos). Una vez que tengan un control sobre cada uno, lentamente comience a unir los dos conceptos.

Wow. C ++ es uno de los peores lenguajes posibles para comenzar, en términos de la cantidad de basura no relacionada que necesita para que todo funcione (Java sería un poco peor, supongo).

Cuando se enseña a principiantes en un ambiente pesado, es normal comenzar con " aquí hay un programa simple en C. Discutiremos para qué es toda esta basura en la parte superior del archivo para más adelante, pero por ahora, concéntrese en las líneas entre 'int main (void)' y la declaración 'return', que es donde se realiza todo el trabajo útil " ;.

Una vez que haya pasado ese punto, los conceptos básicos para cubrir incluyen las estructuras de datos básicas (matrices, listas vinculadas, árboles y diccionarios) y los algoritmos básicos (clasificación, búsqueda, etc.).

Haga que su club aprenda a programar realmente en cualquier idioma enseñando los conceptos de creación de software. En lugar de quedarse sin comprar una docena de licencias para Visual Studio, haga que los estudiantes usen compiladores, creen sistemas, archivos fuente, objetos y bibliotecas para convertir su código C en programas. Siento que este es realmente el comienzo y de hecho les permite a estos niños comprender cómo crear software en cualquier plataforma, sin las muletas en las que muchas instituciones educativas desean confiar.

En cuanto al lenguaje de elección, felicidades, encontrará que C ++ es muy rico en hacerle pensar en atajos matemáticos y millones de formas de hacer que su código funcione aún mejor (o implementar patrones sofisticados).

A la pregunta: cuando comenzaba a programar, siempre intentaba dividir un problema de la vida real en varios pasos y luego, a medida que veo similitudes entre las tareas o los datos que transforman, siempre trato de encontrar un más flojo, más fácil, manera más cruel de implementarlo.

La elegancia vino después de aprender patrones y algoritmos reales.

Hank: ¿O grande? quiere decir decirle a los programadores principiantes que su código es O (n ^ 2) y que el suyo es n log n ??

Pude ver algunas formas diferentes de tomar esto:

1) Bloques básicos de programación básica. ¿Qué son las declaraciones condicionales, p. cambiar y si / si no? ¿Qué son las declaraciones de repetición, p. para y mientras bucles? ¿Cómo combinamos estos para que un programa sea la secuencia de pasos que queremos? Podría tomar algo tan fácil como sumar una factura de supermercado o convertir temperaturas o distancias de métricas a imperiales o viceversa. ¿Cuáles son los tipos de variables básicas como una cadena, un entero o un doble? También aquí podría tener álgebra booleana para una idea avanzada o posiblemente enseñar cómo hacer aritmética en la base 2 o 16, que algunas personas pueden encontrar fácil y otras encuentran difícil.

2) Algorítmicamente, qué son bloques de construcción similares. La clasificación es un tema bastante simple que puede ser ampliamente discutido y analizado para tratar de descubrir cómo hacer esto más rápido que simplemente intercambiar elementos que parecen estar fuera de orden si aprende el Bubblesort, que es la forma más mortal para el cerebro.

3) Elementos de compilación y tiempo de ejecución. ¿Qué es una pila de llamadas? ¿Qué es un montón? Cómo se maneja la memoria para ejecutar un programa, por ejemplo. las piezas de código y piezas de datos? ¿Cómo abrimos y manipulamos archivos? ¿Qué es compilar y vincular? ¿Qué son los archivos make? Algo de esto es simple, pero también puede ser revelador para ver cómo funcionan las cosas, que puede ser lo que el club cubre la mayor parte del tiempo.

Los siguientes 2 son algo más desafiantes pero podrían ser divertidos:

4) Discuta varias ideas detrás de algoritmos tales como: 1) Divide y vencerás, 2) Programación dinámica, 3) Fuerza bruta, 4) Creación de una estructura de datos, 5) Reducir un problema a uno similar ya resuelto, por ejemplo Los números de Fibonacci son un problema recursivo clásico para los programadores principiantes, y 6) La idea de ser "codicioso" como en un ejemplo de cambio de cambio si estuvieras en un país donde las denominaciones de monedas son a, b y c. También podría entrar en algunos ejemplos de teoría de gráficos como un árbol de expansión de peso mínimo si desea algo algo exótico, o los vendedores que viajan por algo que puede ser fácil de describir pero difícil de resolver.

5) Funciones matemáticas. ¿Cómo programarías un factorial, que es el producto de todos los números del 1 al n? ¿Cómo calcularías las sumas de varias series aritméticas o geométricas? ¿O calcular el número de combinaciones o permutaciones de elementos r de un conjunto de n? Dado un conjunto de puntos, aproxima el polinomio que cumple con este requisito, p. en un plano bidimensional llamado x e y podrías dar 2 puntos y hacer que la gente descubra cuáles son las pendientes e interceptar si ya has resuelto pares de ecuaciones lineales.

6) Listas que se pueden implementar utilizando listas y matrices vinculadas. ¿Cuál es mejor para varios casos? ¿Cómo implementa funciones básicas como insertar, eliminar, buscar y ordenar?

7) Estructuras de datos abstractos. ¿Qué son las pilas y las colas? ¿Cómo se crean y prueban las clases?

8) Punteros. Esto solo lleva a grandes cantidades de temas como cómo asignar / desasignar memoria, ¿qué es una pérdida de memoria?

Esas son mis sugerencias para varios puntos de partida. Creo que comenzar una discusión puede llevar a algunos lugares interesantes si puede reunir a algunas personas que no les importa hablar sobre el mismo tema semana tras semana en algunos casos, ya que la clasificación puede ser un gran tema para cubrir bien si desea obtener en los puntos más finos de las cosas.

Ustedes podrían compilar el proyecto TinyPIM desde " Biblioteca estándar C ++ desde cero " y luego, cuando esté funcionando, comience a diseñar sus propias extensiones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top