July 3, 2020

Учебный план КП на 20-21 годы

Цели:

  1. Ознакомить с принципами проектирования программных продуктов.
  2. Ознакомить с миром программирования, профессией программиста.
  3. Дать некоторые навыки программистов, такие как умение искать информацию (даже там, где её, казалось бы, не может существовать).

Общий план на семь первых недель:

  1. Знакомство с миром программирования. Вводная лекция. Рассказ про огромный мир технологий и подробности курса. Набор требований и выбор сред разработки, подготовка к курсу.
    Мир технологий программирования: мобильные приложения, десктопные приложения, серверные приложения и сайты, специализированное ПО (научные вычисления, машинное обучение, скрипты и пр.).
    Выбор сред разработки: поскольку будет Python сначала, то выбор сводится к одному из трёх лучших решений:
    а) Jupyter Notebook (входит в состав дистрибутива Anaconda - https://www.anaconda.com/products/individual)
    б) JetBrains PyCharm (https://www.jetbrains.com/pycharm/download)
    в) любой редактор кода (Atom, VS Code и др.) + Python с официального сайта (https://www.python.org/).
    Затем идёт C++. Здесь будем работать в Qt Creator с компилятором MinGW.
    Напоследок идёт Java (3-ий семинар), будем использовать JetBrains IntelliJ IDEA (https://www.jetbrains.com/idea/download).
  2. Знакомство с парадигмами программирования. Обзор плюсов и минусов функционального, процедурного, объектно-ориентированного программирования. Обзор ФП приводится в статье, обзор ООП - на Википедии, равно как и обзор процедурногоимперативного) программирования.
    Концепции программирования очень важны для понимания паттернов проектирования ПО.
  3. Разбор фундаментальных выражений Python. Много мощных инструментов Python, синтаксический сахар, грамотное оформление и документирование кода. Мощные инструменты - те вещи, за что Python так любят учёные, математики, финансисты и другие специалисты. В том числе и обычные кодеры. Часть из этих инструментов можно найти здесь.
    Синтаксический сахар - способ решать стандартные для языков программирования задачи нестандартным синтаксисом, отличающимся от языка к языку. Например, для Python таким "сахаром" выступает конструкция итерирования внутри создания списка: k = [i for i in range(10)].
    Оформление кода включает в себя следование PEP8. Там же можно узнать и про документацию.
  4. Решение прикладных задач на Python. Множество библиотек, сопряжённые технологии и паттерны проектирования. Есть в Интернете натурально сайт с десяткой лучших библиотек - эдакий рейтинг (по состоянию на 2017-ый, но, навскидку, ничего особо не изменилось).
    Примеры же паттернов проектирования можно найти здесь.
  5. Обзор C++, Boost и Qt. Прокачка кодовой базы, обзор синтаксиса C++17/20, кроссплатформенная компиляция.
  6. Командная работа. Методы командного программирования, контроль версий, юнит-тесты, методы управления проектами.
  7. Семинар "Реши задачу за час". Быстрое проектирование, развёртывание, тестирование. Работа с документацией и поисковиками.

Закрепление на четыре недели:

  1. Семинар "Думай, как эффективный алгоритм". Оптимизация алгоритмов, анализаторы кода.
  2. Семинар "Думай про(ще) пользователя". Развиваем навык упрощения задачи. Микросервисная архитектура.
  3. Семинар "Как найти девушку". Метод абстракций, ООП на Java. Решаем человеческие проблемы и начинаем строить модели.
  4. Семинар "Симулятор мира". Подробный разбор, что на самом деле могут делать вещи, созданные при помощи кода. Нейронные сети, физические движки, игры, статистика.

Дальнейшее время - проектные работы:

  1. Выбор проектной работы. Команды от 1 до 5 человек. Задача - создать продукт, который эффективно решает определённые повседневные проблемы.
  2. Осуществление командной работы. Использование упомянутых на лекциях и семинарах техниках программирования и проектирования.
  3. Презентация продуктов. Публичное тестирование, запуск продукта.

Ожидаемые итоги:

  • проекты, направленные на решение студенческих проблем в РУДН
  • коммерческие проекты
  • hard-skills для программистов.

That is it!