ISDElective — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(Осень 2019)
(Раздел 6. Особенности разработки и использования открытого программного обеспечения)
(не показано 25 промежуточных версии 2 участников)
Строка 11: Строка 11:
 
Наша группа в [https://t.me/software_development_hse телеграмме]
 
Наша группа в [https://t.me/software_development_hse телеграмме]
  
 +
== Расписание ==
 
=== Осень 2019 ===
 
=== Осень 2019 ===
  
Строка 17: Строка 18:
 
Первое занятие запланировано на 25 сентября.
 
Первое занятие запланировано на 25 сентября.
  
1 модуль: c 25 сентября по 16 октября – ауд. '''G103 (внимание, аудитория изменилась!)'''<br />
+
1 модуль: c 25 сентября по 16 октября – ауд. '''G103'''<br />
 
2 модуль: c 23 октября по 20 ноября – ауд. '''G103'''
 
2 модуль: c 23 октября по 20 ноября – ауд. '''G103'''
 +
 +
'''Внимание, 23 октября занятия не будет из-за сессии, следующее - 30 октября.'''<br />
 +
Внимание, 9 октября занятия не будет, следующее - 16 октября.
  
 
Не переживайте, если мест для официальной записи на факультатив нет.  
 
Не переживайте, если мест для официальной записи на факультатив нет.  
Если вам интересен курс, имеет смысл всё равно появиться на первом занятии.
+
Если вам интересен курс, имеет смысл всё равно появиться на занятии.
Мы что-нибудь придумаем.
+
В аудитории на лекции смогут быть до 40 человек.
Курс смогут проходить до 40 человек (по размеру аудитории).
+
  
 
== Предварительный список тем курса ==
 
== Предварительный список тем курса ==
Строка 30: Строка 33:
 
* История средств и методов контроля версий ПО.  
 
* История средств и методов контроля версий ПО.  
 
* Какие бывают репозитории?   
 
* Какие бывают репозитории?   
* Что такое моно-репозитории и в чём их отличие от других?
+
* Что такое моно-репозитории и в чём их отличие от других? Почему компании переходят на моно-репозитории?
* Почему современные компании массово переходят на моно-репозитории?
+
  
[https://docs.google.com/presentation/d/1ZG8zGEYdriQyFkCbh6yUV9O3opGxihRmsIore045dzQ/edit?usp=sharing Слайды для лекции по VCS ]
+
[https://docs.google.com/presentation/d/1ZG8zGEYdriQyFkCbh6yUV9O3opGxihRmsIore045dzQ/edit?usp=sharing Слайды для лекции по VCS]
  
==== Раздел 2. Тестирование в масштабных программных проектах ====
+
[https://www.youtube.com/watch?v=8Ph81IYXVxE&feature=youtu.be Видео лекции по VCS]
  
* Зачем нужны модульные тесты?
+
==== Раздел 2. Верификация и Валидация ====
* В чём состоят особенности больших проектов, когда речь идёт о тестировании?
+
* Что такое интеграционное и регрессионное тестирование, в чём отличия?
+
* Какие практики тестирования применяются?
+
* Что такое разработка через тестирование (TDD)?
+
  
==== Раздел 3. Непрерывная интеграция ====
+
* Статический Анализ: Теорема Райса, Алгоритмическая неразрешимость, Аппроксимация сверху и снизу, Неточный анализ.
 +
* Тестирование программ: уровни, методы, цели. Тестовые фреймворки и мокинг. Покрытие, Профилирования, Бернчакринг.
 +
* Валидация: догфудинг, UI сессии, метрики и аналитика, АБ-тестирование.
  
* Что такое непрерывная интеграция (CI)?
+
[https://docs.google.com/presentation/d/1IvD3z-TME1SBFMMl7CnVmZerj6ZcDuXraj71iQDYWO0/edit?usp=sharing Слайды для лекции Verification and Validation]
* Зачем применяется CI и в чём существо используемых методов?
+
 
* Какие современные методы развёртывания ПО применяются в промышленном программировании?
+
[https://www.youtube.com/watch?v=758p3aOC_QE Видео лекции Verification and Validation]
* В чём отличие библиотеки и приложения, когда речь идёт о развертывании?
+
 
* Что такое контейнеры и как они применяются?
+
==== Раздел 3. Системы сборки, пакетные менеджеры и непрерывная интеграция ====
 +
 
 +
[https://docs.google.com/presentation/d/1SQYu_bvZhZth4vnvMMbSh_Jkme7XaQy2Swbws2Swh50/edit?usp=sharing Слайды для лекции Building and Distribution]
 +
 
 +
[https://www.youtube.com/watch?v=KZWmmWVENFg Видео лекции Building and Distribution]
  
 
==== Раздел 4. Практики командной работы с программным кодом ====
 
==== Раздел 4. Практики командной работы с программным кодом ====
  
 
* Что такое стиль кода?
 
* Что такое стиль кода?
* Зачем нужны соглашения о стиле кода? Нужны ли они в действительности?
+
* Зачем нужны соглашения о стиле кода?
* Что такое linter и как с ним работать?
+
* Что такое принципы проектирования?
* Что такое рефакторинг? Как проводить рефакторинг? Когда вам нужен рефакторинг, а когда не нужен?
+
* Какие есть принципы в ООП?
* Как правильно распределить изменения по коммитам?
+
* Что такое шаблоны проектирования, чем они отличаются от принципов?
 
* Что такое рецензирование кода (code review)?
 
* Что такое рецензирование кода (code review)?
 
* Как готовить код к рецензированию?
 
* Как готовить код к рецензированию?
 
* Как проводить рецензирование чужого кода?
 
* Как проводить рецензирование чужого кода?
 
* Как организовать рецензирование кода в команде?
 
* Как организовать рецензирование кода в команде?
 +
 +
[https://docs.google.com/presentation/d/13Dlhm0A4tiTahzbIPBLLUAr-PMP4nUooNfYGeq4O9pA Слайды]
 +
 +
[http://google.github.io/styleguide/ Google Style Guides]
 +
[https://google.github.io/eng-practices/review/ Google's Engineering Practices - Code Review Developer Guide]
 +
 +
[https://www.youtube.com/watch?v=KOJgKdwjg88 Видео лекции How to write code]
  
 
==== Раздел 5. Планирование и работа с системами трекинга ====
 
==== Раздел 5. Планирование и работа с системами трекинга ====
Строка 70: Строка 81:
 
* Как должна выглядеть хорошая запись об ошибке для себя/другого программиста?
 
* Как должна выглядеть хорошая запись об ошибке для себя/другого программиста?
 
* Что особенно важно не забыть при документировании проблем и ошибок в ПО?
 
* Что особенно важно не забыть при документировании проблем и ошибок в ПО?
 +
 +
[https://www.youtube.com/watch?v=TbEXkm2LsgY Видео лекции Product management]
  
 
==== Раздел 6. Особенности разработки и использования открытого программного обеспечения ====
 
==== Раздел 6. Особенности разработки и использования открытого программного обеспечения ====
Строка 79: Строка 92:
 
* Какие существуют практики участия в коллективно разрабатываемых проектах?
 
* Какие существуют практики участия в коллективно разрабатываемых проектах?
 
* Каковы особенности использования ПО с открытым исходным кодом в коммерческих разработках?
 
* Каковы особенности использования ПО с открытым исходным кодом в коммерческих разработках?
 +
 +
[https://www.youtube.com/watch?v=_OKG8VKMFE8 Видео лекции про свободное ПО]
  
 
==== Раздел 7. Исследования и разработка ====
 
==== Раздел 7. Исследования и разработка ====
Строка 87: Строка 102:
 
* Чем отличается характер работы в исследовательских (R&D) компаниях или отделах компаний от работы обычного прикладного/системного программиста?
 
* Чем отличается характер работы в исследовательских (R&D) компаниях или отделах компаний от работы обычного прикладного/системного программиста?
 
* Стоит ли описывать в исследовательских статьях свои собственные результаты? Что это даёт инженеру, который не занимается научной работой?
 
* Стоит ли описывать в исследовательских статьях свои собственные результаты? Что это даёт инженеру, который не занимается научной работой?
 +
 +
[https://www.youtube.com/watch?v=V_Y-slDJBM0 Видео лекции]
  
 
==== Раздел 8. Социальные аспекты жизни программиста ====
 
==== Раздел 8. Социальные аспекты жизни программиста ====
Строка 94: Строка 111:
 
* В чём состоят особенности работы программиста в распределённых командах из многих участников?
 
* В чём состоят особенности работы программиста в распределённых командах из многих участников?
 
* Почему работа современного программиста не может рассматриваться в отрыве от социальных аспектов?
 
* Почему работа современного программиста не может рассматриваться в отрыве от социальных аспектов?
 +
 +
[https://www.youtube.com/watch?v=g-ouezO7-ME Видео восьмой лекции]
 +
 +
[https://www.youtube.com/playlist?list=PLEqoHzpnmTfBKKNYsPjCF34vOWOco292i Плейлист с записями всех лекций курса осенью 2019 года]
  
 
== Оценка ==
 
== Оценка ==

Версия 00:53, 14 декабря 2019

Страница факультативного курса "Методы разработки программного обеспечения" (Industrial Software Development)

О курсе

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

Регистрация

Для регистрации нужно заполнить эту анкету

Наша группа в телеграмме

Расписание

Осень 2019

Курс будет проходить по средам с 16:40 до 19:30.
Каждую неделю запланированы одна лекция и одно практическое занятие.
Первое занятие запланировано на 25 сентября.

1 модуль: c 25 сентября по 16 октября – ауд. G103
2 модуль: c 23 октября по 20 ноября – ауд. G103

Внимание, 23 октября занятия не будет из-за сессии, следующее - 30 октября.
Внимание, 9 октября занятия не будет, следующее - 16 октября.

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

Предварительный список тем курса

Раздел 1. Системы контроля версий (СКВ) и работа с ними

  • Какие бывают СКВ?
  • История средств и методов контроля версий ПО.
  • Какие бывают репозитории?
  • Что такое моно-репозитории и в чём их отличие от других? Почему компании переходят на моно-репозитории?

Слайды для лекции по VCS

Видео лекции по VCS

Раздел 2. Верификация и Валидация

  • Статический Анализ: Теорема Райса, Алгоритмическая неразрешимость, Аппроксимация сверху и снизу, Неточный анализ.
  • Тестирование программ: уровни, методы, цели. Тестовые фреймворки и мокинг. Покрытие, Профилирования, Бернчакринг.
  • Валидация: догфудинг, UI сессии, метрики и аналитика, АБ-тестирование.

Слайды для лекции Verification and Validation

Видео лекции Verification and Validation

Раздел 3. Системы сборки, пакетные менеджеры и непрерывная интеграция

Слайды для лекции Building and Distribution

Видео лекции Building and Distribution

Раздел 4. Практики командной работы с программным кодом

  • Что такое стиль кода?
  • Зачем нужны соглашения о стиле кода?
  • Что такое принципы проектирования?
  • Какие есть принципы в ООП?
  • Что такое шаблоны проектирования, чем они отличаются от принципов?
  • Что такое рецензирование кода (code review)?
  • Как готовить код к рецензированию?
  • Как проводить рецензирование чужого кода?
  • Как организовать рецензирование кода в команде?

Слайды

Google Style Guides Google's Engineering Practices - Code Review Developer Guide

Видео лекции How to write code

Раздел 5. Планирование и работа с системами трекинга

  • Что такое баг-трекер (bug/issue tracker)?
  • Какие используются эффективные практики документирования ошибок и требований?
  • Что такое релизные циклы? Как их планировать?
  • Как должна выглядеть хорошая запись об ошибке для себя/другого программиста?
  • Что особенно важно не забыть при документировании проблем и ошибок в ПО?

Видео лекции Product management

Раздел 6. Особенности разработки и использования открытого программного обеспечения

  • Что такое открытое программное обеспечение?
  • В чём особенности проектов с открытым исходным кодом?
  • Всегда ли ПО с открытым кодом разрабатывается сообществом?
  • Как эффективно использовать ПО с открытым исходным кодом и не наступать на сопутствующие грабли?
  • Какие существуют практики участия в коллективно разрабатываемых проектах?
  • Каковы особенности использования ПО с открытым исходным кодом в коммерческих разработках?

Видео лекции про свободное ПО

Раздел 7. Исследования и разработка

  • Чем исследовательские статьи могут быть полезны прикладному программисту?
  • Как правильно инженеру читать статьи? И надо ли вообще их читать?
  • Как и где искать новые способы решения задач, которые надо решать?
  • Чем отличается характер работы в исследовательских (R&D) компаниях или отделах компаний от работы обычного прикладного/системного программиста?
  • Стоит ли описывать в исследовательских статьях свои собственные результаты? Что это даёт инженеру, который не занимается научной работой?

Видео лекции

Раздел 8. Социальные аспекты жизни программиста

  • Что такое интервью? Когда и какие они бывают у программистов?
  • Как правильно готовиться к и проходить интервью?
  • В чём состоят особенности работы программиста в распределённых командах из многих участников?
  • Почему работа современного программиста не может рассматриваться в отрыве от социальных аспектов?

Видео восьмой лекции

Плейлист с записями всех лекций курса осенью 2019 года

Оценка

Текущий контроль предусматривает выполнение студентам набора домашних заданий. Накопленная оценка (О_накопленная) за курс выставляется по сумме баллов, полученных за выполнение этих домашних заданий. Оценка за домашнее задание выставляется с учетом полноты выполнения задания, а также способности студента объяснить примененные при решении приемы. На последнем занятии студенты сдают устный экзамен (О_экзамен) по всему материалу курса. Студент получает не менее 80 минут на подготовку к ответу.

О_накопленная формируется на основании суммы баллов, полученных в ходе курса, по следующей схеме:

Балл 0 1-19 20-29 30-39 40-49 50-59 60-69 70-79 80-89 90-99 ≥100
О_накопленная 0 1 2 3 4 5 6 7 8 9 10

Результирующая оценка вычисляется по формуле: О_результирующая = min(0,8*О_экзамен + 0,4*О_накопленная; 10)

Авторы курса

  • В. К. Кошелев - лектор курса, ведущий разработчик компании JetBrains (вот тут Владимир рассказывает про баги)
  • А. А. Мицюк - научный сотрудник ФКН (личная страница)

Благодарности

Факультатив проходит при поддержке компании JetBrains.