Страница 2 - SkudarnovAlexander/Profession_1 GitHub Wiki
Профессия Разработчик C/C++ Куратор программы (декан): Иван Овчинников
онлайны закончатся 24.10. старт ВК-С 25.10, оцениваю дедлайн ок. 16.11 оцениваю старт АСД-С ок. 19.11 оцениваю дедлайн АСД-С до НГ Аннотация
Опыт и знания специалистов Mail.Ru Group.
Ядро Linux, Ядро Mach в Mac OS X, OpenSSH, почтовый сервер Postfix, веб-сервер Nginx, СУБД Postgres, Интерпретатор bash, Zend Engine интерпретатора PHP, СУБД Tarantool от Mail.Ru Group и мобильное приложение Maps.Me написаны на C. На C++ myTarget, Облако Mail.Ru, ICQ и почта Mail.Ru. На С и С++ написаны коллекция трансляторов gcc, распределенная система управления версиями git, окружение рабочего стола KDE (с применением библиотек Qt), браузеры Google Chrome и Firefox. На Си/Си++ программируются микроконтроллеры, в том числе Arduino, игры и игровые движки, такие, как CryEngine и Unreal Engine. А библиотека QT позволяет разрабатывать десктопные решения с GUI, при этом превосходно документирована и имеет свободный код! Почувствуй мощь С-разработки и присоединяйся к элите хардкорных разработчиков. Только, Си/Си++, только свобода, только хардкор!
Вместе с нами вы изучите все аспекты разработки приложений на Си и Си++, а также приобретете опыт разработки Open Source комплексного приложения (текстовый редактор с плагинами, аналог emacs). С чего начался проект GNU/Linux? Да, Линус написал ядро (на языке Си), но было это в 1991 году, а разработка окружения пользовательской среды стартовала еще в 1983. В 1984 Ричард Столлман написал редактор emacs на C со встроенным транслятором и плагинами Лисп, а в 1987 появилась коллекция компиляторов GCC, написанная на С (и С++, разрабатываемым в то время Бьорном Штрауструпом).
На стажировке мы будем разрабатывать свою версию редактора, но на С++ и с плагинами по лицензии GNU GPL. Программа Аудитория: слушатели, имеющие базовую подготовку по математике, английскому языку и знающие основные команды командной строки Windows/Linux (в зависимости от среды, в которой будут выполняться задания). Подготовка в области программирования – нулевая или только веб/HTML. Продолжение работы – самостоятельная кроссплатформенная разработка или разработка «на железе».
Видеокурс по git [Автор Е. Картавец. Все готово]
Назначение и возможности. Узнаем, зачем нужен git и какие возможности он открывает для программистов. Базовые операции. Создаем хранилище кода, доступное всем участникам разработки по сети. Осваиваем базовые операции: Clone, Commit, Push, Pull. Откат изменений кода. Учимся откатывать изменения в коде с помощью git. Осваиваем операции Discard, Revert, Reset. Работа с ветками. Работа с ветками. Параллельно разрабатываем несколько версий программы. Осваиваем операции Add branch, Checkout, Merge. Конфликты. Учимся разрешать конфликты при слиянии веток. Распространенные ошибки. Часть 1. Боязнь создания новых веток. Хранение исполняемых файлов в репозитории. Распространенные ошибки. Часть 2. Ошибки при работе с ветками. Ошибки при создании commit-ов. Pull Request. Работа с Open-Source-проектами Осваиваем Pull Request-ы на примере работы с Open-Source-проектами. Pull Request. Сдача домашних заданий. Сдача домашних заданий в GeekBrains с помощью Pull Request-ов Консольный git-клиент. Базовые операции. Осваиваем базовые операции в консольном git-клиенте. Консольный git-клиент. Работа с ветками. Учимся работать с ветками в консольном git-клиенте. Работа с версиями программы. Учимся выпускать различные версии программного продукта с использованием git. Итоги Подводим итоги проделанной работы.
ИК Введение в Си [Автор И. Овчинников. Готов/в работе новая версия]
Введение. Зачем нужен С и как им пользоваться Базовые понятия. Как всё устроено, и что с этим делать Условия: первый шаг к принятию решений. Булева алгебра Циклы. Отдаём программе рутинные задачи Циклы. Как придать уникальности простым вещам Функции. Пишем универсальные фрагменты кода Указатели. Ещё один шаг к настоящему низкому уровню Массивы. Собираем подобное к подобному Массивы. Проверяем насколько хорош генератор псевдослучайных чисел Массивы. Почти безграничные возможности организации данных Строки. Учимся говорить с пользователем Структуры данных. Уходим от примитивов к объектам, но не далеко Файловая система. Запоминаем результаты и читаем их обратно Работа с памятью. Динамическое выделение памяти.
Linux для программистов [включаем в вебинарном и записываем в студии]
Зачем знать UNIX-подобные системы. Установка Linux. Знакомство с GNU/Linux. Где нужен Linux. Установка Ubuntu.
Работа в терминале. Работа с файлами и директориями. Установка программ в Linux. Базовые представления о сетевых возможностях, удаленный доступ, ssh.
Работа с пользователями и правами. Файловая система, пользователи, группы, права. Управление пользователями и группами. Работа от имени суперпользователя.
Регулярные выражения. Введение в регулярные выражения. POSIX. PCRE.
Написание скриптов и автоматизация. Командный интерпретатор bash. Команды и переменные. Типы команд и область видимости переменных. Функции, подстановки, конвейеры. Операторы цикла, условного выбора. Математические и логические операторы. Отладка скриптов.
Apache 2. Nginx. Iptables. Научимся поднимать веб-сервер с использованием Apache2 и/или Nginx, и защитить систему с помощью iptables.
Git. Научимся работать с git в терминале GNU/Linux.
Монолитная и сервисная архитектура. Docker. Научимся разворачивать контейнеры docker.
ИК Си++: процедурное программирование [Готов. Автор А. Вуколов]
Компилируемый язык С++. Этапы трансляции и сборки программ. Зачем нужен С++. Средства разработки на С++. Как работает компилируемый язык Имена в программе. Данные, типы, функции и переменные Имена, типы и переменные. Вычислимость. Функция. Понятие и смысл. Простые массивы Конструируем алгоритм на языке C++. Блоки. Понятие алгоритма Пространство имен. Условные операции. Константный множественный выбор Процедурное программирование. Собираем “скелет” проекта для Qt Creator. Декодирование формата PNM/PGM. Побочные преобразования данных: читаем размеры изображения. Построение выходной гистограммы и вывод данных
ИК Алгоритмы и структуры на Си [В работе. И. Овчинников. Есть вебинарная версия]
Простые алгоритмы Асимптотическая сложность алгоритма. Рекурсия Поиск в массиве. Простые сортировки Динамическое программирование. Поиск возвратом Динамические структуры данных Деревья Графы. Алгоритмы на графах. Сложные сортировки ИК Си++: управление памятью и компиляция [В работе, автор А. Вуколов]
Основы управления памятью. Именование адресов. Операция разыменования. Передача аргумента по адресу и копированием адреса. Понятие указателя. Понятие смещения. Переменная как адрес. Массив (последовательность) как адрес. Запрос и освобождение памяти. Статическая и динамическая память. Многомерные массивы разной конструкции. Адрес функции. Обратные вызовы. Пустые указатели. Управление типизацией. Система типов. Определение типа. Подстановка имен. Хранение состояния. Приведение типов . Константный адрес и адрес константы. Изменяемые данные как константа в другом пространстве имен. Препроцессинг. Условная компиляция. Системно-специфичные флаги и определения. Константы C. Константы IDE.Макросы и аргументы в препроцессинге. Подстановка макросов. Inline-функции. Расширения языка уровня компиляции. Препроцессинг по командам #pragma. Возможность генерации кода препроцессором. (доработка анализатора)
Вебинары Си++: ООП [вакансия] Именованные состояния. Экспорт имен. Перегрузка имен функций (глобальная). Хранение функций в состоянии. Доступность пространства имен состояния. Ключевые слова public и private. Вводим понятие объекта. Вводим понятие класса. Начальное хранимое состояние. Объект и инкапсуляция. Отображение начального хранимого состояния. Создание объекта как именованного состояния. Аргументы конструктора. Перегрузка конструкторов. Инкапсуляция. Функции класса. Доступ к переменным класса. Реализация побочных эффектов паттерна «свойство» (get- и set-функции). Доступ к объекту. Указатель на объект как указатель на состояние. Управление вызовом конструктора и деструктора. Наследование. Переключение режима видимости переменных и функций. Управление областью видимости переменных класса (protected). Наследование функций. Проброс конструкторов. Особенности вызова деструкторов. Слияние состояний (множественное наследование). API с классами. Интерфейсные классы. Синглтон-объекты и доступ к ним. Майерсов синглтон. Статические переменные и функции класса. Переопределение функций в производных классах. Построение иерархической модели API с классами. Принцип расширения круга задач по производным классам. Полиморфизм. Таблица виртуальных функций. Определение адреса вызова функции. Примеры использования таблицы виртуальных функций класса с набором перегруженных публичных функций. Приведение типов применительно к классам. Нисходящее приведение типов по иерархии классов (dynamic_cast). Специальные возможности объектов C++. Перегрузка операций инфиксными функциями (ключевое слово operator). Перегрузка операции вызова (конструирование псевдо-функции как объекта с хранимым состоянием). Специальные разрешения прав доступа (ключевое слово friend). Узкоспециализированные интерфейсные функции. Кроссплатформенность. Краткое знакомство. Некоторые константы стандартной библиотеки, специфичные для платформы и операционной системы. Расширения языка. Встраиваемые и внешние расширения. Платформонезависимые расширения языка в стандартах C++11 и C++17. Шаблонизатор типов auto и подстановка имен типов. Константные функционалы constexpr. Анонимные функции окружения (лямбда-выражения). Шаблонизатор С++. Стандартная библиотека шаблонов. Понятие шаблона. Обобщение кода. Обобщение алгоритма. Декомпозиция по категориям представления данных. Требования к обобщенному алгоритму. Шаблоны функций. Правила подстановки шаблонов. Шаблоны классов. Вывод типов. Аргументы шаблона. Встраиваемая шаблонизация (шаблонные константные функционалы) в C++14 и C++17. (здесь нет отдельного проекта)
Вебинары Си++: Разработка программ с графическим интерфейсом [вакансия]
Уходим из консоли: Qt Framework Принципы работы Qt Framework. Как происходит генерация С++-кода в Qt Meta Object Compiler. Учимся создавать и отлаживать проекты программ в Qt Creator. Макропроцессор QMake. Изучаем проектный файл Qt Creator. Структура программы Qt на основе QMainWindow. Объектная модель Qt. События операционной системы в Qt. Принцип цикла обработки событий. Механизм сигналов MOC. Учимся вызывать и обрабатывать события: ключевое слово emit. Автоматическая регистрация функций обратного вызова в классе: ключевое слово slots. Интерфейс как именованное состояние: система дизайна Qt Creator / Qt Designer. Разрабатываем проект на QT.
Стажировка в GeekBrains [В работе. Автор С. Кручинин, преподаватель и ревьювер И. Овчинников, наставники - вакансия] 12 уроков-спринтов
Mail.Ru Group как и другие крупные компанию делают свой вклад в OpenSource. Вы получите опыт в совместной разработке Open Source решения -- текстовый редактор для программистов с плагинами.
Разработка Open Source решения: клон редактора Emacs на C++ с плагинами на Python. Навыки командной работы, git, тасктрекер (на пример Favro и Trello), Agile разработка, SCRUM, КАНБАН.
Проекты в портфолио Яркостный анализатор для PNM (курс С++: процедурное программирование) Агрегация и визуализация больших объемов данных из БД (курс: Qt+) Open Source текстовый редактор для программистов с плагинами на Python (стажировка)
Вы изучите инструменты C C++ STL CMake Qt/qmake Libstdc++ git
Вы освоите следующие навыки Процедурное программирование Анализ и декомпозиция задач Построение, описание и конструирование алгоритма Оценка операционной сложности алгоритма Работа с числами и данными Построение типов и состояний Управление компиляцией Планирование прикладного интерфейса (API) Разработка пользовательских операций над состояниями ООП Шаблонизация Основы разработки графического интерфейса пользователя Работа в команде Agile-разработка SCRUM и Канбан.