Таке питання мені часто ставляють люди, які лише починають вивчати програмування. Зокрема, неодноразово отримував скарги, що якийсь із прикладів в моєму курсі Python 2 – Курс Молодого Бійця не працює. Після першого ж питання ставало зрозуміло, що людина просто заінсталювала собі Пітон 3-ї версії.
Якщо коротко, то відповідь на дане питання:
- саме для початківців: вивчайте мову Python починаючи з версії 2,
- для профіків: обирайте Python 2 або Python 3 взалежності від проекту та ситуації.
Чому? Далі в статті спробуємо розібратися.
Щоб краще зрозуміти ситуацію з третьою версією мови програмування Пітон, давайте трохи копнемо в історію:
Історія Python 3
В 2008 році релізнули версію 3.0. Початкові прогнози були такими, що коли 3-тя версія мови Python буде опублікована, потрібно буде близько 5-ти років для повного переїзду програмістів з другої версії на третю. Це одна з причин чому Python 2.7 версію так довго підтримували.
Проте реліз Python 3.0 показав кілька критичних проблем в IO продуктивності, що по-суті унеможливило використання даної версії в практичних цілях на реальних проектах. Тому можна сказати, що відлік тих 5-ти міграційних років потрібно починати з релізу версії 3.1 в червні 2009 року. Проблеми з IO продуктивністю були вирішені у версії 3.1.
Python 2 програмісти, які вперше пробують писати код версії 3 мають регулярні проблеми із різницею в синтаксисі версій. Як от, print у версії третій став функцією. Але це в принципі не є великою проблемою, адже існуючі міграційні інструменти (2to3 наприклад) виправляють такі зміни автоматично і без будь-яких проблем.
Однією з найбільших проблем у програмістів виявилась семантична різниця двох версій: Python 3 не дозволяє “як-небудь” використовувати кодування тексту. Плюсом є обробка та збереження тексту у правильному форматі. Мінус – існуючий пітон 2 код є значно важче портувати на нову версію. Програмісту потрібно по-суті оновити увесь свій код, який має справу із стрічками та будь-яким текстом. В той час як Пітон 2 тихенько генерував некоректні дані, які важко було зауважити допоки в коді використовувалися лише ASCII дані, Пітон 3 заставить програміста усе виправляти.
Навіть стандартні бібліотеки Python 3.0 та 3.1 мали проблеми з обробкою юнікоду, що робило задачу програміста ще важчою.
3.2 версія Пітона, випущена в лютому 2011 року, вирішила більшість існуючих проблем з кодуванням тексту. Таким чином дала поштовх для адаптації популярних бібліотек та таких фреймворків як Django.
Також в той час кілька інших ключових пітон бібліотек та популярних фреймворків були портовані до третьої версії: NumPy, Scipy, zc.buildout, pip, virtualenv, Pyramid. Навіть Twisted в той час вже перестав підтримувати Python 2.5 і почав працювати на адаптацією до 3ї версії.
Окрім 2to3 було розроблено кілька додаткових інструментів, що значно полегшували програмістам міграцію коду до версії Python 3: python-modernize, six.
У вересні 2012 спільнота публікує Python 3.3 версії. Дуже важлива зміна відбулась у даній версії – Пітон знову підтримує ‘u’ префікс у стрічкових змінних. Ця зміна була лише для того, щоб полегшити міграцію коду.
І зовсім недавно у березні 2014 вийшла версія Python 3.4.0. Ніяких синтаксичних змін розробники не вводили. Лише нові модулі та багато баг фіксів.
Також можна бачити, що вже дуже багато популярних пакетів, бібліотек та фреймворків адаптовані для Python 3ї версії: http://python3wos.appspot.com/
Проте маємо уже 2014 рік, минуло 5 років з релізу Python 3.1, а Python версії 2 й надалі значно більш використовуваний. Особливо, якщо глянути на оце опитування, де можна побачити співвідношення тих, хто вже писав під Пітон 3 до тих, хто ще його навіть не пробував.
Звичайно залишається питання, чому пітонщики так повільно адаптовують новий Пітон 3. Можливо через існуючі великі приватні проекти, можливо пітон спільнота більш консервативна і повільніше переходить на кардинально нові версії, можливо через глюки із початковими версіями 3.x серії, а можливо навіть через те, що не достатньо жорстко перестали підтримку 2.x версії.
Думаю усе це разом спричинило до повільної адаптації Python 3. Але, в будь-якому випадку, впевнений, що Пітон 3 невідворотній і за ним майбутнє. Адже він виправив дуже багато помилок зроблених в дизайні мови другої версії та ввів правильні синтаксичні та семантичні зміни у мові.
Тепер давайте розберемось з якої версії мови краще починати новачкам в програмуванні:
Вибір Початківця
Задача початківця – освоїти ту версію мови, яка безпосередньо використовуватиметься на його першому місці роботи і зробити це якомога швидше. Зважаючи на те, що більшість вакансій для джуніків на даний момент вимагають знань Python 2, відповідь стає очевидною – потрібно вчити спочатку саме другу версію.
Основним плюсом версії 3 для початківця є її семантичні та синтаксичні зміни у порівнянні з версією 2. Це означає, що програміст початківець одразу вивчатиме та набуватиме правильних практик роботи з кодуваннями, кращим і правильнішим синтаксисом, покращена робота з помилками. Отут можна детальніше ознайомитися, чому Python 3 вважається кращим для початківців.
Але є цілий ряд причин, чому варта починати саме з Пітона 2 новачкам:
- при пошуку роботи, на даний момент, звертатимуть і перевірятимуть ваші знання саме версії 2;
- Python 2 може надати вам швидший старт у вивченні, адже багато складних речей він уже для вас тихенько обробить і приховає. Так, це може закінчитись нерозумінням базових речей (як от правильна робота з кодуваннями), але це завжди можна виправити потім. Я притримуюсь практичного підходу: швидко осягнути необхідний мінімум, а далі вже оновлювати та вдосконалювати власні знання;
- звичайно Пітон 2 поки має більше навчальних матеріалів та документації, ніж третя версія;
- в більшості версій Лінукса та Макінтоша саме Python 2 є заінстальований по замовчуванню;
- в процесі роботи на своїми проектами прийдеться також розбиратися із підтримуваними пітоном 3-ім бібліотеками; новачку зазвичай важко спрогнозувати наперед необхідні бібліотеки для проекту, тому процес розробики перших навчальних та тестових завдань сповільнюється.
В будь-якому випадку рано чи пізно прийдеться вивчати обидві версії, але я рекомендую, в силу вище наведених обставин, починати саме з версії 2, а не навпаки. Поки що 🙂
Вибір Професіонала
Тут все просто. Обирати Пітон 2 чи 3 – це залежить від конкретного проекту.
Якщо починаєте новий проект з нуля – тоді однозначно варто розглянути можливість розробки його на версії 3. Для цього сплануйте набір необхідних бібліотек в проекті, і якщо усі залежності уже адаптовані для Пітона третього (або ви можете швидко адаптувати деякі з них), тоді можна спробувати реалізувати проект на версії третій.
Коли варта все ж таки притримуватися версії 2:
- якщо ви деплоїте ваш код на сервер, який не є повністю під вашим контролем, що може накладати певні обмеження і не дозволити інсталяцію Python 3;
- якщо ваш проект залежить на специфічні зовнішні бібліотеки, що ще не є адаптовані, і які буде непросто самому бекпортити.
Тож порада номер один: якщо бажаєте почати новий проект на Пітон 3 – виділіть час на планування необхідних зовнішніх бібліотек та фреймворків, та дослідіть їх адаптацію під третю версію пітона.
Зовсім інша справа, коли маємо справу з вже існуючим проектом написаним на Пітон 2. Як розробник – ви завжди захочете мати ваш код в хорошому стані написаним на базі найновіших технологій та мов. Але як власник проекту – ви звісно ніколи не бажатимете додаткових завтрат часу та грошей на міграцію коду, яка не приносить очевидних фінансових повернень.
Рекомендую розглядати порт Пітон 2 проекту до третьої версії, якщо вже стало очевидним, що для подальшого прогресу необхідний ряд нових бібліотек, що працюють лише для версії 3 та поточні залежності проекту уже є адаптовані під новий Пітон (або їх буде порівняно просто та швидко адаптувати вам самим).
Наступний План Дій
Загалом вивчення Python 3 лише вітається, і зрозуміло, що за ним майбутнє. Питання лише часу, тому краще заздалегідь підготуватися, ніж потім пасти задніх.
Реальні проекти накладають свої обмеження, і нажаль далеко не кожен Пітон програміст може почати кодити на Python 3 все і вся у себе на робочому місці.
Якщо більшість проектів, де ви задіяні ще поки використовують Пітон 2, тоді отут даю невеликий список дій, які можна пробувати прямо зараз, щоб готуватися до Python 3:
- промоційний сайт версії третьої пітона; можна ознайомитися з відмінностями версій, починати міграційні інструкції, і знайти усю іншу інформацію пов’язану з Пітоном третім;
- ознайомитися з доступними популярними адаптованими бібліотеками під Python 3: http://python3wos.appspot.com/;
- спробувати почати власний невелики проект на пітон 3;
- переглянути власні існуючі пітон 2 проекти і спробувати запустити та адаптувати один з них під пітон 3; тут більше про процедуру адаптації пітон 2 коду.
Корисні Лінки
- промоційний сайт Python 3: http://getpython3.com/
- вікі документ, що відповідає на ряд важливих питань та порівнянь між версіями 2 та 3: https://wiki.python.org/moin/Python2orPython3
- інструкція з портування коду 2ї версії в 3-тю: https://docs.python.org/3/howto/pyporting.html
- проект Six – один код, що працює і в другій і в третій версії: https://pypi.python.org/pypi/six
- інструмент для порту з 3 до 2: https://wiki.python.org/moin/3to2
- список популярних пітон проектів і їх стан щодо пітон 3: http://python3wos.appspot.com/
- цікава думка щодо полегшення програмістам міграції їхнього коду до версії 3: https://plus.google.com/+IanBicking/posts/iEVXdcfXkz7
- книжка по міграції до пітон 3: http://python3porting.com/
- Dive into Python 3 Марка Пілігріма: http://www.diveintopython3.net/
- шпаргалка що описує різницю версій: http://ptgmedia.pearsoncmg.com/imprint_downloads/informit/promotions/python/python2python3.pdf
Надіюсь ця стаття допоможе вам визначитися, коли та за яких умов варто братися за Python 3.
А як ви вважаєте, з якої версії потрібно вивчати дану мову Python?
Минуло майже 2 роки. Підтверджуєте актуальність версіі 2 для новачків, які починають опановувати Python у виші? Тобто поки що не для реально існуючого проекту, а для вивчання першої мови?
Друге питання. Плануєте переробити свою книжку під версію 3?
Може посилання https://uk.wikibooks.org/wiki/Python теж буде комусь корисним.
О, непоганий набір україномовної доки по пітону. Дякую!