Путь развития питона - от ученика до гуру



Я учусь, работаю и играю с Python уже полтора года. Как биолог, медленно делающий поворот к биоинформатике, этот язык был в самом центре всех основных вкладов, которые я сделал в лаборатории. Я более или менее влюбился в то, как Python позволяет мне выражать красивые решения, а также в семантику языка, которая позволяет такой естественный поток от мыслей к работоспособному коду.



Что я хотел бы знать ваше ответ на такой вопрос, я редко видел на этом или других форумах. Этот вопрос кажется мне центральным для всех, кто находится на пути к улучшению Python, но кто задается вопросом, какими должны быть его следующие шаги.



позвольте мне подвести итог тому, что я не хочу спрашивать в первую очередь;)




  • Я не хочу знать, как быстро выучить Python

  • и я не хочу, чтобы узнать лучший способ познакомиться с языком

  • наконец, я не хочу знать одну хитрость, что это все подход.


то, что я хочу знать Ваше мнение о том, является:



какие шаги вы бы порекомендовали подмастерью Python, от ученичества до статуса Гуру (не стесняйтесь останавливаться там, где это диктует ваш опыт), чтобы постоянно совершенствоваться, становясь все лучше и лучше Python coder, один шаг за раз. Некоторые из людей на так почти кажутся достойными поклонения за их мастерство питона, пожалуйста, просветите нас :)



вид ответов, которые мне понравились бы (но не стесняйтесь удивлять читателей :P ), отформатирован более или менее так:




  • прочитайте это (например: python tutorial), обратите внимание на такие детали

  • код для так много времени / проблем / строк кода

  • затем прочитайте это (например: ту или иную книгу), но на этот раз обратите внимание на это

  • решить несколько реальных проблем

  • затем перейдите к чтению Я.

  • обязательно поймите эти понятия

  • код для X раз

  • вернитесь к таким-то основам или двигайтесь дальше...

  • (вы получите точку :)


Мне очень важно знать Ваше мнение о том, на что именно нужно обращать внимание, на разных этапах, чтобы постоянно прогрессировать (с должными усилиями, конечно). Если вы пришли из определенной области знаний, обсудите путь, который вы видите в этом поле.



EDIT: благодаря вашему большому вкладу, я вернулся на путь улучшения Python! Я действительно ценю!

359   19  

19 ответов:

Я думал, что процесс Python мастерства пошел что-то вроде:

  1. открыть списочные включения
  2. открыть генераторы
  3. включить map, reduce, filter, iter, range, xrange часто в коде
  4. открыть декораторы
  5. писать рекурсивные функции, много
  6. открыть itertools и functools
  7. читать Реальный Мир Хаскелл (читать бесплатно онлайн)
  8. перепишите весь свой старый код Python с тоннами функций более высокого порядка, рекурсии и еще много чего.
  9. раздражайте своих товарищей по кабине каждый раз, когда они представляют вам класс Python. Утверждают, что это может быть "лучше" реализовано в виде словаря плюс некоторые функции. Объятия функционального программирования.
  10. открыть стратегия шаблон а потом все эти вещи из императивного кода Вы так старались забыть после Haskell.
  11. найти баланс.

один хороший способ расширить свои знания Python-это покопаться в исходном коде библиотек, платформ и фреймворков, которые вы уже используете.

например, если вы строите сайт на Джанго, многие вопросы, которые могут поставить вас в тупик, можно ответить, посмотрев, как Django реализует рассматриваемую функцию.

таким образом, вы будете продолжать возьмите новые идиомы, стили кодирования и трюки Python. (Некоторые будут хороши и некоторые будут плохими.)

и когда вы видите что-то питон, что вы не понимаете в источнике, перейти к каналу # python IRC и вы найдете много "языковых юристов", которые будут рады объяснить.

накопление этих небольших разъяснений в течение многих лет приводит к гораздо более глубокому пониманию языка и всех его входов и выходов.

понять (более глубоко) типы данных Python и их роли в отношении памяти mgmt

как некоторые из вас в сообществе известны, Я преподаю курсы по Python, наиболее популярными из них являются комплексный вводный+промежуточный курс, а также "продвинутый" курс, который вводит различные области разработки приложений.

довольно часто мне задают вопрос, очень похожий на: "Должен ли я взять ваше вступление или продвинутый конечно? Я уже программирую Python в течение 1-2 лет, и я думаю, что введение слишком просто для меня, поэтому я хотел бы перейти прямо к advanced... какой курс будет вы рекомендуете?"

чтобы ответить на их вопрос, я исследую, насколько они сильны в этой области-не то, чтобы это действительно лучший способ измерить, готовы ли они к любому продвинутому курсу, но чтобы увидеть, насколько хорошо их базовые знания об объектах Python и модели памяти, что является причиной много ошибки Python написаны теми, кто не только новички, но и те, кто вышел за рамки этого.

чтобы сделать это, я указываю им на этот простой вопрос викторины из 2 частей: Ex1: x=42; y=x; x+=1; print x,y Ex2: x=[1,2,3];y=x;x[0]=4;print x,y

много раз, они могут получить выход, но почему является более сложным и гораздо более важным ответом... Я бы взвесил результат как 20% ответа, А "почему" получает 80% кредита. Если они не могут получить, почему, независимо от того, как питон опыт у них есть, я всегда буду направлять людей на всеобъемлющий вводный + промежуточный курс, потому что я провожу одну лекцию по объектам и управлению памятью до такой степени, что вы должны быть в состоянии ответить с выходом и почему с достаточной уверенностью. (Только потому, что вы знаете синтаксис Python через 1-2 года, вы не будете готовы выйти за рамки ярлыка "новичка", пока у вас не будет гораздо лучшего понимания того, как работает Python под обложками.)

последующий запрос, требующий аналогичный ответ еще жестче, например,

Пример 3

x = ['foo', [1,2,3], 10.4]
y = list(x) # or x[:]
y[0] = 'fooooooo'
y[1][0] = 4
print x
print y

следующие темы, которые я рекомендую, - это хорошо понять подсчет ссылок, узнать, что означает" интернирование " (но не обязательно использовать его), узнать о мелких и глубоких копиях (как в Примере 3 выше) и, наконец, взаимосвязи между различными типами и конструкциями на языке, т. е. списки против кортежей, дикты против наборов, списки понимания против выражений генератора, итераторы и генераторы и т. д.; однако все эти другие предложения-это еще один пост в другое время. Надеюсь, что это поможет в то же время! : -)

ps. Я согласен с другими ответами для более близкого знакомства с интроспекцией, а также изучения исходного кода других проектов и добавления сильного "+1" к обоим предложениям!

pps. Отличный вопрос кстати. Я хотел бы быть достаточно умным в начале, чтобы спросить что-то вроде этого, но это было давно, и теперь я пытаюсь чтобы помочь другим с моей многолетней полной занятостью программированием на Python!!

ознакомьтесь с эссе Питера Норвига о том, как стать мастером-программистом через 10 лет:http://norvig.com/21-days.html держу пари, что это справедливо для любого языка.

Понимают Самоанализ

  • написать dir() эквивалентно
  • написать type() эквивалентно
  • выяснить, как "обезьяна-патч"
  • использовать dis модуль, чтобы увидеть, как работают различные языковые конструкции

делать эти вещи будет

  • дать вам некоторые хорошие теоретические знания о том, как реализуется python
  • дать вам некоторые хорошие практические опыт работы в программировании более низкого уровня
  • дать вам хорошее интуитивное ощущение для структур данных python
def apprentice():
  read(diveintopython)
  experiment(interpreter)
  read(python_tutorial)
  experiment(interpreter, modules/files)
  watch(pycon)

def master():
  refer(python-essential-reference)
  refer(PEPs/language reference)
  experiment()
  read(good_python_code) # Eg. twisted, other libraries
  write(basic_library)   # reinvent wheel and compare to existing wheels
  if have_interesting_ideas:
     give_talk(pycon)

def guru():
  pass # Not qualified to comment. Fix the GIL perhaps?

Я дам вам самый простой и эффективный совет, который, я думаю, может дать вам кто угодно:код.

вы можете только лучше использовать язык (что подразумевает его понимание) с помощью кодирование. Вы должны активно наслаждаться кодированием, вдохновляться, задавать вопросы и находить ответы самостоятельно.

есть час, чтобы сэкономить? Напишите код, который перевернет строку, и найдите наиболее оптимальное решение. Свободный вечер? Почему бы не попробовать веб-выскабливание. Читайте код других народов. Посмотрите, как они это делают. Спросите себя, что бы вы сделали.

когда мне скучно на моем компьютере, я открываю свою IDE и код-шторм. Я записываю идеи, которые кажутся интересными и сложными. Сокращение URL-адреса? Конечно, я могу это сделать. О, я научился переводить числа из одной базы в другую в качестве побочного эффекта!

Это действительно независимо от вашего уровня квалификации. вы никогда не прекращайте учиться. активное кодирование в свободное время вы будете, приложив немного дополнительных усилий, придите к пониманию языка и, в конечном счете, станьте гуру. Вы будете создавать знания и многоразовый код и запоминать идиомы.

Если вы используете python для науки (что, похоже, так и есть), частью этого будет изучение и понимание научных библиотек, для меня это будет

  • включает в себя
  • составляющей
  • matplotlib
  • mayavi / mlab
  • Чако
  • Cython

знание того, как использовать правильные библиотеки и векторизовать ваш код, имеет важное значение для научных вычислений.

Я хотел добавить, что, обработки больших числовых наборов данных в общие данные способы(объектно-ориентированный подходы, списки, итераторы), может быть крайне неэффективным. В научных вычислениях может быть необходимо структурировать ваш код способами, которые резко отличаются от того, как большинство обычных кодеров python подходят к данным.

Google только недавно выпустила онлайн-класс Python ("класс", как в"курсе обучения").

http://code.google.com/edu/languages/google-python-class/

Я знаю, что это не ответ на ваш полный вопрос, но я думаю, что это отличное место для начала!

скачать Twisted и посмотрите на исходный код. Они используют некоторые довольно продвинутые методы.

полностью понять все типы данных и структуры

для каждого типа и структуры напишите серию демонстрационных программ, которые реализуют каждый аспект типа или структуры данных. Если вы сделаете это, возможно, стоит вести заметки в блоге на каждом из них... это может быть полезно для многих людей!

Я узнал python сначала сам за лето, просто выполнив учебник на сайте python (к сожалению, я больше не могу найти это, поэтому я не могу опубликовать ссылку).

позже python был преподан мне на одном из моих первых курсов в университете. Летом я тренировался с PythonChallenge и с проблемами от Google Code Jam. Решение этих задач помогает как с алгоритмической точки зрения, так и с точки зрения перспектива изучения того, что Python может делать, а также Как манипулировать им, чтобы получить максимальную отдачу от python.

по аналогичным причинам, я слышал, что гольф-кода работает так же, но я никогда не пробовал его для себя.

алгоритмы обучения / математика / файл IO / Pythonic оптимизация

это не поможет вам гуру-капот, но чтобы начать, попробуйте работать через задачи проекта Эйлера Первые 50 или около того не должны облагать вас налогом, если у вас есть приличная математика в средней школе и вы знаете, как Google. Когда вы решаете один, вы попадаете на форум, где вы можете просматривать решения других людей, которые научат вас еще большему. Будьте достойны, хотя и не публикуйте свои решения, поскольку идея заключается в том, чтобы стимулировать людей к работе на себя.

заставлять себя работать на Python будет непростительно, если вы используете алгоритмы грубой силы. Это научит вас, как выкладывать большие наборы данных в памяти и эффективно обращаться к ним с помощью быстрых языковых функций, таких как словари.

сделать это сам я узнал:

  • File IO
  • алгоритмы и методы, такие как динамическое программирование
  • Python структура данных
    • словари / хэш-карты
    • списки
    • ОК
    • различные их комбинации, например, словари для списков кортежей
  • генераторы
  • рекурсивные функции
  • разработка библиотек Python
    • макет файловой системы
    • перезагрузка их во время сеанса интерпретатора

а также очень главное

  • когда отказаться и использовать C или c++!

все это должно иметь отношение к биоинформатике

по общему признанию, я не узнал об особенностях ООП Python из этого опыта.

вы видели книгу" биоинформатическое Программирование с использованием Python"? Похоже, ты точно член его фокус-группы.

У вас уже есть много материала для чтения, но если вы можете справиться больше, я рекомендую вам узнайте об эволюции python, прочитав предложения по улучшению Python, особенно "готовые" PEPs и" отложенные, заброшенные, отозванные и отклоненные " PEPs.

увидев, как изменился язык, принятые решения и их обоснования, вы впитаете философию Python и поймете, как приходит " идиоматический Python о.

http://www.python.org/dev/peps/

Попытка http://challenge.greplin.com/ использование Python

обучение кого-то еще, кто начинает изучать Python, всегда является отличным способом прояснить ваши идеи, и иногда я обычно получаю много аккуратных вопросов от студентов, которые заставляют меня переосмыслить концептуальные вещи о Python.

Не совсем то, что вы просите, но я думаю, что это хороший совет.

выучить другой язык, не имеет большого значения, какой именно. Каждый язык имеет свои собственные идеи и соглашения, которые вы можете узнать. Узнайте о различиях в языках и что еще более важно why Они разные. Попробуйте чисто функциональный язык, такой как Haskell, и посмотрите на некоторые преимущества (и проблемы) функций, свободных от побочных эффектов. Посмотрите, как вы можете применить некоторые из вещей, которые вы учиться у других языков на Python.

Я рекомендую начать с того, что заставляет вас исследовать выразительную силу синтаксиса. Python позволяет использовать множество различных способов написания одной и той же функциональности, но часто существует один самый элегантный и быстрый подход. Если вы привыкли к идиомам других языков, вы никогда не сможете найти или принять эти лучшие способы. Я провел выходные, тащась через первые 20 или около того Проект Эйлера проблемы и сделал простой веб-приложение с Django на Google App Двигатель. Это только приведет вас от ученика к новичку, может быть, но вы можете продолжать делать несколько более продвинутые веб-приложения и решать более сложные проблемы Project Euler. Через несколько месяцев я вернулся и решил первые 20 проблем PE с нуля за час вместо выходных.

Comments

    Ничего не найдено.