Как преминах от C ++ към Python: концептуална промяна

Въведение

Хората казват, че кодирането в Python е толкова лесно, че дори 6-годишен може да го направи. Това беше мисълта, която имах предвид, когато започнах да кодирам в Python по време на работа. По това време бях щатен разработчик на софтуер от 4 години, писах главно на C ++ на Linux, използвайки силно QT библиотеката. В началото обаче написах лош код на Python.

Изминаха около 3 години, откакто направих това превключване и мисля, че е добре да обобщим напредъка, който постигнах през това време. Когато поглеждам назад, не само промених основния си език за програмиране, но също така промених работната си среда и начина, по който мисля за кода.

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

C ++ се гмурка, Python се гмурка с шнорхел

C ++ се чувства като да се потопите в магическите мистерии на морето - красиво е, но изисква повече учене и практика и като цяло разстоянието, което изминавате, не е толкова голямо. Python е малко като гмуркане с шнорхел - виждате красотата веднага щом забиете главата си във водата, но не слизате много по-надолу. Продължавате да плувате в плитки води и можете лесно да изминете голямо разстояние. От това описание става ясно, че всеки от тези езици трябва да се използва на точното си място и време.

Гмуркане в C ++ и оцеляването му

C ++ е по-строг и ви наказва по-строго за грешките ви. Това не е ефективна кодираща сесия, ако поне веднъж не сте получили изненадваща грешка в сегментирането . Следователно изисква по-задълбочено разбиране на компютъра, компилатора и езика. Когато влезете по-дълбоко, наистина можете да видите и да бъдете впечатлени от красиви неща, като процеса на компилация и управление на паметта.

Като програмист на C ++ се интересувах повече от ощипванията на синтаксиса и странните примери. Винаги съм знаел къде разпределям паметта и как я освобождавам. Програмите, които написах, бяха по-самостоятелни, тъй като предпочитах да знам какво се случва в моя код. Основната идея беше, че кодът, който някой друг е написал, е по-малко надежден, по-податлив на грешки и може да взриви използването на паметта ви.

Основните ми ежедневни инструменти бяха Vim с множество приставки за писане на код, GDB за отстраняване на грешки и Valgrind за анализ на използването на паметта и грешките ми. Компилирах с g ++ и написах свои собствени Makefiles . Тогава не чувствах, че IDE ще ми бъде от полза, а по-скоро забавя нещата и ме кара да загубя връзка с кода си. В ретроспекция разчитах силно на компилатора за намиране на грешките ми в типа .

Плитко плуване в Python

Едно от първите неща, които трябва да научите, когато превключвате на Python, е как да го пуснете - не знаете какво се случва под капака, където се разпределя и освобождава памет и всичко е наред. Също така се насърчавате да използвате код, написан от други, опакован в библиотеки, тъй като ви спестява време и ви помага да кодирате по-бързо. Това не означава, че трябва да пишете код, който е бавен за кучета и разчита на неподдържани и нефункционални библиотеки, но фокусът определено е различен.

Когато започнах да кодирам в Python, първо написах C ++ код в Python. Получи се, но не спечелих никаква полза от езика. Кодирането ми се подобри, когато започнах да пиша по по-„питоничен“ начин и започнах да използвам библиотеки и по-напреднали концепции като генератори, декоратори и контексти.

Като разработчик на Python съм склонен първо да търся библиотеката, която решава въпросния проблем. Python има богата библиотечна екосистема и общност, която го поддържа. Има библиотеки, които правят практически всичко. Ето някои удобни, които използвам ежедневно: NumPy за числени изчисления, OpenCV за компютърно зрение, json за четене на 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.

Долна линия

Без значение какво казват другите хора, преминаването към различен език за програмиране, особено към език, който е коренно различен от този, с който сте свикнали, не е лесно. Отделете време да научите, да се ровите, да откривате. Но най-важното е да разберете, че не само езикът трябва да се променя, но и вашият стил на кодиране и методология на работа.

Късмет!