Як я перейшов від C ++ до Python: концептуальна зміна

Вступ

Люди кажуть, що кодування на Python настільки просто, що це може зробити навіть 6-річний вік. Це була думка, яку я мав на увазі, коли на роботі почав кодувати на Python. У той час я був штатним розробником програмного забезпечення протягом 4 років, писав переважно на C ++ для Linux, активно використовуючи бібліотеку QT. Однак спочатку я писав поганий код Python.

Минуло близько 3 років з того часу, як я зробив цей перехід, і я вважаю, що є гарним підсумком підсумку прогресу, який я досяг за цей час. Озираючись назад, я змінив не лише свою основну мову програмування, але й своє робоче середовище та спосіб думки про код.

Я не буду вдаватися в подробиці та відмінності між C ++ та Python, оскільки в Інтернеті є численні ресурси, а скоріше опишу свій власний досвід. Я сподіваюся, що ця публікація буде корисною для людей, які пройшли той самий перехід, що і я.

C ++ займається дайвінгом, Python - підводним плаванням

C ++ відчуває себе як занурення у магічні таємниці моря - це прекрасно, але вимагає більше навчання та практики, і загалом відстань, яку ви подолаєте, не така вже й велика. Python трохи схожий на підводне плавання - ви бачите красу, як тільки засунете голову у воду, але ви не зайдете набагато далі. Ви продовжуєте плавати на мілководді і можете легко подолати велику відстань. З цього опису видно, що кожна з цих мов повинна використовуватися у своє місце та час.

Занурення в C ++ і його виживання

С ++ є більш суворим і суворіше карає вас за ваші помилки. Це не ефективний сеанс кодування, якщо ви хоча б раз не отримали дивовижної помилки сегментації . Тому воно вимагає глибшого розуміння комп’ютера, компілятора та мови. Заглибившись, ви дійсно можете побачити та вразити прекрасні речі, такі як процес компіляції та управління пам’яттю.

Як програміст на C ++, я більше піклувався про налаштування синтаксису та дивні приклади. Я завжди знав, де я виділяю пам’ять і як її звільняю. Програми, які я писав, були більш автономними, оскільки я волів знати, що відбувається всередині мого коду. Основна ідея полягала в тому, що код, написаний кимось іншим, був менш надійним, більш схильним до помилок і міг підірвати використання вашої пам’яті.

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

Неглибоке плавання в Пітоні

Одне з перших речей, про яке вам потрібно навчитися при переході на Python, - це як відпустити - ви не знаєте, що відбувається під капотом, де виділяється і звільняється пам’ять, і це нормально. Вам також рекомендується використовувати код, написаний іншими, упакований у бібліотеки, оскільки це економить ваш час та допомагає швидше кодувати. Це не означає, що вам потрібно писати код, який працює повільно і спирається на необслуговувані та нефункціональні бібліотеки, але фокус, безумовно, інший.

Коли я почав кодувати на Python, я вперше написав код C ++ на Python. Це спрацювало, але я не отримав жодної користі від мови. Моє кодування покращилося, коли я почав писати більш «пітонічним» чином і почав користуватися бібліотеками та більш досконалими концепціями, такими як генератори, декоратори та контексти.

Як розробник Python, я схильний спочатку шукати бібліотеку, яка вирішує проблему. Python має багату екосистему бібліотеки та спільноту, яка її підтримує. Є бібліотеки, де можна робити практично все. Ось декілька зручних, якими я користуюся щодня: NumPy для чисельних розрахунків, OpenCV для комп'ютерного зору, Jjson для читання файлів JSON , SciPyдля наукових розрахунків, sqlite3 для баз даних.

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

Деякі практичні поради

Якщо ви розробник C ++ і хочете почати кодування на Python, ось моя порада для вас:

  • Позбудьтеся старих звичок - припиніть використовувати компілятор C ++ як налагоджувач. Не переоптимізуйте використання пам’яті. Уникайте написання коду, подібного до C ++. І неодмінно намагайтеся не покладатися на типи.
  • Отримайте нові звички - Почніть користуватися бібліотеками. Напишіть Pythonic код (але не перестарайтеся). Тримайте речі читабельними. Використовуйте більш складні поняття, такі як генератори / декоратори / контексти. Спробуйте PyCharm.
  • Використовуйте загальні бібліотеки C ++ та Python - Деякі бібліотеки C ++, такі як OpenCV та QT, мають інтерфейс Python. Почати користуватися тією ж бібліотекою в Python легко, а не вивчати нову бібліотеку з нуля.
  • Не забувайте про своє походження - іноді Python просто занадто повільний або не оптимальний для цього завдання. Це коли ваші знання про C ++ з’являються. Існує багато способів ( SIP , ctypes тощо) для використання коду C ++ всередині Python.

Нижня лінія

Що б не говорили інші люди, перехід на іншу мову програмування, особливо на мову, яка принципово відрізняється від тієї, до якої ви звикли, непростий. Не поспішайте вчитися, копатись, відкривати. Але найголовніше, розумійте, що повинна змінюватися не тільки мова, але й ваш стиль кодування та методологія роботи.

Удачі!