Алгоритми та структури даних на Python. Основний курс. Дані, що використовуються "Пітоном"

Python – одна з найпопулярніших «некласичних» мов програмування. Він ідеально підходить на роль вступної або другої мови (наприклад, після більш складних C++ або Java). Завдяки лаконічності (або навіть мінімалістичності) він швидко засвоюється. Спрощений синтаксис Python дозволяє передати велику кількість інформації у мінімальному обсязі вихідного коду.

Крім того, Python може застосовуватися практично в будь-якій галузі розробки ПЗ (standalone-додатки, клієнт-сервери, веб-додатки) та в будь-якій предметній області. Він легко інтегрується з іншими компонентами, що дозволяє впроваджувати Python у вже написані програми. Проекти, написані цією мовою, мають властивість крос-платформенності, тобто при необхідності їх можна швидко і безболісно перенести з однієї операційної системина іншу.

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

Нові версії Python (з додаванням/зміною мовних властивостей) виходять приблизно раз на два з половиною роки.

Обов'язки

Проектування та розробка

Головне завдання програміста Python – це створення за допомогою однойменної мови розробки додатків та сервісів. При цьому програміст повинен уміти складати технічні завдання (ТЗ), розумітися на спеціальній термінології.

Тестування та впровадження

У завдання програміста C++ також входить супровід проекту створення додатків і сервісів: їх тестування, налагодження (в тому випадку, якщо виявляться помилки) і, нарешті, впровадження - запуск в роботу.

Супровід

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

Що потрібно знати та вміти

    Особисті якості
  • Аналітичний склад розуму;
  • Уважність до деталей;
  • структурне мислення;
  • Здатність до самонавчання;
  • Відповідальність.
    Основні навички
  • Знання та досвід розробки на Python;
  • Знання та досвід роботи з HTML, CSS, JavaScript;
  • Знання MySQL, PgSQL;
  • Наявність досвіду розробки додатків/сервісів;
  • Уміння складати та читати ТЗ;
  • Вміння розумітися на чужому коді;
  • Навички роботи з більшими обсягами інформації.
Заняття 1: Вступ

Результат заняття: настроєне середовище, бібліотека з основами синтаксису та типів даних, на які можна спертися надалі.

  • Загальне знайомство з `Python`, його історією та перспективами
  • Загальне знайомство з версіями `Python` 2.7 та 3
  • Налаштування та встановлення `Python` 2.7 та 3 на локальні машини
  • Установка `SublimeText`(Text Editor)
  • Налаштування та встановлення `git`, реєстрація на github
  • `print "Hello Pythonic world!"`, перший commit та push на github
  • Детальний розбір, що сталося в пункті вище
  • Знайомство з базовим синтаксисом, базові типи даних
  • Що таке змінна? Як її оголосити і де її видно?
  • Знайомство зі структурами мови: розгалуження, цикли, умови
  • Stackoverflow-driven development, секція про те, як самому знайти відповіді на свої запитання
Заняття 2: Перший додаток

Результат заняття: додаток-гра, "хрестики-нуліки" в консолі.

  • Знайомство з командним рядком
  • Управління залежностями, `pip`, встановлення перших зовнішніх пакетів
  • Знайомство з `virtualenv`, створення середовища
  • Установка `PyCharm`(IDE)
  • Продовження знайомства з типами даних в `Python`, принцип "привласнення ніколи не копіює дані": масиви, словники, кортежі
  • Що таке функція? Введення у функціональне програмування
  • Обробка винятків
  • Дебаг програми
  • Написання гри "хрестики-нуліки" у функціональному стилі
Заняття 3: Об'єктно-орієнтоване програмування

Результат заняття: додаток "список справ та покупок".

  • Що таке Об'єкт? Знайомство з ОВП
  • Принципи ООП: абстракція, успадкування, інкапсуляція, поліморфізм
  • Чарівні методи та константи: `__init__()`, `__str__()` та `__dict__`
  • `Python``s `super()`, `mro()`, нові та старі класи
  • `@staticmethod` та `@classmethod`, змінні класу
  • Принципи проектування: успадкування, агрегація та композиція
  • Продовження знайомства з мовою `Python`: декоратори, властивості, генератори, `lambda`, `list-comprehension`
  • Zen of Python
  • Написання програми "список справ та покупок" в об'єктному стилі
Заняття 4: Версії Python, міжверсійний код
  • У чому основні відмінності Python 2 і 3?
  • `str` та `unicode`
  • Інші важливі зміни
  • Яку версію інтерпретатора вибрати для нового проекту?
  • Як писати код під обидві версії Python? Знайомство з `six`, `2to3`, `3to2`
  • Настало майбутнє: що нового в `Python` 3.5?
  • Чи можу я покращити `Python`? Або що таке `PEP`
Заняття 5: Ускладнення програм

Результат заняття: додаток-гра "морський бій" з ІІ.

  • Принципи розробки програмного забезпечення: DRY, KISS, YAGNI, SOLID
  • Часті помилкипри написанні коду
  • Робота з файлами
  • Текстові форматиобміну даними: `.json`, `.csv`, і як з ними працювати
  • Які є способи завершити програму?
  • Написання гри "морський бій" з ІІ зі збереженням гри, в об'єктному стилі
Заняття 6: Створення веб-павука

Результат заняття: програма, яка заходила б на сторінку соц.мережі та забирала звідти всі статуси та/або фотографії.

  • Як влаштований інтернет? Знайомство з `TCP/IP`, `DNS` та клієнт-серверною архітектурою
  • Навіщо нам `http` перед адресою? Знайомство з протоколом `HTTP` з модулем `urllib`
  • Що таке регулярний вираз? Модуль `re`
  • Що таке веб-сторінка? Основи `HTML` розмітки, знайомство з `HTML5` тегами
  • Написання веб-павука на основі `Scrapy`, який отримуватиме статуси зі сторінки соц.мережі та зберігатиме результати у файлі
Заняття 7: Перший web-проект, backend

Результат заняття: додаток-блог без бази даних, без стилів та скриптів.

  • Що таке backend та frontend?
  • Як працює сервер на прикладі `Flask`?
  • Який шлях проходить запит і які бувають запити?
  • Введення в `MVC` та `MTV`
  • Як відбувається роутінг?
  • Що таке шаблон? І як працювати з `Jinja2`?
  • Навіщо потрібні форми і як з ними працювати?
  • Написання першої web-додатки

Другий блок. Заняття 8-14.

Заняття 8: Основи баз даних

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

  • Які бувають бази даних? Знайомство з `MySQL`, `PostgresSQL`, `SQLite` та `Redis`
  • Основи РСУБД: таблиці та зв'язки між ними (OneToOne, OneToMany, ManyToMany)
  • Введення в `SQL`
  • Проектування баз даних, нормальні форми
  • Транзакції, індекси
  • Введення в `NoSQL`: `key-value` сховище, установка `Redis`
  • Введення в `ORM` на прикладі `SQLAlchemy` (для `SQLite`) та `redis-py`
  • Написання моделей для блогу, створення кешу в `Redis`, додавання посторінкового вигляду
Заняття 9: Перший web-проект, frontend: CSS

Результат заняття: додаток блог, з css стилями

Заняття 10: Вступ до JS

Результат заняття: невеликий проект на JS

  • У чому схожості та відмінності `javascript` від `Python`?
  • Який буває `javascript`?
  • Типи даних
  • Структури мови
  • Область видимості змінних
  • Функції, і що таке `this`?
  • Об'єкти `window` та `document`
  • Що таке `polyfill`?
  • Як розв'язати програму?
  • Написання свого невеликого frontend-проекту
Заняття 11: Перший web-проект, frontend: jQuery

Результат заняття: попередній frontend для своєї програми

  • Що таке бібліотека `jQuery`?
  • Коли вона потрібна, коли без неї можна обійтись, а коли вона небажана?
  • Методології обмеження коду або "Як варити локшину"
  • Подієва модель браузера
  • Знайомство з `$.ajax()` та `CORS`
  • Маніпуляції з `DOM`
  • Поліпшення продуктивності коду
  • Написання frontend для свого проекту
Заняття 12: Автоматизація рутинних завдань із Grunt

Результати занять: готовий frontend для своєї програми

  • Навіщо потрібна автоматизація завдань?
  • У чому різниця між ``
  • Поліпшення `CSS` з `autoprefixer`
  • Знайомство з `PostCSS` та два слова про препроцесори
  • Зменшення розміру текстових файлів та картинок
  • Модульна система для `js` на прикладі `browserify`
  • Моментальна зміна сторінки з `liveserver`
  • Навіщо потрібна система версій статичних файлів?
  • Створення `Gruntfile.js`, перший build frontend
Заняття 13: Django

Результат заняття: написаний скелет майбутньої програми Django

  • Що таке `Django`? І як працює цей фреймворк?
  • Який шлях проходить запит у життєвому циклі програми?
  • Знайомство з Middleware
  • url-routing, `include()` та `reverse()`
  • `Django``s MVT, знайомство з `Django-Templates`
  • `views` та `class-based views`
  • Прості форми, валідація форм
  • Статичні файли
  • Організація налаштувань програми
  • Написання скелета майбутнього проекту
Заняття 14: Django ORM

Результат заняття: написання моделей до додатку

  • Знайомство з моделями
  • Встановлення та налаштування `PostgreSQL`
  • Відносини моделей між собою: `OneToOne`, `ManyToMany` та `ForeingKey`
  • Як написати запит?
  • Як написати складний запит? `annotate()`, `aggregate()`
  • Сигнали
  • Міграції, огляд історичного `South` та поточного `Django-Migrations`
  • Написання моделей до програми

Третій блок Заняття 15-21.

Заняття 15: Робота з моделями у Django

Результат заняття: доопрацювання моделей, оптимізація та налагодження

  • Як зробити складний запит найпростіше? `select_related()`, `values()`
  • Слідкуємо за запитами за допомогою `django-debug-toolbar`
  • Створення та валідація `ModelForm`
  • Робота в `FileField` та `ImageField`, збереження власних медіа файлів
  • Спадкування моделей, абстрактні моделі та міксини
  • Менеджери
  • `raw queries`: плюси та мінуси
  • Доопрацювання своєї програми
Заняття 16: Адміністрація Django програми

Результат заняття: написана адмінська частина програми

  • Як влаштовано адмінську панель?
  • Як адмініструвати програму?
  • Авторизація користувачів, групи та права доступу
  • Створення власних `admin-view`
  • Знайомство з `django-admin-tools`
  • `Django Management Commands`, створення своїх команд
  • Як правильно вести логі?
Заняття 17: Тестування програми Python

Результат заняття: закінчений додаток блог з базою даних, дизайном та з тестами.

  • Що таке тест, і навіщо тестувати програму?
  • Які тести бувають? У чому різниця між unit-тестими та інтеграційними тестами?
  • Модуль `unittest` в `Python`
  • Що таке "ізоляція"? Знайомство з модулем `mock`
  • Тести для кількох версій `Python` з `tox`
  • Інтеграційні тести з `selenium`
  • Скільки коду вкрито тестами? Введення в `coverage`
  • Написання тестів до свого проекту, досягнення покриття 70-80%
Заняття 18: Тестування Javascript програми

Результат заняття: написання тестів для своєї програми

  • Чому у `js` так багато фреймфорків для тестування?
  • Тестовані за допомогою `mocha`, `Chai` та `Sinon`
  • Ізоляція: моки, шпигуни та удари в спину
  • Тестування картинками, або як працює `gemini`
  • Як запустити всі тести одразу? Знайомство з `polytester`
  • Автотести локально на прикладі `Grunt` та віддалено на прикладі Travis CI
Заняття 19: Вступ до TDD та BDD

Результат заняття: написання модуля у TDD стилі, створення BDD тестів

  • Що таке `Test Driven Development`?
  • Плюси та мінуси такого походу
  • Тестування `Django` програми за допомогою `LiveServerTestCase` та `StaticLiveServerTestCase`
  • Чому TDD та BDD часто порівнюють?
  • Як описати поведінку програми? Введення в псевдо-мову `gherkin`
  • Порівняння BDD фреймворків для `Python`
  • Запуск BDD тестів
  • Коли такі підходи потрібні, застосовні та протипоказані? І коли писати якісь тести?
Заняття 20: Celery

Результат заняття: написання асинхронних завдань для свого проекту

  • Налаштування та встановлення `Celery with Redis`
  • Знайомство з асинхронними завданнями
  • Періодичні завдання з `Celery Beat`
  • Конроль виконання завдань з `Celerycam`
  • Моніторинг `Redis`
  • Як дебатувати `Celery`?
  • Написання асинхронних завдань
Заняття 21: Корисності для розробника Django

Результат заняття:

  • Коротке знайомство з популярними бібліотеками
  • `python-social-auth`
  • `django-rest-framework`
  • `django-cms`
  • `Elasticsearch`
  • `Sentry` та `Raven` (+ `raven.js`)

Четвертий блок. Заняття 22-26.

Заняття 22: Безпека

Результат заняття: скрипти для XSS атаки, додавання додаткових налаштувань безпеки в проект

  • Які атаки бувають?
  • Які засоби пропонує `Django`, щоб уникнути потенційних атак?
  • Content Security Policy
  • Пишемо свій XSS
  • Протокол HTTPS
  • Аудит сайту на безпеку
Заняття 23: Документація

Результат заняття: Документування своїх програм, генерація документації

  • Як документувати 'Python' програму?
  • Розумні `doc-string`, знайомство зі `Sphinx`
  • Тести у документації
  • Як документувати `CSS` та навіщо? Знайомство з `KSS`
  • Створюємо свій `styleguide` у два кліки
  • Документування `js`
  • Генерація документації щодо проектів
Заняття 24: Математика в Python
  • Що таке `anaconda`?
  • Фреймворк `Pandas`
  • Знайомство з `numpy`
  • `iPython Notebook`
  • `matplotlib`
Заняття 25: Деплой на сервері UNIX

Результат заняття: деплой своєї програми на сервер, створення шаблонів конфігурацій

  • Відмінності бойового сервера від сервера розробки
  • Створення оточення
  • `gunicorn` vs `uwsgi`
  • Створення сервісів у `supervisor`
  • Встановлення та конфігурація `nginx`
  • Встановлення додаткових сервісів
  • Установка `pydevd` та віддалений дебаг
Заняття 26: Додаток до реального життя
  • Що робити, коли все піде не так
  • Як підтримувати свою програму?
  • Як підтримувати чужу програму?
  • Метрики (CTR, конверсія), AB-тестування
  • Куди зростати і що робити?

Що об'єднує компанії Google, YouTube, Yandex, Reddit, Instagram, Dropbox, Pinterest, PayPal, Intel, NASA, Microsoft та інші гіганти? Крім імені світового масштабу, вони повністю або частково використовують код, написаний мовою Python.

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

За результатами роботи у 2017 році кілька великих видань поставили Пайтон на перші рядки рейтингів. IEEE Spectrum визначив мову, як найкращий, віддавши пальму першості, ресурс Stackoverflow виділив п'ятий рядок, як одному з найпопулярніших мов, RedMonk поставив його на третє місце за запитом.

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

Хто такі програмісти Python

Програміст Python – спеціаліст, який працює з однойменною мовою. Оскільки мова багатофункціональна, програміст може виконувати різну роботу: писати плагіни та скрипти, розробляти ігри, мобільні та веб-програми, супроводжувати ПЗ.

Плюси та мінуси професії

Програмування мовою Пайтон має свої переваги та недоліки.

Основні плюси:

  • низький поріг входження;
  • затребуваність;
  • велика спільнота;
  • можливість самостійного навчання;
  • можливість працювати віддалено;
  • висока зарплата python програміста.

Основні мінуси:

  • фахівці затребувані у великих містах, знайти вакансію у невеликих населених пунктахскладно;
  • деякі компанії беруть програмістів виключно із досвідом роботи;
  • Нерідко для працевлаштування потрібно як другий, додатковий мову на приклад, наприклад для вакансії програміста на Java.

Що потрібно знати програмісту Python?

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

  1. Знання засад програмування, структур даних, ООП.
  2. Сама мова, синтаксис, бібліотеки, фреймворки (особливо Django).
  3. Бази даних.
  4. Англійська мова, особливо для віддаленої роботи python програмістом.
  5. Знати систему контролю версій (git).
  6. Розбиратися у чужому коді. Тут варто згадати про те, що друга та третя версії Пітона відрізняються, потрібно знати про відмінності.
  7. Вміння працювати в команді.
  8. Javascript, jQuery.

Де навчитися

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

Якщо ви вибрали самостійне навчання, зверніть увагу на книги Марка Лутца «Вивчаємо Python» та «Програмування на Python». Вони об'ємні (2 тисячі сторінок в обох разом узятих), читати їх новачкові складно. Але книги Лутца дають повне розуміння теми та швидке входження.
Для тих, хто про програмування ще не знає нічого, можна порадити автора Д. Бріггса та його чудову та легку в освоєнні книгу «Python для дітей». Тут ви зрозумієте ази професії, навчитеся писати першу програму, першу гру.

Курси програмістів Python допоможуть засвоїти матеріал швидше та легше. Їхня перевага в контакті з наставниками та можливості поставити запитання та отримати швидку та зрозумілу відповідь на нього.
На курсах приділяється увага основам мови, даються домашні завдання та завдання для програмістів-початківців python. До уваги варті онлайн-курси. Є яскраві приклади навчальних сайтів, де зібрані лекції та методичні матеріализ програмування. Після проходження навчання отримуєте сертифікат, який можна надрукувати.

Є гарне безкоштовне мобільний додаток- SoloLearn. Вчіть теорію, робіть тестові завдання, Вирішуйте завдання, тренуйтеся, граючи з іншими користувачами. Наприкінці курсу видають сертифікат. Додаток русифікований, дозволяє вивчити 9 популярних мов, машинне навчання, HTML5, CSS3, JavaScript, JQuery, Web Development.

Ще одна порада: відвідуйте форуми програмістів Python. Там можна знайти багато корисної інформації, як у навчанні, і пошуку роботи. Натхнеться історіями інших розробників, почитати статті на важливі теми: «Як я став програмістом Python», «З чого почати навчання мови», «Як потрапити в програмісти Python».

Пошук роботи

Програмісти за рівнем знань поділяються на три категорії: Junior, Middle та Senior.

Розробник-початківець (Джуніор) характеризується малим досвідом роботи або його відсутнім. Справляється з легкими завданнями, але складні виконувати не вміє чи працює під контролем досвідченого наставника.

Мідл працює як самостійно, так і в команді, його код не вимагає правок. Досвід роботи (найчастіше, але не обов'язково) 1-3 роки. Виконує складні завдання, пише складні програми.

Синьйор — досвідчений фахівець, який вміє вирішувати завдання будь-якого рівня, виправляти серйозні проблеми у коді. Щоб стати Senior потрібно дуже багато практики та знань.

Легше знайти роботу Міддлу та Синьйору, при цьому вакансій для Джуніора небагато. Компаній, які шукають розробників, цікавить досвід роботи, знання та вміння, іноді – диплом.

Для розробки досвіду можна пройти стажування. Це Learning by Doing, ви працюватимете над справжніми проектами, які потім можна буде згадати в портфоліо.

До речі, python програміст перед початком пошуку роботи повинен відповідально підійти до його заповнення. Важливо правильно вказати навички, знання фреймворків, при цьому не здатися поверховою людиною-оркестром. Можна згадати про володіння іншими мовами, наприклад: «Робота з PHP. Володію HTML, CSS, знайомий із фреймворком Django».

Грамотно заповнити резюме і знайти роботу допоможе також мій сайт, див.
Не обов'язково жити та працювати в одному місті, прогресивні компанії набирають віддалених розробників.

На моєму сайті регулярно публікується топових вакансій для python програмістів.

Початківцям варто звернути увагу на фріланс, Python програмісти більше потрібні на англомовних ресурсах, таких як Upwork, GlobalFreelance.

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

Минулого тижня я ходив на співбесіду, і основне питання було таке: «Чому ви вирішили поміняти професію і стати програмістом?». Наприкінці співбесіди людина, яка проводила співбесіду - керівник відділу перспективних розробок однієї IT компанії - прямо сказала: "... я вас не розумію, ви претендуєте на позицію, яка явно нижча за вашу і за рівнем окладу, і за посадою, та загалом і не така цікава, як ваша робота сьогодні..."

Передісторія

Програмування мені подобалося завжди, ще у дев'ятому класі, коли ми з друзями забрели на обласну станцію юних техніків, до комп'ютерного класу і залишилися там до закінчення школи (це був 1993 рік, домашніх комп'ютерів у нас не було, а там стояли IBM386).

Вступив я, щоправда, до авіаційного інституту, т.к. літаки на той момент здавалися цікавішими. Після закінчення інституту (2001 р.), отримавши червоний диплом та запрошення до аспірантури, п'ять років розробляв системи управління авіаційними двигунами, захистив кандидатську, навчив англійську. І тут впритул постало питання - а що далі? Авіація тихо вмирала. За відчуттями – перспектив не було, все було глухо.

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

У кар'єрному плані - теж все добре, попрацював і інженером, і провідним інженером, і керівником технічного відділу, і виконавчим директором, що трохи побув співзасновником нового бізнесу.

І ось тепер, як мені здається, знову настав час щось міняти.
І знову, як і в попередній раз, усі запитують: Чому? Навіщо? Адже все добре!

Спробую пояснити свою позицію

Трохи більше ніж десять років я пропрацював у сфері розробки випробувального обладнання.

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

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

Можна продовжувати ходити на роботу і спробувати реалізувати себе в якомусь хобі і п'ять разів на тиждень, встаючи вранці, усвідомлювати, що сьогодні буде назавжди втрачено ще один день – похмура перспектива!

Загалом треба щось міняти! Але що й на що? - ось у чому питання!

Якщо подивитися на програмування, то цей напрямок є дуже цікавим:

  • Воно з одного боку - нове мені, тобто. в ньому можна вчитися та розвиватися: вибір ПЗ, завдань, проблем практично не обмежений, від молекулярної біології, фізики та хімії до верстки сайтів. Мені здається, тут є можливості і перспективи.
  • З іншого боку - це напрямок, в якому я маю певний досвід: Fortran в інституті, LabView - останні три роки на роботі, Сі та Free Pascal (трохи для загального розвитку), PHP + WordPress + HTML+CSS - цілком робочий сайт вийшов .
  • Чесно кажучи, мені просто подобається кодувати, і я люблю, коли моя робота має результат: зробив - запрацювало!
Зважаючи на те, що я бачу на Хабрі і в інтернеті - розробник повинен бути дуже досвідченим і молодим, бажано років 23-27, після 35 - знайти роботу стає складніше. Скажу чесно, це здається трохи дивним! Звичайно, загальновідомо, що з віком інтелектуальні здібностідеградують, але з погляду медицини - віком вважається 70-80 років і не 30-40. Інша річ, що людині, якій двадцять років, можна менше платити. Але я не претендую на позицію розробника із 20-річним стажем.

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

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

Мені подобаються слова, адресовані Кірком Шупом молодим розробникам на зустрічі в Яндексі:

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

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

Розглянемо фінансове питання. Так, при зміні роботи я суттєво втрачу в грошах, але дещо при цьому й придбаю:

  • По-перше, програміст не так сильно прив'язаний до місця роботи географічно, а це означає, що за бажання я зможу працювати на віддалених замовників;
  • По-друге, за моєю оцінкою рівень доходу, швидше за все, через пару років зрівняється з моїм поточним рівнем;
  • По-третє, ринок програмного забезпечення неухильно зростає, а значить зростає попит і на фахівців, а ось виробництво обладнання в РФ безперервно скорочується (це безумовно мої особисті суб'єктивні відчуття, що не претендують на якусь об'єктивність), а значить роботу програміста через двадцять років я швидше за все знайду, а ось роботу інженера-конструктора – навряд чи!
Але мов програмування так багато, чому саме Python – скажете ви.

Існує навіть думка, що не потрібно вивчати Python першою мовою.

Вийшло так, що років п'ять тому один мій друг, який захоплюється Linux, дуже настійно мені його порекомендував, були новорічні свята і був час спробувати різні дистрибутиви, загалом останні п'ять років я використовую Debian. А далі все просто: bash - це наше все, але хотілося можливості написати щось складніше: спробував Сі, за рекомендацією того ж таки друга спробував Lazarus, трохи повозився з PostgreSql. Потім була майже річна перерва, а потім спробував Python.

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

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

Зараз, у вільний від роботи час потихеньку почав вивчати machine learning, а минулого тижня сходив на першу співбесіду.

Вийшло трохи довго, але я хотів максимально докладно пояснити свої мотиви та роздуми.

В Наразіпитання актуальне для мене, і мені буде цікаво отримати думки та коментарі читачів Хабра.

Програміст Pythonвикористовує високорівневу мову програмування для створення програм client-server, різних видівігор, мікросервісів, великих та маленьких сайтів, ботів для соціальних мереж. Займається як створенням ПЗ, а й технічною підтримкою, інтеграцією, оптимізацією, навчає персонал компанії працювати з програмами та сервісами. Професія підходить для тих, кого цікавить інформатика (див. вибір професії за інтересом до шкільних предметів).

Короткий опис

На початку 90-х років минулого століття голландським розробником був створений Python, у якому поєдналися риси різних мов програмування. Розглянута високорівнева мова займає 4 місце у світовому рейтингу, її в роботі використовують і підтримують компанії Mail, Pinterest, Youtube, творці великих пошукових систем.

Досвідчені програмісти Python виділяють такі сильні сторони мови та плюси роботи з ним:

  • розширюваність мови, інтеграція з C/C++;
  • спрощений синтаксис, підтримка Unicode;
  • кросплатформність;
  • динамічна типізація;
  • можливість оперативно створювати найскладніший код;
  • безліч середовищ розробки;
  • можна використовувати для написання всіх видів програмних продуктів;
  • спрощений супровід створеного ПЗ;
  • вільна ліцензія;
  • велика спільнота грамотних програмістів.

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

Особливості професії Python-програміста

Досвідчені програмісти постійно навчаються, адже якщо не здобувати нові знання, то розробник швидко втратить і кваліфікацію, і цінність на ринку праці. Python – це мова програмування широкого призначення, яку розробнику бажано знати. Найчастіше за вивчення Python беруться програмісти, які вже мають значний досвід роботи з C++ або Java. Справа в тому, що навички роботи з об'єктно-орієнтованим програмуванням дозволяють освоїти Python у стислий термін.

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

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

Плюси та мінуси професії

Плюси

  1. Можливість навчатись самостійно, що зручно для людей, які вирішили відійти від складного програмування.
  2. Швидке навчання.
  3. Велика російськомовна спільнота програмістів.
  4. Гарний та простий код мови, що суттєво прискорює процес розробки.
  5. Невелика кількість програмістів, які добре володіють Python.
  6. Затребуваність, тож роботи буде багато.

Мінуси

  1. Мова Python менш популярна, ніж Java, C/C++, що істотно впливає на розмір заробітної плати.
  2. Розглянута мова програмування може бути другою, але не першою мовою.
  3. Програмісти Python користуються попитом у відомих компаніях, що базуються в Москві, СПб та інших великих містах. Тому з пошуком роботи у віддалених регіонах у розробника, який володіє лише однією мовою програмування, можуть виникнути проблеми.
  4. Для працевлаштування у велику компанію необхідно мати 2-3 роки роботи з Java, C/C++.

Важливі особисті якості

  1. Терплячість.
  2. Працьовитість.
  3. Рішучість.
  4. Ініціативність.
  5. Цілеспрямованість.
  6. Самовпевненість.
  7. Уважність.
  8. Самоконтроль.

Навчання на програміста Python

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

Вивчити мову можна за 2-6 місяців на курсах Python, які можуть бути як платними, так і безкоштовними. Вивчити Python можна самостійно, використовуючи відеоматеріали, блоги, підручники. Ще один добрий варіант - це пошук практикуючого програміста, який готовий взяти собі учня.

Курс. Ви отримаєте знання та навички, які дозволяють реалізовувати проекти різного рівня складності, починаючи з невеликих веб-додатків, найпростіших скриптів та програм, закінчуючи програмним забезпеченнямдля космічних апаратів та штучного інтелекту. Навчання відбувається у зручному та ефективному форматі у вигляді покрокових уроків з індивідуальним розбором домашніх робіт.

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

Місце роботи

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

Зарплатня Програміста Python

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

Зарплатня на 17.09.2019

Росія 50000-200000 ₽

Москва 80000-200000 ₽

Професійні знання

  1. Знання основ програмування Python, досвід роботи не менше 1 року.
  2. Вільний фреймворк Django.
  3. Бажаними є практичні навички роботи з Java, JavaScript, C/C++.
  4. Знання REST, HTML, CSS, AJAX, Canvas, Web Sockets.
  5. Version Control System.
  6. Системи управління базами даних, верстка сторінок.
  7. Англійська мова, яка необхідна для читання та складання тих. документації.
Телевізори