Por que o Python é recomendado como uma linguagem de programação básica? [fechadas]


16

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?


17
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 ...
Péter Török

@ Péter Török: Sim, e leva todo o seu pé (c ++: D). Eu disse "mais estático" tentando evitar guerras de chamas por algo como ... eu não sei ... Java?!?! ... que todo mundo parece odiar, como se pensa nas escolas / universidades e as pessoas têm algum sustos a partir dele ...
JohnDoDo

1
Eu acho que o C ++ é uma linguagem inicial melhor, porque me ajudou a entender melhor as coisas em outros idiomas.
systemovich

1
Eu tenho meus bifes com python como linguagem inicial depois de assistir a uma aula de programação do primeiro semestre que a usou. Os alunos muitas vezes não entendiam 'tipos' e as dependências de espaço em branco os matavam. Eles também tiveram dificuldade em entender os objetos com esse "auto-referenciamento" que considerava o negócio de OO. Tem seus méritos, mas definitivamente tem seus detratores também.
Rig

2
@MahmoudHossam Concordo. Eu estava apenas destacando alguns dos pontos negativos da minha experiência. Java, C #, Lisp, etc, todos têm seus problemas. Esses foram apenas os principais problemas que encontrei ao ensinar python a programadores iniciantes.
Rig

Respostas:


30

Na IMO, os pontos mais importantes que falam pelo Python como uma linguagem básica são estes:

  • possui uma curva de aprendizado superficial - ir do nada ao "Hello world" é muito mais rápido do que na maioria dos outros idiomas
  • é intuitivo - a sintaxe foi projetada para seguir o princípio da menor surpresa e é muito consistente no geral (infelizmente, as bibliotecas padrão nem sempre seguem essa consistência)
  • requer muito pouco clichê : um "Hello world" típico é uma linha de código e programas simples podem ser escritos sem nenhum ruído adicional de fundo que precisa ser explicado (como palavras-chave de declaração de função, instruções de importação, construções de classe, diretrizes de pré-processador, etc.)
  • existem ferramentas excelentes e diretas para trabalhar com código python, especialmente o intérprete interativo; você não precisa aprender um sistema de compilação, IDE, editor de texto especial ou qualquer outra coisa para começar a usar o python - basta um prompt de comando, o editor interativo e um editor de texto simples
  • usa digitação dinâmica , mas, diferentemente de muitas outras linguagens de tipo dinâmico, os tipos são transparentes e as armadilhas relacionadas a tipos são raras

Só quero enfatizar a intuitividade do idioma. Vi pessoas com 0 experiência em programação aprenderem rapidamente Python. Isso ocorre principalmente porque a sintaxe / gramática está muito próxima do inglês falado.
Stephen Gross

12
No seu último ponto: as pessoas geralmente misturam digitação dinâmica com digitação fraca. Python é digitado dinamicamente (tipos associados a valores em vez de variáveis), mas também é digitada fortemente (para que os programas falhar em vez de erros de conversão engolir em silêncio)
hugomg

@missingo I second - olhos de águia que você tem;)
yati sagade

@missingno: Eu sei a diferença. Um exemplo de tipos não transparentes são as chaves de matriz do PHP - as matrizes se comportam de maneira diferente para chaves inteiras do que para qualquer outro tipo; se você adicionar dois números inteiros suficientemente grandes, poderá acabar com um ponto flutuante. E esse é apenas um exemplo - especialmente PHP e javascript (as duas linguagens dinâmicas mais populares no desenvolvimento da Web) estão cheios de casos obscuros de digitação.
tdammers

A julgar pelo seu comentário, por "tipos são transparentes", você quer dizer que as regras que governam os tipos são fáceis de entender? O que exatamente você pretendia dizer?
Phant0m

8

O olá mundo em python:

 print "Hi there"

olá mundo em Java:

 class HelloWorldApp {
  public static void main(String[] args) {
    System.out.println("Hello World!"); // Display the string.
    }
  }

olá mundo em C:

  #include<stdio.h>
  int main(int argc, char** argv)
  {
    printf("Hello World");
   }

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.


15
Você esqueceu o "retorno 0;" declaração na sua implementação C :) Aviso do compilador!
Stephen Gross

2
É por isso que o BASIC existia em primeiro lugar. 10 IMPRIMIR "Olá, mundo!" 20 END Para crédito extra, o programa Python falha no "Ele disse 'Hello World!'?" teste de unidade :-)
Ross Patterson

3
O mesmo em F #: printfn "Olá, mundo!". Yay, F # é bom para iniciantes!
31 de

7

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


1
Sim, mas sobre essas partes "particulares", já que você tem acesso a elas, você pode ser tentado a hackear algumas soluções alternativas / atalhos em torno delas sem saber melhor.
JohnDoDo

@JohnDoDo Que diferença faz se, em C # ou Java, eu decidi converter privatecampos publicem hackear? BTW, em Python, você pode prefixar a propriedade com um sublinhado para torná-lo privado (embora não realmente escondido)
OnesimusUnbound

4

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ê apenasprint "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:

  • Muitas bibliotecas que fazem muitas coisas
  • Flexibilidade para ensinar técnicas de programação orientada a objetos e funcionais sem parecer que uma delas foi forçada a se encaixar em uma linguagem projetada para fazer a outra.

3
Contra-analogia: Ensine seu filho a não brincar com fogo. 1) Você pode conversar com ele, explicar o que é o fogo e o que é o fogo, mostrar slides do PowerPoint o que for .. ou 2) deixá-lo brincar com o fogo e se queimar. O segundo método é muito mais eficiente. O que me interessa é a possibilidade de ele incendiar a casa ou até gostar dela e se tornar um piromaníaco, porque nenhuma medida de segurança foi tomada. É uma situação extrema, mas não é possível expressá-la em palavras.
31411 JohnDoDo

1
@JohnDoDo - Então, deixe-o se queimar ... é a melhor escola e quem não se queimou em uma partida quando criança? Não vai matá-lo ...
Rook

1
@ JohnDoDo: Só porque a linguagem permite que você brinque com fogo não significa que o professor não aponta que o fogo é muito perigoso e explica uma maneira de evitá-lo. Eu acho que a outra coisa que você está perdendo é que alguém não está vinculado a um idioma. Depois de obter um entendimento básico de programação, eles podem usar uma linguagem diferente para aprender conceitos maiores (como não queimar o prédio).
Unholysampler

3

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.


2

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.


1

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.


1

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:

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

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

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

  4. 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".


1

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:

#include <stdio.h>

int main(char *args[])
                                                                     {
   int A = 1, B = 1, C;
for (int X = 0;X < 20;X++)
{
   printf("%d\n", A);
C = B + A;
      A = B;  B = C;
}
        }

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.


0

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 !


-1

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.