Pergunta original
Atualmente, estou empenhado em ensinar meu irmão a programar. Ele é um novato total, mas muito inteligente. (E ele realmente quer aprender). Percebi que algumas de nossas sessões ficaram atoladas em pequenos detalhes, e não acho que tenha sido muito organizado. ( Mas as respostas para este post ajudaram muito. )
O que posso fazer melhor para ensiná-lo efetivamente? Existe uma ordem lógica que eu possa usar para executar conceito por conceito? Existem complexidades que devo evitar até mais tarde?
A linguagem com a qual estamos trabalhando é Python , mas conselhos em qualquer idioma são bem-vindos.
Como ajudar
Se você tem bons, adicione o seguinte na sua resposta:
- Exercícios para iniciantes e idéias de projetos
- Recursos para o ensino de iniciantes
- Screencasts / posts em blogs / e-books gratuitos
- Imprima livros que são bons para iniciantes
Descreva o recurso com um link para que eu possa dar uma olhada. Quero que todos saibam que definitivamente tenho usado algumas dessas idéias. Seus envios serão agregados nesta postagem.
Recursos on-line para o ensino de iniciantes:
- Uma introdução suave à programação usando Python
- Como pensar como um cientista da computação
- Alice: um programa 3d para iniciantes
- Scratch (Um sistema para desenvolver habilidades de programação)
- Como criar programas
- Estrutura e interpretação de programas de computador
- Aprenda a programar
- Como ser um programador de Robert Read
- Microsoft XNA
- Criando a próxima geração de hackers
- Palestras COMP1917 Higher Computing de Richard Buckland (requer iTunes)
- Mergulhe no Python
- Wikibook de Python
- Projeto Euler - problemas de amostra (principalmente matemáticos)
- pygame - uma biblioteca python fácil para criar jogos
- Invente seus próprios jogos de computador com Python
- Fundamentos da programação para um próximo passo além do básico.
- Squeak by Example
- Snake Wrangling For Kids (Não é apenas para crianças!)
Livros impressos recomendados para o ensino de iniciantes
fonte
Respostas:
Eu tive que trabalhar com vários programadores iniciantes (nunca escrevi uma linha de código) e farei um workshop depois da escola com alunos do ensino médio neste outono. Essa é 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 rapidamente, sem precisar aprender as ferramentas da GUI primeiro. Esses aplicativos iniciais devem ser simples o suficiente para que você não precise usar nenhuma ferramenta de depuração real para fazê-los funcionar.
Se nada mais, coisas como o FizzBuzz, são bons projetos. Seus primeiros aplicativos não precisam 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 da estrutura, realmente não precisa de mais complexidade.
Alguns projetos:
2) Projeto simples Uma vez que eles tenham uma boa compreensão dos recursos da linguagem, você pode iniciar um projeto (jogos simples e divertidos funcionam bem.). Você deve tentar concluir o primeiro projeto dentro de 6 a 12 horas. Não gaste tempo para arquitetá-lo cedo. Deixe-os projetá-lo mesmo que seja péssimo. Se desmoronar, fale sobre o que aconteceu e por que falhou, escolha outro tópico e comece novamente.
É aqui que você começa a apresentar os recursos de depuração de suas ferramentas. Mesmo que você possa ver o problema lendo o código, ensine-os a usar as ferramentas e depois mostre a eles como você pode vê-lo. Isso serve ao duplo objetivo de ensinar as ferramentas de depuração e como identificar erros sem ferramentas.
Uma vez, ou se, o projeto ficar funcional, você poderá usá-lo para introduzir ferramentas de refatoração. É bom que você possa expandir o projeto com alguns recursos simples para os quais você nunca planejou. Isso geralmente significa refatoração e depuração significativa, já que poucas pessoas escrevem código pela metade pela primeira vez.
Alguns projetos:
3) Projeto Real Inicie 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, se nada mais, é uma boa experiência ter que lidar com as ferramentas.
Obviamente, você precisa ajustar isso para cada pessoa. A coisa mais importante que encontrei é fazer com que até os primeiros aplicativos simples se apliquem ao que a pessoa está interessada.
Alguns projetos:
fonte
Você pode tentar usar Alice . É um programa 3D projetado para uso em aulas de programação introdutórias.
Os dois maiores obstáculos para novos programadores são frequentemente:
Alice usa 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 seus personagens e animação 3D (simples) de controle de código, o que geralmente é muito mais interessante do que implementar listas vinculadas.
Programadores experientes podem considerar Alice um brinquedo e zombar de arrastar e soltar linhas de código, mas a pesquisa mostra que essa abordagem funciona.
Disclaimer: Eu trabalhei em Alice.
fonte
Eu recomendo o Logo (também conhecido como tartaruga) para obter os conceitos básicos. Ele fornece uma boa caixa de areia 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. Eu recomendo o Python, pois é baseado no ABC, que foi inventado com o objetivo de ensinar programação.
Ao ensinar programação, devo secundar 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. Mantém as lições focadas, 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 a mostrar para o trabalho de alguém.
Teoricamente, você pode ficar com o Python, pois 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 só vez. Você pode executar seus scripts interpretados rapidamente ou compilá-los em binários. Existem milhares de módulos para estender a funcionalidade. Você pode criar uma calculadora gráfica como a que acompanha o Windows ou criar um cliente de IRC ou qualquer outra coisa.
O XKCD descreve o poder do Python um pouco melhor:
Você pode mudar para C # ou Java depois disso, embora eles não ofereçam muito o que o Python ainda não possui. A vantagem disso é que eles usam sintaxe no estilo C, que muitos idiomas (ouso dizer mais?) Usam. Você ainda não precisa se preocupar com o gerenciamento de memória, mas pode se acostumar a ter um pouco mais de liberdade e menos manipulação do intérprete de idiomas. O Python impõe espaço em branco e recuo, o que é bom na maioria das vezes, mas nem sempre. C # e Java permitem que você gerencie seu próprio espaço em branco enquanto permanece com o tipo forte.
A partir daí, o padrão é C ou C ++. A liberdade nessas línguas é quase existencial. Agora você está encarregado de seu próprio gerenciamento de memória. Não há coleta de lixo para ajudá-lo. É aqui que você ensina os algoritmos realmente avançados (como mergesort e quicksort). É aqui que você aprende por que "falha de segmentação" é uma palavra de maldição. É aqui que você baixa o código-fonte do kernel do Linux e olha para o Abyss. Comece escrevendo um buffer circular e uma pilha para manipulação de strings. Depois, suba.
fonte
Um bom curso de python é a Introdução suave à programação do MIT usando Python . É tudo grátis online, e você não precisa ser um estudante do MIT para entender o assunto.
fonte
Pacote Python VPython - Programação 3D para Mortal Comum ( tutorial em vídeo ).
Exemplo de código:
Bola quicando VPython http://vpython.org/bounce.gif
fonte
Comece com os gráficos Turtle em Python.
Eu usaria os gráficos de tartaruga que são padrão no Python. É visual, simples e você pode usar esse ambiente para introduzir muitos conceitos de programação, como iteração e chamadas de procedimento, antes de ficar muito longe da sintaxe. Considere a seguinte sessão interativa em python:
Ao tentar realizar as duas últimas tarefas, elas terão muitas tentativas fracassadas, mas as falhas serão visualmente interessantes e aprenderão rapidamente enquanto tentam descobrir por que não desenhou o que esperavam.
fonte
O principal é que a pessoa em questão precise ter algum problema que deseja resolver. Se você não possui um programa que deseja escrever (e algo sensato e bem definido, não "Quero escrever o próximo Quake!"), Não pode aprender a programar, porque não tem nada para motivá-lo. . Quero dizer, você pode 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 deseja escrever, nunca entenderá a provocação.
Se esse ímpeto existe, tudo o resto são apenas pequenos detalhes.
fonte
Eu não sei se alguém já mencionei isso aqui, ainda, mas você pode querer verificar para fora Zed Shaw s' Aprenda Python the Hard Way
Espero que isto ajude
fonte
http://tryruby.hobix.com/"> Experimente o Ruby (no seu navegador)
fonte
Como criar programas
Estrutura e Interpretação de Programas de Computador . Palestras em vídeos em http://www.swiss.ai.mit.edu/classes/6.001/abelson-sussman-lectures/
fonte
Este é um livro fantástico que meus irmãos mais novos costumavam aprender:
http://pine.fm/LearnToProgram/
Obviamente, o mais importante é iniciar um programa real e útil de algum tipo IMEDIATAMENTE depois de terminar o livro.
fonte
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 acabe. 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 oi-lo pode ser simplesmente implementado a partir da linha de comando em 20 a 30 linhas de código (dependendo do idioma, é claro) e fornece variáveis, condições, loops e informações do usuário.
fonte
Eu apenas deixei ele escrever toneladas de código. Deixe que ele dirija tudo o que vocês fazem e esteja disponível para responder a perguntas.
Acredite ou não, depois de alguns meses escrevendo toneladas de códigos ruins, ele começará a entender e começar a escrever programas melhores. Nesse ponto, você pode ficar atolado em 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 toda vez que eles praticam, eles melhoram alguma coisa, por menor que seja. Deixe seu irmão praticar, e ele melhorará toda vez que se sentar ao teclado.
fonte
Primeiro de tudo, comece como todo mundo: com um programa Hello World . É simples e oferece uma sensação básica do layout de um programa. Tente e lembre-se de quando você estava programando pela primeira vez e como alguns dos conceitos eram difíceis - comece simples.
Após o Hello World, passe à criação de algumas variáveis básicas, aritméticas, e depois na lógica booleana e nas instruções if / else. Se você tem um de seus livros antigos de programação, confira alguns dos primeiros exemplos e peça que ele os analise. Apenas não tente introduzir muita coisa de uma só vez, ou será esmagador e confuso.
fonte
Algo que você deve estar atento ao ensinar seu irmão a programar é que ele não confie demais em você. Muitas vezes, quando me vejo ajudando os outros, eles começam a pensar em mim como um livro de respostas para todas as perguntas e, em vez de tentar encontrar uma resposta, simplesmente me perguntam. Muitas vezes, o melhor professor é a experimentação e toda vez que seu irmão faz uma pergunta como "O que acontecerá se eu adicionar 2 a uma string?" 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 um código de exemplo em que podemos examinar cada segmento individualmente e explicá-lo peça por peça. Como observação, as pessoas novas em programação geralmente têm problemas com a idéia de programação orientada a objetos,
fonte
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 com o tipo de programa que os de gerações mais antigas lembram como digitação básica. Os mais complexos usam ncurses, o que meio que nega seu uso como um auxílio didático, mas algumas são pequenas coisas e você pode aprender muito sem ser ensinado.
Pessoalmente, acho que Python e Ruby seriam ótimas primeiras linguagens.
EDIT: lista de tarefas de programação iniciantes apareceu durante a noite pode ser exatamente o que você está procurando.
fonte
Realmente depende do estilo de aprendizado de seu irmão. Muitas pessoas aprendem mais rápido, sujando as mãos e se metendo nisso, cristalizando os conceitos e o cenário geral à medida que progridem e constroem seus conhecimentos.
Eu, prefiro começar com o quadro geral e me aprofundar no âmago da questão. A primeira coisa que eu queria saber era como tudo se encaixa, então todo aquele livro de ideias orientado a objetos, depois sobre classes e instâncias e assim por diante. Eu gosto de conhecer os conceitos subjacentes e um pouco de teoria antes de aprender a sintaxe. Eu tive uma vantagem, porque escrevi alguns jogos no BASIC há 20 anos, mas nada desde então.
Talvez seja útil ocultar um processo de produção, começando com uma declaração de missão geral, depois um plano e / ou fluxograma, e depois elaborando algum pseudo-código (inclinado para a sintaxe que você usará finalmente) antes de realmente escrever o código.
A regra de ouro aqui é discutir o estilo de inclinação de seus alunos.
fonte
Se seu irmão tiver acesso ao iTunes, ele poderá fazer o download de palestras em vídeo de um curso introdutório de ciência da computação ministrado por Richard Buckland na Universidade de New South Wales. Ele é um instrutor envolvente e aborda os fundamentos da computação e da linguagem C. Se nada mais, diga ao seu irmão para reproduzir os vídeos em segundo plano e alguns conceitos podem penetrar na osmose. :)
COMP1917 Higher Computing - 2008 Sessão 1 http://deimos3.apple.com/WebObjects/Core.woa/Browse/unsw.edu.au.1504975442.01504975444
Se o link não funcionar, aqui está um caminho:
Página Inicial -> iTunes U -> Engenharia -> COMP1917 Higher Computing - 2008 Sessão 1
fonte
há um wikibook que é muito bom para aprender python .
Não sei como são os wikibooks para outros idiomas, mas eu pessoalmente aprendi python com o wikibook, como era em fevereiro de 2007
ps - se você não estiver familiarizado com os wikibooks , é basicamente a versão da wikipedia da criação de livros. é meio difícil de descrever, mas se você conferir alguns dos livros, verá como ele funciona
fonte
Programação em Python para iniciantes
Programação em Python para a capa iniciante absoluta http://safari.oreilly.com/images/1592000738/1592000738_xs.jpg
fonte
Eu acho que Python é uma ótima idéia. Eu daria a ele algumas tarefas básicas para fazer por conta própria e diria a ele que qualquer beco sem saída que ele atingir provavelmente pode ser resolvido com uma visita ao google. Para mim, pelo menos, resolver um problema por conta própria sempre o fazia ficar melhor do que alguém me dizendo a solução.
Alguns projetos possíveis (em nenhuma ordem específica):
Simulador de troca de moedas. 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 leve a entrada do usuário para escolher que tipo de conversão o usuário deseja fazer. Depois de escolher a conversão e fazê-lo, ele deve retornar ao menu principal.
Aqui está um exemplo de um conversor estendido com a mesma idéia: http://pastebin.org/6541
Faça um programa que use uma entrada numérica e exiba a nota da letra para a qual traduziria. Ele acabará avaliando a entrada em relação às declarações if e elif para descobrir onde ela se encaixa.
Faça um teste simples que passe por várias opções múltiplas ou preencha as perguntas em branco. No final, ele exibirá como o usuário fez. Ele pode escolher qualquer pergunta que quiser.
Pegue uma entrada de um número (presumivelmente grande) de centavos e converta-o em denominações maiores. Por exemplo, 149 centavos = 1 dólar, 1 quarto, 2 centavos e 4 centavos.
Crie um gerenciador de lista simples. Poder adicionar / excluir listas e adicionar / excluir entradas nessas listas. Aqui está um exemplo de gerente de lista de natal: http://pastebin.org/6543
Crie um programa que criará 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, a fim de mostrar onde o usuário está em termos de ampliaçã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 impedir que ele ficasse entediante. Obviamente, isso é muito prática de programação e não o script para o qual muitas pessoas realmente usariam python, mas os exemplos que eu dei são basicamente tirados diretamente de quando eu estava aprendendo via python e funcionou muito bem para mim. Boa sorte!
fonte
Apenas faça com que seja divertido!
Surpreendentemente Scala pode ser o mais fácil se você tentar o Kojo
fonte
Se seu irmão gosta de quebra-cabeças, eu recomendaria o Python Challenge . Eu não o usaria como uma ferramenta formal de ensino em um tutorial individual, mas é algo que ele pode fazer quando você não está junto para se desafiar e se divertir.
fonte
Desafio Python
fonte
Depois de ler alguns e-books gratuitos, descobri que o melhor livro para aprender a programar foi o Head First Programming publicado pela O'Reily Press. Ele usa Python como a linguagem e oferece programas para você trabalhar desde o início. Eles são todos mais interessantes que o 'Hello World'. Vale a pena o dinheiro que gastei nele e, como está fora há um tempo, você poderá encontrar uma cópia mais barata usada no Ebay ou na Amazon.
fonte
Se você deseja ensinar o básico de programação, sem ser específico ao idioma, existe um aplicativo chamado Scratch 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 do Scratch, eles aprendem a criar condições, loops etc. Também há uma comunidade de projetos do zero, de forma que os projetos podem ser baixados - dessa forma, você pode explorar os programas de outras pessoas e ver como eles foram criados.
fonte
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 em que ele esteja interessado e ajudá-lo a aprender as necessidades para que isso aconteça. Sei que sou muito mais inclinado e motivado a fazer algo, se for do meu interesse. Além disso, certifique-se de deixá-lo enfrentar alguns dos problemas mais difíceis, nada é mais satisfatório do que o momento em que você descobre isso sozinho.
fonte
Fui ensinado aprendendo a resolver problemas de uma maneira independente da linguagem, usando fluxogramas e PDL (Program Design Language). Depois de algumas semanas, aprendi a converter o PDL que havia escrito em um idioma. Fico feliz por ter aprendido dessa maneira porque passei a maior parte dos meus anos programando, resolvendo problemas sem estar vinculado a uma linguagem. O idioma que eu uso sempre foi um detalhe de implementação e não faz parte do design.
Ter que resolver o problema dividindo-o em etapas básicas é uma habilidade essencial. Eu acho que é uma das coisas que separa aqueles que podem programar daqueles que não podem.
Quanto a como você lida com a ordem dos conceitos de uma linguagem, acredito que a maneira mais fácil é decidir que é ter um projeto em mente e lidar com os conceitos conforme necessário. 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 isso ajudará você a mapear os conceitos necessários e sua ordem.
fonte
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, embora se houver código Python exibido, isso funcionará :). O ponto é - eles são criados por alguns bons programadores e observam como um bom programa é bom. Você e seu irmão também podem fazer uma programação de pares, que pode ser uma ideia ainda melhor. Só não esqueça de explicar POR QUE você faz algo dessa maneira e não dessa maneira. Eu acho que a melhor maneira de aprender programação é com bons exemplos e tentar nem mesmo ver os ruins.
fonte
Robert Read escreveu um guia útil, Como ser um programador , que abrange uma ampla área de problemas de programação que um iniciante consideraria útil.
fonte