associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Diferenças para "PerguntasComunsSobrePython"

Diferenças entre as versões de 1 e 5 (4 versões de distância)
Revisão 1e 2004-07-25 23:34:09
Tamanho: 18472
Comentário:
Revisão 5e 2004-07-26 03:31:12
Tamanho: 18644
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 13: Linha 13:
Para o ensino de programação, você precisa de uma linguagem que não entre no caminho do estudante. Ele está precisando aprender a programar - de uma maneira resumida, encadear ações para resolver um problema complexo - e isso por si só já é complicado. Se é colocada alguma dificuldade adicional, a 'impedância' aumenta, e pode levar a uma série de frustrações. Para o ensino de programação, você precisa de uma linguagem que não entre no caminho do estudante. Ele está precisando aprender a programar - de uma maneira resumida, encadear ações para resolver um problema complexo - e isso por si só já é complicado. Se é colocada alguma dificuldade adicional, a "impedância" aumenta, e pode levar a uma série de frustrações.
Linha 15: Linha 15:
Python sempre é descrito como 'pseudo-código que roda' em listas de discussão mundo afora. Obviamente, para estudantes no Brasil, isso não é exatamente verdade, porque pseudo-código aqui é em português. Mas isso é verdade para qualquer uma das linguagens citadas. Além disso, Python é uma linguagem interpretada, o que significa que o estudante pode ver imediatamente o resultado do que está pensando, e isso é bom para o estudo. Python sempre é descrito como "pseudo-código que roda" em listas de discussão mundo afora. Obviamente, para estudantes no Brasil, isso não é exatamente verdade, porque pseudo-código aqui é em português. Mas isso é verdade para qualquer uma das linguagens citadas. Além disso, Python é uma linguagem interpretada, o que significa que o estudante pode ver imediatamente o resultado do que está pensando, e isso é bom para o estudo.
Linha 21: Linha 21:
C é médio nível, é "assembler", só aborda conceitos estruturais e complica pra implementar conceitos modernos com OO. C++ e Java são bons, mas são linguagens barrocas para se expressar, quer dizer que demora mais para "pegar" o jeito de usar a linguagem. C é médio nível, é ''assembler'', só aborda conceitos estruturais e complica pra implementar conceitos modernos com OO. C++ e Java são bons, mas são linguagens barrocas para se expressar, quer dizer que demora mais para "pegar" o jeito de usar a linguagem.
Linha 23: Linha 23:
Pascal é *linguagem de brinquedo* (não estou falando de Object Pascal), nos anos 80 era uma ótima linguagem para iniciar a programar, mas hoje este papel é cumprido por Python. Pascal é "linguagem de brinquedo" (não estou falando de Object Pascal), nos anos 80 era uma ótima linguagem para iniciar a programar, mas hoje este papel é cumprido por Python.
Linha 35: Linha 35:
Além do mais, é possível fazer código otimizado muito mais rápido em Python do que em C, por exemplo. Além disso atualmente vêm se desenvolvendo tecnologias de compilação JIT (*just in time*) que vêm reduzindo drasticamente a diferença entre aplicações desenvolvidas em linguagens compiladas e linguagens interpretadas. Além do mais, é possível fazer código otimizado muito mais rápido em Python do que em C, por exemplo. Além disso atualmente vêm se desenvolvendo tecnologias de compilação JIT (''just in time'') que vêm reduzindo drasticamente a diferença entre aplicações desenvolvidas em linguagens compiladas e linguagens interpretadas.
Linha 40: Linha 40:
*bytecoding* e compiladores JIT, o fato de ser interpretado há muito tempo deixou de ser um penalizador. É claro que é difícil chegar ao tempo de execução de uma aplicação feita em C, mas por outro lado, uma perda de velocidade significa um aumento no "tempo do programador", no fato dele escrever mais rápido e menos propenso a erro. ''bytecoding'' e compiladores JIT, o fato de ser interpretado há muito tempo deixou de ser um penalizador. É claro que é difícil chegar ao tempo de execução de uma aplicação feita em C, mas por outro lado, uma perda de velocidade significa um aumento no "tempo do programador", no fato dele escrever mais rápido e menos propenso a erro.
Linha 44: Linha 44:
Programas escritos em Python podem ser mais lentos para executar em algumas situações, mas em geral leva menos tempo para implementá-los. Se o problema é realmente desempenho, deve-se implementar as partes críticas em linguagens compiladas ou até mesmo em '''assembler'''. A questão é quanto do código total possui estes requisitos. Programas escritos em Python podem ser mais lentos para executar em algumas situações, mas em geral leva menos tempo para implementá-los. Se o problema é realmente desempenho, deve-se implementar as partes críticas em linguagens compiladas ou até mesmo em ''assembler''. A questão é quanto do código total possui estes requisitos.
Linha 66: Linha 66:
A partir deste ano, estamos introduzindo Python na disciplina de Programação I do curso de Bacharelado em Sistemas de Informação do Instituto Superior Tupy em Joinville, Santa Catarina, substituindo o C++. A partir deste ano, estamos introduzindo Python na disciplina de Programação I do curso de [http://www.sociesc.com.br/ensino/ist/cursos/sistemas_de_informacao.htm Bacharelado em Sistemas de Informação] do [http://www.sociesc.com.br/ensino/ist/index.htm Instituto Superior Tupy] em [http://www.joinville.sc.gov.br/ Joinville], [http://www.sc.gov.br/ Santa Catarina], substituindo o C++.
Linha 74: Linha 74:
Python não é uma linguagem de brinquedo se isso significar que é impossível fazer aplicações de uso real com ela, como editores ou desktops. Aliás, muito pelo contrário. Diversas empresas utilizam Python de maneira 'séria' para ligar seus muitos componentes - veja o [http://www.pythonology.org Pythonology] novamente. Python é utilizada como linguagem de '''scripting''' em diversos programas sérios, como jogos, renderizadores (desses que fazem filmes de sucesso). Se Python não fosse séria - Python não é uma linguagem de brinquedo se isso significar que é impossível fazer aplicações de uso real com ela, como editores ou desktops. Aliás, muito pelo contrário. Diversas empresas utilizam Python de maneira 'séria' para ligar seus muitos componentes - veja o [http://www.pythonology.org Pythonology] novamente. Python é utilizada como linguagem de ''scripting'' em diversos programas sérios, como jogos, renderizadores (desses que fazem filmes de sucesso). Se Python não fosse séria -
Linha 77: Linha 77:
Por outro lado, Python é uma linguagem de brinquedo se isso significa que é possível se divertir com ela. Python segue as definições de 'brinquedo' do projetista de jogos [http://www.costik.com/ Greg Cotikyan], mas isso depende muito mais do Por outro lado, Python é uma linguagem de brinquedo se isso significa que é possível se divertir com ela. Python segue as definições de "brinquedo" do projetista de jogos [http://www.costik.com/ Greg Cotikyan], mas isso depende muito mais do
Linha 80: Linha 80:
Python é uma linguagem séria, ótima linguagem para quem está iniciando e, melhor ainda, poderosa para quem já é programador. Algo difícil de se obter em uma linguagem, diga-se de passagem. É possível se desenvolver qualquer tipo de aplicação em Python. É uma linguagem que dá liberdade ao programador e faz com que ele tenha que se preocupar em resolver os seus problemas e não se preocupar em deixar o compilador 'feliz'. Python é uma linguagem séria, ótima linguagem para quem está iniciando e, melhor ainda, poderosa para quem já é programador. Algo difícil de se obter em uma linguagem, diga-se de passagem. É possível se desenvolver qualquer tipo de aplicação em Python. É uma linguagem que dá liberdade ao programador e faz com que ele tenha que se preocupar em resolver os seus problemas e não se preocupar em deixar o compilador "feliz".
Linha 88: Linha 88:
O que existe de 'programa sério' que utiliza Python não é brincadeira (perdão pelo trocadilho), o Google pode ser citado como
o principal exemplo mais uma vez.
O que existe de "programa sério" que utiliza Python não é brincadeira (perdão pelo trocadilho), o Google pode ser citado como o principal exemplo mais uma vez.
Linha 91: Linha 90:
Dá para escrever programas 'profissionais' com Python, sendo o Zope talvez o exemplo mais notório. Além dele podemos citar: skencil, txt2tags, ERP5, Plone, Schooltool, Chandler, ... Dá para escrever programas "profissionais" com Python, sendo o Zope talvez o exemplo mais notório. Além dele podemos citar: skencil, txt2tags, ERP5, Plone, Schooltool, Chandler, ...
Linha 97: Linha 96:
Pode utilizar: wxPython, PyGTk, !PyQt, !PythonCard, Tkinter, !PyGlade, PMW, Kiwi, ncurses, !OpenGL. Tem também: PIL,VPython. Pode utilizar: wxPython, PyGTk, PyQt, PythonCard, Tkinter, PyGlade, PMW, Kiwi, ncurses, OpenGL. Tem também: PIL, VPython.
Linha 108: Linha 107:
Se você ensina um estudante a utilizar um IDE ele terá um botão para 'compilar e executar' automaticamente o programa. É praticamente a mesma coisa. O professor portanto deve trabalhar isso com os alunos, de tal maneira que esse hábito não se desenvolva. Se você ensina um estudante a utilizar um IDE ele terá um botão para "compilar e executar" automaticamente o programa. É praticamente a mesma coisa. O professor portanto deve trabalhar isso com os alunos, de tal maneira que esse hábito não se desenvolva.
Linha 118: Linha 117:
Sim. Os alunos tendem a ficar com alguns conceitos fracos. Isso, no entanto, não é culpa da linguagem. Os alunos que estudarem de fato vão aprender e reter os conceitos - desde que o professor não tente ensinar história da computação, programação estruturada, programação lógica e funcional, inteligência artificial e construção de compiladores em seu curso de 4 meses. Se seguir um currículo mínimo: introdução a computação e programação estruturada (if-then-else, loops, e conceitos básicos), os alunos que praticarem vão absorver tudo o que é ensinado. Sim. Os alunos tendem a ficar com alguns conceitos fracos. Isso, no entanto, não é culpa da linguagem. Os alunos que estudarem de fato vão aprender e reter os conceitos - desde que o professor não tente ensinar história da computação, programação estruturada, programação lógica e funcional, inteligência artificial e construção de compiladores em seu curso de 4 meses. Se seguir um currículo mínimo: introdução a computação e programação estruturada (''if-then-else'', laços, e conceitos básicos), os alunos que praticarem vão absorver tudo o que é ensinado.
Linha 148: Linha 147:
== Não deveríamos esperar até haver um mercado maior, para entao começar a ensinar utilizando Pyhton? == == Não deveríamos esperar até haver um mercado maior, para então começar a ensinar utilizando Pyhton? ==
Linha 159: Linha 158:
(XXX Será melhor separa em portugues e ingles?XXX)
(XXX O bom seria colocar muitos links, certo?XXX)
Linha 164: Linha 160:
   * How to Think Like a Computer Scientist - Learning with Python <http://greenteapress.com/thinkpython.html>
   * Learning Python <http://www.oreilly.com/catalog/lpython/>
   * Python Programming on Win32 <http://www.oreilly.com/catalog/pythonwin32/>
   * Python in a Nutshell <http://www.oreilly.com/catalog/pythonian/>
   * Core Python <http://starship.python.net/crew/wesc/cpp/>
   * Python Cookbook <http://www.oreilly.com/catalog/pythoncook/>
   * Python How to Program <http://vig.prenhall.com/catalog/academic/product/1,4096,0130923613,00.html>
   * Thinking in Python <http://www.mindview.net/Books/TIPython>
   * Guia de referência Rápida, da Novatec (Em português)
   * [http://greenteapress.com/thinkpython.html How to Think Like a Computer Scientist - Learning with Python]
   * [http://www.oreilly.com/catalog/lpython/ Learning Python]
   * [http://www.oreilly.com/catalog/pythonwin32/ Python Programming on Win32]
   * [http://www.oreilly.com/catalog/pythonian/ Python in a Nutshell]
   * [http://starship.python.net/crew/wesc/cpp/ Core Python]
   * [http://www.oreilly.com/catalog/pythoncook/ Python Cookbook]
   * [http://vig.prenhall.com/catalog/academic/product/1,4096,0130923613,00.html Python How to Program]
   * [http://www.mindview.net/Books/TIPython Thinking in Python]
   * [http://novateceditora.com.br/guias/python/ Python - Guia de Consulta Rápida], da Novatec (Em português)
   * [http://www.fca.pt/cgi-bin/fca_detalhado.cgi/?isbn=972-722-270-6 Python -
Curso Completo]
Linha 178: Linha 176:
   * Tradução em andamento do "How to Think Like a Computer Scientist - Learning with Python", disponível em <http://pensarccpy.incubadora.ansp.br>    * [http://pensarccpy.incubadora.ansp.br PensarCCPy] - Tradução em andamento do ''"How to Think Like a Computer Scientist - Learning with Python"'', para o português.
Linha 180: Linha 178:
Uma boa relação está disponível aqui: <http://www.pythonbrasil.com.br/moin.cgi/Documenta_e7_e3oPython> Uma boa relação está disponível aqui em DocumentaçãoPython.
Linha 193: Linha 191:
=== Autores e colaboradores === == Autores e colaboradores ==
Linha 195: Linha 193:
O autor das perguntas foi o MarcoAndréLopesMendes que também coletou as respostas e organizou-as neste documento. Colaboraram com as respostas: OsvaldoSantanaNeto, RudaMoura, RodrigoSenra, LucianoRamalho, Labaki, RodrigoVieira, JoséAlexandreNalon, AndrewsMedina, DanielRosaFranzini, LuizFreimüller, RodrigoBambooOliveira, DouglasSoaresDeAndrade, LucianoRamalho entre outros (que caso tenham esquecido podem adicionar seus nomes por aqui). O autor das perguntas foi o MarcoAndréLopesMendes que também coletou as respostas e organizou-as neste documento. Colaboraram com as respostas: OsvaldoSantanaNeto, RudaMoura, RodrigoSenra, LucianoRamalho, Labaki, RodrigoVieira, JoséAlexandreNalon, AndrewsMedina, DanielRosaFranzini, LuizFreimüller, RodrigoBambooOliveira e DouglasSoaresDeAndrade entre outros (que caso tenhamos esquecido, podem adicionar seus nomes).
Linha 197: Linha 195:
Peço às pessoas que desejam colaborar com este documento enviem sua colaboração para a lista ou para o Marco e não as coloque diretamente aqui para que possamos manter este documento organizado de forma coerence e concisa. Peço às pessoas que desejarem colaborar com este documento, que escrevam para a lista ou para o Marco. Não adicione diretamente aqui para que possamos manter este documento organizado de forma coerence e concisa.

As perguntas que todo mundo faz sobre Python

Todos que trabalham com Python já devem estar acostumados com as mesmas perguntas sempre, começando com "Python? O que é isto?", acompanhadas de um nariz meio torto e uma testa franzida. Nossa intenção é criar uma lista de PerguntasFrequentes, com o objetivo de mostrar que Python é uma linguagem que pode ser utilizada no ensino de lógica e programação em cursos de graduação. Apesar deste objetivo, acreditamos que as respostas podem ser úteis a todos os interessados em conhecer um pouco mais sobre Python. Esta lista pode ser vista como um complemento ao PerguntasFrequentes disponível neste site.

TableOfContents

Por que Python e não X? Onde X pode ser "C", "C++", "Java", "PHP", "Pascal", "Visual Basic", ...

Python foi criada inicialmente como uma linguagem para ser usada no ensino de programação. Posteriormente essa linguagem foi se tornando extremamente poderosa e iniciou-se o seu uso no desenvolvimento de software comercial.

Python é fácil de ser aprendida, fácil de ser usada, não policia o programador experiente e ao mesmo tempo promove boas práticas de programação para o programador menos experiente.

Para o ensino de programação, você precisa de uma linguagem que não entre no caminho do estudante. Ele está precisando aprender a programar - de uma maneira resumida, encadear ações para resolver um problema complexo - e isso por si só já é complicado. Se é colocada alguma dificuldade adicional, a "impedância" aumenta, e pode levar a uma série de frustrações.

Python sempre é descrito como "pseudo-código que roda" em listas de discussão mundo afora. Obviamente, para estudantes no Brasil, isso não é exatamente verdade, porque pseudo-código aqui é em português. Mas isso é verdade para qualquer uma das linguagens citadas. Além disso, Python é uma linguagem interpretada, o que significa que o estudante pode ver imediatamente o resultado do que está pensando, e isso é bom para o estudo.

É possível fazer tudo o que se faz com linguagens como C, C++, Java, PHP, Pascal, ou VB. A diferença é que se faz de forma mais simples e rápida.

Linguagens compiladas complicam a vida de quem está iniciando, pois são mais conceitos a trabalhar (usar o ambiente, se submeter à tipagem do compilador) e precisam de um tempo maior para dar resultado, justamente pelo ciclo editar, compilar, executar, que muita vezes torna o ambiente complicado para quem está iniciando.

C é médio nível, é assembler, só aborda conceitos estruturais e complica pra implementar conceitos modernos com OO. C++ e Java são bons, mas são linguagens barrocas para se expressar, quer dizer que demora mais para "pegar" o jeito de usar a linguagem.

Pascal é "linguagem de brinquedo" (não estou falando de Object Pascal), nos anos 80 era uma ótima linguagem para iniciar a programar, mas hoje este papel é cumprido por Python.

Visual Basic e PHP causam danos ao cérebro (sem brincadeira). Viciam de forma errada a programar. Globais, implementações fracas de OO, falta de namespace, etc.

A principal dificuldade do ensino de programação a leigos utilizando C, C++, Java ou PHP é a sintaxe, uma vez que elas jamais se propuseram a serem simples. Na verdade, C surgiu como uma linguagem de programação de sistemas em baixo nível, e as outras copiaram sua sintaxe lastimável. Das acima, apenas Pascal é realmente adequada ao ensino de programação, mas ela começa a falhar quando conceitos mais avançados são necessários.

Mas veja que é prejudicial ensinar apenas uma linguagem no curso inteiro. Seria ótimo se outras linguagens, ainda que mais limitadas sejam vistas, porque são necessárias. Mas essas linguagens devem aparecer no contexto certo.

Uma linguagem interpretada não é lenta?

Sim e não. Uma linguagem interpretada em geral é mais lenta que uma linguagem compilada. Se a linguagem estará sendo utilizada por estudantes em iniciação, então os programas serão simples demais para que a lentidão seja percebia.

Além do mais, é possível fazer código otimizado muito mais rápido em Python do que em C, por exemplo. Além disso atualmente vêm se desenvolvendo tecnologias de compilação JIT (just in time) que vêm reduzindo drasticamente a diferença entre aplicações desenvolvidas em linguagens compiladas e linguagens interpretadas.

Para ver uma prova disto basta uma visita rápida em: http://www.pythonbrasil.com.br/moin.cgi/BenchmarkAdHoc

Se o programa a ser implementado for algum tipo de programa mastigador de grandes volumes de dados ou um sistema de tempo real para controle de hardware, talvez a lentidão seja perceptível. A maioria dos problemas não requerem tanto processamento assim, computadores pessoais têm poder de CPU suficiente para rodar satisfatoriamente a maioria dos programas interpretados. Não estamos mais nos anos 80, com Pascal e máquinas de 8 bits para justificar o argumento de lentidão. Ainda mais com o advento do bytecoding e compiladores JIT, o fato de ser interpretado há muito tempo deixou de ser um penalizador. É claro que é difícil chegar ao tempo de execução de uma aplicação feita em C, mas por outro lado, uma perda de velocidade significa um aumento no "tempo do programador", no fato dele escrever mais rápido e menos propenso a erro.

Alguns dados sobre a produtividade do propgramador podem ser vistos neste [http://pythonbrasil.com.br/moin.cgi/OsvaldoSantanaNeto?action=AttachFile&do=get&target=jccpprtTR.pdf estudo] (PDF em inglês) realizado por Lutz Prechelt.

Programas escritos em Python podem ser mais lentos para executar em algumas situações, mas em geral leva menos tempo para implementá-los. Se o problema é realmente desempenho, deve-se implementar as partes críticas em linguagens compiladas ou até mesmo em assembler. A questão é quanto do código total possui estes requisitos.

Quem empresas usam Python?

Quanto à utilização comercial de Python: Muitas empresas de grande porte vêm adotando Python em suas linhas de desenvolvimento. A mais importante delas é o Google. pode-se citar ainda outras: Industrial Light and Magic, NASA, Thawte, Inktomi, IBM. No Brasil: Serpro, Haxent, Async, Conectiva, Embratel, Hiperlógica. Sem falar nas que utilizam Python indiretamente, através do Zope e do Plone.

Atualmente a linguagem ocupa a sexta posição no ranking de linguagens utilizadas em projetos de Software Livre hospedados no [http://www.sourceforge.net SourceForge].

Uma pergunta importante a ser feita é que empresas não usam e por quê?

No site oficial do [http://www.python.org/community/users.html Python] pode-se encontrar uma lista de empresas que usam Python. Outra fonte é o [http://www.pythonology.org Pythonology].

Que escolas/faculdades/universidades usam Python?

São ainda poucas, mas com resultados excelentes.

O IME e a POLI na USP, na UFSC, nos departamentos de fisica e matematica. Na Unicamp em cursos de extensão e na PUC-Campinas em cursos de graduação.

Na Suíça na Fachhochschule de Zurique em cursos de Pós-Graduação.

O caso mais famoso talvez seja o da Yorktown High School, Arlington, Virginia. O Prof. Jeffrey Elkner, desta escola, é um dos autores do livro How to Think Like a Computer Scientist - Learning with Python.

A partir deste ano, estamos introduzindo Python na disciplina de Programação I do curso de [http://www.sociesc.com.br/ensino/ist/cursos/sistemas_de_informacao.htm Bacharelado em Sistemas de Informação] do [http://www.sociesc.com.br/ensino/ist/index.htm Instituto Superior Tupy] em [http://www.joinville.sc.gov.br/ Joinville], [http://www.sc.gov.br/ Santa Catarina], substituindo o C++.

Para maiores informações sobre este tema acesse a lista [http://www.python.org/sigs/edu-sig/ EDU-SIG].

Python é uma linguagem séria ou de brinquedo?

As duas coisas, dependendo do ponto de vista.

Python não é uma linguagem de brinquedo se isso significar que é impossível fazer aplicações de uso real com ela, como editores ou desktops. Aliás, muito pelo contrário. Diversas empresas utilizam Python de maneira 'séria' para ligar seus muitos componentes - veja o [http://www.pythonology.org Pythonology] novamente. Python é utilizada como linguagem de scripting em diversos programas sérios, como jogos, renderizadores (desses que fazem filmes de sucesso). Se Python não fosse séria - nesse sentido - a NASA e a OTAN não a usariam.

Por outro lado, Python é uma linguagem de brinquedo se isso significa que é possível se divertir com ela. Python segue as definições de "brinquedo" do projetista de jogos [http://www.costik.com/ Greg Cotikyan], mas isso depende muito mais do estado de espírito de quem está programando.

Python é uma linguagem séria, ótima linguagem para quem está iniciando e, melhor ainda, poderosa para quem já é programador. Algo difícil de se obter em uma linguagem, diga-se de passagem. É possível se desenvolver qualquer tipo de aplicação em Python. É uma linguagem que dá liberdade ao programador e faz com que ele tenha que se preocupar em resolver os seus problemas e não se preocupar em deixar o compilador "feliz".

Por outro lado, uma linguagem cujo nome vem de um seriado de comédia não deve ficar feliz em ser considerada uma linguagem "séria". Definitivamente ela é de brinquedo. Programa em Python é resgatar o prazer e a diversão do ato de criar e interagir.

Dá pra escrever programas sérios com Python?

Se você é um programador sério, sim. ;)

O que existe de "programa sério" que utiliza Python não é brincadeira (perdão pelo trocadilho), o Google pode ser citado como o principal exemplo mais uma vez.

Dá para escrever programas "profissionais" com Python, sendo o Zope talvez o exemplo mais notório. Além dele podemos citar: skencil, txt2tags, ERP5, Plone, Schooltool, Chandler, ...

Dá pra escrever programas gráficos com Python?

Sim, e as opções são tantas que podem até atrapalhar. Pode-se utilizar quase a totalidade dos widgetsets disponíveis para Linux em Python e em Windows é possível utilizar a MFC e as APIs de mais alto nível desta plataforma.

Pode utilizar: wxPython, PyGTk, PyQt, PythonCard, Tkinter, PyGlade, PMW, Kiwi, ncurses, OpenGL. Tem também: PIL, VPython.

Uma boa referência é o [http://www.python-eggs.org/links.html Python Eggs].

Ser fácil, não é um problema?

Sim e não.

Sim, isto pode acontecer. Mas nada que não seja controlável. A facilidade pode gerar um péssimo hábito: o de sentar em um computador e começar a programar sem planejar ou sem de fato resolver o problema desejado antes. Mas acredito que todas as linguagens, mesmo as compiladas, hoje em dia, não estão livres desse problema.

Se você ensina um estudante a utilizar um IDE ele terá um botão para "compilar e executar" automaticamente o programa. É praticamente a mesma coisa. O professor portanto deve trabalhar isso com os alunos, de tal maneira que esse hábito não se desenvolva.

Ser fácil pode também ser um problema para masoquistas que desejam usar Python ou não-masoquistas que insistem em não usar e ainda assim competir em tempo e qualidade com quem usa.

Não. Ser fácil quer dizer que você não vai perder tempo "traduzindo mentalmente" o que pensa do problema em sua solução em Python, ou seja, você não tem muito "atrito" com a linguagem. Isto é muito importante, principalmente para cursos introdutórios.

Os alunos não ficarão com os conceitos fracos ou mal acostumados?

Sim e não.

Sim. Os alunos tendem a ficar com alguns conceitos fracos. Isso, no entanto, não é culpa da linguagem. Os alunos que estudarem de fato vão aprender e reter os conceitos - desde que o professor não tente ensinar história da computação, programação estruturada, programação lógica e funcional, inteligência artificial e construção de compiladores em seu curso de 4 meses. Se seguir um currículo mínimo: introdução a computação e programação estruturada (if-then-else, laços, e conceitos básicos), os alunos que praticarem vão absorver tudo o que é ensinado.

Se os alunos só aprenderem Python, as chances são maiores. Universidade não tem esse nome à toa, não existe um único conceito que se for aprendido torna todos os demais obsoletos. Python é uma excelente ferramenta, ponto final.

Não. Python suporta os paradigmas estrutural, modular, funcional e Orientado a Objetos. São vários conceitos a serem explorados.

Os conceitos serão ensinados. Os algoritmos podem ser explicados normalmente em Python e mesmo que Python já disponibilize algumas estruturas de dados como listas e dicionários é possível fazer com que o aluno reimplemente-as. Tudo depende do foco que o professor quer dar ao seu curso.

Conceitos como alocação de memória, heap, pilha, listas ligadas, arvores binárias podem ser explicados numa etapa mais avançada dos cursos. No início é mais interessante explica para o aluno coisas como: implementar uma calculadora pos-fixada utilizando pilha, ordenar uma lista, fazer uma pesquisa binária nessa lista, percorrer uma árvore binária, utilizando as estruturas de dados nativas de Python.

Dá pra ensinar X usando Python? Onde X pode ser "classes", "herança", "ponteiros", "threads", "estruturas de dados", "ordenação", "recursão", "sockets", ...

Sim, com exceção talvez de ponteiros, o que tem um lado positivo. O conceito de aliases de Python e o método de chamada (por referência) esconde bem os ponteiros. Por outro lado, é possível simular o conceito de ponteiros usando dicionários, se for realmente necessário ensinar. Mesmo em C++, o conceito de ponteiros é bastante escondido, pode-se programar sem usar ponteiros.

/!\ O epx pode explicar?

Certas coisas não devem ser ensinadas utilizando Python, a não ser como linguagem de prototipagem. Por exemplo, threads e ponteiros estão muito mais relacionadas com programação de sistemas em baixo nível, e Python tem como foco um nível acima. No entanto, para o estudo de algoritmos é difícil que exista coisa melhor.

Algumas estruturas de dados já consagradas são nativas em Python, mas nada impede que elas sejam reimplementadas. Além disso existem outras estruturas de dados que não fazem parte da linguagem.

E o mercado de trabalho pros alunos?

Está faltando gente qualificada em Python no mercado. E quem programa em Python pode entender Zope e Plone e assim ganhar mais espaço no mercado.

No que se refere a conhecimentos, quanto mais melhor! Python não vai evitar que os alunos tenham que aprender outras linguagens ou ferramentas. Estar preparado para o mercado de trabalho é ser um curioso insaciável, ter prazer em resolver os problemas da profissão (porque trabalhar é resolver problemas) e agir com humildade e respeito com seus colegas. Seguindo estas regras alguém tem que esforçar muito para fracassar.

O mercado de trabalho funciona com uma regra simples: de demanda e oferta. As duas necessitam crescer juntas ou ocorre um desequilíbrio.

Atualmente a demanda para profissionais Python vem crescendo de forma tímida por um único motivo: falta de oferta.

Não deveríamos esperar até haver um mercado maior, para então começar a ensinar utilizando Pyhton?

Depende do perfil da universidade. Existem universidades que preferem treinar o aluno para o mercado de trabalho atual. Essa é uma das características das universidades que possuem cursos de 2 anos.

Por outro lado existe um outro tipo de universidade, que prefere preparar melhor o aluno e torná-lo apto a se adaptar ao mercado de forma muito mais eficiente. A não muitos anos atrás existiam universidades que treinavam seus alunos para desenvolver software em Clipper e não em Pascal (por exemplo). A explicação para isso é a de que o mercado pedia Clipper. Quando o Delphi da Borland surgiu quem se adaptou melhor? O aluno que aprendeu Clipper solicitado pelo mercado ou o aluno que aprendeu os fundamentos da programação em Pascal?

As universidades deveriam estar a vários passos adiante do mercado pois a função delas é a de preparar os alunos para o futuro e não treiná-los para o mercado.

Que livros e outras bibliografias existem sobre Python?

Além da dcumentação oficial, existem vários livros:

Curso Completo]

Documentacao existente na Internet:

Em Português:

Uma boa relação está disponível aqui em DocumentaçãoPython.

Além disto, o Osvaldo está escrevendo um livro sobre Python.

Onde posso tirar minhas dúvidas?

Autores e colaboradores

O autor das perguntas foi o MarcoAndréLopesMendes que também coletou as respostas e organizou-as neste documento. Colaboraram com as respostas: OsvaldoSantanaNeto, RudaMoura, RodrigoSenra, LucianoRamalho, Labaki, RodrigoVieira, JoséAlexandreNalon, AndrewsMedina, DanielRosaFranzini, LuizFreimüller, RodrigoBambooOliveira e DouglasSoaresDeAndrade entre outros (que caso tenhamos esquecido, podem adicionar seus nomes).

Peço às pessoas que desejarem colaborar com este documento, que escrevam para a lista ou para o Marco. Não adicione diretamente aqui para que possamos manter este documento organizado de forma coerence e concisa.


MarcoAndréLopesMendes