Não tenho certeza se é o lugar certo para esta pergunta. Desculpe se for um pouco fora de tópico.
A escolha de um idioma adequado para o primeiro curso de programação é uma das coisas mais importantes que todo professor / professor relacionado deve ter em mente; especialmente se os alunos são jovens ou têm um conhecimento limitado de matemática.
Atualmente, estou ensinando um grupo de jovens altamente entusiasmados (entre 16 e 17 anos) com um conhecimento médio de matemática . Eles estão cursando o ensino médio na 10ª classe agora. Vou começar a ensinar uma linguagem de programação para o próximo semestre.
Eles são um grupo de estudantes escolhidos a dedo por toda a cidade, com um nível extraordinário de criatividade e diligência, então eu vejo que trabalhar com uma linguagem de programação real não seria uma tarefa difícil para eles. Portanto, a escolha de soluções gráficas simples e de arrastar e soltar, como Turtle Art, Scratch e Tynker, não são consideradas opções.
Existem alguns fatores que devem ser verificados antes de fazer uma escolha:
- Simplicidade : a maioria deles provavelmente nunca experimentou nenhum tipo de ação de codificação real antes.
- Simplicidade, Novamente : Uma das idéias principais é ensinar a pensar algorítmico . Ter uma linguagem sofisticada ou com pouca sintaxe os desviará do caminho.
- Generalidade : é melhor que a linguagem não seja projetada para casos especiais de desenvolvimento. Tome o PHP e o MATLAB como exemplos projetados respectivamente para desenvolvimento na Web e cálculo / modelagem.
- Objetivo mínimo : sem programação OO forçada (como Java). Ou pelo menos com a dependência mínima dos conceitos de OO.
- Plataforma : É importante ter o Windows como um ambiente de desenvolvimento suportado, pois quase todos eles estão no Windows.
- Fácil de configurar : é melhor ter uma maneira direta de configurar o ambiente de desenvolvimento.
- Preferência do setor : não é um problema sério. Mas deve ser pelo menos uma linguagem atualmente ativa que permita aos alunos alcançar experiências de desenvolvimento quase reais.
- Portabilidade de hardware : É importante (mas não obrigatório) que o idioma seja flexível o suficiente para ser usado na programação de hardware. (Não estou falando de linguagens de descrição de hardware como Verilog e VHDL.) O objetivo é programar para hardware mais simples baseado em processador, como AVR Microprocessors ou interface Raspberry Pi GPIO .
Eu quero saber isso
- existem outros fatores que estou perdendo?
- E quais idiomas você sugere como opções?
fonte
Respostas:
Minha resposta? Pitão.
Deixe-me explicar abordando todos os seus pontos.
print("Hello World!")
Na minha experiência de ensino, é extremamente importante garantir que a sintaxe seja o mais fácil possível de escrever e entender. Para um novo programador, pode ser bastante desanimador quando ele / ela escreve código apenas para ver uma mensagem de erro (especialmente se ele / ela não tem a habilidade de ler uma mensagem de erro e depurar).
Nota: o PythonTutor será realmente útil para explicar alguns dos principais conceitos de ciência da computação / programação.
fonte
{
e}
oubegin
eend
aos blocos delimitam de código é um fardo cognitivo significativo em um aluno iniciante. Se você pensa o contrário, mude para esquema e veja o que pensa sobre os parênteses.fundo
Esta questão levanta sua cabeça feia a cada 5 anos ou mais em nosso departamento. Tínhamos Miranda e Pascal há muito tempo, depois tivemos Haskell, agora temos C porque o departamento de EE decidiu nos enviar seus alunos como antes, mas exigiu "algo prático como C" e nossa liderança covarde não tinha nada melhor a fazer do que obedecer.
Por que nenhum dos recomendados acima?
Eu ensinei um pouco disso e vi alunos saírem disso por quase 20 anos. A única coisa que se destacou foi que a linguagem dificilmente importa, desde que permita expressar conceitos fundamentais de computação com facilidade suficiente e que, se você não fizesse a coisa certa, receberia boas mensagens de erro, de preferência do compilador. É aí que o python falha. Tipos são importantes! É aí que C falha: os tipos são importantes e o polimorfismo é importante! (E não, tornar tudo com o tipo void não é uma solução. Você simplesmente muda para o python land.) É aí que o java falha: os programas não se encaixam nos slides - há muita placa de caldeira e verbosidade.
Então, pessoalmente, eu não concordaria com nenhuma das respostas acima. Eu iria com Haskell. Está maravilhosamente alinhado com a matemática. É mais conciso do que qualquer um dos outros. Você pode se concentrar no essencial da computação. E o ghc tende a produzir código melhor e mais rápido do que os compiladores C, para as fracas tentativas de otimização que testemunho toda vez que deixo os alunos usarem C.
Mas realmente..
Dito isto, na minha experiência, o mais importante é que o professor realmente conhece o idioma melhor do que apenas com alguns cursos online. Os primeiros idiomas são exatamente isso, os primeiros idiomas. Se seus alunos estão falando sério, eles vão aprender muito mais ao longo do caminho. Concentre-se nos conceitos e não na sintaxe.
fonte
Esta questão é altamente opinativa, na minha opinião. Não há nada que possa desencadear uma guerra santa como "qual idioma é o melhor para o X". Ainda assim, eu vou morder.
Primeiro, recomendo que você leia o que Dijkstra disse sobre o ensino . É antigo, mas ainda é relevante - possivelmente muito, muito mais relevante hoje do que era no passado.
Segundo, eu também recomendaria a leitura de um post de Joel Spolsky sobre o mesmo tópico.
Terceiro, e menos importante, meus próprios critérios para um primeiro idioma seriam:
O ponto 1 é muito, muito útil para iniciantes. A maioria das linguagens satisfaz isso, com a exceção notável de C e C ++. Embora eu ache que C seja uma linguagem obrigatória para qualquer programador (consulte o ponto 3), acho que é desnecessariamente difícil para um iniciante. A coleta de lixo é praticamente um pré-requisito para o ponto 1.
O ponto 2 é o mais controverso. Embora eu acredite que também deva aprender a trabalhar em uma linguagem não tipada (novamente, ponto 3), acho que começar com tipos é mais benéfico. Mesmo em um ambiente não tipado, os programadores costumam pensar sobre que tipo de dados deve ser passado para uma sub-rotina. Além disso, é bom detectar erros antes do tempo de execução.
O ponto 2 exclui muitos idiomas. Observe, no entanto, que o Python não está descartado: enquanto o Python não é digitado, há o maravilhoso projeto mypy , que permite usar um Python digitado. Além disso, o Perl6 possui digitação opcional (gradual), de modo que ainda estaria presente. Typescript também adiciona tipos ao JavaScript. Mesmo que Lisp e Scheme sejam descartados, há muitas linguagens de programação funcional digitadas para escolher (Ocaml, Haskell, F #, ...).
O ponto 3 também é importante. É preciso aprender muitas coisas para ser um bom programador. Do material de baixo nível (ponteiros, C) ao nível mais alto (recursão, fechamentos, polimorfismo / genérico paramétrico, ...), diferentes paradigmas (imperativo, funcional, lógico, ...). Isso não pode ser ensinado em um único curso, é claro. Como primeiro curso, você deve abrir o caminho para a estrada cheia.
fonte
Eu iria com a resposta Python, mas também gostaria de recomendar uma alternativa: C.
Minha primeira linguagem de programação foi C e, na época, aprendi que realmente gostei. O professor (e alguns colegas) teria adotado o Java como primeira linguagem de programação, mas foi definido como C. O professor costumava mostrar alguns exemplos de Python para mostrar os benefícios de uma linguagem de programação mais moderna. Enfim, de volta ao tópico:
Simplicidade A sintaxe C é bem pequena, mas de tempos em tempos meio estranha. Você não é forçado a adotar a abordagem do vodoo, mas pode.
Simplicidade, Novamente Como resultado dos primeiros pontos, os algoritmos podem ser implementados bastante compactos e compreensíveis. Pense em Fibonacci ou mais avançado do Knight's Tour.
Generalidade Usando C, você pode implementar o que deseja. Você também pode usar alguns subsistemas, como linguagens de script (Lua).
O Objetivo Mínimo C fala por si aqui. Você precisa ter um bom conhecimento de C para implementar coisas OO.
Plataforma Toda plataforma importante suporta o idioma, escolha um compilador de sua escolha e comece a codificar.
Fácil de configurar C não precisa de um IDE com muitos botões e uma grande variedade de ferramentas. Basta pegar um arquivo make (ou um script) e compilar seu código com alguns comandos. Você pode usar um IDE (Codeblocks, ...) se quiser.
Preferência da indústria Linux, Windows, ...
Portabilidade de hardware Está funcionando bem em microcontroladores AVR ou no Arduino, que também é programável usando C.
Como alternativa, que tal desenvolver uma plataforma acessível como o Arduino (pode haver alternativas melhores). Você pode mostrar todas as coisas algorítmicas usando impressões stdout simples ou colocar algum hardware para funcionar. Pode ser benéfico se o código resultante não apenas imprimir algum texto (ou imagem, ou interface gráfica ou material ...), mas também permitir que um LED pisque ou algo assim. Na minha empresa, às vezes há cursos para alunos em que eles codificam algumas coisas em uma placa Arduino bastante básica e recebemos um bom feedback dos participantes.
Acho que você está fazendo as perguntas certas e desejo tudo de bom para ensinar seus alunos.
fonte
Eu iria para o Swift, usando o Swift Playground. Convém verificar quantas pessoas têm um Mac ou um iPad. Entre os estudantes, é 90% em alguns lugares. Também está disponível online em http://iswift.org/playground , portanto você não precisa de nada além de um navegador. Você pode usá-lo no telefone se não tiver um computador.
Swift é uma linguagem moderna, é uma linguagem segura e é uma linguagem que lhe dará um emprego se você o dominar. (Qualquer novo código que a Apple escreve é escrito em Swift.)
fonte
Edit: Desculpe, sobre isso - eu interpretei mal o seu ponto de vista sobre a plataforma. Basicamente, pensei que você disse que só precisava ser executado no Windows, mas agora vejo que é apenas a maioria dos usuários que está usando o Windows.
A Microsoft vem desenvolvendo suporte para Linux e Mac e VS Code e Visual Studio para Mac , respectivamente, e .NET Core, então acho que essa ainda é uma resposta válida, embora talvez não seja tão forte.
Eu sugiro que você analise C #, a estrutura .NET e o Visual Studio IDE - eles cobrem praticamente todos os seus 7-8 pontos. (dependendo de como você conta os dois primeiros; D)
Como um bônus adicional, a Microsoft possui um programa chamado Imagine (anteriormente DreamSpark), onde eles distribuem muito software livre para professores e alunos no ensino médio e superior. Eles também têm alguns concursos para os alunos.
fonte
Dê uma olhada em Lázaro:
http://www.lazarus-ide.org
O Lazarus é um ambiente de programação baseado no Free Pascal Compiler (FPC). Ele roda muito bem no Windows e também está disponível para outras plataformas importantes. O FPC suporta uma versão modernizada do Pascal, chamada Object Pascal.
O Object Pascal é uma linguagem de programação com vários paradigmas. Você pode escrever código no Pascal padrão e começar a usar os recursos de OO quando precisar.
Aplicativos do mundo real podem ser desenvolvidos usando o Lazarus / FPC. Ambos são bastante maduros, mas você também pode usar o Delphi como uma alternativa comercial.
O FPC pode compilar seus programas em dispositivos como Raspberry Pi ou Android.
Além disso, o futuro de Pascal é brilhante. A linguagem de programação Oberon acabará assumindo a forma mais produtiva de desenvolver software:
ht tp: //www.projectoberon.com
Felizmente, as ferramentas a serem desenvolvidas em Oberon amadurecerão com o tempo. Já existe um compilador interessante para o destino Win64:
https://github.com/congdm/AyaCompiler
fonte