Першою мовою програмування, яку я спробував була мова Паскаль. Її нам в універі (на мех-маті в ЛНУ ім. І. Франка) викладали, на скільки пам’ятаю, один симестр. Далі, на останньому курсі університету мені порекомендували спробувати освоїти мову Python, щоб націлитись на свою першу роботу в якості веб-програміста. Пізніше у своїй програмерській кар’єрі я також непогано освоїв Javascript i PHP. Також “бавився” із Ruby і вивчав C++ (чисто по книжці із виконанням цікавим домашок).

Наша команда володіє кількома різними мовами програмування і розробляє веб-сайти використовуючи мінімум 3 різних фреймворка та CMS на різних мовах. Ми вже давно зрозуміли, що не існує єдиної мови, інструменту для всіх проектів. Класно володіти арсеналом інструментів та підбирати той, який допоможе найшвидше та найякісніше вирішити задачу. Адже ніхто не буде нарізати хліб сокирою чи колоти дрова ножем 😉

Тим не менше улюбленою мовою програмування в мене особисто була і залишається мова програмування Python. Її простий синтаксис, швидшість написання програм, великий набір бібліотек, відкритий код та широкий спектр застосування – все це ставить її на першу позицію в моєму особистому рейтингу.

Незважаючи на це я чудово розумію, що дана мова також має свої мінуси. Є задачі і сфери, де на Python можна успішно проскакати до фінішу, а є речі, які краще на ній не писати.

В сьогоднішній статті поділюсь власним досвідом і думками щодо тих задач, які варто розв’язувати з допомогою мови Python і наведу приклади, коли Python краще уникати. Думаю в наступних статтях я також розкажу про застосування інших мов, якими володію. А сьогодні розберемось із моїм улюбленцем – Python…

Перед тим як переходити до областей програмування, коротенько наведу кілька фактів про мову Python. Буде корисно для тих, хто ще нічого не знає про дану мову:

Коротко про Python

Мова Python є високорівневою мовою широкого застосування. Автор мови (Ґвідо ван Россум) зробив неабиякий акцент на читабельності коду та синтаксисі. Мова дозволяє програмісту реалізувати задачі із значно меншою кількістю рядків коду, ніж потрібно у інших мовах таких як C++ чи Java.

Мова є кросплатформенною та застосовується для різних напрямків. Але про це далі в статті…

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

З 2008 року мова постійно попадає у вісьмірку найпопулярніших мов програмування згідно TIOBE Programming Community Index.

Мову активно використовують у своїх різноманітних процесах та продуктах такі компанії та організації як Google, Yahoo, NASA, Walt Disney, Red Hat, Nokia, IBM.

А тепер давайте глибше копнемо по напрямках та платформах програмування:

Наука, штучний інтелект, аналіз даних, …

Я вирішив об’єднати усі ці ніші в одну секцію, адже усі вони мають те чи інше відношення до математики в поєднанні з іншими науками.

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

Для кожної із даних галузей вже існує маса бібліотек і фреймворків. Ознайомитись із ними можна на даній сторінці.

Як побачите, із існуючих бібліотек Python також дає масу інструментів для рішення задач пов’язаних із створенням штучного інтелекту та аналізу даних. Також з їх допомогою інженери та вчені можуть значно простіше справлятись із задачами аналізу зображень, тексту та візуалізувати проаналізовані дані.

Тут, наприклад,  можете ознайомитись із інфографікою порівняння можливостей Python та мови R (спеціалізована мова) для аналізу даних.

Також Python успішно використовується для реалізації Географічних Інформаціних Систем (GIS): картографія, геолокація, та GIS програмування.

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

Веб-розробка

Веб-розробка – це мабуть чи не найпопулярніший напрямок для мови Python на даний час.

Простота і швидкість написання програм на даній мові роблять її чудовим інструментом для швидкого створення веб-сайтів. А існуючий набір веб-фреймворків та CMS систем дозволяє за лічені години/дні створювати висококласні веб-сайти: Django, Pyramid, Flask, Turbogears, Django-CMS, Plone CMS, Zope і багато інших…

Якщо ж вам потрібно запрограмувати онлайн чат чи іншу “живу” динамічну веб-аплікацію, тоді стануть у нагоді такі фреймворки як Twisted чи Tornado.

Деплоймент (встановлення на кінцевий сервер) Python веб-аплікацій є зазвичай доволі простим, проте не таким простим як PHP. Роботу із базами даних більшість Python фреймворків полегшують з допомогою так званих “містків” (ORM), що дозволяють програмісту працювати із базою пишучи на мові Python. Одним із найпопулярнішим таким містком є SQLAlchemy.

На даний момент Django є одним із найпопулярніших Python веб-фреймворків і на ньому написані такі популярні онлайн ресурси як Pinterest, The New York Times, The Guardian, Instagram, BitBucket.

На Python веб-фреймворку Pylons написаний Reddit.com. Даний ресурс за попередній місяць отримав 172.710.261 унікальних відвідувачів та 7.566.868.985 переглядів сторінок. Що це означає? А те, що швидкодія мови Python (яка є звичайно нижчою, ніж компільованих мов) немає особливого значення у веб-напрямку. Будь-який “серйозний” веб-сайт із мільйонними відвідуваннями потребуватиме додаткових механізмів кешування, незалежно від мови реалізації. З іншої сторони Python дозволить вам в рази швидше реалізувати проект.

Таким чином, для не “ентерпрайз” (enterprise, великі компанії) проектів розробники все частіше вибирають такі скриптовані мови як Python та Ruby і менше Java чи C#. Проте, більшість Python веб-фреймворків ще й надалі поступаються Java і .Net середовищам в надійності і безпеці, якщо потрібно реалізувати серйозні “ентерпрайз” веб-проекти (наприклад розробка банківської системи і т.д.).

Для “не ентерпрайз” проектів у 90% мова Python задовольнить ваші потреби на всі 100%. А Python фреймворк Zope i Plone CMS дозволять реалізувати невелику частину складніших проектів в “ентерпрайз” світі.

Десктопні програми

В Python світі є багато фреймворків і бібліотек, що дозволяють створювати десктопні (програми, що інсталюються на вашому комп’ютері) програми для різних операційних систем. Серед них: wxPython, Qt (PyQT та PySide), Kivy, Tkinter, PyObjC, Camelot, PyjamasDesktop.

Також є цілий ряд інструментів, що дозволяють пакувати вашу програму для інсталяції на більшості сучасних операційних систем: Pynsist, py2exe, cx_Freeze, PyInstaller, py2app.

Крім того, можна знайти не одне візуальне середовище для побудови графічних інтерфейсів десктопних програм.

Також, добре пошукавши, ви зможете знайти немало популярних десктопних програм написаних на мові Python. Серед них: Dropbox, TaskCoach, Bittorent.

Все це вказує на те, що так – на Python можна писати класні десктопні аплікації. Але! Вам прийдеться шукати власний шлях і налаштовувати власне середовище, вибирати власні підходи та інструменти, щоб відлагодити весь непростий процес розробки та інсталяції програми.

Навіть на власних невеликих десктоп проектах я мав можливість переконатись, що Python і його існуючі десктоп фреймворки є далеко не оптимальним інструментом.

В той час як на інших спеціалізованих платформах (Microsoft, Apple SDK і т.д.) ви матимете це все одним махом. Що і як робити – все це для вас уже продумано і задокументовано.

І, якщо порівнювати кількість десктопних аплікацій розроблених на спеціалізованих платформах, то на Python їх реалізовано мізер. Комерційних десктопних програм на мові Python дійсно небагато. І навряд чи буде легко знайти добре оплачувану роботу в якості Python десктоп програміста.

Мобільні додатки

Усі ми знаємо, що на даний час мобільні додатки поділяються на дві категорії: під Андроїд та під iOS (iPhone, iPad, iPod…). Рідна мова, якою створюються Андроїд додатки – Java. Рідна мова, якою створюються iOS додатки – ObjectiveC. Всі інші підходи – побічні і не підтримувані офіційними виробниками.

Давніше ми у себе на фірмі пробували розробити аналог аплікації Commit (аплікація під iPhone для вироблення щоденних звичок), але для платформи Android. Переглянули на той час усеможливі опції, щоб реалізувати її з допомогою Python. Обрали фреймворк kivy. І навіть така проста аплікація доволі довго стартувала на доволі потужному Андроїд телефоні. Крім того, реалізація графічного інтерфейсу з допомогою kivy була доволі складною, що значно сповільнювало процес розробки.

На даний момент існує кілька різних фреймворків і обгорток, які дозволяють реалізувати мобільні додатки на мові Python як для iOS, так і для Anroid. Проте, якщо вам потрібно реалізувати аплікацію із складним графічним інтерфейсом, функціоналом, що вимагає тісної інтеграції із API пристрою, значних ресурсів системи – швидше за все вам прийдеться вивчати Java або ObjectiveC.

І єдине місце, де, на мою думку, Python на даний момент гарно вписується, коли мова йде про мобільні платформи – це розробка бекенд систем для мобільних додатків, що використовують спільний сервер для утримання даних.

Навчання

Python – інтерпретована високорівнева мова із надзвичайно простим синтаксисом. Код на ній пишеться і читається легко та швидко. Все це робить дану мову ідеальною для вивчення саме як першої мови. З нею студент може легко зосередитись на перших нескладних парадигмах програмування і доволі швидко почати писати перші програми пройшовши 1-2 безкоштовні онлайн курси. В той час, як на компільованих та інших більш “строгих” мовах прийдеться прочитати талмуд теорії і лише тоді приступати до практики.

Існування волонтерських проектів на зразок codeclub.ua доводить той факт, що мова Python на стільки проста, що навіть дитина може її освоїти. В програмі codeclub.ua після освоєння візуальної мови Scratch, дітей переводять на другий рівень, де навчають основ мови Python.

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

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

Ігрова індустрія

У 3-му класі школи батьки віддали мене на клас акордеона. Я успішно провчився 5 років, правда останні 2 роки трохи під-набридло це діло. Тим не менше, отримані знання використовував далі, щоб вчитись самостійно гри на гітарі. Використовуючи акордеон підбирав акорди пісень на слух і потім пробував їх на гітарі. А щоб не витягувати кожного разу величезний 112-акордовий акордеон Аеліта з чемодану (тоді я закінчував вже універ і якраз почав вивчати програмування на Python), придумав для себе практичну задачку для освоєння Python: запрограмувати симулятор піаніно (Pyano) і підбирання пісень “на слух” робити у себе на комп’ютері. Щоб клавіатура комп’ютера працювала як клавіші піаніно.

Для цього я використав Python фреймворк для розробки ігор. За два тижні вивчення Python i Pygame симулятор працював. Радості не було меж.

Так, на Python можна програмувати складні 2D i навіть 3D ігри.

З допомогою Panda3D Уолт Дісней створив гру Пірати Карибського Моря. Ще одним прикладом гри на Python є www.eveonline.com. Але, все ж таки, якщо Python і бере участь в створенні складних ігор – то, зазвичай, лише певних  їх частин.

Python не є оптимальним інструментом для створення великих серйозних ігор. Для цього існують інші, більш придатні, мови та ігрові двигуни.

Адміністрування, автоматизація процесів

Швидкість і простота написання скриптів на мові Python, а також набір доступних бібліотек для роботи з мережею, файлами робить її дуже хорошим помічником системного адміністратора.

Тестування, деплоймент, побудова середовища, моніторинг процесів та серверів – усі ці завдання добре реалізуються з допомогою скриптової мови Python.

Embedded, мікроконтроллери, робототехніка…

Програмувати на високорівневій інтерпретованій мові низькорівневі процеси звучить доволі парадоксально. Тим не менше існують системи, що дозволяють на Python писати embedded системи. Один із прикладів – проект Raspberry Pi. Ось як на Python можна програмувати мікроконтроллери.

Проте Python має, як мінімум, два очевидних недоліки: для цього напрямку він є дійсно заповільний, а також може використовувати більше пам’яті, ніж інші, низькорівневі мови. І тут, навідміну від вебу, кешування не допоможе.

Підсумуємо

Таким чином, можете бачити, що на мові Python, при великому бажанні можна програмувати майже все! Але давайте підсумуємо для чого нам точно підійде дана мова:

  • беретесь за веб-проект або хочете швидко стати веб-програмістом? у 90% Python – ваш друг! 😉
  • починаєте свій шлях у програмуванні? Python – ідеальна перша мова для навчання;
  • займаєтесь наукою чи просто потрібно розв’язати більш математичну/статистичну задачу обчислювальними методами? або розібратись із купою даних? – дайте шанс мові Python, швидше за все вона вас приємно здивує;
  • ви адміністратор і регулярно приходиться автоматизувати свої процеси? – Python також має для вас не один сюрприз.

“А усе решта?” – спитаєте ви. Це вже дуже залежить від специфіки проекту. Головне – не пробуйте “сокирою нарізати хліб” 😉 І також пам’ятайте, що через свою практичність і швидкість написання коду, Python може бути непоганим інструментом для створення прототипу. Навіть, якщо наступна версія проекту буде написана на іншій мові, ви не втратите багато часу і ресурсів.

***

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

І на завершення, кілька посилань, щоб ви могли ще краще ознайомитись із даною мовою та областю її застосування:

Якщо ви програмуєте на Python – діліться вашими думками щодо призначення і найкращого використання даної мови!