July 3, 2020
Учебный план КП на 20-21 годы
Цели:
- Ознакомить с принципами проектирования программных продуктов.
- Ознакомить с миром программирования, профессией программиста.
- Дать некоторые навыки программистов, такие как умение искать информацию (даже там, где её, казалось бы, не может существовать).
Общий план на семь первых недель:
- Знакомство с миром программирования. Вводная лекция. Рассказ про огромный мир технологий и подробности курса. Набор требований и выбор сред разработки, подготовка к курсу.
Мир технологий программирования: мобильные приложения, десктопные приложения, серверные приложения и сайты, специализированное ПО (научные вычисления, машинное обучение, скрипты и пр.).
Выбор сред разработки: поскольку будет 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). - Знакомство с парадигмами программирования. Обзор плюсов и минусов функционального, процедурного, объектно-ориентированного программирования.
Обзор ФП приводится в статье, обзор ООП - на Википедии, равно как и обзор процедурного (и императивного) программирования.
Концепции программирования очень важны для понимания паттернов проектирования ПО. - Разбор фундаментальных выражений Python. Много мощных инструментов Python, синтаксический сахар, грамотное оформление и документирование кода.
Мощные инструменты - те вещи, за что Python так любят учёные, математики, финансисты и другие специалисты. В том числе и обычные кодеры. Часть из этих инструментов можно найти здесь.
Синтаксический сахар - способ решать стандартные для языков программирования задачи нестандартным синтаксисом, отличающимся от языка к языку. Например, для Python таким "сахаром" выступает конструкция итерирования внутри создания списка:k = [i for i in range(10)]
.
Оформление кода включает в себя следование PEP8. Там же можно узнать и про документацию. - Решение прикладных задач на Python. Множество библиотек, сопряжённые технологии и паттерны проектирования.
Есть в Интернете натурально сайт с десяткой лучших библиотек - эдакий рейтинг (по состоянию на 2017-ый, но, навскидку, ничего особо не изменилось).
Примеры же паттернов проектирования можно найти здесь. - Обзор C++, Boost и Qt. Прокачка кодовой базы, обзор синтаксиса C++17/20, кроссплатформенная компиляция.
- Командная работа. Методы командного программирования, контроль версий, юнит-тесты, методы управления проектами.
- Семинар "Реши задачу за час". Быстрое проектирование, развёртывание, тестирование. Работа с документацией и поисковиками.
Закрепление на четыре недели:
- Семинар "Думай, как эффективный алгоритм". Оптимизация алгоритмов, анализаторы кода.
- Семинар "Думай про(ще) пользователя". Развиваем навык упрощения задачи. Микросервисная архитектура.
- Семинар "Как найти девушку". Метод абстракций, ООП на Java. Решаем человеческие проблемы и начинаем строить модели.
- Семинар "Симулятор мира". Подробный разбор, что на самом деле могут делать вещи, созданные при помощи кода. Нейронные сети, физические движки, игры, статистика.
Дальнейшее время - проектные работы:
- Выбор проектной работы. Команды от 1 до 5 человек. Задача - создать продукт, который эффективно решает определённые повседневные проблемы.
- Осуществление командной работы. Использование упомянутых на лекциях и семинарах техниках программирования и проектирования.
- Презентация продуктов. Публичное тестирование, запуск продукта.
Ожидаемые итоги:
- проекты, направленные на решение студенческих проблем в РУДН
- коммерческие проекты
- hard-skills для программистов.
That is it!