Привет, Хабр! Сегодня я предлагаю Вам перевод статьи Duomly, посвящённой изучению и практике программирования на языке Python.
Введение
Изучение Python не сильно отличается от изучения других языков программирования. Один путь для становления профессионалом в Python (или в другом любом языке) в основном зависит от имеющегося опыта и знаний. Это означает, что опытные программисты уже знакомы с основными концепциями программирования, обычные используют разные методы решения задач, когда как новички — нет.
Не смотря ни на что, имеется несколько вещей общих для всех, одна из них — Вам нужно практиковаться, очень много практиковаться!
К счастью, Python имеет широкое, дружелюбное и сообщённое друг с другом сообщество. Это Open-Source проекты которые действительно помогают в разработке.
Имеется много хороших советов о том, как практиковаться Python`у. Эта статья затронет всего 10 из них:
- Выберете подходящее окружение
- Удостоверьтесь, что Вы имеете достаточную базу для изучения более сложных вещей
- Пишите и улучшайте код
- Читайте документацию
- Изучайте более сложные вещи после основ
- Следите за стандартами, советами и трюками в языке Python
- Анализируйте исходный код
- Интересуйтесь библиотеками
- Станьте частью сообщества
- Изучите второй язык программирования
Выберете подходящее окружение
Для начала Вам следует использовать обычный Python 3 и пакетный менеджер, на операционной системе которую Вы используете. Windows, Mac OS, или любой дистрибутив Linux подойдёт для этого. (Даже Android с QPython, хотя возможности ограничены по сравнению с оригинальным Python). Позже Вы можете установить Anaconda на Windows, Mac OS или Linux. Он содержит интерпретатор Python, пакет Conda, зависимости и пакетный менеджер. С помощью него Вы сможете найти много сторонних библиотек которые могут показаться Вам полезными.
Вы должны выбрать нужную IDE (интегрированная среда разработка). Большинство популярных IDE, таких как Visual Studio, VSCode, Emacs, Vim, Sublime Text и др. имеют действительно хорошую поддержку для Python. Если Вам нравятся продукты от JetBrains, Вы можете попробовать использовать PyCharm.
Также в пакет дистрибуции Anaconda включён IDE под названием Spyder.
IPython и Jupyter Notebook хорошие инструменты которые предлагают удобную интерактивную функциональность. Также, имеется интерактивный интерпретатор Python, но Вы можете найти его более полезным для проверки простых кусочков кода, чем написания больших программ.
Также Вы можете посмотреть эту статью чтобы узнать больше о IDE для Python.
Помимо всего прочего, хорошей идеей будет установить и настроить линтеры для Python (Pylint, flake8 и прочие). Они являются маленькими пакетами которые просто подсвечивают проблемы Вашего кода (синтаксические, или связанные с несоблюдением стиля программирования на Python — PEP8).
Удостоверьтесь, что Вы имеете достаточную базу для изучения более сложных вещей
Если Вы хотите обучаться любому языку программирования, Вам нужно изучить хорошо изучить основы, поверх которых Вы будете строить Вашу карьеру в этом языке. Это означает, что Вам нужно по крайней мере знать: основной синтаксис языка, понимать основные концепты программирования, быть знакомыми со стандартными типами и структурами данных и так далее.
В Python, Вам следует удостовериться, что Вы понимаете условные конструкции (if
, else,
elif
), циклы (for
, while
), функции, числа, строки, кортежи, множества, списки, словари и так далее. Некоторые другие типы данных, например комплексные числа, именованные кортежи, неизменяемые множества также могут быть полезными.
Вам следует найти нужную книгу для Вашего уровня о Python.
Duomly предлагает туториал по Python, который Вы можете использовать для изучения этих концептов и даже большего.
Также Вы можете начать с туториала на официальном сайте.
Пишите и улучшайте код
Написание большого количества кода для себя, является неотъемлимой частью изучения языков программирования.
Начните с кода из книг и туториалов. Затем попробуйте модифицировать его, например упростить, или более подходящим для каких-либо целей. После этого, попробуйте написать свои маленькие, но полезные программы.
Но главное, запомните одну из самых важных вещей о программирования: оно не о набирании кода, оно о понимании!
Вы будете делать ошибки. Все программисты их делают. И это вообще не плохо. Самое важное в этом — узнать, что пошло не так и конечно же, не повторять эти ошибки в будущем. Каждый раз, когда Вы получаете и исправляете ошибку, Вы становитесь немного лучшим программистом, чем Вы были раньше.
Иногда, важно вернуться назад к старому коду и попробовать улучшить его. Надеюсь, Вы увидете где Вы стали более лучше чем тогда, когда писали этот код.
Подумайте о проблемах, которые Вы хотели бы решить. В идеале, это те вопросы, которыми Вы увлечены. Эмоциональное вложение обычно улучшает результаты. Начните Ваши маленькие и средние проекты и пробуйте работать над их улучшением как можно чаще. Как только Вы изучите что-то новое, спросите себя, как Вы можете применить это к проблеме, которую вы хотите решить.
Читайте документацию
Документация очень важна в Python. Вам следует сделать привычкой читать её часто. Идеально будет, перед тем как использовать какую-либо существующую функцию, или метод, прочитать документацию о ней.
К счастью, стандартная библиотека Python и большинство популярных сторонних библиотек имеют хорошую, подробную документацию доступную на их веб-сайтах. Также Вы можете получить документацию о Python объекте (class, method, etc) программно, с помощью атрибута .doc:
>>> print(slice.__doc__)
slice(stop)
slice(start, stop[, step])
Create a slice object. This is used for extended slicing (e.g. a[0:10:2]).
Документация может содержать больше деталей в некоторых моментах.
Вы можете изучить много нового из документации. Вы можете увидеть как использовать функцию, метод или класс, какие аргументы нужно передавать, что вернёт вызов функции, и так далее. Она также часто содержит связанные примеры, которые могут быть более информативны, а иногда поучительны.
Изучайте более сложные вещи после основ
Однажды, когда Вы будете понимать основы, Вы сможете начать изучать более сложные вещи. Не беспокойтесь, Вы не забудете основы. Они понадобятся Вам всегда.
Такие темы как обработка исключений, распаковка и упаковка аргументов, *args и **kwargs, декораторы, модули и пакеты, ООП и генераторы, часто используются и Вы должны знать и понимать их на хорошем уровне.
Также имеется много продвинутых тем которые нужно изучить. Например магические методы, корутины, асинхронное программирование, многопоточность, мультипроцессность, тестирование и так далее. Это не то, что понадобится Вам в начале. Так, Вы можете начать с чего-то более простого и полезного. Например, Вам нужно мощное средство для манипуляции со строками, Вы можете попробовать регулярные выражение. Если вы работаете над научным проектом, вероятно, Вы найдёте многопроцессность интересной для Вас.
Следите за стандартами, советами и трюками в языке Python
Имеется много специфичных вещей в программировании конкретно для языка Python, которые являются не самой простой задачей для изучения. Повезло, что есть много ресурсов, которые охватывают многие из этих тем.
Официальная документация Python содержит много информации. PEP 20, так же названый Дзеном Python, написанный Тимом Петерсом, обозначает главные принципы Python:
>>> import this
The Zen of Python, by Tim Peters
Красивое лучше, чем уродливое.
Явное лучше, чем неявное.
Простое лучше, чем сложное.
Сложное лучше, чем запутанное.
Плоское лучше, чем вложенное.
Разреженное лучше, чем плотное.
Читаемость имеет значение.
Особые случаи не настолько особые, чтобы нарушать правила.
При этом практичность важнее безупречности.
Ошибки никогда не должны замалчиваться.
Если они не замалчиваются явно.
Встретив двусмысленность, отбрось искушение угадать.
Должен существовать один и, желательно, только один очевидный способ сделать это.
Хотя он поначалу может быть и не очевиден, если вы не голландец.
Сейчас лучше, чем никогда.
Хотя никогда зачастую лучше, чем прямо сейчас.
Если реализацию сложно объяснить — идея плоха.
Если реализацию легко объяснить — идея, возможно, хороша.
Пространства имён — отличная штука! Будем делать их больше!
PEP 8, или руководство по написанию кода от Гвидо Ван Россума, B. Warsaw.
Также PEP 257, который обозначает соглашения для строк документации.
Анализируйте исходный код
Python — open-source`ный язык программирования, также как большинство популярных билиотек. Это значит, что Вы можете читать исходный код. Это часто возможно на Github, но есть и другие места где Вы можете это сделать.
Чтение и понимание кода библиотеки позволяет более лучше понимать, как она работает.
В дополнение, Вы можете изучать многое анализируя исходный код других (надеюсь хороших) программистов. Вы можете заимствовать идеи, смотреть на разные пути реализации, изучать новые паттерны, и так далее.
Интересуйтесь библиотеками
Python имеет множество полезных библиотек для разных задач:
регулярные выражения, математика, статистика, генерация случайных чисел, тестирование, итерирование, функциональное программирование, многопоточность и многопроцессность, абстрактные классы и многое другое.
Также имеются некоторые действительно полезные сторонние библиотеки для множества разных научных задач.
Очевидно, Вы не можете изучить как использовать их все, но Вы можете сфокусироваться на нескольких из них, которые кажутся Вам более интересными для Вашей специализации.
Если Вы хотите быть дата сайентистом или заниматься Machine Learning, Вам нужно начать с NumPy, который является основопологающей библиотекой, для манипуляции одно- и много-мерными массивами эффективным и простым путём. Он быстр и включает множество операций с массивами, без явного написания циклов for
из Python.
>>> import numpy as np
>>>
>>> a = np.array([1, 2, 3, 4, 5])
>>> a
array([1, 2, 3, 4, 5])
>>> b = 2**a
>>> b
array([ 2, 4, 8, 16, 32])
>>> a + b
array([ 3, 6, 11, 20, 37])
>>> b / 2
array([ 1., 2., 4., 8., 16.])
- NumPy предлагает множество функций для манипулиции массивами. Также он содержит инструменты для линейной алгебры, статистики и так далее.
- SciPy это библиотека для научных расчётов построеная над NumPy, которая содержит дополнительные возможности для линейной алгебры и статистики.
- Pandas — одна из самых популярных Python библиотек. Она также построенна над NumPy и работает хорошо с NumPy и SciPy. Она включает функции для манипуляции с данными.
- Scikit-learn это фундаментальная библиотека для Machine Learning с множеством алгоритмов. TensorFlow, Theano, Pytorch, и Keras также используются для работы с нейросетями.
- Matplotlib и Bokeh хорошие варианты для визуализации данных.
Все эти библиотеки имеют превосходную документацию.
Если Вы хотите заниматься web-программирование, Вы можете изучить и попрактиковаться работать с некоторыми Python фреймворками для бэкенда. Самый популярный из них — Django, имеет большинство нужных возможностей. Это очень удобно для больших веб приложений. С другой стороны — Flask — мощный, гибкий микро-фреймворк с большим количеством дополнений. Django и Flask самые популярные Python веб-фреймворки.
Также Python имеет другие веб-фреймворки, например Pyramid, Bottle, Tornado и так далее.
SQLAlchemy — это пакет которые включает возможность работы с БД в объекто ориентированном стиле. Он часто используется в веб-фреймворках, но также в Data Science.
Станьте частью сообщества
Как уже было сказано, Python имеет большое и дружное сообщество. Вы можете стать его частью. Читайте публикации, комментируйте, спрашивайте, ищите объяснения.
Когда Вы будете иметь достаточный уровень знаний, Вы сможете начать вкладывать свои знания в open-source проекты, или помогать тем, кто пишет статьи или туториалы. Эти вещи очень ценятся сообществом и большинством потенциальных работадателей.
Изучите второй язык программирования
Python это мультипарадигмальный язык программирование, и во многих ситуациях, его хватает.
Но не смотря ни на что, всегда нужно искать преимущества в изучении других языков.
С помощью этого, Вы можете улучшить свои знания в программировании в целом, парадигмах и расширить свой кругозор. Когда Вы изучите один язык, изучение других будет проще. Большинство хороших программистов знают несколько языков.
Если Вы хотите быть веб-программистом, Вам вероятно нужно будет изучить JavaScript. Изучение C хорошо для лучшего понимания базовых концептов программирования, но Вы можете также писать на нём очень быстрые функции для Python. Rust это новый и очень классный язык, который уже имеет хорошую интеграцию с Python
Примеры проектов для практики
Имеется много маленьких проектов, которые Вы можете использовать для изучения Python. Например, попробуйте автоматизировать скучные задачи. Изучение строк, регулярных выражение, и даже библиотеки для шаблонов Jinja, может помочь Вам писать более эффективный код.
- Если Вы часто работаете с Microsoft Office Excel, Вы можете использовать XLWings, NumPy и Pandas для ускорения вычислений.
- Вы можете использовать Python для создания игр. Например, Вы можете взять библиотеку
random
и попробовать симулировать бросок кубика, или перемешивание колоды карт. - Если Вы хотите делать крутые графические интерфейсы, Вы можете использовать PyQt или Tkinter. Возможно Вам стоит создать калькулятор (чем больше возможностей, тем лучше) или какую-нибудь простую, но известную игру.
- Если Вы хотите погрузиться в веб-разработку, попробуйте Flask. Он требует всего 5 строк кода для получения базовых, но функциональных веб-приложений.
Официальный веб-сайт Flask содержит замечательную документацию и туториал, который Вы можете использовать для его изучения.
Doumly Machine Learning туториал имеет инструкции как Вы можете практиковаться в Data Science и machine learning.
Заключение
Вы прочитали несколько советов о том, как практиковаться Python. Надеюсь, они помогут Вам стать Python программистом. Запомните, что нужно много программировать, писать интересные программы, пытаться учиться на ошибках, и конечно же, стать частью сообщества.
Счастливого кодинга!
Комментарии (17)
kx13
06.12.2019 13:33Matplotlib и Bokeh хорошие варианты для визуализации данных.
Есть еще один продукт Dash: https://dash.plot.ly
И здесь про него уже писали https://habr.com/ru/post/431754/ но статья уже устарела местами.
Dimer_Dim
06.12.2019 18:53Подскажите какие-нибудь проекты на Python для прокачки. Сделал небольшой сервис электронной библиотеки на Flask: авторизация пользователей, поиск книги, добавление книги авторизованным пользователям, небольшой личный кабинет у пользователей. Использовал базу данных SQLite, Flask, немного html и bootstrap. Хотелось бы сделать еще какой-нибудь проект, но не знаю что…
Meklon
Хм. Хочу уйти от ввода/вывода в своих программах в виде csv. Веб-сервисы и API выглядят более правильным решением. С какой стороны начать есть слона?)
stripe
Если это про питон, и сохранять в фаилы — посмотреть на pickle.
А вообще, csv — неплохой выбор, если фаилы нужно анализировать во внешнем софте или читать человеком (ака human-readable format)
Еще можно смотреть на базы данных. Часто, если немного подумать над форматом данных, он хорошо укладывается в реляцеонную базу данных или просто таблицу. Тогда смотреть на SQLAlchemy. Для начала можно использовать SQLite как бекэнд — большая база данных будет не нужна. Потом, если все идет хорошо — поставить postgres или mysql
Meklon
Попробую, спасибо. А чем лучше веб API реализовать? Из самого простого для начала.
stripe
Я сам пользуюсь Flask.
Из плюсов, у него встроенный веб сервер для разработки, можно делать не только API, но и отдавать htlm сгенерированный из шаблонов jninja, и куча всего с этим связанного. Или просто return JSON(...). В продакшене нормально работает за nginx/uwsgi. Ну и освоение с нуля у него весьма простое.
Впрочем тут большой простор для выбора. Самый первый проэкт с веб апи я делал вообще на Bottle. Еще поискать по хабру, тут буквально на днях проскакивала статья на каком фреймвоке делать api на python.
Meklon
Крайне признателен. Спасибо.
worldmind
Недавно глянул на jinja и что-то опечалился самодельным синтаксисом и взял mako.
stripe
Посмотрел сейчас на mako по вашей ссылке и особо больших отличий от того что я использовал в Flask/jninja не увидел. Более того, они пишут что заимствовали идеи из много чего включая Jninja2.
worldmind
Не, ну конечно все шаблонизаторы примерно одинаковые, только в mako вместо нового языка тот же питон с небольшими отличиями нужными для шаблонизатора
Satim
pickle — несколько не безопасная библиотека
лучше сразу SQLite или Postgres
worldmind
Недавно попробовал fastapi — весьма прикольная штука, если будут вопросы — пиши.
worldmind
ну и надо понимать задачи, если это CRUD, то тогда подойдёт REST, а значит нужно брать фреймфорки которые хорошо умеют OpenAPI, поддержка бывает разной, например connexion, пляшет вокруг самой спецификации — написал yaml файл, закодил функцию выполняющее действие и готово, а fastapi пляшет от кода в котором описаны типы данных и функции, а из него фреймворк генерит спецификацию и остальные плюшки вроде доков.
А если это вызов удалённых процедур (RPC), то надо смотреть в сторону JSON-RPC или gRPC, тогда уже не обязательно и веб фреймворк использовать, может и обычный демон быть, который принимает соединения или читает очередь с запросами, тут уже есть поле для дискусии, я не все варианты пробовал.
Matshishkapeu
Стримлит позволяет сделать интерфейс вообще почти без усилий, если не стоит задача сделать конечный продукт то для служебных инструментов — лучшее соотношение результата и затраченных усилий.