Estou aprendendo, trabalhando e brincando com o Python há um ano e meio. Como um biólogo que está lentamente se voltando para a bioinformática, essa linguagem tem sido o cerne de todas as principais contribuições que fiz no laboratório. Eu me apaixonei mais ou menos pela maneira como o Python me permite expressar soluções bonitas e também pela semântica da linguagem que permite um fluxo tão natural dos pensamentos para o código viável.
O que eu gostaria de saber é a sua resposta para um tipo de pergunta que raramente vejo neste ou em outros fóruns. Essa pergunta me parece central para qualquer pessoa no caminho para a melhoria do Python, mas que se pergunta quais devem ser seus próximos passos.
Deixe-me resumir o que NÃO quero perguntar primeiro;)
- Eu não quero saber como aprender rapidamente Python
- Também não quero descobrir a melhor maneira de me familiarizar com o idioma
- Finalmente, não quero conhecer uma abordagem de "um truque que faz tudo".
O que eu quero saber sua opinião é:
Quais são as etapas que você recomendaria a um viajante do Python, do estágio ao status de guru (sinta-se à vontade para parar onde quer que sua experiência o exija), para que um MELHOREI CONSTANTEMENTE, tornando-se um codificador Python cada vez melhor. Algumas pessoas no SO quase parecem dignas de adoração por suas proezas em Python, por favor, nos esclareça :)
O tipo de resposta que eu gostaria (mas fique à vontade para surpreender os leitores: P) é formatado mais ou menos assim:
- Leia isto (por exemplo: tutorial python), preste atenção a esse tipo de detalhes
- Código para tantas vezes / problemas / linhas de código
- Então, leia isto (por exemplo: este ou aquele livro), mas desta vez, preste atenção a este
- Enfrente alguns problemas da vida real
- Em seguida, continue lendo Y.
- Certifique-se de entender esses conceitos
- Código para X tempo
- Volte a essas e tais noções básicas ou avance para ...
- (você entendeu :)
Eu realmente me preocupo em conhecer sua opinião sobre o que exatamente alguém deve prestar atenção, em vários estágios, para progredir CONSTANTEMENTE (com os devidos esforços, é claro). Se você vem de um campo específico de especialização, discuta o caminho que você vê como apropriado nesse campo.
EDIT: Graças à sua excelente contribuição, estou de volta à trilha de melhoria do Python! Eu realmente aprecio!
Uma boa maneira de aprimorar seu conhecimento em Python é se aprofundar no código-fonte das bibliotecas, plataformas e estruturas que você já usa.
Por exemplo, se você estiver criando um site no Django , muitas perguntas que podem ser difíceis de serem respondidas podem ser respondidas olhando como o Django implementa o recurso em questão.
Dessa forma, você continuará a captar novos idiomas, estilos de codificação e truques em Python . (Alguns serão bons e outros serão ruins.)
E quando vir algo Pythony que você não entende na fonte, vá até o canal #python IRC e você encontrará muitos "advogados de idiomas" felizes em explicar.
Um acúmulo desses pequenos esclarecimentos ao longo dos anos leva a uma compreensão muito mais profunda da linguagem e de todos os seus meandros.
fonte
Entenda (mais profundamente) os tipos de dados do Python e suas funções com relação ao gerenciamento de memória
Como alguns de vocês sabem, eu ensino os cursos de Python , sendo os mais populares o abrangente curso Intro + Intermediário, bem como um curso "avançado", que apresenta uma variedade de áreas de desenvolvimento de aplicativos.
Freqüentemente, recebo uma pergunta bastante semelhante a: "Devo fazer seu curso de introdução ou avançado? Eu já estou programando Python por 1-2 anos e acho que a introdução é muito simples para mim, então eu gostaria de pular direto para o avançado ... qual curso você recomendaria? "
Para responder à pergunta deles, sondo para ver quão fortes eles são nessa área - não que seja realmente a melhor maneira de avaliar se eles estão prontos para um curso avançado, mas para ver quão bem seu conhecimento básico é sobre os objetos do Python e modelo de memória, que é causa de muitos erros do Python escritos por aqueles que não são apenas iniciantes, mas também aqueles que foram além disso.
Para fazer isso, aponto-os para esta simples questão de perguntas em duas partes:
Muitas vezes, eles são capazes de obter a saída, mas o porquê é mais difícil e muito mais importante de uma resposta ... Eu consideraria a saída como 20% da resposta, enquanto o "por que" recebe 80% de crédito. Se eles não conseguem entender o porquê, independentemente da experiência que têm em Python, eu sempre direcionarei as pessoas para o curso intro + intermediário abrangente, porque passo uma palestra sobre objetos e gerenciamento de memória até o ponto em que você deve responder com o saída e o porquê com confiança suficiente. (Só porque você conhece a sintaxe do Python após 1-2 anos não o prepara para ir além de um rótulo "iniciante" até que você tenha uma compreensão muito melhor sobre como o Python funciona nos bastidores.)
Uma investigação posterior que exija uma resposta semelhante é ainda mais difícil, por exemplo,
Exemplo 3
Os próximos tópicos que recomendo são entender bem a contagem de referência, aprender o que significa "internar" (mas não necessariamente usá-lo), aprender sobre cópias rasas e profundas (como no Exemplo 3 acima) e, finalmente, as inter-relações entre os vários tipos e construções na linguagem, isto é, listas vs. tuplas, dictos vs. conjuntos, compreensões de listas vs. expressões geradoras, iteradores x geradores, etc .; no entanto, todas essas outras sugestões são outro post para outra hora. Espero que isso ajude enquanto isso! :-)
ps. Eu concordo com as outras respostas para ficar mais íntimo com a introspecção, além de estudar o código-fonte de outros projetos e adicionar um "+1" forte às duas sugestões!
pps. Ótima pergunta entre. Eu gostaria de ter sido inteligente o suficiente no começo para perguntar algo assim, mas isso foi há muito tempo, e agora estou tentando ajudar outras pessoas com meus muitos anos de programação em Python em tempo integral!
fonte
print
não é uma declaração.Confira o ensaio de Peter Norvig sobre como se tornar um programador mestre em 10 anos: http://norvig.com/21-days.html . Aposto que isso vale para qualquer idioma.
fonte
Entenda a introspecção
dir()
equivalentetype()
equivalentedis
módulo para ver como várias construções de linguagem funcionamFazendo essas coisas
fonte
type()
equivalente" que seria muito difícil se você tomar as especificações completas de metaclassytype
!fonte
Darei a você o conselho mais simples e eficaz que eu acho que alguém poderia lhe dar: código .
Você só pode ser melhor usando uma linguagem (o que implica entendê-la) codificando . Você precisa gostar ativamente da codificação, ser inspirado, fazer perguntas e encontrar respostas sozinho.
Tem uma hora de sobra? Escreva um código que inverta uma string e descubra a melhor solução. Uma noite livre? Por que não tentar alguns scraping na web. Leia o código de outras pessoas. Veja como eles fazem as coisas. Pergunte a si mesmo o que você faria.
Quando estou entediado com o computador, abro meu IDE e a tempestade de códigos. Anoto idéias que parecem interessantes e desafiadoras. Um encurtador de URL? Claro, eu posso fazer isso. Ah, eu aprendi como converter números de uma base para outra como efeito colateral!
Isso é válido independentemente do seu nível de habilidade. Você nunca para de aprender. Ao codificar ativamente no seu tempo livre, você vai, com pouco esforço adicional, entender o idioma e, finalmente, se tornar um guru. Você criará conhecimento e código reutilizável e memorizará expressões idiomáticas.
fonte
Se você usa e usa python para a ciência (o que parece que você é), parte disso será aprender e entender bibliotecas científicas, para mim essas
saber como usar as bibliotecas corretas e vetorizar seu código é essencial para a computação científica.
Eu queria acrescentar que lidar com grandes conjuntos de dados numéricos de formas pitônicas comuns (abordagens orientadas a objetos, listas, iteradores) pode ser extremamente ineficiente. Na computação científica, pode ser necessário estruturar seu código de maneiras que diferem drasticamente da maneira como a maioria dos codificadores python convencionais aborda os dados.
fonte
O Google lançou recentemente uma aula on-line de Python ("aula" como em "um curso de estudo").
http://code.google.com/edu/languages/google-python-class/
Sei que isso não responde à sua pergunta completa, mas acho que é um ótimo lugar para começar!
fonte
Baixe o Twisted e veja o código fonte. Eles empregam algumas técnicas bastante avançadas.
fonte
Compreender completamente todos os tipos e estruturas de dados
Para cada tipo e estrutura, escreva uma série de programas de demonstração que exercitam todos os aspectos do tipo ou estrutura de dados. Se você fizer isso, pode valer a pena fazer anotações no blog de cada uma ... pode ser útil para muitas pessoas!
fonte
Eu aprendi python primeiro sozinho durante o verão, apenas fazendo o tutorial no site python (infelizmente, não consigo mais encontrar isso, então não consigo postar um link).
Mais tarde, python me foi ensinado em um dos meus primeiros anos de curso na universidade. No verão seguinte, eu pratiquei com PythonChallenge e com problemas do Google Code Jam . A solução desses problemas ajuda a partir de uma perspectiva algorítmica e também da perspectiva de aprender o que o Python pode fazer, bem como de como manipulá-lo para obter o máximo proveito do python.
Por razões semelhantes, ouvi dizer que o código golf também funciona, mas nunca tentei por mim mesmo.
fonte
Algoritmos de aprendizagem / matemática / IO de arquivos / Otimização Pythonic
Isso não fará com que você se divirta, mas, para começar, tente resolver os problemas do Project Euler os Os primeiros 50 ou mais não devem cobrar impostos se você tem matemática decente no ensino médio e sabe como o Google. Quando você resolve uma delas, entra no fórum, onde pode ver as soluções de outras pessoas que o ensinarão ainda mais. Seja decente e não publique suas soluções, pois a idéia é incentivar as pessoas a resolvê-las por si mesmas.
Forçar-se a trabalhar em Python será implacável se você usar algoritmos de força bruta. Isso ensinará como organizar grandes conjuntos de dados na memória e acessá-los de maneira eficiente com os recursos de linguagem rápida, como dicionários.
Ao fazer isso eu aprendi:
E também muito importante
Tudo isso deve ser relevante para a Bioinformática
É certo que não aprendi sobre os recursos OOP do Python com essa experiência.
fonte
Você já viu o livro " Programação em Bioinformática usando Python "? Parece que você é um membro exato do grupo de foco.
fonte
Você já tem muito material de leitura, mas se puder lidar com mais, recomendo que você aprenda sobre a evolução do python lendo as Propostas de aprimoramento do Python, especialmente as PEPs "concluídas" e as "adiadas, abandonadas, retiradas e rejeitadas" PEPs.
Ao ver como a linguagem mudou, as decisões que foram tomadas e suas razões, você absorverá a filosofia do Python e entenderá como o "Python idiomático" acontece.
http://www.python.org/dev/peps/
fonte
Tente http://challenge.greplin.com/ usando Python
fonte
Ensinar a alguém que está começando a aprender Python é sempre uma ótima maneira de deixar suas idéias claras e, às vezes, geralmente recebo muitas perguntas interessantes de alunos que me levam a repensar coisas conceituais sobre Python.
fonte
Não é exatamente o que você está pedindo, mas acho que é um bom conselho.
Aprenda outro idioma, não importa muito qual. Cada idioma tem suas próprias idéias e convenções que você pode aprender. Aprenda sobre as diferenças nos idiomas e, mais importante,
why
eles são diferentes. Tente uma linguagem puramente funcional como Haskell e veja alguns dos benefícios (e desafios) de funções livres de efeitos colaterais. Veja como você pode aplicar algumas das coisas que aprendeu de outros idiomas ao Python.fonte
Eu recomendo começar com algo que o force a explorar o poder expressivo da sintaxe. O Python permite muitas maneiras diferentes de escrever a mesma funcionalidade, mas geralmente existe uma abordagem mais elegante e rápida. Se você está acostumado com os idiomas de outros idiomas, nunca poderá encontrar ou aceitar essas maneiras melhores. Passei um fim de semana vasculhando os primeiros 20 problemas do Project Euler e fiz um webapp simples com o Django no Google App Engine. Isso só o levará de aprendiz a iniciante, talvez, mas você poderá continuar a criar aplicativos da Web um pouco mais avançados e resolver problemas mais avançados do Project Euler. Depois de alguns meses, voltei e resolvi os primeiros 20 problemas de EP em uma hora, em vez de um fim de semana.
fonte