Pergunta

Pergunta Original

Atualmente estou empenhado em ensinar meu irmão a programar.Ele é um iniciante, mas muito inteligente.(E ele realmente quer aprender).Percebi que algumas de nossas sessões ficaram atoladas em pequenos detalhes e não sinto que fui muito organizado.(Mas as respostas a este post ajudaram muito.)

O que posso fazer melhor para ensiná-lo de forma eficaz?Existe uma ordem lógica que posso usar para analisar conceito por conceito?Existem complexidades que devo evitar até mais tarde?

A linguagem com a qual estamos trabalhando é Pitão, mas conselhos em qualquer idioma são bem-vindos.


Como ajudar

Se você tiver bons, adicione o seguinte em sua resposta:

  • Exercícios para iniciantes e ideias de projetos
  • Recursos para ensinar iniciantes
  • Screencasts / postagens em blogs / e-books gratuitos
  • Imprima livros que sejam bons para iniciantes

Descreva o recurso com um link para ele para que eu possa dar uma olhada.Quero que todos saibam que definitivamente tenho usado algumas dessas ideias.Seus envios serão agregados nesta postagem.


Recursos online para ensinar iniciantes:


Livros impressos recomendados para ensinar iniciantes

Nenhuma solução correta

Outras dicas

Tive que trabalhar com vários programadores iniciantes (nunca escrevi uma linha de código) e farei um workshop depois da aula com alunos do ensino médio neste outono.Esta é a coisa mais próxima que tenho da documentação.Ainda é um trabalho em andamento, mas espero que ajude.

1) FizzBuzz. Comece com programas de linha de comando.Você pode escrever alguns jogos ou ferramentas divertidas muito rapidamente e aprender todos os recursos da linguagem muito rapidamente, sem precisar aprender primeiro as ferramentas da GUI.Esses primeiros aplicativos devem ser simples o suficiente para que você não precise usar nenhuma ferramenta real de depuração para fazê-los funcionar.

No mínimo, coisas como o FizzBuzz são bons projetos.Seus primeiros aplicativos não devem lidar com bancos de dados, sistema de arquivos, configuração, etc.Esses são conceitos que confundem a maioria das pessoas, e quando você está apenas aprendendo a sintaxe e os recursos básicos do framework, você realmente não precisa de mais complexidade.

Alguns projetos:

  • Olá Mundo!
  • Pegue o ano do meu nascimento e calcule minha idade (apenas (agora - então) sem correções de mês). (matemática simples, entrada, saída)
  • Peça uma direção (para cima, para baixo, para a esquerda, para a direita) e depois diga ao usuário seu destino (cair em um buraco, encontrar um bolo, etc.). (Lógica booleana)
  • FizzBuzz, mas conte uma vez a cada segundo. (Loops, temporizadores e mais lógica)
  • Dependendo da idade, alguns realmente gostam de um aplicativo que chama os usuários de um insulto aleatório em algum intervalo. (Loops, matrizes, temporizadores e aleatório se você tornar o intervalo aleatório)

2) Projeto Simples Depois que eles tiverem um bom domínio dos recursos do idioma, você poderá iniciar um projeto (jogos simples e divertidos funcionam bem).Você deve tentar fazer com que o primeiro projeto possa ser concluído dentro de 6 a 12 horas.Não perca tempo arquitetando isso cedo.Deixe-os projetar, mesmo que seja uma droga.Se tudo desmoronar, fale sobre o que aconteceu e por que falhou, depois escolha outro tópico e comece de novo.

É aqui que você começa a apresentar os recursos de depuração de suas ferramentas.Mesmo que você consiga ver o problema lendo o código, você deve ensiná-los como usar as ferramentas e depois mostrar como você pode vê-lo.Isso serve ao duplo propósito de ensinar as ferramentas de depuração e ensinar como identificar erros sem ferramentas.

Assim que, ou se, o projeto ficar funcional, você poderá usá-lo para introduzir ferramentas de refatoração.É bom se você puder expandir o projeto com alguns recursos simples que você nunca planejou.Isso geralmente significa refatoração e depuração significativa, já que muito poucas pessoas escrevem códigos decentes na primeira vez.

Alguns projetos:

3) Projeto Real Comece um projeto real que pode levar algum tempo.Use o controle de origem adequado e faça questão de ter um cronograma.Execute este projeto como um projeto real, pelo menos é uma boa experiência ter que lidar com as ferramentas.

Obviamente você precisa ajustar isso para cada pessoa.A coisa mais importante que descobri é fazer com que até os primeiros aplicativos simples se apliquem ao que a pessoa está interessada.

Alguns projetos:

  • Tetris
  • Mecanismo de blog baseado em arquivo de texto
  • Trabalho de robótica mais avançado

Você poderia tentar usar Alice.É um programa 3D projetado para uso em aulas introdutórias de programação.

Os dois maiores obstáculos para novos programadores são frequentemente:

  • erros de sintaxe
  • motivação (escrever algo significativo e divertido, em vez de artificial)

Alice utiliza uma interface de arrastar e soltar para construir programas, evitando a possibilidade de erros de sintaxe.Alice permite que você construa mundos 3D e tenha seu código controlando personagens e animações 3D (simples), o que geralmente é muito mais interessante do que implementar listas vinculadas.

Programadores experientes podem olhar para Alice como um brinquedo e zombar de arrastar e soltar linhas de código, mas pesquisar mostra que essa abordagem funciona.

Isenção de responsabilidade:Eu trabalhei em Alice.

Eu recomendo Logo (também conhecido como tartaruga) para entender os conceitos básicos.Ele fornece um bom sandbox com feedback gráfico imediato e você pode demonstrar loops, variáveis, funções, condicionais, etc. Esta página fornece um excelente tutorial.

Após o Logo, vá para Python ou Ruby.Recomendo o Python, pois é baseado no ABC, que foi inventado com o propósito de ensinar programação.

Ao ensinar programação, devo apoiar a sugestão de EHaskins de projetos simples e depois projetos complexos.A melhor maneira de aprender é começar com um resultado definido e um marco mensurável.Ele mantém o foco nas aulas, permite que o aluno desenvolva habilidades e depois desenvolva essas habilidades, e dá ao aluno algo para mostrar aos amigos.Não subestime o poder de ter algo para mostrar no seu trabalho.

Teoricamente, você pode ficar com o Python, já que o Python pode fazer quase tudo.É um bom veículo para ensinar programação orientada a objetos e (a maioria) algoritmos.Você pode executar o Python no modo interativo como uma linha de comando para ter uma ideia de como ele funciona ou executar scripts inteiros de uma vez.Você pode executar seus scripts interpretados instantaneamente ou compilá-los em binários.Existem milhares de módulos para estender a funcionalidade.Você pode fazer uma calculadora gráfica como aquela que vem com o Windows, ou pode fazer um cliente de IRC, ou qualquer outra coisa.

XKCD descreve o poder do Python um pouco melhor:"You're flying! How?" "Python!"

Você pode migrar para C# ou Java depois disso, embora eles não ofereçam muito que o Python já não tenha.A vantagem deles é que eles usam sintaxe no estilo C, que muitas (ouso dizer a maioria?) linguagens usam.Você não precisa se preocupar com o gerenciamento de memória ainda, mas pode se acostumar a ter um pouco mais de liberdade e menos controle do intérprete de linguagem.Python impõe espaços em branco e recuo, o que é bom na maioria das vezes, mas nem sempre.C# e Java permitem que você gerencie seus próprios espaços em branco enquanto permanece fortemente digitado.

A partir daí, o padrão é C ou C++.A liberdade nessas línguas é quase existencial.Agora você está encarregado do seu próprio gerenciamento de memória.Não há coleta de lixo para ajudá-lo.É aqui que você ensina algoritmos realmente avançados (como mergesort e quicksort).É aqui que você aprende por que “falha de segmentação” é um palavrão.É aqui que você baixa o código-fonte do kernel Linux e olha para o Abismo.Comece escrevendo um buffer circular e uma pilha para manipulação de strings.Em seguida, vá subindo.

Um bom curso de python é o do MIT Uma introdução suave à programação usando Python.É tudo gratuito online e você não precisa ser um superaluno do MIT para entender.

Editar [Justin Padrão]

Este curso usa este livro online gratuito: Como pensar como um cientista da computação
Definitivamente estou achando isso bastante útil.

Pacote Python VPython - Programação 3D para Mortal Comum (vídeo tutorial).

Exemplo de código:

from visual import *

floor = box (pos=(0,0,0), length=4, height=0.5, width=4, color=color.blue)
ball = sphere (pos=(0,4,0), radius=1, color=color.red)
ball.velocity = vector(0,-1,0)
dt = 0.01

while 1:
    rate (100)
    ball.pos = ball.pos + ball.velocity*dt
    if ball.y < ball.radius:
        ball.velocity.y = -ball.velocity.y
    else:
        ball.velocity.y = ball.velocity.y - 9.8*dt

Bola quicando do VPython http://vpython.org/bounce.gif

Comece com gráficos Turtle em Python.

Eu usaria os gráficos de tartaruga que vêm como padrão no Python.É visual, simples e você pode usar este ambiente para introduzir muitos conceitos de programação, como iteração e chamadas de procedimento, antes de ir muito longe na sintaxe.Considere a seguinte sessão interativa em python:

>>> from turtle import *
>>> setup()
>>> title("turtle test")
>>> clear()
>>>
>>> #DRAW A SQUARE
>>> down()        #pen down
>>> forward(50)   #move forward 50 units
>>> right(90)     #turn right 90 degrees
>>> forward(50)
>>> right(90)
>>> forward(50)
>>> right(90)
>>> forward(50)
>>>
>>> #INTRODUCE ITERATION TO SIMPLIFY SQUARE CODE
>>> clear()
>>> for i in range(4):
        forward(50)
        right(90)
>>>
>>> #INTRODUCE PROCEDURES   
>>> def square(length):
        down()
        for i in range(4):
            forward(length)
            right(90)
>>>
>>> #HAVE STUDENTS PREDICT WHAT THIS WILL DRAW
>>> for i in range(50):
        up()
        left(90)
        forward(25)
        square(i)
>>>
>>> #NOW HAVE THE STUDENTS WRITE CODE TO DRAW
>>> #A SQUARE 'TUNNEL' (I.E. CONCENTRIC SQUARES
>>> #GETTING SMALLER AND SMALLER).
>>>
>>> #AFTER THAT, MAKE THE TUNNEL ROTATE BY HAVING
>>> #EACH SUCCESSIVE SQUARE TILTED

Ao tentar realizar as duas últimas tarefas, eles terão muitas tentativas fracassadas, mas as falhas serão visualmente interessantes e eles aprenderão rapidamente enquanto tentam descobrir por que não desenhou o que esperavam.

O principal é que a pessoa em questão precisa ter algum problema que queira resolver.Se você não tem um programa que deseja escrever (e algo sensato e bem definido, e não "Eu quero escrever o próximo Quake!"), então você não pode aprender a programar, porque não tem nada para motivá-lo. .Quero dizer, você poderia ler um livro e ter uma compreensão aproximada da sintaxe e da semântica de uma linguagem, mas até que você tenha um programa que você deseja escrever você nunca vai agarrar a urtiga.

Se esse ímpeto existir, então todo o resto são apenas pequenos detalhes.

Não sei se alguém já mencionou isso aqui, mas você pode querer dar uma olhada Zed Shawde Aprenda Python da maneira mais difícil

Espero que isto ajude

http://tryruby.hobix.com/">Experimente Ruby (no seu navegador)

Este é um livro fantástico que meus irmãos mais novos aprenderam:

http://pine.fm/LearnToProgram/

Claro, o mais importante é começar a usar algum tipo de programa real e útil IMEDIATAMENTE após terminar o livro.

Se ele estiver interessado, os pequenos detalhes não são as partes boas?Usando python, você já cortou a GUI para que a confusão desaparecesse.Por que não escolher um projeto, um jogo ou algo assim e implementá-lo?O clássico jogo de adivinhação de números hi-lo pode ser simplesmente implementado a partir da linha de comando em 20 a 30 linhas de código (dependendo da linguagem, é claro) e fornece variáveis, condições, loops e entrada do usuário.

Eu simplesmente o deixei escrever toneladas de código.Deixe-o conduzir tudo que vocês fazem e apenas esteja disponível para responder perguntas.

Acredite ou não, depois de alguns meses escrevendo toneladas de códigos ruins, ele começará a entender a ideia e a escrever programas melhores.Nesse ponto, você pode se preocupar com detalhes (memória, etc.) e também falar sobre princípios gerais de design.

Ouvi dizer que o que separa os grandes artistas dos medíocres é que cada vez que praticam, melhoram alguma coisa, por menor que seja.Deixe seu irmão praticar e ele melhorará cada vez que se sentar ao teclado.

Editar:[Justin Padrão]

Esteban, isso me lembra um recente codificação de postagem de terror, e eu fazer acho que você está certo.Mas penso que ainda vale a pena encontrar métodos para guia sua prática.Sem dúvida, quero que ele escreva o máximo de código que puder.Essa é uma das razões pelas quais estou pedindo projetos de amostra.

Em primeiro lugar, comece como todo mundo faz:com um Olá Mundo programa.É simples e dá a eles uma ideia básica do layout de um programa.Tente se lembrar de quando você estava programando pela primeira vez e de como alguns dos conceitos eram difíceis - comece de forma simples.

Depois de Hello World, prossiga para a criação de algumas variáveis ​​básicas, aritmética e, em seguida, para a lógica booleana e instruções if/else.Se você tem um de seus antigos livros de programação, verifique alguns dos primeiros exemplos e peça-lhe que os leia.Só não tente apresentar muitas coisas de uma vez, ou será opressor e confuso.

Algo que você deve ter muito cuidado ao ensinar seu irmão a programar é que ele não dependa muito de você.Muitas vezes, quando me vejo ajudando outras pessoas, elas começam a pensar em mim como um livro de respostas para todas as suas perguntas e, em vez de experimentarem para encontrar uma resposta, simplesmente me perguntam.Muitas vezes, o melhor professor é a experimentação e toda vez que seu irmão tem uma pergunta como "O que acontecerá se eu adicionar 2 a uma corda?" Você deve dizer a ele para experimentar e ver por si mesmo.Também notei que quando não consigo transmitir um conceito a alguém, ajuda ver alguns exemplos de código onde podemos examinar cada segmento individualmente e explicá-lo peça por peça.Como observação, pessoas novas em programação geralmente têm problemas com a ideia de programação orientada a objetos; elas dirão que a entendem quando você a ensina, mas não obterão um conceito claro até implementá-la de fato.

Eu costumava ensinar programação e seu irmão tem uma vantagem principal sobre a maioria dos meus alunos que ele quer aprender :)

Se você decidir ir com C um amigo tem um site que possui o tipo de programas que as gerações mais antigas lembram como digitações básicas.Os mais complexos deles usam ncurses, o que de certa forma nega seu uso como auxiliar de ensino, mas alguns deles são pequenas coisas e você pode aprender muito sem ser ensinado.

Pessoalmente, acho que Python e Ruby seriam ótimas primeiras linguagens.

EDITAR:lista de tarefas de programação para iniciantes apareceu durante a noite pode ser exatamente o que você está procurando.

Realmente depende do estilo de aprendizagem do seu irmão.Muitas pessoas aprendem mais rápido colocando a mão na massa e simplesmente entrando no assunto, cristalizando os conceitos e o panorama geral à medida que progridem e constroem seu conhecimento.

Eu prefiro começar com o panorama geral e me aprofundar nos detalhes.A primeira coisa que eu queria saber era como tudo se encaixava, depois todo aquele jargão orientado a objetos, depois sobre classes e instâncias e assim por diante.Gosto de conhecer os conceitos subjacentes e um pouco de teoria antes de aprender a sintaxe.Tive uma pequena vantagem porque escrevi alguns jogos em BASIC há 20 anos, mas nada muito desde então.

Talvez seja útil acompanhar um processo de produção começando com uma declaração de missão geral, depois um plano e/ou fluxograma e, em seguida, elaborar algum pseudocódigo (inclinando-se para a sintaxe que você usará no final) antes de realmente escrever o código.

A regra de ouro aqui é descobrir o estilo de aprendizagem do seu aluno.

Se seu irmão tiver acesso ao iTunes, ele poderá baixar aulas em vídeo de um curso introdutório à ciência da computação ministrado por Richard Buckland na Universidade de Nova Gales do Sul.Ele é um instrutor envolvente e cobre os fundamentos da computação e da linguagem C.No mínimo, diga ao seu irmão para reproduzir os vídeos em segundo plano e alguns conceitos podem ser absorvidos por osmose.:)

COMP1917 Computação Superior - Sessão 1 de 2008 http://deimos3.apple.com/WebObjects/Core.woa/Browse/unsw.edu.au.1504975442.01504975444

Se o link não funcionar, aqui está um caminho:

Home -> iTunes U -> Engenharia -> COMP1917 Higher Computing - 2008 Sessão 1

há um wikibook que é muito bom para aprender python.

Não sei como são os wikibooks para outras línguas, mas pessoalmente aprendi python no wikibook em fevereiro de 2007

ps - se você não estiver familiarizado com wikilivros, é basicamente a versão da Wikipedia sobre autoria de livros.é meio difícil de descrever, mas se você conferir alguns dos livros lá você verá como funciona

Acho que Python é uma ótima ideia.Eu daria a ele algumas tarefas básicas para fazer sozinho e diria que qualquer beco sem saída que ele encontrar provavelmente pode ser resolvido com uma visita ao Google.Para mim, pelo menos, resolver um problema sozinho sempre fazia com que ele persistisse melhor do que alguém me dizendo a solução.

Alguns projetos possíveis (sem ordem específica):

  • Simulador de lançamento de moeda.Deixe o usuário inserir um número desejado de tentativas para o lançamento da moeda.Execute-o e exiba os resultados junto com a porcentagem de cara ou coroa.

  • Faça um conversor de temperatura com um menu que recebe a entrada do usuário para escolher que tipo de conversão o usuário deseja fazer.Após escolher a conversão e realizá-la, deverá retornar ao menu principal.

    Aqui está um exemplo de conversor estendido com a mesma ideia: http://pastebin.org/6541

  • Faça um programa que receba uma entrada numérica e exiba a nota em letras para a qual seria traduzida.Acabará avaliando a entrada em relação às instruções if e elif para descobrir onde ela se encaixa.

  • Faça um teste simples que passe por diversas questões de múltipla escolha ou preencha as questões em branco.No final será exibido como o usuário se saiu.Ele pode escolher as perguntas que quiser.

  • Pegue um número (presumivelmente grande) de centavos e converta-o em valores maiores.Por exemplo, 149 centavos = 1 dólar, 1 quarto, 2 moedas e 4 centavos.

  • Crie um gerenciador de lista simples.Ser capaz de adicionar/excluir listas e adicionar/excluir entradas nessas listas.Aqui está um exemplo de gerenciador de lista de natal: http://pastebin.org/6543

  • Crie um programa que irá construir e testar se os números inseridos formam um quadrado mágico (com uma matriz 2D).Aqui está um exemplo de código, mas ele deve realmente imprimir o quadrado em cada etapa para mostrar onde o usuário está em termos de construção do quadrado: http://pastebin.org/6544

Eu também sugeriria fazer algumas coisas com o xTurtle ou outro módulo gráfico para misturar as coisas e evitar que ele fique chato.Claro, isso é uma programação muito prática e não o script para o qual muitas pessoas realmente usariam python, mas os exemplos que dei foram retirados diretamente de quando eu estava aprendendo via python e funcionou muito bem para mim.Boa sorte!

Apenas torne isso divertido!

Surpreendentemente, Scala pode ser o mais fácil se você tentar Kojo

Se seu irmão gosta de quebra-cabeças, eu recomendaria Desafio Python.Eu não usaria isso como uma ferramenta de ensino formal em um tutorial individual, mas é algo que ele pode fazer quando vocês não estão juntos para se desafiar e se divertir.

Depois de ler alguns e-books gratuitos, descobri que o melhor livro para aprender a programar era Head First Programming, publicado pela O'Reily Press.Ele usa Python como linguagem e fornece programas para trabalhar desde o início.Eles são todos mais interessantes que 'Hello World'.Vale a pena o dinheiro que gastei nele e, como já foi lançado há algum tempo, você poderá encontrar uma cópia usada mais barata no Ebay ou na Amazon.

Se você quer ensinar o básico de programação, sem ser específico de uma linguagem, existe um aplicativo chamado Arranhar que foi criado no MIT.Ele foi projetado para ajudar as pessoas a desenvolver habilidades de programação.À medida que os usuários criam projetos Scratch, eles aprendem a criar condições, loops, etc.Existe também uma comunidade de projetos scratch, de onde os projetos podem ser baixados - dessa forma você pode explorar programas de outras pessoas e ver como eles foram construídos.

Eu acho que uma vez que ele tenha o básico (variáveis, loops, etc) você deve tentar ajudá-lo a encontrar algo específico que lhe interesse e ajudá-lo a aprender as necessidades para que isso aconteça.Sei que estou muito mais inclinado e motivado a fazer algo se for do meu interesse.Além disso, certifique-se de deixá-lo lutar contra alguns dos problemas mais difíceis. Nada é mais satisfatório do que o momento em que você resolve isso sozinho.

Fui ensinado aprendendo como resolver problemas de maneira agnóstica em termos de linguagem, usando fluxogramas e PDL (Linguagem de design de programa).Depois de algumas semanas disso, aprendi a converter o PDL que havia escrito para uma linguagem.Estou feliz por ter aprendido assim porque passei a maior parte dos meus anos programando, resolvendo problemas sem estar preso a uma linguagem.A linguagem que uso sempre foi um detalhe de implementação e não parte do design.

Ter que resolver o problema dividindo-o em etapas básicas é uma habilidade fundamental.Acho que é uma das coisas que separa aqueles que sabem programar daqueles que não sabem.

No que diz respeito a como você aborda a ordem dos conceitos de uma linguagem, acredito que a maneira mais fácil é decidir que é ter um projeto em mente e abordar os conceitos conforme eles forem necessários.Isso permite que você os aplique conforme necessário em algo que você está interessado em fazer.Ao aprender um idioma é bom ter em mente vários projetos simples e alguns com complexidade progressiva.Decidir sobre eles o ajudará a mapear os conceitos necessários e sua ordem.

Eu recomendaria também assistir a alguns screencasts - eles geralmente são criados no contexto de uma tecnologia específica e não de uma linguagem, mas se houver código Python exibido, isso servirá :).A questão é: eles são criados por alguns bons programadores e observar como bons programadores programam é uma coisa boa.Você e seu irmão também poderiam fazer alguma programação entre pares, o que pode ser uma ideia ainda melhor.Só não se esqueça de explicar POR QUE você faz algo dessa maneira e não daquela.Acho que a melhor forma de aprender programação é a partir de bons exemplos e tentar nem ver os ruins.

Robert Read escreveu um guia útil, Como ser um programador, que cobre uma ampla área de questões de programação que um iniciante consideraria útil.

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