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.
fonte
Respostas:
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
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
fonte
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.
fonte
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.
fonte
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).
fonte
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.
fonte
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.
fonte
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.
fonte
Eu iria iterar em um gerador de números primos.
atribuições
fonte
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.fonte
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:
... 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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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:
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).
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.
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.
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.
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.
fonte