Язык программирования 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;
- поддержка, интеграция, оптимизация приложений и сервисов;
- написание технических заданий и документации.

Заработная плата и требования работодателей

Средняя заработная плата разработчика Python в Москве составляет 105 000 руб., в Санкт-Петербурге – 84 000 руб., в Волгограде – 50 000 руб., в Воронеже – 53 000 руб., в Екатеринбурге – 67 000 руб., в Казани – 53 000 руб., в Красноярске – 60 000 руб., в Нижнем Новгороде – 58 000 руб., в Новосибирске – 66 000 руб., в Омске – 53 000 руб., в Перми – 60 000 руб., в Ростове-на-Дону – 60 000 руб., в Самаре – 60 000 руб., в Уфе – 53 000 руб., в Челябинске – 61 000 руб.

I зарплатный диапазон
Без опыта работы на данной позиции

Требования к начинающим разработчикам Python достаточно лаконичны. Соискателям, не имеющим опыта работы, необходимо иметь законченное или неполное высшее образование (профильное либо техническое), знать CSS, HTML и основы программирования на Python. Стартовый оклад составляет от 50 000 до 70 000 руб. (Москва), от 40 000 до 56 000 руб. (Санкт-Петербург).



Город Уровень дохода, руб.
Москва 50 000 – 70 000
- Высшее/неполное высшее образование (техническое/IT)
- Знание основ программирования на Python
- Базовые знания CSS, HTML

Портрет соискателя в 1 диапазоне

Санкт-Петербург 40 000 – 56 000
Волгоград 24 000 – 34 000
Воронеж 25 000 – 35 000
Екатеринбург 32 000 – 45 000
Казань 25 000 – 35 000
Красноярск 30 000 – 40 000
Нижний Новгород 28 000 – 40 000
Новосибирск 32 000 – 44 000
Пермь 25 000 – 35 000
Омск 30 000 – 40 000
Ростов-на-Дону 30 000 – 40 000
Самара 30 000 – 40 000
Уфа 25 000 – 35 000
Челябинск 30 000 – 40 000

II зарплатный диапазон
С опытом работы от 1 года

Вход в следующий зарплатный диапазон открыт программистам со стажем разработки на Python от 1 года. Также востребован опыт работы с MySQL и навыки разработки web-сервисов. Соискателям необходимо знать JavaScript и владеть «техническим» английским. Верхняя граница зарплатных предложений для разработчиков, соответствующих указанным требованиям, составляет 80 000 руб. (столица) и 64 000 руб. (Санкт-Петербург).


Город Уровень дохода, руб.
Требования и пожелания к профессиональным навыкам
Москва 70 000 – 80 000
- Знание английского языка на уровне чтения технической документации
- Знание JavaScript
- Опыт работы с MySQL
- Опыт разработки web-сервисов
- Опыт программирования на Python от 1 года

Портрет соискателя во 2 диапазоне

Санкт-Петербург 56 000 – 64 000
Волгоград 34 000 – 38 000
Воронеж 35 000 – 40 000
Екатеринбург 45 000 – 50 000
Казань 35 000 – 40 000
Красноярск 40 000 – 46 000
Нижний Новгород 40 000 – 44 000
Новосибирск 44 000 – 50 000
Пермь 35 000 – 40 000
Омск 40 000 – 45 000
Ростов-на-Дону 40 000 – 46 000
Самара 40 000 – 45 000 Уфа 35 000 – 40 000 Челябинск 40 000 – 46 000

III зарплатный диапазон
С опытом работы от 2 лет

Повышает «стоимость» специалиста на рынке труда стаж программирования от 2 лет, опыт разработки высоконагруженных проектов и навыки работы с системами контроля версий. Соискателям также необходимо знать Linux. Нередко работодатели требуют знания дополнительного языка программирования (PHP, Java, С). Дополнительными шансами на трудоустройство обладают программисты, имеющие портфолио выполненных проектов. Разработчики Python указанного профессионального уровня зарабатывают до 120 000 руб. в Москве и до 96 000 руб. в Санкт-Петербурге.


Город Уровень дохода, руб.
Требования и пожелания к профессиональным навыкам
Москва 80 000 – 120 000
- Высшее образование (техническое/IT)
- Знание Linux на уровне пользователя
- Опыт работы с системами контроля версий
- Опыт разработки высоконагруженных проектов
- Опыт программирования на Python от 2 лет

Возможные пожелания:
- опыт разработки на языке PHP/Java/С/С++/C#
- наличие портфолио выполненных проектов

Портрет соискателя в 3 диапазоне

Санкт-Петербург 64 000 – 96 000
Волгоград 38 000 – 58 000
Воронеж 40 000 – 60 000
Екатеринбург 50 000 – 77 000
Казань 40 000 – 60 000
Красноярск 46 000 – 68 000
Нижний Новгород 44 000 – 66 000
Новосибирск 50 000 – 75 000
Пермь 40 000 – 60 000
Омск 45 000 – 66 000
Ростов-на-Дону 46 000 – 68 000
Самара 45 000 – 67 000
Уфа 40 000 – 60 000
Челябинск 46 000 – 70 000

IV зарплатный диапазон
С опытом работы от 3 лет

Максимальный доход – у программистов Python с опытом работы более 3 лет и навыками руководства командой разработчиков. «Потолок» зарплатных предложений в Москве – 160 000 руб. В Санкт-Петербурге разработчики Python могут рассчитывать на доход до 130 000 руб.


Город Уровень дохода, руб.
Требования и пожелания к профессиональным навыкам
Москва 120 000 – 160 000
- Опыт руководства группой разработчиков
- Опыт программирования на Python от 3 лет

Портрет соискателя в 4 диапазоне

Санкт-Петербург 96 000 – 130 000
Волгоград 58 000 – 75 000
Воронеж 60 000 – 80 000
Екатеринбург 77 000 – 100 000
Казань 60 000 – 80 000
Красноярск 68 000 – 90 000
Нижний Новгород 66 000 – 90 000
Новосибирск 75 000 – 100 000
Пермь 60 000 – 80 000
Омск 66 000 – 90 000
Ростов-на-Дону 68 000 – 90 000
Самара 67 000 – 90 000
Уфа 60 000 – 80 000
Челябинск 70 000 – 95 000

Портрет соискателя

Большинство претендентов на должность программиста Python – молодые мужчины с высшим образованием. Женщин среди соискателей немного – всего 5%. Молодежь составляет 70% кандидатов. Высшее образование имеют 74% программистов Python. 22% соискателей этой должности свободно владеют английским языком.

Код для вставки в блог

Разработчик Python

Исследовательский центр рекрутингового портала Superjob в ноябре 2014 года изучил предложения работодателей и ожидания претендентов на позицию «Разработчик Python» в 15 городах России.

  • Детальный разбор, что же произошло в пункте выше
  • Знакомство с базовым синтаксисом, базовые типы данных
  • Что такое переменная? Как ее объявить, и где ее видно?
  • Знакомство со структурами языка: ветвления, циклы, условия
  • 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`?
    • Как дебажить `js` приложение?
    • Написание своего небольшого 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-тестирование
    • Куда расти и что делать?

    Python – один из наиболее популярных «неклассических» языков программирования. Он идеально подходит на роль «вводного» или второго языка (например, после более сложных C++ или Java). Благодаря лаконичности (или даже минималистичности) он быстро усваивается. Упрощенный синтаксис Python позволяет передать большое количество информации в минимальном объеме исходного кода.

    Кроме того, Python может применяться практически в любой области разработки ПО (standalone-приложения, клиент-серверы, веб-приложения) и в любой предметной области. Он легко интегрируется с другими компонентами, что позволяет внедрять Python в уже написанные приложения. Проекты, написанные на этом языке, обладают свойством кросс-платформенности, то есть при необходимости их можно быстро и безболезненно перенести с одной операционной системы на другую.

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

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

    Обязанности

    Проектирование и разработка

    Главная задача программиста Python -это создание c помощью одноименного языка разработки приложений и сервисов. При этом программист должен уметь составлять технические задания (ТЗ), разбираться в специальной терминологии.

    Тестирование и внедрение

    В задачи программиста C++ также входит сопровождение проекта по созданию приложений и сервисов: их тестирование, отладка (в том случае, если обнаружатся ошибки) и, наконец, внедрение - запуск в работу.

    Сопровождение

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

    Что нужно знать и уметь

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