Como educador de CS em nível universitário, a questão de qual linguagem de programação ensinar no primeiro curso de programação geralmente é discutida. Existem milhares de idiomas para escolher e muita febre religiosa (ou fevour) apoiando um campo de idiomas em detrimento de outro. Todo esse viés subjetivo em torno de cada linguagem de programação torna muito difícil para um educador escolher uma.
Minha pergunta é:
Quais critérios objetivos um educador pode usar para selecionar uma linguagem de programação a ser usada como base para um curso de programação universitária no primeiro ano? Qual é a base para esses critérios?
Nota : Eu não quero ver uma lista de linguagens de programação e por que elas são as melhores para usar. A pergunta não é sobre o melhor idioma, é sobre os critérios para selecionar um idioma . As respostas podem, no entanto, usar linguagens de programação para ilustrar pontos específicos.
Essa pergunta foi inspirada em outra questão considerada fora do tópico: https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language .
fonte
SML
simplesmente porque é improvável que qualquer aluno conheça esse idioma de antemão. Isso equilibrou todos os alunos mais ou menos no mesmo nível para iniciar o curso.Respostas:
Vou jogar meus dois centavos, embora acredite que esse assunto seja um poço sem fundo. Não me interpretem mal, acho que é uma pergunta fascinante, mas provavelmente não vamos resolver aqui para satisfação de todos.
Em poucas palavras, eu diria que o idioma deve fazer o que você deseja , de uma maneira simples e inequívoca possível, e não mais .
Minha própria experiência vem do ensino de várias gerações de alunos do primeiro e do segundo ano com a linguagem de programação Oberon . Pessoas que conhecem esse idioma reconhecerão sua influência em minhas opiniões. Observe que esse idioma foi usado para ensinar "Algoritmos e estruturas de dados". Na época (naquela época), programação funcional e design orientado a objetos eram ministrados em cursos separados a partir do segundo ano.
Importante : Antes de abordar as especificidades de qualquer idioma, gostaria de enfatizar que o mais importante é ser absolutamente claro, para você e seus alunos, quais são os objetivos do seu curso. Você está ensinando programação em si ? Ou algoritmos e estruturas de dados? Ou engenharia de software? Antes de escolher um idioma, vale a pena pensar um pouco sobre onde você está indo com ele. Diferenças neste nível (objetivos) é o que provavelmente, na minha opinião, leva à maioria das divergências sobre esse tópico.
Os pontos que considero importantes podem se sobrepor a várias coisas que já foram ditas, mas acredito que a maioria acaba sendo subconjuntos de um dos quatro seguintes:
Simplicidade : Geralmente, os alunos aprendem programação, algoritmos e estruturas de dados, e não os recursos e complexidades de qualquer linguagem de programação específica. Wirth usou a citação de Einstein "Torne o mais simples possível, mas não mais simples" como um princípio norteador no design de Oberon, e existem várias outras línguas por aí que fazem o mesmo. Sua linguagem de programação de escolha deve ser capaz de implementar todos os conceitos exigidos em sua palestra, mas deve fazer isso com o menor conjunto possível de recursos / detalhes. A linguagem de programação geralmente é apenas a ferramenta, não o objetivo.
Sem ambiguidade : um irmão próximo da simplicidade, deve haver uma construção para cada conceito, com o mínimo de sobreposição possível. Pense nisso como se houvesse apenas uma maneira "correta" de implementar todos os conceitos. Três tipos diferentes de loops que semanticamente todos fazem a mesma coisa? Ou quinze maneiras diferentes de incrementar uma variável? Não é bom. Isso também faz corrigir a lição de casa ou geralmente apenas a compreensão de código dos seus alunos um monte mais fácil. Seus assistentes de ensino irão apreciá-lo.
Portabilidade : os alunos irão às aulas com máquinas Linux, Windows e OSX, e o ambiente de programação deve ser o mais semelhante (idêntico) possível nos três. Os resultados de qualquer programa também devem ser idênticos. Esse é outro ponto que os assistentes de ensino, responsáveis por marcar os trabalhos de casa e lidar com perguntas / problemas, apreciarão muito.
Preferência do setor : Sério, devemos começar a nos preocupar com isso apenas se o próprio "setor" decidir a linguagem de programação que mais lhe agrada. Desde a invenção dos computadores, esse tem sido um alvo em constante movimento. No momento, se seus alunos realmente aprenderem a programar, isso não dependerá do idioma. Existem, no entanto, algumas áreas em que a indústria consegue concordar com um padrão, por exemplo,
VHDL para design de circuitosou SQL para consultas de banco de dados, portanto esse ainda é um ponto válido.Novamente, como um idioma se encaixa nessa lista depende fortemente do que você está tentando ensinar!
fonte
WHILE expr DO stmts END
etc.Desenvolver o pensamento algorítmico para resolver problemas como objetivo principal: uma coisa ruim sobre o uso de um paradigma orientado a objetos no primeiro curso é que atrair novos alunos para coisas como herança, polimorfismo etc., distrai-os do objetivo principal acima mencionado. De fato, a introdução de quaisquer considerações secundárias além desse objetivo principal, como engenharia de software, portabilidade, utilidade da indústria etc., é contraproducente, pelo motivo exposto.
Não é uma linguagem orientada a objetos: Atualmente, a maioria das universidades começa a ensinar programação com uma linguagem orientada a objetos. Eu acho que isso é um erro. Existem coisas no mundo que podem ser verdadeiramente entendidas apenas em contraste com o seu oposto. Sem ser exposto a um paradigma processual de programação (dados e funções como dois aspectos separados do programa), a idéia básica de orientação a objetos (dados e comportamento vistos como intrinsecamente ligados) pode ser esquecida por muitos. E porque a programação orientada a objetos é tão importante, perder a ideia básica não é uma coisa pequena. Além disso, como provavelmente em cursos mais altos os estudantes de CS programam principalmente em OO, eles também precisam ser expostos ao lado processual das coisas.
Então, no final, eu iria para uma linguagem processual, evitando recursos avançados, focando no desenvolvimento do pensamento algorítmico. Mas, evitando recursos avançados, não quero dizer evitar problemas desafiadores. Quero dizer, que mesmo problemas desafiadores, os alunos devem ser obrigados a resolvê-lo usando os primeiros princípios, ferramentas simples.
fonte
public static void main()
em Java, que deve estar dentro do contexto de alguma classe. Isso torna o Java menos do que o ideal como primeira linguagem, embora, obviamente, o obstáculo não seja muito grande.public static void main()
por muito tempo. O BlueJ é um bom exemplo de IDE que permite que os alunos escrevam programas sem um únicomain
lugar nele.Como estamos falando do primeiro curso de programação em um programa de Ciência da Computação, eu diria que o aspecto mais importante seria quais conceitos fundamentais de CS ele ensinará aos seus alunos. Como não há linguagem que possa ensinar todos os conceitos de uma só vez, é necessário considerar quais conceitos serão necessários mais adiante.
Não concordo com a noção de @ Kaveh de que a relevância do setor é importante; pode ser um bônus, mas é de menor importância aqui. Com uma base sólida nos princípios de CS, aprender um idioma "industrial" em cursos posteriores será relativamente fácil.
Como observação lateral, independentemente do idioma escolhido para ser o primeiro, é importante sujeitar seus alunos a outro idioma radicalmente diferente o mais rápido possível.
fonte
Minha principal preocupação é a universalidade , no sentido de que aprender essa linguagem de programação deve tornar o aluno capaz de lidar com a maioria das linguagens de programação.
Por mais que eu me arrependa, esse critério exclui linguagens funcionais puras. Também se aplica ao curso que não deve usar recursos exóticos do idioma.
... mas isso é apenas senso comum.
fonte
Ao escolher uma primeira linguagem de programação, há muitos problemas que precisam ser considerados. Muitos deles foram considerados nas respostas acima. Incluo mais 3, pois estas foram parte da minha resposta à pergunta encerrada ( https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language ) que originalmente inspirou essa pergunta . Copiei minha resposta aqui (e a modifiquei) com base na política atual de exclusão de perguntas fechadas.
Aqui estão três pontos a serem considerados, usando algumas linguagens de programação como exemplos.
Programação no grande vs programação no pequeno
Quando você aprende a programar pela primeira vez, é preciso aprender a programar nos pequenos , antes de passar a aprender mecanismos para ajudar a programar nos grandes .
Ao programar em tamanho pequeno, quero dizer escrever programas com menos de 100 linhas. Esses programas envolverão algoritmos que manipulam estruturas simples de dados, possuem um fluxo de controle simples e resolvem problemas simples. Em geral, eles não serão considerados como aplicativos .
Ao programar em geral, quero dizer escrever grandes programas criados a partir de muitos componentes / classes, construindo sobre uma API, com uma GUI, um banco de dados, possivelmente em uma configuração cliente-servidor.
As coisas em que um programador precisa pensar quando programar em pequenas são muito diferentes de quando programar em grandes. A programação em geral exige que o programador pense em modularidade, boas interfaces, bom design, reutilização e muitos outros problemas. As linguagens de programação modernas fornecem muitas construções para ajudar a programar em geral. Essas construções incluem classes, módulos, interfaces, ocultação de informações, etc. Ao programar em pequenas dimensões, esses problemas são muito menos importantes.
Uma linguagem de programação como o C ++ possui muitos recursos para ajudar na programação em geral, mas é mais difícil sentar e começar a escrever um programa muito simples. Java é semelhante.
Por outro lado, uma linguagem como Python, Ruby, Scheme ou Haskell facilita muito a gravação direta de um programa.
Alto nível vs baixo nível
Idiomas como C ++ e C são de nível bastante inferior. Eles permitem que o programador manipule as referências diretamente na memória. Embora isso permita escrever códigos muito eficientes, os detalhes de baixo nível podem ser difíceis para um primeiro programador aprender o idioma. Alguns argumentam que esses detalhes de baixo nível atrapalham a escrita da lógica para resolver o problema.
Uma linguagem de nível superior como o Python facilita a expressão de conceitos mais diretamente em termos do domínio do problema.
Tipo estático vs Tipo dinâmico
C ++, Haskell, Java e muitas outras linguagens são tipicamente estaticamente. Isso significa que o compilador encontra automaticamente locais onde ocorrem erros em potencial com base nos tipos de valores esperados em cada local no código. Há um pouco de guerra religiosa sobre se a digitação estática é boa ou não, mas vou me afastar disso. Um problema com a digitação estática para novos programadores é que as mensagens de erro relatadas pelo compilador geralmente são difíceis de entender. Esse é especialmente o caso dos modelos C ++ e dos programas Haskell em geral.
Python, Ruby e Scheme são digitados dinamicamente. Isso significa que erros são detectados enquanto o programa está sendo executado. Pode-se argumentar que é tarde demais para detectar os erros (mas também se pode usar o teste para evitar tais erros). Mais uma vez, evitando o argumento religioso, a vantagem do tipo de erro encontrado ao escrever programas simples em uma linguagem de programação dinamicamente tipificada é do tipo que esse objeto não sabe como fazer essa operação . No contexto de um pequeno programa, esses erros são fáceis de entender e rastrear.
Idiomas como C têm digitação fraca, o que significa que, embora o compilador ajude com alguns erros, o tempo de execução falha em interceptar outros que ocorrem, como acessos de memória inválidos. Como resultado, a mensagem de erro retornada ao programador é semelhante a "Programa com falha". Uma linguagem digitada dinamicamente interceptaria esses erros e os converteria em uma mensagem de erro mais compreensível.
Outras
Para outros idiomas, diferentes considerações podem entrar em jogo, como o suporte fornecido pelo ambiente de programação, as APIs disponíveis, a qualidade dos livros e os tutoriais on-line, etc.
fonte
Como observação introdutória, considere a possibilidade de apresentar mais de um idioma (em um curso). No meu primeiro mandato, mostramos SML e Java. O contraste tinha sua mensagem própria e importante: escolha a ferramenta certa para o trabalho.
Mas agora para critérios, em ordem arbitrária.
A dificuldade de aprender é uma questão subjetiva, mas importante: você não quer que seu aluno perca tempo aprendendo o idioma, mas fazendo coisas com ele. Indiscutivelmente, linguagens dinâmicas como Ruby podem ganhar nessa frente: você pode alimentá-las com qualquer coisa e existem excelentes tutoriais "fictícios" na web. Se bem me lembro, também existem estudos que mostram que os alunos que não haviam programado antes obtêm melhores resultados com linguagens funcionais do que com outros.
Riqueza : os idiomas devem ser ricos o suficiente para todos os conceitos que você deseja ensinar. Por exemplo, se você deseja discutir funções de ordem superior, precisa de um idioma em que funções sejam valores, como linguagens funcionais ou Scala.
Escalabilidade : é provável que seus alunos não aprendam mais idiomas por conta própria do que aqueles que você lhes mostra. Portanto, você deseja que o (s) idioma (s) escolhido (s) sejam escalonados ao longo dos estudos: eles precisam escrever seus exercícios para animais de estimação agora, mas também podem atacar um projeto de tamanho médio posteriormente. Java e linguagens com ecosfera semelhante são boas escolhas aqui.
Suporte de ferramenta : está relacionado à escalabilidade. Se você espera / quer que seus alunos sejam produtivos com o idioma, então existem bons IDEs, gerentes de criação e bibliotecas. Cascas interativas (Ruby, Scala) também são boas, especialmente para iniciantes. As ferramentas também precisam funcionar em todas as principais plataformas.
Documentação : Você provavelmente não quer realmente ensinar o idioma, mas peça aos alunos que se ensinem com a sua orientação (abstrata). Portanto, uma boa documentação é importante. Indiscutível, quanto mais popular e estabelecida uma linguagem, melhor a documentação. Por exemplo, a documentação do Scala é bastante pobre (mas está melhorando). Ferramentas como o Hoogle são uma vantagem.
Disponibilidade : Na verdade, existem pessoas que ensinam usando o Matlab ou o Visual C ++. Considere que nem todo mundo pode ter uma licença ou uma máquina que possa executar os programas necessários. Você provavelmente deve preferir idiomas gratuitos que são executados em uma variedade de plataformas.
Limpeza : Você provavelmente quer moldar a maneira como seus alunos pensam. Quanto mais bagunçada a linguagem, mais bagunçada elas vão pensar; Eu nunca proporia PHP em um curso. As linguagens dinâmicas em geral têm desvantagens aqui: elas permitem, às vezes até promovem, maus hábitos.
Quais critérios são mais importantes para você do que outros também dependem do que você deseja ensinar. Isso é literalmente um curso de programação? É um curso de algoritmos e estruturas de dados? É um curso que introduz conceitos de linguagens de programação em diferentes paradigmas? É um curso sobre desenvolvimento de software em grande escala?
fonte
For example, if you want to discuss higher-order functions, you need a language where functions are values, such as functional languages or Scala.
... ou C ou Pascal, que tiveram indicadores de função praticamente para sempre. Praticamente a única linguagem (mainstream) que esse critério realmente exclui é o Java.Questão fascinante; Eu gosto da sua ênfase em critérios objetivos. Queremos que os calouros aprendam:
conceitos de programação : A primeira linguagem de programação deve suportar: chamadas de função, iteração, recursão
idéias fundamentais : A primeira linguagem de programação deve suportar matrizes (para os primeiros passos de uma introdução suave a como a memória realmente funciona e como os ponteiros funcionam)
habilidades práticas de programação : como usar o depurador, como usar o criador de perfil, como resolver problemas grandes (uma linguagem de alto nível), como montar sistemas grandes, como decompor problemas (decomposição de problemas), como evitar a escrita código complicado, como comunicar aos seres humanos a intenção por trás de uma série (muitas vezes enigmática) de instruções executáveis.
o fato de existirem bibliotecas pré-escritas para coisas como sort () e como usá-las - ou seja, o fato de que não é necessário escrever tudo do zero.
Outros critérios para um primeiro idioma :
interpretado (feedback rápido ajuda no processo de aprendizagem).
um ambiente interativo que acelera o aprendizado, o teste e a depuração.
código-fonte de alta qualidade está disponível para os alunos lerem nesse idioma
"fácil de ler", "sintaxe que se aproxima da linguagem natural" (para facilitar a leitura e a classificação do SourceCode)
portátil (roda em Mac OS, Windows, Unix). Pelo menos uma implementação de software livre da linguagem.
rápido para ensinar, "poucas dicas" - por exemplo, "[Pode] ser mais rápido ensinar primeiro para iniciantes Python e depois para Java, em vez de Java como o primeiro OOPL". - "Comparação de linguagens de programação orientada a objetos" e TelescopeRule
Matthias Felleisen desenvolveu uma linguagem de programação com mensagens de erro personalizadas para um público iniciante. Ele enfatiza que a escolha de um idioma específico não é tão importante quanto ensinar uma boa metodologia de design. De fato, ele vê o primeiro curso de CS como uma aula de artes liberais, ensinando pensamento crítico, resolução de problemas e atenção aos detalhes.
critérios para uma segunda linguagem de programação
Coisas que queremos que os alunos aprendam, mas talvez isso possa esperar pela segunda linguagem de programação:
uma linguagem "relevante" que "não seja muito esotérica"; algo "popular na indústria"
Teoria da complexidade: como reconhecer tarefas impossíveis com a tecnologia atual.
coisas de nível superior: como escolher a ferramenta certa para o trabalho , como usar um compilador, estruturas, programação orientada a objetos, programação funcional, programação lógica, programação lógica, design do compilador, funções de composição e manipulação (no sentido Lisp / ML), programação concorrente e distribuída,
coisas de baixo nível: aritmética de ponteiros, arquitetura de computadores. gerenciamento de memória, quadros de pilha, programação de montagem, arquitetura da máquina, drivers de dispositivo e design do sistema operacional (para que a máquina não "pareça uma caixa preta assustadora que não pode penetrar")
EDIT: Acho decepcionante que postar um resumo de algo que escrevi, em colaboração com muitos outros, "possa não ser um post legal".
Portanto, estou adicionando uma citação mais formal ao meu link informal anterior, tentando cumprir com o uso justo e outras questões de direitos autorais do wiki.
Esta resposta é um resumo da Primeira Língua do Calouro (Anon 2011) no Repositório de Padrões de Portland.
(Anon 2011) Muitos autores anônimos e vários outros. "Primeira língua de Freshmans". Repositório de Padrões de Portland. 27 de setembro de 2011. http://c2.com/cgi/wiki?FreshmansFirstLanguage .
fonte
Penso que simplicidade e facilidade de aprendizado são um dos principais critérios. Em um curso introdutório de programação, gostaríamos de evitar obstáculos desnecessários à programação e focar o máximo possível nos princípios de programação e resolução de problemas algorítmicos. No primeiro ano, os alunos geralmente não têm a capacidade de pensar algoritmicamente sobre problemas, de modo que o curso também ensina o pensamento algorítmico.
Outro critério é a utilidade do idioma na indústria. Não gostaríamos de ensinar um idioma que não seja útil no setor. Uma clara maioria dos estudantes trabalha no setor, portanto, deve-se observar o que está sendo usado (e será usado quando os estudantes se formarem) no setor.
O terceiro critério seria os cursos que os alunos farão nos próximos anos. Os cursos, principalmente os exigidos, não são projetados por si mesmos, mas em coordenação com outros cursos.
O último em que consigo pensar agora é o mesmo que a resposta do jmad, o idioma deve facilitar o aprendizado de outros idiomas importantes. Deve ser rico o suficiente e aprender as línguas importantes posteriores seria fácil (aqui, meios importantes são importantes da perspectiva dos alunos).
Eu acho que muitas universidades mudaram sua introdução principal ao curso de programação de Java / C ++ / C para Python, embora possam fornecer introdução à programação em outras linguagens de tempos em tempos (geralmente para cursos de ciências não relacionadas à computação, por exemplo, C para cursos de engenharia elétrica) embora possam mostrar flexibilidade se o instrutor quiser experimentar o ensino de outro idioma de vez em quando.
fonte
Então, eu vou dispensar minha reação instantânea imediatamente, que é que todos devem aprender a programar via SICP, porque Lisp é a coisa certa.
Já existem muitos bons critérios para a seleção de um idioma ... a simplicidade e a portabilidade estão entre as mais importantes. No entanto, também acho vital que os alunos iniciantes em programação não tenham a idéia errada (ou não têm idéia) sobre o que está acontecendo nos bastidores com as linguagens modernas.
Embora algumas dessas postagens tenham oferecido excelentes critérios, eu gostaria de usar um idioma específico para ilustrar a aparência de 'atender aos critérios'.
Algumas dessas preocupações foram abordadas (muito melhor do que eu poderia tentar) na postagem de Joel Spolsky, The Perils of JavaSchools . A escolha de linguagens como Java ou Python fecha mais de dois dos conceitos mais difíceis (e mais vitais) do CS; ou seja, ponteiros e recursão.
Obviamente, ensinar um curso introdutório em C será incrivelmente denso, além de provavelmente perder muitos conceitos importantes relacionados à recursão. Da mesma forma, um curso ministrado no Lisp terá que abordar indicadores sob as capas,
car
ecdr
implicar conceitos importantes relacionados a listas vinculadas, enquanto deixa o idioma lidar com os detalhes.Basicamente, o que estou falando é que os alunos precisam entender os fundamentos das estruturas e algoritmos de dados, bem como a implementação prática.
Também discordo da sugestão de não usar uma linguagem orientada a objetos. Eu acho que a utilidade das linguagens orientadas a objetos para modelar o mundo real é um ativo positivo para os novos programadores, desde que a incompatibilidade de impedâncias seja esclarecida e que as linguagens orientadas a objetos sejam um paradigma entre muitos.
Eu proporia que Ruby (sugerido como uma possibilidade por outro post também) exemplifique muitas qualidades para procurar em uma linguagem para usar em uma introdução ao curso de programação.
Justificarei momentaneamente essa afirmação, mas primeiro quero comentar sobre uma tendência que me perturba nos cursos introdutórios de CS. Eu trabalho em uma universidade que, como muitas escolas, recentemente mudou para o Python em seus cursos de introdução. Acredito firmemente que Python é o novo BASIC, e a tendência da linguagem é escolher amizade nova em vez de poder e expressividade, como argumentei recentemente em outro lugar . Isso é um desserviço, e precisamos pensar nos programadores em que eles se tornarão, e não nas novidades que são no momento.
De qualquer forma, justificando Ruby como uma linguagem introdutória ...
malloc()
ensinando-os a estender o idioma em C.De qualquer forma, não há substituto para o aprendizado de muitas línguas, de muitos paradigmas, independentemente de você ser profissional ou não. Basicamente, acho que todos deveriam entender , se não usar , C e Lisp. Ruby é o melhor compromisso que posso pensar para um semestre introdutório.
De qualquer forma ... esse é o meu US $ .02. Não estou tentando convencê-lo a usar Ruby, lembre-se ... apenas use-o como um exemplo de qualidades para procurar em um idioma para ensinar um curso introdutório.
fonte
Minha primeira linguagem de programação foi uma linguagem de montagem de brinquedos. O segundo foi Fortran. No meio, aprendi uma notação de "algoritmos", que era aproximadamente o Algol 60. Acabei bem. Na verdade, acho que o que me ensinaram foi praticamente perfeito.
Quando olhei pela primeira vez para a programação funcional, em trabalhos de pesquisa, embora não em uma linguagem implementada, fiquei "uau, isso é completamente diferente. É bastante matemático!" A maioria das pessoas que aprendem programação funcional ainda tem o mesmo tipo de experiência "uau". Eu acho ótimo.
Eu acho que programação imperativa e programação funcional são duas maneiras completamente diferentes de ver o mundo. Desassistiríamos nossos alunos se lhes roubássemos essa experiência diversificada.
A melhor primeira linguagem de programação deve ser o mais simples e clara possível, para que os alunos possam se concentrar em como pensar com clareza. Infelizmente, a simplicidade e a clareza do assembly, Fortran e Algol 60 são incomparáveis com a maioria das linguagens de programação modernas. Haskell é uma boa exceção. Mas, Haskell seria minha segunda linguagem de programação ideal, não a primeira. Eiffel ou Oberon talvez pudessem se encaixar.
fonte
Na Escola de Ciências e Matemática da Carolina do Norte , apresentamos o Python aos alunos desde 2004. Nós o usamos para ensinar programação procedural, porque achamos que a capacidade de escrever procedimentos curtos e corretos é vital para progredir mais tarde com ferramentas mais pesadas, incluindo OO programação.
Nós gostamos por estas razões.
Python não é uma linguagem de formato livre. Obriga os alunos a escrever seu código em blocos usando indentação. (Como uma nota técnica, usamos o editor de texto do vim e colocamos [
set tabstop=4 set et
] no .vimrc para eliminar problemas irritantes e para que o recuo do código seja perceptível, mas não para causar um desvio horizontal excessivo e feio). Nossos alunos se acostumam a ver a estrutura hierárquica dos programas delimitados por espaços em branco. Como resultado, seus hábitos de formatação tendem a ser muito bons quando programam em outros idiomas.A simplicidade sintática do Python o torna fácil para iniciantes. Programas simples podem ser escritos com um mínimo de palavras-chave misteriosas e encantamentos mágicos. Queremos estudantes que normalmente não pensam em programação para experimentá-lo. Observe a adorável simplicidade do Python
hello.py
; é claro o que está acontecendo.Python é digitado dinamicamente e digitado pato. Isso facilita a introdução de variáveis. Eu digo aos meus alunos que variáveis são apenas etiquetas. Eles apontam para objetos. Você envia uma mensagem para um objeto usando o nome da variável, assim como alguém envia uma mensagem chamando você no telefone.
Python é uma ferramenta que estudantes ambiciosos não superam. Possui bibliotecas sofisticadas que fazem hosts de coisas úteis. É uma ferramenta criativa poderosa que é acessível para iniciantes.
O Python é gratuito e é executado em todas as principais plataformas. Nossa escola é um ambiente heterogêneo de sistema operacional com todos os tipos de máquinas. Não precisamos nos preocupar com dores de cabeça, como problemas de compatibilidade. Ele será executado em praticamente qualquer computador.
Python tem excelente documentação. Incentivamos nossos alunos a explorar, mexer e colorir fora das linhas. Eles aprendem sobre o uso da documentação do Python cedo e geralmente acabam explorando coisas legais fora da classe.
Estamos muito satisfeitos com o Python.
fonte
Eu diria que o idioma (com algumas limitações) não importa tanto quanto o que você faz com o idioma. Você pode aprender o mesmo sobre desenvolvimento de software, algoritmos, programação orientada a objetos, hardware de computadores e assim por diante na maioria dos idiomas. A chave é desenvolver algo interessante, que utiliza todos esses conceitos.
(resposta migrada de https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language/ )
fonte
TL; DR: Não há comoresponder objetivamente a isso, porque não hábase objetiva para os critérios por trás disso. É tão arbitrário quanto tentar discutir se o azul é, objetivamente , uma cor "melhor" que o vermelho, ou se o sorvete de baunilha é objetivamente "mais saboroso" que o chocolate.
Acho que já existem alguns posts maravilhosos, mas vou adicionar meus próprios 2 centavos.
Essa pergunta é semelhante a perguntar se há uma maneira de escolher objetivamente o primeiro sabor de sorvete que alguém deve experimentar ao visitar um local de sorvete pela primeira vez. Não, não existe uma maneira objetiva de escolher algo que seja inerentemente subjetivo .
Por quê? Porque mesmo quando analisamos os critérios razoáveis mencionados na resposta de Pedro , todos ainda terão uma visão subjetiva de como cada fator "se mantém" contra as opiniões de outra pessoa.
Por exemplo, Ruby é objetivamente "mais simples" que Python? Mais simples em que sentido? Com relação a quê? O que significa "mais simples" para você ? Isso significa "menos linhas de código"? Significa "mais fácil de ler e entender"? E os outros? Por que alguém deveria concordar com alguma seleção específica aqui? Não acho que possamos responder a essa pergunta objetivamente .
Isso leva à próxima pergunta.
Por mais razoáveis que sejam alguns critérios, acho que isso se baseia mais na preferência subjetiva do que em qualquer outra coisa. Por exemplo, não há razão para que eu deva aceitar os critérios de simplicidade , inequívoca , portabilidade e preferência do setor de Pedro - independentemente de quão razoáveis alguns possam pensar que seja. De fato, a preferência da indústria é subjetiva por definição e simplesmente levaria a um círculo vicioso. (Todo mundo é treinado nele, então todo mundo o usa na indústria, e é por isso que todo mundo é treinado nele ...)
Por exemplo, por que não
O ponto é que, embora eu possa criar um conjunto diferente de critérios de avaliação e ainda ser considerado razoável, não podemos afirmar que é objetivamente superior / inferior ao de outra pessoa.
Em conclusão, não há base objetiva para os critérios. É tão arbitrário quanto tentar discutir se o azul é, objetivamente , uma cor "melhor" que o vermelho, ou se o sorvete de baunilha é objetivamente mais saboroso que o chocolate.
Isso não quer dizer que você não possa ter boas razões para justificar suas preferências, mas no final do dia, elas são apenas suas preferências.
fonte