Eu li aqui no P.SE mais perguntas nas quais os programadores iniciantes são aconselhados a escolher o Python como sua primeira linguagem de programação.
Não me interpretem mal, eu gosto de Python. Eu gosto muito! Mas sua filosofia gira em torno de "Todos nós somos adultos concordantes aqui".
Do ponto de vista da experiência / conhecimento, um programador iniciante não é um adulto. O que significa que é mais fácil dar um tiro no pé e pegar alguns maus hábitos, mesmo se você sobreviver à ferida.
Penso que em uma linguagem "mais estática" seria mais difícil dar um tiro no próprio pé, pois será mais restritivo.
Voltar à minha pergunta. Por que o Python é recomendado como uma linguagem de programação básica?
Quais são os pontos que o tornam bom para o ensino de uma linguagem de programação. Ou ... é a preferência pessoal do consultor?
I'm thinking that in a "more static" language it would be harder to shoot yourself in the foot
- bem, C e C ++ são estaticamente tipados e você ficaria muito, muito surpreso ao ver quantas maneiras diferentes você pode usar seus pés ...Respostas:
Na IMO, os pontos mais importantes que falam pelo Python como uma linguagem básica são estes:
fonte
O olá mundo em python:
olá mundo em Java:
olá mundo em C:
Jogue em ter que falar sobre compilação para os outros dois, e python é muito mais simples. Eu só tenho que falar sobre a única idéia que estou interessado em ver, toda a maquinaria que complica o assunto simplesmente desaparece em python. Eu posso esperar até que estejam prontos para falar sobre módulos, não há necessidade de apressar para obter o stdio.h para programas simples. Eu posso esperar até que estejam prontos para tópicos como aulas, não é necessário apressá-los para seus primeiros programas. Ele tem um REPL para brincar na linha de comando. Python é muito bom em ser conceitualmente mínimo. Isso é bom porque ajuda os iniciantes a se concentrarem na tarefa em questão.
fonte
Esse é um ponto de vista incomum.
O consentimento dos adultos é uma parte muito pequena da filosofia do Python. Certamente não "gira" em torno disso. Nem sequer faz parte do "Zen of Python" que você obtém se fizer
import this
no intérprete.Outras coisas, como "explícito é melhor que implícito", "Simples é melhor que complexo" e "Legibilidade conta" são muito mais centrais para o Python, e mostram por que o Python é uma boa primeira linguagem.
De qualquer forma, os "adultos concordantes" são realmente apenas sobre a falta de objetos particulares no Python. O que, em minha opinião, é outra indicação de por que é bom para iniciantes: você não precisa se preocupar com coisas como interfaces quando está começando.
fonte
private
campospublic
em hackear? BTW, em Python, você pode prefixar a propriedade com um sublinhado para torná-lo privado (embora não realmente escondido)Existem dois pontos diferentes. Ao criar um filho, você deve colocá-lo em uma bolha que tenha apenas coisas seguras ou deixá-lo brincar no quintal onde poderá tropeçar e cair?
Estar dentro da bolha é muito restritivo. Você precisa escrever seu código de uma maneira muito específica para que seja executado. Quando as pessoas começam, tudo o que não existe para fazer o que a pessoa quer é visto como um desperdício. Isso também pode levar a "não sei por que isso existe, mas alguém me disse que é necessário".
No Python, isso não existe. Se você quer dizer "Olá Mundo", você apenas
print "Hello World"
. O uso do Python como ponto de entrada permite que alguém atinja o chão correndo e apenas escreva o código necessário para fazer o que quer que aconteça. Um programador iniciante não consegue entender o valor do encapsulamento antes de entender o básico da programação.Além disso, em pequenos programas, a segurança do tipo não é um grande problema. Qualquer código que um desenvolvedor iniciante escreva será pequeno e contido. Não é até que você tenha uma base de código maior, com muitas seções que você usa como camadas de abstração e não pensa ativamente, quando a segurança de tipo mostra os benefícios de garantir que você faça o que precisa. Quando todo o código está no mesmo arquivo, é mais fácil olhar a função e ver o que você fez de errado.
Outros benefícios:
fonte
O Python é uma ótima linguagem para iniciantes, porque simplifica as coisas simples, tornando possíveis coisas complicadas o suficiente para que não seja considerada uma linguagem inútil de brinquedo e até programadores avançados acham que é a ferramenta certa para alguns trabalhos. Especificamente, coisas simples incluem:
Um mínimo absoluto de código padrão para programas simples.
Coleta de lixo.
Digitação dinâmica.
Sintaxe limpa e simples.
Compare isso com, por exemplo, Java ou C ++ e a dificuldade de explicar todos os conceitos envolvidos em um programa "Olá, mundo". Coisas complicadas incluem:
Introspecção (o equivalente em Python à reflexão).
Remendo de macaco.
O que pode ser feito com a enorme biblioteca padrão.
Dito isto, ninguém que conhece apenas Python é um bom programador, porque ninguém que conhece apenas uma linguagem ou um estilo de linguagem é um bom programador. Qualquer um sério sobre a programação deve , eventualmente, aprender algo de nível inferior, não apenas enquanto ele / ela ainda está tentando Grokar controle de fluxo, recursão e outras básico.
fonte
Eu vejo o Python como uma boa escolha. Normalmente, para a programação de nível básico, você deseja algo simples e produtivo. Receber feedbacks rápidos apóia a motivação e a velocidade do aprendizado. Ouso dizer que não se trata de aprender o "caminho certo", mas de "ficar viciado e se apaixonar pela programação para a vida toda". O resto virá bem depois, através da experiência, ensino médio, o que for.
fonte
IMHO, ensinar as pessoas a codificar em idiomas "seguros" é uma péssima idéia. As pessoas assumem que tudo é fácil e só pensam em adicionar camadas e camadas de código. E perder qualquer chance de poder depurar / corrigir problemas quando eles surgirem.
Bons programadores absolutamente precisam conhecer C / C ++ ou mesmo montagem. E a mentalidade deles também tem que vir desse lado. E não - "Oh, GC, faz Magic (TM), somos legais, e por que o C ++ não tem GC, é estúpido." atitude.
fonte
Para um programador iniciante, a falta de tipos estáticos é um recurso, não um bug!
Ao aprender a programar, mesmo as coisas mais óbvias podem ser difíceis de entender. Os sistemas dinâmicos são muito simples e afastam-se dos tópicos mais urgentes de um curso introdutório, como modularização, fluxo de controle etc.
Há também algumas vantagens conceituais para a digitação dinâmica em um ambiente educacional:
Tipos estão associados a valores, não a variáveis. Isso é sem dúvida mais intuitivo, pois reflete o motivo pelo qual os programas realmente travam.
As mensagens de erro são muito mais imediatas e concretas. No Python, você obtém um adorável rastreamento de pilha e uma mensagem indicando o que realmente deu errado. Em uma linguagem de tipo estaticamente, você recebe um aviso do compilador dizendo o que poderia dar errado.
Os alunos que trabalham com um compilador só podem trabalhar em programas que compreendem completamente, para que não encontrem um erro de compilação que não possam resolver.
A verificação de erros em tempo de execução permite executar programas incompletos. Isso permite programas mais incrementais, nos quais o aluno pode se preocupar primeiro em corrigir o início do programa e só então ver o que acontece.
Alguns conceitos importantes, como polimorfismo paramétrico e tipagem de pato, são fornecidos de graça em uma linguagem dinâmica, mas requerem sistemas de tipos mais complexos em uma linguagem estática.
Por fim, enquanto você ainda precisa lidar com a mesma complexidade, não obtém todos os benefícios da digitação estática ao iniciar o programa:
Os programas iniciantes são pequenos e não possuem muitos caminhos de código (portanto, você não precisa se preocupar muito com erros de digitação em bits de código raramente acessados)
Os programas iniciantes não usam tanto interfaces e funções de alto nível que também não há muito a ganhar no departamento "use o tipo de sistema para projetar o programa".
fonte
Há uma coisa muito, muito , muito importante sobre o Python para programadores iniciantes que todo mundo parece ter esquecido: forçar recuo válido.
Como alguns outros comentadores, eu ensinei iniciantes por alguns anos. Era irritantemente comum ver coisas assim:
Agora imagine essa inconsistência horrível em cerca de cem linhas de código. Para alguns estudantes, a totalidade de todos os seus projetos era assim.
Não tenho idéia de como eles conseguiram, e isso nunca os incomodou. Toda vez que eu perguntava, a resposta deles era algo como "Bem, isso não importa, porque o compilador descobrirá." Mesmo quando eu mostro a eles um erro óbvio, corrigindo o recuo, eles ainda não têm idéia.
No Python, esse tipo de recuo é simplesmente inválido. Eles são forçados a usar algo que seja pelo menos legível, mesmo que seja um pouco inconsistente. Dá a eles um hábito que, espero, continuará quando eles finalmente aprenderem outro idioma.
fonte
Python é uma excelente primeira linguagem pela maioria dos motivos mencionados acima. Em particular, um requisito de uma primeira língua é uma curva de aprendizado suave, que o Python possui. Você não precisa saber tudo sobre aulas, por exemplo, para começar. A esse respeito, é um pouco como o Básico em que muitos de nós começamos.
Uma coisa que não foi destacada até agora é que muitos idiomas têm uma curva de aprendizado suave, mas rapidamente se deparam com uma parede de tijolos ao tentar fazer coisas mais avançadas. O Old-school Basic é um bom exemplo disso. Com o Python, você pode entrar em coisas muito avançadas antes de sentir que alguma outra linguagem pode ser uma escolha melhor.
Naquele momento, um iniciante é capaz de entender mais sobre escolhas e trocas e está pronto para C / C ++, Java, Assembler, Prolog, Lisp, etc. Na verdade, o Lisp também pode ser uma boa primeira linguagem, embora seja bastante austero !
fonte
O principal problema do Python como primeira linguagem é a digitação dinâmica e a falta de declaração de variáveis. IMHO eles são o único grande problema com o idioma.
A simples adição de uma linha dizendo que eu só vou armazenar uma string na variável foo permite que o programador, o ambiente de desenvolvimento, a linguagem (e para o "código profissional" o pobre idiota que tenha que entrar no frio e apoiá-lo depois) trabalhar juntos. Especialmente para desenvolvedores e iniciantes normais, não faz sentido usar uma variável para mais de um tipo. Não há problema em raras ocasiões em que faz sentido usar um tipo explícito de var / objeto que permita a digitação dinâmica.
fonte