Quais são algumas boas tarefas para um curso introdutório, para alcançar os alunos de hoje? [fechadas]

25

Periodicamente, ensino uma introdução ao curso de programação usando Java . Quero dar aos meus alunos algumas tarefas interessantes com as quais possam se relacionar ou achar interessantes . No mínimo, quero atribuições que façam sentido e tenham uma coesão interna (por exemplo, alguns exercícios de programação muito ruins parecem inventados apenas para que você tenha que usar a construção de programação mais recente abordada).

Para ter uma idéia do escopo, veja o que está sendo coberto :

  • As atribuições devem estar em Java, é possível usar alguma biblioteca externa, mas seria necessário uma API simples e não uma estrutura completa
  • Variáveis, Primitivas e Cordas
  • Entrada e saída do console
  • if, for,while
  • Operadores aritméticos e lógicos
  • Gráficos simples com desenho de linhas e formas
  • Métodos estáticos
  • Matrizes unidimensionais

Os alunos não entrarão em tópicos avançados (por exemplo, sem recursão, sem ênfase na herança). Assim, eu estou não à procura de projetos complexos: "Tê-los escrever um compilador C Eu fiz isso quando eu tinha 5 e foi a única maneira que eu aprendi."

Se você tiver idéias mais avançadas que o escopo, poste-as na pergunta "Desafiador", vinculada abaixo, e não nesta.

Em vez disso, o que estou procurando são idéias interessantes que podem ser realizadas em um programa curto. Por exemplo:

  • Os alunos podem escrever uma versão para console do gerador "Star Wars Name" . Isso é efetivamente ler Strings e usar substring, mas acho divertido. Uma variação semelhante seria um programa " Mad Libs ". Eu usei este há cinco anos, e talvez já esteja "obsoleto".

  • Usando alguns triggers fornecidos a eles, os alunos podem desenhar polígonos regulares e criar formas espirais interessantes.

  • Também não está fora de questão usar algumas classes simples de animação com a maior parte do código fornecido a elas. E se você conhece um serviço do Twitter ou Facebook que pode ser acessado com uma API simples, eu ficaria muito interessado em saber.

Observe que esta pergunta é diferente das " Perguntas desafiadoras sobre Java para iniciantes "Perguntas ". Não estou procurando um desafio em si, apenas interessante. Eu acho que se os alunos trabalham em algo em que podem facilmente responder "por que alguém iria querer programar isso?" então eles aprenderão melhor.

Mesmo problemas simples, como calcular milhas por galão, podem ser bons. Embora, se houver uma maneira de atualizá-lo para ser mais relevante, tanto melhor. Se você se exercita em algum outro lugar (um livro ou um site), cite a fonte.

Para ajudá-lo a pensar sobre o calouro típico de hoje, confira a lista Beloit Mindset , para muitos exemplos que certamente farão você se sentir velho.

Macneil
fonte
Por curiosidade, que nível de alunos você está ensinando e acha que tópicos como recursão e design orientado a objetos são avançados demais? Esses tópicos foram abordados em profundidade no meu primeiro semestre, aula de programação introdutória. Eu acho que você está prestando um desserviço aos seus alunos se você tentar manter o curso muito simplista.
May12
@Mayra: Isto é para a introdução ao curso de programação, o primeiro curso para os graduados em CS. Estou procurando problemas interessantes para os alunos usarem nas primeiras 5 semanas (ou mesmo no primeiro dia), e não apenas no final. É um verdadeiro desafio trabalhar nesses requisitos (e acredite em mim que alguns problemas estão fora do meu controle), por isso estou pedindo ajuda a vocês.
Macneil

Respostas:

9

Dadas as restrições, sugiro implementar uma versão do Hangman. Isso permitiria que os alunos demonstrassem todas as técnicas que você está apresentando, sem serem excessivamente complexas.

Também pode ser usado como um projeto em desenvolvimento à medida que o curso avança. por exemplo, depois de cobrir as strings e variáveis, começa como uma versão em texto

por exemplo

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

em seguida, introduza loops para remover o elemento recortar e colar do código à medida que as 10 suposições são contadas ... acumulando gráficos de linha e a pessoa com stick sendo pendurada / salva no final do curso de 5 semanas.

Como a maioria das pessoas que têm experiência em recrutar e entrevistar programadores, realmente me faz estremecer que esse nível de ensino seja necessário na universidade, mas, infelizmente, ele continuará sendo necessário até que as escolas tratem a programação como um assunto sério em pé de igualdade. matemática ou ciências

Michael Shaw
fonte
Boa ideia! Eu acho que vou usar este. :-) BTW, o que você quer dizer com "nível de ensino"? Como nos custos?
Macneil
É mais uma queixa sobre a falta de aulas de programação antes da universidade. Imagine chegar à Universidade para fazer química e passar o primeiro mandato sobre átomos, moléculas e elétrons. 3 anos é um tempo muito curto para entender a ciência da computação.
Michael Shaw
Eu realmente gosto dessa idéia, sem necessidade de gráficos complexos, que pode ser feita em uma linha de comando razoavelmente bem. É divertido e ainda não é outro solucionador de problemas de matemática.
Joppe
7

Parece um jogo de aventura de texto que pode ser uma tarefa fantástica em algum lugar no meio do semestre. Tive uma aula que nos fez jogar Colossal Cave Adventure e depois fazer nosso próprio jogo. Ele me ensinou muitas das construções básicas desde o início, e foi muito divertido fazer todo mundo entrar nela.

Morgan Herlocker
fonte
2
Parece divertido, mas mantenha-o pequeno.
7

Que tal usar um problema ou dois em http://projecteuler.net/ Alguns deles são bastante interessantes e é possível ver o benefício de escrever um programa para resolvê-los. Eles são pequenos o suficiente para que vários possam ser feitos como atribuições. Outro que eu gosto de usar é encontrar $ 1,00 palavras. Cada letra do alfabeto vale sua posição em centavos, ou seja, a = 1, b = 2. Quantas palavras de US $ 1,00 você consegue encontrar? Isso pode envolver a entrada / saída de arquivos (leitura em um dicionário), matrizes, looping etc.

Gratzy
fonte
1
+1 para o Projeto Euler. Muito legal. Embora alguns dos problemas sejam um pouco avançados demais, há muitos que não o são.
Macneil
Eu amo o Projeto Euler, mas não tenho tanta certeza se teria sido divertido se eu fizesse os exercícios na universidade.
Oliver Weiler
Sem nem todos eles seria divertido, mas alguns eu acho que ser boas escolhas
Gratzy
6
  • Implemente um jogo de monopólio. O monopólio tem uma sequência óbvia e se presta à divisão em funções com muita facilidade. Também requer apenas uma matriz unidimensional e algumas classes básicas. A lógica é simples o suficiente para que os alunos pensem mais em "como" do que "o quê" e resulta em algo que pode ser demonstrado para os outros.

  • Dê a eles um arquivo criptografado que tenha sido criptografado com alguma regra reversível e peça que eles escrevam um decodificador (embora seja simples o suficiente). Isso dá um incentivo extra para resolvê-lo por causa do mistério sobre o conteúdo da mensagem.

  • Eu não sei por que você cobre apenas matrizes unidimensionais e não matrizes (elas realmente não são tão diferentes assim), mas se você estiver disposto a incluí-lo no sylabus, o Jogo da Vida de Jon Conway também é relativamente fácil e resulta em algo Diversão.

  • Um jogo como o xadrez exige um pouco de reflexão, mas ainda está dentro dos limites do que um iniciante pode fazer com herança mínima (peças específicas herdam de uma peça da classe geral e o tabuleiro contém objetos do tipo Peça) e matrizes 2D (você pode escolher simplifique-o, não exigindo a implementação de coisas difíceis, como detecção de stelmate ou incapacidade de castigar se as peças inimigas estiverem ameaçando o caminho do castelo).

EpsilonVector
fonte
+1 para a sugestão de jogo Monopoly. Quanto às matrizes 2D, concordo absolutamente que elas podem levar a tarefas muito interessantes. No entanto, existem restrições que impedem que matrizes 2D não sejam viáveis ​​(por exemplo, o livro já está corrigido e um bilhão de outras questões políticas do corpo docente com as quais eu não vou aborrecer você nem com sua opinião pessoal sobre eles). questões fora do meu controle).
Macneil
Ah, tivemos que criar um jogo de monopólio na escola. E um disjuntor de criptografia.
Carra
+1 para o monopólio. Depois que os alunos tiverem sido codificados, peça que gerem as probabilidades de aterrissar nas várias propriedades. Esse conhecimento realmente ajuda estrategicamente.
Joshdick
4

Criamos alguns projetos com apenas E / S, funções e operadores condicionais na escola. Tudo feito antes de aprendermos sobre programação orientada a objetos. Esses projetos avançaram lentamente para serem cada vez mais difíceis. Basta dizer que as quatro horas que tivemos por semana não foram suficientes no final do ano.

Todos esses projetos foram feitos apenas com funções & i / o:

  • Um jogo que aprende. Você pega um número de paus, o PC pega um número de paus. Repetir. O último que segura um graveto perde. Tivemos que criar um programa simples de auto-aprendizado que melhorou após cada jogo. Bom exemplo para aprender matrizes 2D.

  • Um disjuntor de código. Você conhece a criptografia César, escolha uma letra e adicione o valor da letra a cada letra da sua palavra. Por exemplo, chave = 'a' e a palavra = "segredo". Isso se tornaria "tfdsfq". Isso pode ser feito lendo o arquivo e criando uma tabela de frequência para cada letra. Você também lê em uma Bíblia em inglês. Então você pode simplesmente ver que a letra mais usada no alfabeto inglês é um 'e' e resolvê-la. Desafio adicional: use uma chave como 'ab', que foi nossa tarefa. Bom exercício para entender a E / S.

  • Um fabricante de código de barras. Este programa foi um exercício para chamar uma biblioteca externa. Você obteve um código e teve que gerar uma imagem com o código de barras. Uma biblioteca externa foi usada para gerar a imagem.

  • Um algoritmo genético para resolver o problema dos vendedores ambulantes. Este foi um projeto mais avançado para 2 ou 3 pessoas. Você começa com uma rota aleatória e essa rota melhora o tempo todo até que você tenha uma "boa rota". Bônus: crie um mapa com a rota.

  • Um programa de compactação lzw em funcionamento . Este foi o projeto final, para 4 pessoas. Os parâmetros eram bastante simples. "Zip file.txt file.zip" ou algo semelhante. Projeto divertido, mas a compreensão do algoritmo lzw demorou um pouco.

Carra
fonte
Muito interessante ... Em qual escola você estudou? Isso foi tudo no seu primeiro ano?
Macneil
Foi um curso para aquecer as pessoas para a especialização em engenharia informática. Você ainda pode mudar sua especialização depois daquele ano. Os alunos conheciam loops básicos, algumas entradas / saídas na tela / arquivos e funções.
Carra
3

Uma calculadora seria um bom projeto para aprender operações aritméticas. Você pode torná-lo um aplicativo de console simples baseado em menu ou uma GUI. Quatro funções (+, -, *, /) para iniciar, com pontos extras para coisas mais complexas, como raiz quadrada, etc.

Para manipulação de strings, sugiro alguns problemas de validação. Os endereços de e-mail vêm à mente - deixá-los desmarcados pode levar a falhas de injeção de SQL ou outras coisas, e eles são relativamente fáceis de validar. Para anexar, talvez tenha um programa que possa receber o nome, o nome do meio e o sobrenome e agrupá-los com espaços, além de pegar um nome completo e analisá-lo em cada componente. O primeiro é usado mais do que o segundo na vida real, mas não consegui pensar em outro cenário de análise que fosse simples o suficiente.

Para demonstrar métodos estáticos, você pode atribuir um problema de pesquisa de email. Tenha um arquivo de nomes e emails, e o construtor estático pode colocar os nomes / emails em uma lista, com um método estático para encontrar o email para um determinado nome.

Espero que estas lhe dêem algumas idéias! Boa sorte com sua classe.

Michael K
fonte
1
+1 Obrigado! Esse é exatamente o tipo de resposta que estou procurando.
Macneil
Jogos são mais divertidos do que calculadoras.
3

Uma coisa muito interessante e interessante para uma tarefa é escrever uma implementação do Game of Life de Conway em 2D. Ele mapeia muito bem as estruturas básicas de dados da matriz, é divertido e muito fácil de fazer, mas ainda requer algumas reflexões. Pode abrir alguma curiosidade e experimentação também (IA).

Os alunos avançados podem escrever uma versão em 3D para obter pontos extras.

Martin Wickman
fonte
3

Eu iria iterar em um gerador de números primos.

atribuições

  1. Imprima números primos de 1 a 100.
  2. Imprima números primos da entrada1 para a entrada2.
  3. Grave e imprima dados de desempenho de primeira geração.
  4. Gráfico de dados de desempenho de geração principal.
  5. Iterar na otimização do algoritmo do gerador de números primos.
dacracot
fonte
2

Estou usando a Biblioteca ACM para ajudar os alunos a criar gráficos e jogos simples. Conseguimos fazer jogos básicos baseados em cliques para dois jogadores, com nada mais do que as habilidades que você descreveu. Esta semana eles estão fazendo o jogo Fox and Hounds .

Eu tenho tentado ficar longe da E / S do console o maior tempo possível. Hoje em dia, é um conceito estrangeiro para muitos estudantes, pois todos cresceram com GUIs. Por isso, concentro-me no MVC, na obtenção do modelo correto e na adição da GUI somente após o teste do modelo. O teste é feito por meio de teste de unidade automatizado e o Code Pad no BlueJ . Não public static void main()é necessário, nunca.

Barry Brown
fonte
interessante. Talvez você escreva suas experiências em um artigo ou em uma entrada de blog?
2

Eu ensinei introdução no século passado, e foi o BASIC, mas, como você, eu queria que os alunos desenvolvessem um projeto divertido. Então sugeri várias possibilidades:

  • Jogo de aventura simples, como Wumpus
  • Simulação esportiva (apenas texto, gráficos para os ambiciosos) de beisebol ou qualquer outra coisa
  • Ciência, como simular evolução genética
  • Esporte / ciência, como veleiro
  • Finanças, como ter seu próprio banco para as pessoas em sua casa ou investimentos
  • Música ou jogos gráficos simples

... ou o que os alunos pensaram. Eles vinham até mim e diziam "que tal um programa para fazer XYZ?" e eu sempre dizia "Ótimo", e então talvez os orientasse um pouco para não complicar demais.

Geralmente, seus projetos acabavam sendo algumas centenas de linhas de código, e eles sempre gostaram.

PS: Eu dei essa tarefa depois que os alunos eram competentes com estruturas básicas de controle, E / S, matrizes e arquivos seqüenciais. Era um projeto de termo, a maior parte de sua nota, e eu tinha tarefas de marcos intermediários, como um esboço no meio, para que eles não tentassem fazer tudo no final e batessem em uma parede. Eu queria colocá-los nisso o mais cedo possível no semestre, quando eles tivessem habilidades suficientes para começar, normalmente por volta da semana 6 ou 8.

Mike Dunlavey
fonte
1

Eu tive um professor para escrever um programa para o qual você escreveu módulos. Basicamente, era um jogo e você tinha que escrever um algo para resolvê-lo, tudo estava lá para torná-lo gráfico, bonito e funcionar bem. Talvez você deva escrever sua própria estrutura de jogo e fornecer a eles ferramentas básicas que são versões embaçadas de coisas legais que podem ser feitas posteriormente fora da caixa em que você as colocou.

Incógnito
fonte
1

No meu curso introdutório, três projetos se destacaram em mim

Escreva um programa para exibir uma pintura Mondrian aleatória
Escreva a primeira parte de um jogo BrickBreaker, faça a bola saltar dentro de uma área definida
Escreva um jogo de aventura baseado em texto

Da minha classe de algoritmos
Implementar um triângulo de Serpinski

Esses quatro projetos me deram uma grande compreensão do processamento de strings, randomização, gráficos, recursão e animação.

Jason
fonte
1

Todos os alunos da classe são de nível superior? Meu palpite não seria. Eu apresentava tarefas que são feitas sob medida para os alunos da turma.

Exemplos:

  • Os estudantes de arte poderiam escrever um programa que medisse as dimensões de uma peça de tela e uma moldura para calcular a quantidade da tela que não estaria disponível para pintura (devido a envolver e grampear a tela ao redor da moldura).

  • Os alunos do Econ poderiam calcular juros compostos sobre um item.

  • Os alunos de matemática podem escolher problemas no Projeto Euler.

Kavet Kerek
fonte
1
A classe é para alunos maiores e não maiores. Muitos estão em biologia.
Macneil
Interessante. Idéia: encontre uma foto de organismos unicelulares nadando na água. Converta a imagem em P&B. Escreva um programa para contar o número de organismos na água. Isso fará com que todos os tipos de temas interessantes de discussão: a detecção de bordas, a diferenciação entre a água e não água, eliminação de poeira, etc.
Barry Brown
bem para a biografia, o óbvio que vem à mente são os autômatos celulares. Você pode fazer um saque em bioquest.org para obter algumas idéias.
Kavet Kerek
1

No ensino médio, participei de uma aula de programação introdutória e usamos Karel J. Robot . Ele fornece uma interface gráfica para a visualização do seu robô e possui um conjunto muito básico de sensores e métodos de movimento que você precisa estender para fazer coisas interessantes. Eu acho que é bom porque os robôs são fáceis de entender para as pessoas que ainda não desenvolveram uma compreensão da diferença entre software.

Há também o Processing , que acabei de descobrir, que foi originalmente projetado para ensinar programação e também em java.

Nick Donohue
fonte
0

Eu vou ser o dissidente aqui. Eu acho que você deveria dar a eles problemas válidos de tipo de negócio para resolver não brinquedos. Se eles não forem sérios o suficiente para se interessarem e se motivarem com o tipo de trabalho que estarão fazendo como profissional, prefiro que você os reprove no curso de introdução. O trabalho real não é fazer coisas legais, é atender às necessidades do cliente. Eu também já vi muitas pessoas que não conseguem; fazer o salto entre o que aprendem em um jogo e usar as mesmas técnicas em programação de negócios.

Todo desenvolvedor sênior e gerente de contratação que conheço tem nojo da qualidade dos recém-formados. Tente se concentrar no que eles precisam aprender a trabalhar no mundo real e esqueça de torná-lo divertido.

HLGEM
fonte
Eu acho que muitos estudantes acham um problema comercial interessante. Se você puder sugerir algo concreto e melhorar sua resposta, isso seria útil. Estou procurando detalhes.
Macneil
1
Deveria ser um problema que eles não podem fazer (facilmente) em sua calculadora TI-83. Ainda outra calculadora de impostos não é suficiente.
Barry Brown
1
Esses alunos são novos na programação e precisam seguir seus babysteps neste curso. Tornar isso chato talvez não seja a maneira mais eficiente de ensiná-los a programar, e devemos olhar para os melhores professores em vez de apenas fazê-los recitar a especificação Java de ponta a ponta.
1
Não. Esses projetos devem acima de tudo ser divertidos. Projetos divertidos podem ser difíceis. De fato, a maioria dos meus projetos de animais de estimação é mais difícil do que a programação diária que faço no trabalho.
Carra
2
Entendo seu ponto de vista, mas discordo respeitosamente, pelo menos em parte, e pelo menos em um curso introdutório. Existem muitos caminhos de programação que se pode adotar, e acho que um curso como esse deve abranger diferentes coisas que os programas podem fazer. Mostrar aos alunos que os computadores são bons apenas para os problemas que consideramos "necessários para os negócios" não é um programador criativo, porque limita sua mentalidade. Eu acho que um curso bem desenhado poderia desafiar os alunos a resolver problemas do mundo real, além de mostrar as coisas divertidas que os computadores podem fazer, como a programação de um jogo
Nick Donohue
0

Uma tarefa para a criação de um widget bobo em seus telefones celulares. Algo que eles poderiam mostrar aos amigos. Eu tenho um telefone AT&T super barato e é preciso algum tipo de arquivo jar.

Paul Nathan
fonte
0

As atribuições mais importantes que vi obrigam as pessoas a pensar em algo que, de outra forma, não teriam considerado. Algo inteiramente fora do material simples do curso, algo que parece impossível. Algo que tem várias soluções válidas.

Alguns que me impressionaram:

  1. AIs da Roshambo (usadas no curso de IA da UOA). Uma função simples que retorna -1, 0, 1 para pedra, papel e tesoura. As IAs são opostas e as estatísticas são coletadas por um programa agregado de utilidades. Essa tarefa surpreende constantemente as pessoas em quantas abordagens são viáveis ​​(e quantas têm um desempenho tão ruim).

  2. Problemas simples de classificação com características impossíveis. Classifique um arquivo de tamanho infinito com memória finita. Esse problema abalou minha base de pensamento em algoritmos. Existem muitos problemas relacionados: médias em janelas sobre dados de tamanho infinito etc., cada uma força uma solução para algo aparentemente impossível.

  3. Problemas de simulação que parecem triviais. Simulações de tráfego (veículo, rede), simulações de carros de corrida (esquerda, direita, mais rápido, mais lento), simulações de mercearia.

  4. Problemas de rede (uma grande fraqueza nos graduados com quem trabalhei nos últimos anos). Problemas de rede de pares com computadores de mão, por exemplo, comprovando a complexidade de problemas de n-sincronização, atualizações de pares, confiança de colegas etc.

  5. Pequenas línguas (outra fraqueza em graduados recentes). Desenvolva um pouco de linguagem para um jogo simples de IA (damas, roshambo, tanques, CSS mojo, bots do Twitter). Pensar nos conceitos de design, interpretação e ações de linguagem é fundamental.

Bruce Alderson
fonte
As AIs de papel, pedra e tesoura conhecem o resultado ou vê qual era a história?
Macneil
Sim, os históricos estão disponíveis por meio de matrizes no exemplo C (mas isso se aplicaria igualmente a Java, Ruby etc.). Confira a página original da competição: webdocs.cs.ualberta.ca/~darse/rsbpc.html
Bruce Alderson