Переход с С++ на Python: концептуальное изменение

0
616
views

Перевод статьи «How I went from C++ to Python: a conceptual change».

Photo by Pop & Zebra on Unsplash
Photo by Pop & Zebra on Unsplash

Говорят, что программировать на Python настолько легко, что с этим справится и шестилетний ребенок. Именно так я и думал, когда начал писать на этом языке. В то время я уже четыре года был штатным разработчиком. Писал я в основном на С++, работал на Linux, активно пользовался библиотекой QT. Но, вопреки своей убежденности в легкости Python, писал я на нем поначалу плохо.

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

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

C++ это плавание с аквалангом, а Python – с маской

Переход с С++ на Python
Прыжок с C++ на Python (Photo by Erik Dungan on Unsplash)

Программирование на C++ напоминает погружение в мистические глубины. Это прекрасно, но требует более длительного обучения и практики. Кроме того, далеко вы не уплывете.

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

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

Погрузиться в С++ и выжить

Погружение в С++

C++ более строг и суровее наказывает за ошибки. Если вы хоть раз не получили Segmentation fault, то ваша сессия программирования не может считаться эффективной. Поэтому вам нужно более глубокое понимание компьютера, компилятора и самого языка. Погружаясь глубже, вы можете увидеть на самом деле прекрасные вещи, такие как процесс компиляции и управление памятью.

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

Моими ежедневными инструментами были Vim со множеством плагинов для написания кода, GDB для отладки и Valgrind для анализа использования памяти и ошибок памяти. Я компилировал с помощью g++ и писал собственные Makefiles. В то время я не думал, что IDE даст мне какие-то преимущества, напротив, я считал, что ее использование замедлит мою работу и я потеряю контакт со своим кодом.

Плавание с маской в Python

Python - как плавание с маской

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

Когда я начинал работать на Python, я сначала писал на нем код C++. Код работал, но я не получал никаких преимуществ от использования нового языка. Ситуация улучшилась, когда я начал писать на более «питонистый» манер, в частности, использовать библиотеки и более продвинутые концепции, такие как генераторы, декораторы и контексты.

Как Python-разработчик я стараюсь сначала искать библиотеку, которая могла бы решить мою проблему. Python имеет богатую библиотечную экосистему и сообщество, которое ее поддерживает. Библиотеки есть практически для всего. Некоторые особенно удобны, и я пользуюсь ими ежедневно: NumPy для числовых вычислений, OpenCV для компьютерного зрения, json для чтения json-файлов, SciPy для научных вычислений, sqlite3 для баз данных.

Моим инструментом на каждый день стала PyCharm (да, IDE) с плагином IdeaVim. Я начал использовать его главным образом потому, что это мощный отладчик, намного более дружественный, чем дефолтный отладчик Python – pdb. Также я использую pip для установки необходимых библиотек. Я больше не отслеживаю использование памяти, за исключением случаев, когда это действительно необходимо.

Несколько практических советов

Как осуществить переход на Python с C++

Если вы работаете на С++ и думаете перейти на Python, могу предложить несколько советов:

  • Избавьтесь от старых привычек. Прекратите использовать компилятор и отладчик для С++. Не усердствуйте с оптимизацией использования памяти. Старайтесь не писать С++-подобный код. И старайтесь не полагаться на типы.
  • Заведите новые привычки. Начните использовать библиотеки. Пишите Python-подобный код (но не перестарайтесь). Следите за читаемостью кода. Используйте более сложные концепции, такие как генераторы/декораторы/контексты. Попробуйте PyCharm.
  • Используйте общие библиотеки C++ и Python. Некоторые библиотеки С++, например, OpenCV и QT, имеют Python-интерфейс. Легче начать использовать в Python уже знакомую библиотеку, чем изучать новую с нуля.
  • Не забывайте своих корнях. Порой Python просто слишком медленный или не оптимальный для выполнения какой-то задачи. Тут пригодятся ваши познания в С++. Есть много способов использовать этот язык внутри Python (SIP, ctypes и т. д.).

Итоги

Что бы кто ни говорил, но переход с одного языка на другой непрост. Особенно, если эти два языка фундаментально отличаются друг от друга. Уделите время учебе, погружению, открытиям. И, самое главное, осознайте, что измениться должен не только язык. Вам нужно сменить стиль написания кода и методологию работы.

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here