Como professor: Escolhendo uma linguagem de programação adequada

8

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

  1. existem outros fatores que estou perdendo?
  2. E quais idiomas você sugere como opções?
zxcmehran
fonte
2
Para outros critérios que você pode estar ausente, consulte esta pergunta .
David Richerby
1
@DavidRicherby Eu já tinha visto isso antes de postar a pergunta e, é claro, ajudou muito.
Zxcmehran 5/12/16
Experimente Lua.
Ankur #
1
@zxcmehran No tópico paradigmas de programação, eu me deparei com isso hoje na Wikipedia e achei que poderia ser relevante para a sua pergunta: Comparação de linguagens de programação
multiparadigma

Respostas:

11

Minha resposta? Pitão.

Deixe-me explicar abordando todos os seus pontos.

  1. Simplicidade . O código Python parece com o inglês. Sério, quão simples é print("Hello World!")
  2. Generalidade . O Python pode ser usado para desenvolvimento web (via. Flask / Django), análise de dados (via. NumPy / Pandas / SciPy), jogos (via. PyGame), além de inúmeras outras tarefas, devido à grande quantidade de bibliotecas existentes. estamos.
  3. Objetivo mínimo . Você pode fazer alguns OOP em Python, mas não é necessário.
  4. Plataforma . O Python2.7 está presente em praticamente todas as distribuições Linux e há muitos vídeos do YouTube sobre como configurá-lo no Windows / Mac. Se alguma coisa, você pode usar o intérprete on-line que Repl.It oferece.
  5. Preferência do setor . Corrija-me se eu estiver errado, mas o Python sempre foi classificado como um dos idiomas mais populares.

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.

Lawrence Vo
fonte
Obrigado por compartilhar. Eu concordo com você e penso em Python como uma das melhores escolhas.
Zxcmehran 5/12/16
1
Falando em PythonTutor, o JetBrains PyCharm Edu também é uma boa ferramenta para começar com o python.
Zxcmehran 5/12
Trabalho na pesquisa de linguagens de programação e acredito que boas linguagens de programação de uso geral devem ser estaticamente tipadas, mas também acho que o Python é uma ótima linguagem de aprendizado, especialmente para jovens estudantes. Existem muitos fatores que outras pessoas apontaram, mas deixe-me dizer o seguinte: na minha experiência, um iniciante precisa ver seu programa travar e queimar com seus próprios olhos. Se o grande compilador ruim continua dizendo "você não pode fazer isso porque ele trava e queima", isso é de pouca ajuda. Um pouco como eu dizendo aos meus filhos "não toquem no forno, está quente".
Andrej Bauer
1
E nunca subestime o fato de que, em Python, o recuo de blocos torna a estrutura do programa evidente. Basta ter a digitar {e }ou begine endaos 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.
Andrej Bauer
Você também pode programar em python no raspberry pi, o que é bom.
urze
10

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.

Kai
fonte
7

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.

  1. existem outros fatores que estou perdendo?

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:

  1. Qualquer erro de tempo de execução deve ser relatado com uma mensagem de erro clara.
  2. Deve ser digitado.
  3. Não existe uma linguagem de programação única que possa fazer você entender todos os aspectos da programação. Para se tornar um programador real, é preciso aprender muitas línguas, especialmente as radicalmente diferentes.

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.

chi
fonte
1

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.

maxik
fonte
O único ponto negativo de C e C ++ é que o codificador precisa entender algumas estruturas avançadas de sintaxe (como ponteiros) para poder construir algo que parece uma ação real. Na Família C, você não pode alcançar GUIs sofisticadas ou poder mágico da Rede sem entender as partes difíceis do idioma. Como estudante, seria chato se todos os esforços ao longo de um semestre resultassem em alguma lógica sendo executada dentro de uma janela de console preta com um tipo de letra estranho. Portanto, acho que usar uma linguagem com um nível mais alto pode ser mais interessante para eles e incentivá-los a continuar o caminho da codificação.
Zxcmehran 7/12/16
1
@zxcmehran Certo, é por isso que sugeri algo como o Arduino como uma abordagem alternativa.
Max17
C é simples como "administre sua memória você mesmo" é simples. Muitos comportamentos indefinidos são um problema.
djechlin
1

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.)

gnasher729
fonte
0

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)

  • Simplicidade : a sintaxe é bastante fácil de entender e há uma grande quantidade de informações na Web para tutoriais para iniciantes.
  • Simplicidade, Novamente : C # é uma linguagem fortemente tipada, que ajuda a destacar erros antes que o aplicativo seja executado. O Visual Studio é, sem dúvida, um dos melhores IDEs que você pode obter com excelente destaque de sintaxe, suporte ao Intellisense e depuração.
  • Generalidade : Embora possa não ser a melhor opção, eu o usei pessoalmente para uma ampla variedade de aplicativos - de sites e aplicativos de desktop a equipamentos robóticos.
  • Objetivo mínimo : Editar Programação Orientada a Objetos é um estilo de programação focado em encapsulamento, abstração, herança e polimorfismo. O C # possui recursos que facilitam a escrita do código OO, mas não exige que você os use. Você pode escrever um programa em C # proceduralmente.
  • Plataforma : Editar O .NET Core é a versão de plataforma cruzada do .NET Framework. Funciona em Mac, Linux e Windows.
  • Fácil de configurar : não acho que você encontre um idioma e IDE mais fáceis para instalar no Windows. Editar Quanto ao Mac e Linux, não tenho nenhuma experiência com ele, mas existem o VS Code (Win / Mac / Linux) e o Visual Studio para Mac (apenas Mac). Eu diria que estes também seriam relativamente fáceis.
  • Preferência do setor : o C # é definitivamente um idioma profissional, embora você possa procurar por empregos na sua área com base nos idiomas que você está pensando. Usando o Dice , obtive resultados aproximadamente iguais para C # (6.548) e Python (6.639) em todas as ofertas de emprego, mas não sei se o Dice tem um viés de uma maneira ou de outra, ou se existem diferenças regionais significativas.
  • Portabilidade de hardware : Talvez meio ponto aqui - acho que não há muito suporte para a programação de microcontroladores com C # além de algumas placas .NET especializadas como o Netduino , mas o Raspberry Pi é suportado .

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.

tehDorf
fonte
Somente para caras do Windows. Além disso, inteiramente OOP
Eugene
@Eugene Meu erro, eu interpretei mal o argumento sobre a Plataforma, então minha resposta definitivamente estava preocupada apenas com o Windows. Eu o atualizei para o Linux e Mac. Quanto a "inteiramente OOP", também abordei isso na minha resposta atualizada em "Material de objetivo mínimo". Por favor, deixe-me saber o que você pensa.
TehDorf
Embora o C # seja uma linguagem madura, estava fora da minha lista; desde que eu estava assumindo que ele tem um escopo limitado em plataforma e hardware. Apreciando você, está de volta à lista novamente. Obrigado pelos links, vou vê-los.
Zxcmehran
-1

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

srcstorm
fonte
A pergunta menciona como critério: "Preferência da indústria: não é um problema sério. Mas deve ser pelo menos uma linguagem atualmente ativa que permita aos alunos alcançar experiências quase reais de desenvolvimento". Não parece que Lázaro / Pascal se encaixa tão bem nisso. Seria bom documentar em sua resposta quais critérios o Lazarus se dá bem e quais não.
DW
en.wikipedia.org/wiki/... <br/> wiki.freepascal.org/Lazarus_Application_Gallery <br/> delphi.wikia.com/wiki/... <br/> jonlennartaasenden.wordpress.com/2014/11/06/... <br/> <br/> Quando Lazarus alcançou 1.0 marco, ganhou muito interesse. A popularidade não diminuiu desde então. <br/> O Delphi / Lazarus é uma das ferramentas mais populares para o desenvolvimento de aplicativos de desktop. Estruturas para usar o FPC em aplicativos móveis e para servidor também estão sendo desenvolvidas.
Srcstorm