Введение
Говорят, что для овладения каким-либо навыком необходимо 10 000 часов. Я не буду спорить, правда это или нет. Я скажу вам, что даже если это правда, я не уверен, что это применимо к Python!
В этой статье я объясню, почему я считаю, что вы не можете по-настоящему освоить Python, но я также скажу вам, почему я считаю, что это нормально. Я дам ряд практических советов, которые вы сможете использовать, чтобы постоянно совершенствовать свои знания Python.
Наконец, в конце я поделюсь небольшим случаем из моего личного опыта работы с Python, подкрепляющий мои тезисы.
«освоить», глагол
Вот словарное определение глагола " освоить":
«освоить», глагол — изучить или понять что-то полностью.
Исходя из моего личного опыта, есть два уровня, на которых, по моему мнению, невозможно освоить Python; сейчас я расскажу об обоих.
Python — это развивающийся язык
Python — это развивающийся язык: он не является законченным продуктом. Как таковой, он постоянно меняется:
• добавляются новые функции;
• вводится новый синтаксис;
• меняется стандартная библиотека;
•…
Поэтому я никогда не смогу узнать о нем все! Как только мне кажется, что я выучил все, что можно выучить, появляются новые вещи.
В этом я уверен, но это философская точка зрения. У этого аргумента есть и практическая сторона.
Python просто слишком большой
Мало того, что язык постоянно меняется, можно утверждать, что язык Python уже слишком велик, чтобы вы могли им овладеть.
Например, большинство из нас знакомы со списковыми методами .append и .pop. Но, по моему опыту, большинство людей не знакомы, например, с методами списка .copy, или .extend. На самом деле, давайте проведем эксперимент: можете ли вы назвать 11 используемых в настоящее время методов списка?
Прокрутите страницу в самый низ и запишите их в виде комментария. Если не 11, то столько, сколько сможете вспомнить.
Вот они:
>>> [name for name in dir(list) if not name.startswith("__")]
['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
Не знаете, что такое dir? Просто пролистайте вниз.
Может быть, вы даже знали обо всех из них, но перечислить их все — это сложно, верно?
Давайте сделаем то же самое со строками! Сначала запишите как можно больше методов работы со строками, сколько сможете вспомнить.
Записали?
Отлично. Теперь посчитайте их. Сколько у вас получилось?
А теперь, как вы думаете, сколько всего существует строковых методов?
Существует 47 (!) строковых методов!
Возможно, о некоторых из них вы даже не слышали:
>>> [name for name in dir(str) if not name.startswith("__")]
['capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>> len(_)
47
Это лишь подтверждает мою точку зрения. Для работы со строками предусмотрено 47 методов, многие из которых имеют пару аргументов.
В Python (3.10) есть 71 встроенная функция. Знаете ли вы все из них? Как вы думаете, вы могли бы вспомнить их все?
Я уверен, что вы могли бы запомнить все встроенные функции, но речь идет не о запоминании! Программирование — это создание сущностей, решение задач и зазубривание названий всех функций вам не очень-то поможет…
Однако, смутное представление о них поможет!
(Просто ради интереса, вы можете прочитать мою небольшую статью о том, насколько велик Python).
Как максимально приблизиться к освоению языка Python
Приобретение знаний
Хороший программист использует правильный инструмент для работы, но вы можете использовать правильные инструменты, только если вы знаете, что они существуют, и если вы знаете, где их найти.
Это означает, что, хотя вы и не сможете целиком овладеть Python, в смысле, «выучить или понять что-то полностью», вы можете подойти к этому довольно близко!
Как показывает мой опыт, достичь этого можно, познакомившись с как можно большим объемом Python. Даже если вы не выучите всё, вам будет полезно прочитать о как можно большем количестве функций и поэкспериментировать с ними.
Знакомясь с новыми/разными вещами, ваш мозг, скорее всего, сделает небольшую заметку о том, что нового вы пробуете или с чем упражняетесь. Возможно, вы не сможете назвать все эти вещи сходу. Смысл в том, что, когда придет время, есть шанс, что ваш мозг вам маякнёт, и вы вспомните, что видели раньше что-то похожее.
Ситуация довольно простая:
• если вы никогда не видели функцию, которая пригодилась бы прямо сейчас, то вспомнить о ней невозможно;
• если вы видели функцию, которая пригодилась бы прямо сейчас, вы можете вспомнить о ней!
Итак, все сводится к тому, чтобы познакомиться с разными составляющими Python. Чтобы это сделать, нужно просто учить язык и экспериментировать с ним!
Позвольте мне рассказать вам о некоторых вещах, которые, возможно, помогут вам найти что-то новое для изучения и исследования.
Сразу оговорюсь: большинство вещей, о которых я собираюсь рассказать, — это разрозненные способы расширить кругозор в Python. В зависимости от того, насколько далеко вы продвинулись в изучении Python, вещи, о которых я вам расскажу, могут иметь больше или меньше смысла. В целом, если вы начинаете свой путь в Python сейчас, я бы рекомендовал вам найти подходящий способ изучения Python, а не просто следовать этим конкретным методам.
Документация
Знакомы ли вы с документацией Python? Она находится по адресу, который легко запомнить: https://docs.python.org.
Документация — это отличный ресурс для обучения! Если вы вдруг обнаружите, что не знаете, что изучать, откройте документацию и немного побродите по ней. Скорее всего, вы окажетесь там, где никогда не были.
Но посещение новых страниц в документации — не единственный способ узнать что-то новое. Я возвращаюсь к некоторым страницам снова и снова, потому что на них так много информации!
Вот несколько страниц, которые я часто посещаю:
• страница со всеми встроенными функциями;
• страница со всеми встроенными типами и их методами;
• страница, содержащая индекс всех модулей Стандартной библиотеки;
• страница о модели данных (именно там вы можете узнать о большинстве названий дундеров);
dir и help
Еще один отличный способ найти дополнительный учебный материал связан с обращением к REPL и использованием двух замечательных функций: dir и help.
Функция help, о которой вы узнаете, прочитав статью "Pydon't о повышении производительности в REPL", принимает объект Python и выводит его docstring, предоставляя вам информацию об этом объекте:
>>> help(max)
Помощь по встроенной функции max в модуле builtins:
max(...)
max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value
return здесь самый крупный элемент, и у него всего один итерабельный аргумент.
Задаваемый по умолчанию аргумент указывает, какой объект вернуть, если этот перебираемый объект окажется пуст.
Когда аргументов два или более – возвращаем наибольший.
Например, знаете ли вы, что max может принимать ключевые аргументы default и key?
В паре с help, вы определенно сможете использовать dir:
>>> help(dir)
Помощь по встроенной функции dir в модуле builtins:
dir(...)
dir([object]) -> list of strings
Если вызывается без аргумента, возвращает имена в текущей области видимости.
Иначе, возвращает алфавитный список имен, включающих (некоторые) атрибуты данного объекта, а также атрибуты, достижимые из него.
...
По сути, при помощи dir можно узнать больше об атрибутах объекта. Например, вы можете легко выяснить, какие методы есть у строк, используя dir(list), как показано выше. Однако ранее я отфильтровал большинство атрибутов, чтобы игнорировать атрибуты dunder. Без фильтрации, я уверен, dir покажет вам то, чего вы еще не знаете:
>>> dir(list)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
Учите других
Я часто слышу это, но, возможно, вы этого не знаете, поэтому позвольте мне объяснить вам: учительская работа на самом деле улучшает ваше понимание того, чему вы учите.
Это происходит со мной постоянно: Я собираюсь написать статью о чем-то, что, как мне кажется, я знаю достаточно хорошо, и в процессе исследования я узнаю много нового.
Преподавание — отличный способ самообучения еще и потому, что заставляет активно думать о том, чему вы пытаетесь научить. Даже «простое» действие — выяснить, как лучше объяснить что-то, — оказывается очень полезным!
Кроме того, многие ученики задают вопросы, и некоторые из этих вопросов могут застать вас врасплох.
Если рядом с вами нет человека, изучающего Python, вы можете подумать, что вам некого учить. Как же вы в таком случае заблуждаетесь!
Существует множество сообществ, где Python активно обсуждают. Множество людей, изучающих Python, собираются в этих сообществах, а где есть ученики, там есть и возможности для обучения.
Вот несколько примеров:
Читайте исходный код
Это, без сомнения, один из самых недооцененных навыков, которым должен обладать программист. Умение читать код — это навык, который вам также необходимо практиковать! Нас всех учат, как писать код, но никогда не учат, как читать код… И тем не менее, мы тратим часы на чтение кода!
Читая код, вы знакомитесь с различными случаями использования уже известных вам функций, узнаете о новых инструментах, подмечаете различные стили программирования, новые алгоритмы и многое другое!
Есть модуль, который вы используете постоянно? Загляните в его исходный код. Это даже не обязательно должен быть сторонний модуль. Если я не ошибаюсь, большая часть стандартной библиотеки Python написана на Python. Пойдите и посмотрите.
Ознакомьтесь со стандартной библиотекой
Опять же, быть программистом — значит использовать правильные инструменты для работы. Знаете ли вы, что в стандартной библиотеке Python более 249 модулей?
Я знаю, потому что я написал огромный тред в Twitter, в котором перечислил их все:
Вы, конечно, не знаете их всех! И это прекрасно! Но это лишь говорит о том, что вы все еще можете узнать о Python гораздо больше.Знаете ли вы, что в стандартной библиотеке Python более 240 модулей?
Вот МЕГА тред с супер высокоуровневым обзором этих модулей…
… но перед этим я бросаю вам вызов: назовите как можно больше модулей наизусть!
Посмотрим, у кого получится больше!
— Rodrigo (@mathsppblog) August 24, 2021
Вам даже не нужно углубляться в забытые модули. Вы хорошо знакомы с functools, collections, functools? А как насчет random? pathlib? Это лишь некоторые из действительно полезных модулей, о которых вы могли бы узнать больше!
Узнайте о других пакетах Python
Вы можете не только работать над ознакомлением со стандартной библиотекой Python, но и попытаться познакомиться с любым количеством пакетов Python!
Такие проекты, как Flask, Django, Rich, Pandas, NumPy, PyTorch и Tensorflow, активно разрабатываются в сообществе Python. Вы можете выбрать проект, связанный с нишей (нишами), в которой вы используете Python, или выбрать для изучения более универсальный модуль. В любом случае, вы обязательно многому научитесь!
Если вы сами не догадываетесь, на какие модули обратить внимание, вы всегда можете поискать в PyPI или изучить GitHub.
Изучайте ДРУГИЕ языки
Это может показаться парадоксальным, но изучение других языков может повысить ваши навыки работы с Python. Я опираюсь на собственный опыт; сам это почувствовал.
Программирование — это, помимо всего прочего, решение задач. Вам нужно попасть из пункта А в пункт Б, и вам нужно выбрать путь, который приведет вас из пункта А в пункт Б. Вам нужно это выяснить.
Путь, который вы выберете для перехода из пункта А в пункт Б, будет зависеть от вашего опыта и образования, верно?
- В силу моего формального математического образования я часто пытаюсь найти более математически ориентированное решение некоторых проблем программирования, с которыми я сталкиваюсь. Они не обязательно будут лучше или хуже, но они определенно будут другими.
- Более опытные люди, скорее всего, уже сталкивались с похожей проблемой, и поэтому могут иметь лучшее представление о том, что нужно попробовать в первую очередь.
Как выясняется, языки программирования, которые вы знаете, также влияют на то, как вы трактуете задачи. К сожалению, это может не соблюдаться для всех остальных языков. Чтобы довести до максимума влияние, которое новый язык окажет на ваше владение другими языками, вам нужно выучить новый язык, который принципиально отличается от всего остального, что вы уже изучили.
Так, если вы изучили Python, вы сможете узнать много нового, если возьмете JavaScript, C, C++, Perl, Rust или другой подобный язык. Однако эти языки в основе своей одинаковы: все они являются императивными.
Парадигма императивных языков — не единственная на свете. Если вы изучаете новый язык в новой парадигме, то вам открывается новый способ мышления, а значит — новые возможности при написании кода и на других языках.
Алан Перлис, первый обладатель премии Тьюринга («Нобелевской премии по вычислительной технике»), выразился красноречиво:
Что касается меня, в частности, Haskell и APL изменили мои представления о программировании (и отныне повлияли на мой код на Python) гораздо больше, чем все остальные языки, которые я использовал.«Язык, который не влияет на то, как вы думаете о программировании, не стоит того, чтобы его знать». — Алан Перлис, Эпиграммы о программировании
К сожалению, трудно определить, насколько качественнее я стал писать код, или что конкретно изменилось… Это одна из тех вещей, которые вы должны увидеть сами.
Если вы хотите узнать о некоторых других принципиально разных парадигмах и языках, которые можно изучать на их основе, взгляните на эту статью в блоге. Это нетехническое и легкое чтение — отличный первый шаг к изучению совершенно нового языка.
Случай со строковыми методами
Я ни в коем случае не являюсь экспертом по Python. Мне очень нравится работать с Python, изучать его, преподавать его и создавать на нем вещи. Я занимаюсь этим с 2012 года. И все же, каждый раз, когда я использую Python, я узнаю что-то новое.
Лично я стараюсь хорошо освоить ядро Python: все его основные синтаксические возможности и стандартную библиотеку. Почему? Точно не знаю; думаю, потому что я понял, что в этих основных вещах заложен огромный потенциал, и я хочу действительно хорошо их использовать.
Я изучаю ядро Python уже некоторое время, и мне нравится думать, что у меня это получается… Только вот, очевидно, мне еще многому предстоит научиться!
Вот твит, который я опубликовал:
Вот вам задачка из Python .
`swap_casing` — это ОЧЕНЬ простая функция.
Она принимает строку и:
превращает заглавные буквы в строчные;
и наоборот.
Какую самую питоническую реализацию вы можете придумать?
pic.twitter.com/5zkZ7pHqvx
— Rodrigo (@mathsppblog) November 10, 2021
Я разместил эту задачу, только потом узнал, что в строках уже заложен этот метод:
>>> "Hello, world!".swapcase()
'hELLO, WORLD!'
Это лишь небольшое доказательство-байка в пользу того, что в Python всегда есть чему поучиться. Я даже построил свой доклад Pyjamas Conf 2021 вокруг этого!
Заключение
Вот вам на блюдечке с голубой каемочкой главный вывод из этого Pydon't:
Этот пост продемонстрировал, что:«Всегда есть что-то новое, чему можно научиться. Не уклоняйтесь от этого».
- можно многое узнать о Python из документации;
- встроенные функции help и dir могут научить вас новым вещам;
- обучение повышает вашу обучаемость;
- чтение кода — еще один отличный способ улучшить свои навыки;
- изучение стандартной библиотеки Python откроет вам множество новых инструментов;
- также как и изучение индекса пакетов Python; и
- изучение других языков может улучшить ваш код на Python.
Ссылки
- Python 3 Docs, The Python Standard Library, Built-in Functions, dir, https://docs.python.org/3/library/functions.html#dir [last accessed 04-12-2021];
- Python 3 Docs, The Python Standard Library, Built-in Functions, help, https://docs.python.org/3/library/functions.html#help [last accessed 04-12-2021];
- «Galaxy Brain Programming Languages», Conor Hoekstra, https://codereport.github.io/Galaxy-Brain-Languages/ [last accessed 04-12-2021];
- «Epigrams in Programming», cs.yale.edu, http://www.cs.yale.edu/homes/perlis-alan/quotes.html [last accessed 04-12-2021];
» Оглавление
» Отрывок
По факту оплаты бумажной версии книги на e-mail высылается электронная книга.
Почему освоить Python невозможно, и почему это нормально | Pydon't
Фото Migle Siauciulyte на Unsplash Введение Говорят , что для овладения каким-либо навыком необходимо 10 000 часов. Я не буду спорить, правда это или нет. Я скажу вам, что даже если это правда, я не...
habr.com