Pergunta

Estou prestes a começar (com colegas programadores) uma programação e algoritmos clube na minha escola. A linguagem de escolha é C ++ - desculpe sobre isso, eu não posso mudar isso. Podemos supor alunos têm pouca ou nenhuma experiência nos temas acima mencionados.

O que você acha que são a maioria dos conceitos básicos devo focar?

Eu sei que algo de ensino que já é óbvio para mim não é uma tarefa fácil. Eu percebo que a primeira reunião deve ser dada uma atenção extrema - para não estudantes assustar -., Portanto, peço-lhe

Editar: notei que, provavelmente, a principal diferença entre programadores e iniciantes é "o caminho do programador de pensar" - quer dizer, conceituar problemas como, você sabe, algoritmos. Eu sei que é apenas uma questão de prática, mas você sabe qualquer tipo de exercícios / conceitos / coisas que poderiam estimular o desenvolvimento nesta área?

Foi útil?

Solução

Faça a programação divertida!

coisas possível falar seria Programação Competições que, ou o seu clube poderia manter-se ou poderia entrar em localmente. Eu competir em competições de programação a nível universitário (ACM) e eu sei para um fato que eles têm-los em níveis mais baixos também.

Aqueles tipo de eventos pode realmente tirar algum espírito competitivo e trazer os membros do clube mais perto.

As coisas nem sempre tem que ser sobre a programação de qualquer um. Talvez sugerir ter uma festa LAN onde jogar, discutir programação, etc poderia ser uma boa idéia também.

Em termos de temas reais para passar por cima que está programando / algoritmo relacionado, gostaria de sugerir como um grupo tentando alguns desses problemas de programação neste programação cartilha competição " Programação Desafios ": Amazon Fazer a ligação

Eles começam com problemas de programação bastante básico e lentamente evoluir para problemas que exigem várias estruturas de dados como:

  • Pilhas
  • Filas
  • Dicionários
  • Trees
  • Etc

A maioria dos problemas são dadas em C ++.

Finalmente, eles evoluir para problemas mais avançados que envolvem Graph Traversal e algoritmos Gráfico populares ( de Dijkstra , etc), problemas Combinatrics, etc. Cada problema é divertido e dada em pequena "história" como o formato. Esteja avisado, porém, alguns deles são muito difícil!

Edit: Pizza e Soda nunca fere tanto quando se trata de levar as pessoas a mostrar-se para suas reuniões de clube. Nossa ACM clube tem pizza a cada reunião (uma vez por mês). Mesmo que a maioria de nós ainda iria aparecer que é um bom quebra-gelo. Especialmente para novos clubes ou membros.

Outras dicas

dividi-lo

Para mim, o que é único sobre a programação é a necessidade de quebrar tarefas em pequenos passos suficientes para o computador . Isso varia por idioma, mas o fato de que você pode ter que escrever uma "loop for" apenas para contar a 100 leva tempo para se acostumar.

A abordagem "top-down" pode ajudar com este conceito. Você começa criando uma função de mestre para o seu programa, como

filterItemsByCriteria();

Você não tem idéia de como isso vai funcionar, então você dividi-la em outras etapas:

(Nota: Eu não sei C ++, então este é apenas um exemplo genérico)

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

Então você quebrar cada um desses ainda mais para baixo. Em breve você pode definir todos os pequenos passos que é preciso para fazer a sua lista de critérios, etc. Quando todo o pouco funções de trabalho, o grande vai funcionar.

É uma espécie de como as crianças jogo jogar onde eles continuam perguntando "por quê?" depois de tudo o que dizer, exceto que você tem que continuar perguntando "como?"

As listas vinculadas -. Uma pergunta da entrevista clássico, e por boas razões

Gostaria de tentar trabalhar com um subconjunto C, e não tentar começar com o material OO. Que pode ser introduzida depois que eles entendem alguns dos princípios básicos.

Saudações!

Eu acho que você está recebendo WAY frente de si mesmo em forçar uma linguagem específica e trabalhando em temas específicos e um currículo .. Parece que você (e alguns dos respondedores) estão confundindo "aconselhando um clube de programação", com 'levando uma classe de programação'. São coisas muito diferentes.

Gostaria de obter o grupo juntos, e o grupo deve decidir o que exatamente que quer sair do clube. Em essência, fazer um "charter" para o clube. Então (e só então) você pode fazer determinações como a linguagem / plataforma preferida, como frequentemente se encontram, o que vai acontecer nas reuniões, etc.

Pode acontecer que a melhor abordagem é um "survey", onde diferentes linguagens / plataformas são exploradas. Ou pode acontecer que a melhor abordagem é uma "tópica", onde mudanças tópico (como um clube do livro) em uma base regular (este mês é ponteiros, no próximo mês está classificando, o seguinte é a recursividade, etc.) e em seguida, exemplos e discussões ocorrem em vários idiomas.

Como um aparte, eu consideraria uma orientação "linguagem-agnóstico" para o clube. Incentivar as crianças a explorar diferentes linguagens e plataformas.

Boa sorte, e bom trabalho!

Bem, é um clube de programação, por isso deve ser divertido! Então, eu diria mergulhar em alguma mão na experiência imediatamente. Comece com explicando o que um método main () é, em seguida, ter os alunos escrevem um programa Olá mundo. melhorar gradualmente o programa Olá mundo assim que tem funções e imprime entradas do usuário.

Eu diria que não entrar em algoritmo muito rápido para iniciantes, deixá-los jogar com C ++ em primeiro lugar.

Alguém mencionado acima, "diversão tornar a programação". É interessante, hoje, que as pessoas não aprendem por uma questão de aprendizagem. A maioria das pessoas deseja gratificação instantânea .

Ensine um pouco de lógica usando programação. Isto ajuda com (e é) a resolução de problemas. A única classificar Eu tenho na minha cabeça são jogos de adivinhação.

  • Faça-os fazer um programa que suposições em um número entre 0 e 100.
  • Faça-os fazer um clone black jack ... Eu tenho feito isso no básico: - (

instruções de papel fazer.

  1. Explicar o "Ovos fritos" história. Pergunte ao auditivo o que fariam para se fazer ovos fritos. Fazê-los notar o passo que pensar. Provavelmente você receberá algoritmo menos de 5 passos. Em seguida, explicar-lhes quantos passos devem ser escritos para baixo, se queremos ensinar um computador para fritar ovos. Algo 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. Comece com noções básicas de C - sintaxe semântica e.t.c, e em paralelo com a explicar os algoritmos básicos como bubble sort.
  2. Após o auditivo está familiarizado com programação estruturada (isso pode levar várias semanas ou meses, dependendo quantas vezes você fazer as aulas), você pode avançar para C ++ e OOP.

O conteúdo na programação da Deitel & Deitel C ++ é uma introdução decente, e os exercícios propostos no final de cada capítulo são problemas agradáveis ??brinquedo.

Basicamente, você está falando: - estruturas de controle - funções - matrizes - ponteiros e cordas

Você pode querer acompanhar com uma introdução ao STL ( "ok, agora que nós fizemos isso da maneira mais difícil ... aqui está uma opção mais simples")

Comece fazendo-os entender um problema, como por exemplo a classificação. Isso é muito básico e eles devem ser capazes de se relacionar muito rápido. Uma vez que vêem o problema, em seguida, apresentá-los com as ferramentas / solução para resolvê-lo.

Eu me lembro como se sentia quando eu era mostrar um exemplo de merge-sort. Eu poderia seguir todos os passos, mas o que diabos eu estava para? Faça então almejar uma solução para um problema e eles vão entender a ferramenta e solução muito melhor.

começar com um "Olá mundo" programa simples. Isto introduz fundamentos como variáveis, escrita a um fluxo de fluxo e programa.

Em seguida, adicione a complexidade de lá (listas ligadas, io arquivo, ficando a entrada do usuário, etc).

A razão de eu dizer começar com Olá mundo é porque a criança vai começar a ver um programa em execução muito rápido. É feedback em como quase imediata eles vão ter escrito um certo programa em execução desde o início.

IMO, Big-O é um dos conceitos mais importantes para programadores iniciantes para aprender .

Ter um concurso de depuração. Fornecer amostras de código que incluem um bug. Ter um concurso para ver quem consegue encontrar o mais ou mais rápido.

Há um excelente livro, How Not to Programa em C ++, que você pode usar para começar.

Você sempre aprende melhor com os erros e eu prefiro aprender com alguns dos outros.

Ele também irá permitir que aqueles com pouca experiência aprender por código de ver, mesmo se o código só funciona quase.

Além das respostas para esta questão , existem certas importante tópicos para cobrir. Aqui está um exemplo de como você pode estruturar as lições.

Primeira Lição: Terminologia e Sintaxe

Terminologia a tampa: variável, operador, ciclo (iteração), método palavra reservada, tipo de dados, classe

Syntax a cobrir: a atribuição, operação, if / then / else, por loop, enquanto loop, selecionar, input / output

Segunda lição: Básico Algoritmo de construção

cobrir alguns algoritmos simples, envolvendo alguma entrada, talvez um favor ou um tempo loop.

Terceira lição: Mais algoritmo avançado Tópicos

Esta é para coisas como recursão, manipulação de matriz e matemática de nível superior. Você não tem que entrar em demasiado complexo de assuntos, mas introduzir complexidade suficiente para ser útil em um projeto real.

Lição final: Projeto Grupo

Faça um projeto que os grupos podem se envolver em fazer.

Estes não têm que ser lições único dia. Você pode espalhar os temas em vários dias.

Pseudocódigo deve ser um primeiro.

Edit: Se eles são totais iniciantes de programação, então eu iria fazer a primeira metade apenas sobre programação. Assim que chegar a um nível em que falar sobre algoritmos faria sentido, então pseudocódigo é realmente importante para ficar debaixo das unhas.

Obrigado por suas respostas!

E como você ensinar-lhes a resolução de problemas de verdade?

Eu sei que um grupo de estudantes que conhecem C ++ sintaxe e alguns algoritmos básicos, mas eles não podem aplicar o conhecimento que eles sabem quando eles resolvem problemas reais - eles não sabem a abordagem, o caminho para transcrever seus pensamentos em um conjunto de passos rigorosos. Eu não falo sobre 'alto nível' se aproxima como programação dinâmica, ganancioso etc., mas sobre a mentalidade algorítmica básico.

Eu supor que é apenas por causa do processo de aprendizagem pobres que foram passando. Em outras ciências - matemática, por exemplo - eles são realmente brilhante

.

Só porque você está familiarizado com algoritmos não significa que você pode implementá-las e só porque você pode programa não significa que você pode implementar um algoritmo.

simples Comece com cada tópico (continuo a programação separada de projetar algoritmos). Uma vez que eles têm uma alça em cada, comece devagar para trazer os dois conceitos juntos.

Wow. C ++ é uma das piores línguas possível começar com, em termos da quantidade de porcaria não relacionado que você precisa para conseguir alguma coisa de trabalho (Java seria um pouco pior, eu acho).

Ao ensinar os novatos em um ambiente padronizado-pesado, é costume começar com "aqui está um programa C simples. Vamos discutir o que toda essa porcaria no topo do arquivo é para mais tarde, mas por agora, concentrar-se na linhas entre 'int main (void)' e a declaração 'return', que é onde todo o trabalho útil é realizado".

Quando estiver além desse ponto, conceitos básicos para cobertura incluem as estruturas básicas de dados (arrays, listas ligadas, árvores e dicionários), e os algoritmos básicos (classificação, pesquisa, etc).

Tenha o seu clube de aprender a realmente programa em qualquer idioma, ensinando os conceitos de construção de software. Em vez de correr para fora uma compra uma dúzia de licenças para Visual Studio, os estudantes usam compiladores, sistemas fazem, arquivos fontes, objetos e librarys a fim de transformar o seu código C em programas. Eu sinto que este é verdadeiramente o início e realmente capacita essas crianças a entender como fazer o software em qualquer plataforma, sem muletas que muitas instituições educacionais como para confiar.

Como para a linguagem de escolha - parabéns - você encontrará C ++ é muito rica em fazer você pensar em atalhos matemáticos e milhões de maneiras de fazer o seu código de desempenho ainda melhor (ou implementar padrões de fantasia)

.

Para a pergunta: Quando eu estava beggining ao programa que eu sempre tentar quebrar um problema da vida real em várias etapas e, em seguida, a meu ver semelhança entre tarefas ou dados se transformam eu sempre tentar encontrar um mais preguiçoso, mais fácil, maneira meanier para implementá-lo.

Elegance veio depois quando aprender padrões e algoritmos reais.

Hank: Big O ??? quer dizer programadores iniciantes dizem que seu código é de O (n ^ 2) e sua arquitetura é de n log n ??

Eu podia ver algumas maneiras diferentes para levar isto:

1) de construção básicos de programação blocos. Quais são declarações condicionais, por exemplo, mudar e if / else? Quais são declarações de repetição, por exemplo, for e while? Como podemos combiná-las para obter um programa para ser a sequência de passos que queremos? Você poderia tomar algo tão fácil quanto adicionar uma conta do supermercado ou converter temperaturas ou distâncias de métrica para imperial ou vice-versa. Quais são os tipos de variáveis ??básicas, como uma string, inteiro, ou o dobro? Também aqui você poderia ter álgebra booleana para uma idéia avançada ou possivelmente ensinar como fazer aritmética na base 2 ou 16 que algumas pessoas podem achar fácil e outros acham difícil.

2) através de algoritmos que são blocos de construção semelhantes. A ordenação é um tema bastante simples que pode ser amplamente discutidos e analisados ??para tentar descobrir como fazer isso mais rápido do que apenas trocar elementos que parecem fora de ordem se você aprender a Bubblesort que é a maneira mais morte cerebral para fazer.

3) Compilação e tempo de execução elementos. O que é uma pilha de chamadas? O que é um amontoado? Como é memória tratado para executar um programa, por exemplo. os pedaços de código e dados pedaços? Como é que vamos abrir e manipular arquivos? O que é compilar e ligar? O que são arquivos make? Parte disso é simples, mas também pode ser de abrir os olhos só para ver como as coisas funcionam, que pode ser o que as capas de clube de maior parte do tempo.

Estas próximo 2 são um pouco mais desafiador, mas poderia ser divertido:

4) Discutir várias ideias por trás algoritmos, tais como: 1) Dividir e conquista, 2) de programação dinâmico, 3) A força bruta, 4) criação de uma estrutura de dados, 5) redução de um problema para um semelhante já resolvidos por exemplo números de Fibonacci é um problema clássico recursiva para dar programadores iniciantes, e 6) a idéia de ser "gananciosos", como em um exemplo tomada de mudança se você estivesse em um país onde denominações de moedas onde a, b, e c. Você também pode ver alguns exemplos teoria dos grafos como um peso mínimo abrangendo árvore, se você quer algo um tanto exótico, ou os vendedores que viajam a algo que pode ser fácil de descrever, mas uma dor de resolver.

5) funções matemáticas. Como você programar um factorial, que é o produto de todos os números de 1 a n? Como você calcular as somas de vários Aritmética ou série geométrica? Ou calcular o número de combinações ou permutações de r elementos de um conjunto de n? Dado um conjunto de pontos, aproximar o polinômio que atende a esse requisito, por exemplo, em um avião 2-dimensional chamada x e y que você poderia dar 2 pontos e ter pessoas a descobrir o que está a inclinação e intercepção y se você tiver resolvido pares de equações lineares já.

6) listas que podem ser implementadas usando listas ligadas e matrizes. O que é melhor para vários casos? Como você implementar funções básicas, como inserir, excluir, localizar e classificar?

7) Estruturas de dados abstratos. O que são pilhas e filas? Como você construir e classes de teste?

8) ponteiros. Isso só leva a enormes quantidades de temas como como alocar / de-alocar a memória, o que é um vazamento de memória?

Essas são as minhas sugestões para vários pontos de partida. Eu acho que começando uma discussão pode levar a alguns lugares interessantes se você pode obter algumas pessoas juntas que não me importo de falar na mesma semana assunto após semana, em alguns casos, como a triagem pode ser um grande tema para a cobertura bem se você deseja obter para os melhores pontos de coisas.

Vocês poderiam construir o projeto TinyPIM de " biblioteca padrão C ++ a partir do zero " e, em seguida, quando se está a trabalhar, começar a desenhar suas próprias extensões.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top