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

Основы языка Python. 1 месяц.
От основ программирования до построения программ с использованием ООП

Язык программирования Python - это мощный инструмент для создания программ самого разнообразного назначения, доступный даже для новичков. С его помощью можно решать задачи различных типов. Курс “Python Basic” отлично подойдет как для опытных программистов, желающих познакомиться с новым инструментом разработки, так и для совсем начинающих. Мы пройдем путь от основ программирования(переменные, циклы, ветвления), до построения программ с использованием объектно ориентированного подхода. На протяжении курса мы рассмотрим различные примеры применения языка для решения практических задач. Погрузимся в мир python и проникнемся его идеологией и философией.

Урок 1. Знакомство с Python

Где используется Python? Сильные стороны языка. Установка и запуск. Операции и инструкции. Переменные и типы данных. Динамическая типизация. Ввод-вывод. Логические операции. Операторы ветвления. Циклы.

Урок 2. Встроенные типы и операции с ними

Последовательности (итераторы). Строки, списки, кортежи, словари, множества. Обход последовательностей в цикле.

Урок 3. Функции и работа с файлами

Функции как строительные блоки программ. Встроенные функции. Области видимости и lambda-функции. Работа с файлами. Сохранение Python-объектов в файл. Формат JSON.

Урок 4. Полезные инструменты

Урок 5. Модули и библиотеки

Понятие модуля. Создание модулей. Пространство имен и пакеты модулей. Дополнительные возможности модулей. Библиотеки os, sys.

Урок 6. Объектно Ориентированное Программирование

Введение в ООП. Классы. Инкапсуляция, полиморфизм и наследование.

Урок 7. Интерфейсы

Перегрузка операторов. Интерфейс итерации. Метод как атрибут. Статические методы. Расширение встроенных типов.

Урок 8. Несколько полезных паттернов

Паттерн Builder. Паттерн Делегирование. Создание собственных исключений. Подведение итогов и несколько слов о программе Python Advanced.

Введение в Git
Основы работы с Git

В течении 13 роликов мы познакомимся с основами системы контроля версий Git. Выясним почему она важна в современной разработке и коллективном программировании. Познакомимся с основными понятиями Git: репозиториями, коммитами, ветками и тэгами. Изучим базовые операции: создание и клонирование репозитория, слияние веток, запрос истории изменений и многое другое. Посмотрим, как при помощи Git сдавать домашние задания. Данный курс является базовым и после него можно приступать к изучению любого языка программирования. Кроме того, вы будете готовы к прохождению собеседования, где несколько вопросов обычно посвящены системе контроля версий.

Урок 1. Введение в системы контроля версий

Что такое система контроля версий?
Виды систем контроля версий
Git и его преимущества
Документация

Урок 2. Работа с командной строкой

Что такое командная строка?
Почему важна командная строка?
Как открыть командную строку?
Полезные команды

Урок 3. Локальная работа с Git-репозиторием

Введение в консольный клиент
Настройка git
Инициализация репозитория
Клонирование репозитория
Графические git-клиенты

Урок 4. Базовые операции

Индексирование
Публикация изменений
Коммиты
Отмена индексирования
Текущий статус

Урок 5. История git-проекта

История изменений
Откат по истории проекта
Авторы изменений: git blame
Игнорирование файлов.gitignore
Сайт gitignore.io
Сохранение папок.keep

Урок 6. Ветки

Управление ветками
Создание и удаление веток
Переключение между ветками
Конфликты способы и их разрешение
git merge

Урок 7. Создание удаленного Git-репозитория

Git-хостинги (GitHub, GitLab, Bitbacket)
Создание собственного bare-git репозитория
Регистрация на GitHub
Публикация изменений в удаленном репозитории

Урок 8. Удаленные ветки

Названия репозиториев
Несколько репозиториев в одном проекте
.git/config
Управление ветками на удаленном репозитории

Урок 9. Версионирование

Способы версионирования
Тэги и их связь с коммитами
Добавление тэга
Удаление тэга
Управление тэга на удаленном репозитории

Урок 10. Слияние и переносы

Сливаем изменения. git merge
Переносим ветки. git rebase
Переносим коммиты. git cherry pick
Сливаем коммит в один. git squash
Хуки
Псевдонимы

Урок 11. Gitflow

Как используется и зачем?
Циклы тестирования
Возможно Blue/green
Релизные ветки
Хотфиксы

Урок 12. SSH

Протокол SSH
Зачем используется?
Создание ключей
Форвардинг
SSH-агент
Копирование файлов по SSH
Windows: Git for Windows
Использование SSH совместно с Git-ом

Урок 13. Сдача домашней работы через Git

Базы данных. 1 месяц.
Быстрый старт

Урок 1. Вебинар. Установка окружения. DDL - команды

Урок 2. Видеоурок. Управление БД. Язык запросов SQL

Урок 3. Вебинар. Введение в проектирование БД

Урок 4. Вебинар. CRUD-операции

Урок 5. Видеоурок. Операторы, фильтрация, сортировка и ограничение. Агрегация данных

Урок 6. Вебинар. Операторы, фильтрация, сортировка и ограничение. Агрегация данных

Урок 7. Видеоурок. Сложные запросы

Урок 8. Вебинар. Сложные запросы

Урок 9. Видеоурок. Транзакции, переменные, представления. Администрирование. Хранимые процедуры и функции, триггеры

Урок 10. Вебинар. Транзакции, переменные, представления. Администрирование. Хранимые процедуры и функции, триггеры

Урок 11. Видеоурок. Оптимизация запросов. NoSQL

Урок 12. Вебинар. Оптимизация запросов

Студенты углубят базу программирования на языке Python и «прокачают» алгоритмическое мышление. Курс учит понимать фундаментальные алгоритмы и использовать их для решения практических задач. Знакомит с методами анализа данных на Python и всеми необходимыми библиотеками.

Урок 1. Введение в алгоритмизацию и реализация простых алгоритмов на Python

Введение в алгоритмизацию. Решение практических задач.

Урок 3. Массивы. Кортежи. Множества. Списки.

Понятие массива, кортежа, множества и списков. Обработка последовательностей, одномерных и двумерных массивов. Работа с ассоциативными массивами (таблицами данных). Двоичный (бинарный) поиск элемента в массиве.

Урок 4. Эмпирическая оценка алгоритмов на Python

Измерения времени работы с использованием timeit. Профайлер.

Урок 5. Коллекции. Список. Очередь. Словарь.

Понятие коллекции. Основные типы коллекции. Стандартные методы работы с коллекциями. Примеры применения коллекций для решения практических задач.

Урок 6. Работа с динамической памятью

Представление в памяти коллекций. Управление памятью.

Урок 7. Алгоритмы сортировки

Сортировка пузырьком. Быстрая сортировка (Quick sort). Сортировка Шелла. Сортировка сложных структур с использованием ключа. Обратная сортировка. Сортировка с использованием функции attrgetter.

Урок 8. Деревья. Хэш-функция

Двоичные деревья поиска. Проход по дереву. Хэш-функция.

HTML/CSS - язык гипертекстовой разметки, основа для изучения серверных ЯП. Изучив HTML, вы сможете создать статичную веб-страничку или веб-сайт. CSS - каскадные таблицы стилей - позволит оформить сверстанный сайт так, как вам хочется. Вы сможете смотреть видеокурс в удобное время и по всем вопросам обращаться к наставнику, который будет контролировать ваш прогресс. Формат располагает к общению и самодисциплине в обучении. За месяц вы научитесь: * верстке статических сайтов, * валидной кроссбраузерной вёрстке, * блочной вёрстке, * выполнению базовых операций в Photoshop, * использованию препроцессоров LESS и Bootstrap. Для перехода к следующему занятию курса необходимо, чтобы ваше домашнее задание прошло проверку. Это покажет, что вы поняли предыдущий урок и легко освоите новые знания. Задание может проверить как ментор, так и одногруппники, знаниям которых вы доверяете, и получить за это ачивку. С каждой проверкой количество ачивок растет, а навык работы с чужим кодом увеличивается. От количества ачивок зависит уровень итогового сертификата: чем их больше, тем выше статус. Эта в чем-то игровая механика делает занятия еще интереснее.

Урок 1. Основные понятия в веб-разработке

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

Урок 2. Основы языка разметки документов HTML

Урок 3. Основы языка оформления стилей документа CSS

Что такое CSS; синтаксис CSS; способы объявления CSS; селекторы (id, class, tag); селекторы атрибутов.; основные свойства стилей; вложенность; наследование и группирование свойств; проверка подключения файла стилей.

Урок 4. Псевдоклассы и псевдоэлементы, табличная верстка

Приоритеты применения стилей; псевдоклассы и псевдоэлементы; создание таблиц; объединение ячеек; вложенные таблицы; стилевое оформление таблиц.

Урок 5. Формирование блочной модели, блочная верстка

Основные теги для верстки (div и span); отступы элементов (margin и padding); обтекаемые элементы; позиционирование блоков.

Урок 6. Работа с макетом дизайна в формате PSD

Основные функции и знакомство с Photoshop; выделение основных частей макета; нарезка макета; вёрстка макета сайта при помощи блоков; вставка частей макета в вёрстку;

Урок 7. Разметка сайта и знакомство с Bootstrap

Создание основной разметки сайта; применение overflow и clear в реальной вёрстке; заполнение разметки частями нарезанного макета; приёмы позиционирования элементов; знакомство и применение Bootstrap.

Урок 8. Стандарты web и вспомогательные инструменты

Загрузка проектов на сервер; проблема «кроссбраузерности»; стандарты HTML/CSS; будущее за стандартами HTML5 и CSS3; грамотная, универсальная вёрстка; знакомство с препроцессорами на примере LESS.

Студенты знакомятся с основами JavaScript, позволяющего делать веб-страницы интерактивными. Учатся создавать динамические страницы и приложения, используя опыт HTML-верстки. Отрабатывают навык программирования на JavaScript, разрабатывая мини-игры.

Урок 1. Основы языка JavaScript

Синтаксис; структура кода; внешние скрипты и порядок их исполнения; переменные и типы данных; Hello world; современные стандарты.

Урок 3. Циклы, массивы, структуры данных

Циклы в JavaScript; массивы в JavaScript; структуры данных; практикум; игра «Быки и коровы».

Урок 4. Объекты в JavaScript

Знакомство с понятием объектов; объекты в JavaScript; работа с объектами; перебор значений; практикум; игра «Квест».

Урок 5. Введение в DOM

Понятие DOM; DOM в JavaScript; манипуляции с DOM в JavaScript; практикум; игра «Квест 2.0».

Урок 6. Обработка событий в JavaScript

Понятие события; обработка нажатий; браузерные события; практикум; игра «Крестики-нолики».

Урок 7. Урок-практикум

Реализация игры «Змейка».

Урок 8. Анонимные функции, замыкания

Углубленное изучение работы функций; функции и функциональные выражения; анонимные функции; замыкания; действия браузера по умолчанию.

Основы Django Framework . 1 месяц.
Создание веб-сайта

На курсе студенты освоят создание веб-сайта на Python с помощью фреймворка Django. В ходе практической разработки начинающие программисты научатся использовать возможности Django, который ускоряет написание кода и позволяет быстро и качественно воплотить идею в рабочий IT-проект. По итогам курса студенты научатся создавать безопасные веб-сайты, внедрять шаблон проектирования MVC, реализовывать авторизацию и регистрацию пользователей, админку и асинхронное обновление контента. Создадут личный проект и портфолио.

Урок 1. Знакомство с фрэймворком

Зачем нужен Django. Сильные стороны фрэймворка. Установка и настройка. Общие сведения о структуре проекта. Знакомство с urlpatterns. Первая страничка и ее отображение.

Урок 2. Шаблон + Контекст = html

Шаблонизатор Django (теги, фильтры и наследование). Работа со статикой и ссылками на страницах. Отправка контента в шаблоны и загрузка его в контроллеры из внешних источников.

Урок 3. Модели + ORM = данные

Краткая теория баз данных. Введение в Django-ORM. Подключение и создание базы данных. Несколько слов о миграциях. Работа с данными. Встроенная админка. Пространства имен.

Урок 4. Аутентификация и регистрация пользователя

Урок 5. Пользователь + товар = корзина

Выполнение запросов при помощи ORM. Работа с меню. Создание корзины.

Урок 6. Корзина + AJAX + декораторы

Работа с корзиной. Добавление динамики в «горячее предложение». Создание страницы продукта. Ограничение доступа к корзине. AJAX: выполнение асинхронных запросов.

Урок 7. Собственная админка

Интеграция нового приложения в проект. Ограничение доступа к админке. Реализация механизма CRUD для пользователей и категорий товаров.

Урок 8. Полезное: страничный вывод, шаблонные фильтры, CBV

Реализация механизма CRUD для товаров. постраничный вывод объектов. CBV: готовые контроллеры. Шаблонные фильтры.

Django Framework. Инструменты оптимизации. 1 месяц.
Разработка сайтов на Python

Продолжая изучать Django, студенты разовьют личный проект: создадут контекстный процессор, добавят подтверждение регистрации пользователя по email. Продолжат знакомство с механизмом Django ORM, решая задачи по агрегации данных, сложным запросам, кешированию, оптимизации работы с БД. Научатся использовать наборы форм (fromsets), чтобы одновременно создавать нескольких экземпляров одной модели например, добавлять несколько записей в категорию на странице в админке. Рассмотрят механизм привязки статических файлов (CSS, JS) к формам в Django. После завершения разработки любой проект должен быть протестирован и развернут на production web-сервере – эти вопросы будут изучены в курсе.

Урок 1. Отправка электронной почты. Контекстные процессоры

Переходим на Django 2.0. Отправляем сообщение с кодом активации пользователя. Работаем с контекстными процессорами на примере корзины.

Урок 2. Регистрация через социальную сеть. Django-ORM: связь один-к-одному

Регистрируемся в магазине через ВКонтакте. Создаем профиль пользователя и заполняем его данными из социальной сети.

Урок 3. Работа с заказом пользователя: CBV, Django formsets

Создаем приложение ordersapp. Работаем с наборами форм Django formsets, используя CBV.

Урок 4. Работа с заказом пользователя: обновляем остатки товара, добавляем код jQuery

Корректируем количество товара при работе с корзиной и заказом. Обновляем статистику заказа при его редактировании. Работаем с набором форм при помощи jQuery и django-dynamic-formset.

Урок 5. Развертывание Django-проекта на сервере

Готовим проект к развертыванию. Переходим на базу данных «PostgreSQL». Имитируем работу с VPS – устанавливаем и настраиваем сервер Ubuntu Server 17. Реализуем связку «nginx»+«gunicorn».

Урок 6. Профилирование и нагрузочное тестирование проекта, оптимизация работы с базой данных

Смотрим на работу проекта изнутри. Находим медленные контроллеры. Проводим нагрузочное тестирование. Оптимизируем работу с базой данных.

Урок 7. Еще быстрее: кеширование в Django

Декоратор «@cached_property»: кешируем методы моделей.
Тег «With» – кешируем переменные в шаблонах.
Кешируем функции, фрагменты шаблона и контроллеры при помощи «Memcached».

Урок 8. Продвинутая работа с Django-ORM. Тестирование в Django

Работа с атрибутами модели на уровне БД. Объекты «F» и «Q». Реализация сложной логики при помощи «Case» и «When». Класс «TestCase» – основа тестов в Django. Smoke-тестирование. Тестирование приложения аутентификации. Тест контроллеров.

Клиент-серверные приложения на Python. 1 месяц.
GeekUniversity

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

Урок 1. Концепции хранения информации

Особенности хранения символов в памяти компьютера. Недостатки кодировки ASCII. Введение в кодировку Unicode. Unicode в Python 3. Конвертация байтов и строк - понятие и примеры. Ошибки преобразования.

Урок 2. Файловое хранение данных

Введение в файловое хранение данных. Использование файлов в формате CSV при сохранении данных. Файлы JSON как средство обмена данными. Работа с YAML-файлами при обработке и сохранении данных.

Урок 4. Основы тестирования

Введение в тестирование. Оператор assert. Модульное тестирование и модуль unittest.

Урок 5. Логирование

Журналирование событий и модуль logging.

Урок 6. Декораторы и продолжение работы с сетью

Декоратор. Декоратор с параметром. Сетевое программирование (продолжение).

Урок 7. Модуль select, слоты

Особенности использования модуля select. Слоты, их назначение и применение.

Урок 8. Потоки

Введение в потоки. Введение в многопоточное программирование. Модуль threading. Примитивы синхронизации. Модуль Queue. Модуль multiprocessing.

Стажировка в GeekBrains. 2 месяца.
В формате вебинаров

Во время стажировки студентам предстоит поработать в режиме удаленной занятости над Open Source-проектом либо стартапом. Студентам будет предложено выбрать один из набора доступных для разработки проектов. Студенты научатся работать в команде, коммуницировать с другими разработчиками, product- и project-менеджерами, дизайнерами, изучат гибкие методологии, фреймворк SCRUM, освоят принципы дистанционной работы. Результат стажировки - умение работать в команде, пополнение портфолио, возможность указать работу над проектом в качестве профильного опыта работы в резюме. Стажировка проходит в формате дистанционной работы с частичной занятостью, еженедельными встречами-статусами с преподавателем в формате вебинара.

Урок 1. Знакомство, выбор проекта

Какие роли бывают в разработке. Product Manager, Project Manager, разработчик, дизайнер. Что такое MVP. Архитектура современного сервиса. Как разработчики взаимодействуют между собой. REST API, Web Socket. Backend, Frontend, мобильные приложения. Микросервисная архитектура. Основы удаленной работы. Запись в команды.

Урок 2. Методологии разработки

Обзор методологий. Каскад (водопад), Agile-манифест, Канбан, Скрам. Где и для чего применяются. Смешанные методологии.

Урок 3. Методология SCRUM

Работа по SCRUM. Планирование спринта. Причесывание бэклога (backlog grooming). Цель спринта. Инкремент. Гибкая методология в условиях дистанционной работы. Таск-трекеры (Trello, Favro)/

Урок 4. User Story Mapping

Типы задач. Декомпозиция задач. Построение карты пользовательских историй. Работа над пользовательскими историями. Работа с ТЗ по водопаду и в гибких методологиях.

Урок 5. Ответственность, мотивация, личностный рост

Чем и как мотивировать себя. Какие уровни мотивации бывают. Как не сгореть на работе. И как не забить на работу.

Урок 6. Написание резюме

Как написать резюме, чтобы HR его не отсеял. Как заинтересовать работодателя. Как продемонстрировать навыки, полученные в учебе, если профильного опыта работы пока еще нет.

Урок 7. Предварительное подведение итогов, подготовка к защите проекта

Разбор студенческих резюме. Предварительное подведение итогов. Немного о стартапах, монетизации, инвесторах.

Урок 8. Подведение итогов, демонстрация выпускного проекта

Демонстрация рабочего прототипа студентами. Обсуждение полученных результатов. Обратная связь от преподавателя. Напутствие.

Как стать программистом. 13 уроков.
Пошаговая инструкция по поиску работы

Карьера в сфере программирования - это увлекательное путешествие в мир современных технологий. У каждого разработчика своя история и свой опыт. Однако существует базовый алгоритм, который поможет правильно сделать первые шаги и приведёт к вашей цели. Мы подготовили 13 видео-уроков, в которых ответили на самые актуальные вопросы о карьере программиста в компаниях и на рынке фриланса. Часто думаете о трудоустройстве и чувствуете, что готовы начать зарабатывать? Тогда этот видео-курс для вас.

Урок 1. Профессия “Программист”

Особенности профессии; часто задаваемые вопросы; востребованность на рынке труда.

Урок 2. Профориентация

Стану ли я успешным программистом? Факторы успеха.

Урок 3. Начинаем составлять резюме

Самое важное - первое впечатление; как назвать должность.

Урок 4. Выбор языка программирования: веб-разработка

Обзор языков для разработки сайтов: HTML, CSS, JavaScript, PHP, Python, Ruby, C#, Java; правильный выбор.

Урок 5. Мобильная разработка. Универсальные языки программирования

Обзор языков: Java, Objective-C, Swift; C#, C++, Python: правильный выбор.

Урок 6. Правила эффективного резюме

Список технологий; портфолио; дипломы и сертификаты; личностные качества. Взгляд технического специалиста и HR.

Урок 7. Поиск работы: что, где, когда

Работа мечты, психологические аспекты; техника запроса.

Урок 8. Собеседование и испытательный срок

Собеседования для программистов: как себя вести, что говорить, к чему прислушиваться; испытательный срок и правила его прохождения.

Урок 9. Фриланс: первые шаги

Обзор площадок для фриланса; особенности регистрации; оформление аккаунта; как выделяться среди большинства исполнителей.

Урок 10. Фриланс: начало работы и поиск заказов

Стратегия поиска заказов; приоритет заказов: что брать в работу; ведение переговоров; задания и подводные камни ТЗ; методы обращения к клиенту; написание ответов и привлечение внимания клиентов; правильные вопросы.

Урок 11. Фриланс: выполнение заказа и оплата

Способы оплаты: безналичный или наличный расчёт; предоплата или постоплата; обзор ситуаций, в которых лучше сработает каждый из способов; подготовка к работе и обязательные договорённости с клиентом; особенности процесса работы; завершающие этапы сотрудничества; обмен отзывами; техника "посоветоваться".

Урок 12. Специальности в сфере IT

Как проходит разработка в крупных компаниях? Кто такие аналитики, дизайнеры, тестировщики, архитекторы, projectmanager-ы, team-lead-ы и пр.

Урок 13. Карьерная лестница в сфере IT

Как выглядит карьерная лестница в сфере IT? В каких специальностях проще начинать свой путь? Какие есть перспективы развития?

Курс, разработанный совместно с школой EnglishDom, поможет освоить ключевые англоязычные темы, актуальные для начинающих IT-специалистов. Максимум практики и фокус на IT-лексику. На 10 уроках разбирается составление CV, технических заданий и деловых писем, собеседования и переговоры, международное общение при продвижении своего проекта. В живых диалогах на английском студенты закрепят фразы, которые пригодятся в работе разработчикам и тестировщикам, маркетологам и дизайнерам.

Урок 10. Start up

Рассказываем о своем проекте и представляем команду на английском.

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

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

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

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

Обязанности

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

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

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

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

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

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

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

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

Top