[Перевод] Почему освоить Python невозможно, и почему это нормально | Pydon't

image


Фото Migle Siauciulyte на Unsplash

Введение


Говорят, что для овладения каким-либо навыком необходимо 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, собираются в этих сообществах, а где есть ученики, там есть и возможности для обучения.

Вот несколько примеров:
• StackOverflow;
• Reddit’s /r/Python;
• Reddit’s /r/learnpython;

Читайте исходный код

Это, без сомнения, один из самых недооцененных навыков, которым должен обладать программист. Умение читать код — это навык, который вам также необходимо практиковать! Нас всех учат, как писать код, но никогда не учат, как читать код… И тем не менее, мы тратим часы на чтение кода!

Читая код, вы знакомитесь с различными случаями использования уже известных вам функций, узнаете о новых инструментах, подмечаете различные стили программирования, новые алгоритмы и многое другое!

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

Ознакомьтесь со стандартной библиотекой

Опять же, быть программистом — значит использовать правильные инструменты для работы. Знаете ли вы, что в стандартной библиотеке Python более 249 модулей?

Я знаю, потому что я написал огромный тред в Twitter, в котором перечислил их все:

Знаете ли вы, что в стандартной библиотеке Python

© Habrahabr.ru