Практический минимум

Санкт-Петербург, осень 2020

Описание

О курсе

Если коротко, курс об инструментах и технологиях которые вокруг нас, которыми все пользуются и которыми нужно уметь пользоваться. Как, например, командная строка, система контроля версий языки разметки и т.д.

Если немного длиннее, то есть много полезных инструментов, которые помогают автоматизировать рутину и тем самым облегчить жизнь. Но про них особо не рассказывают -- мелочи же, но в тоже время все ожидают, что вы это знаете и умеете. Эти “мелочи” могут сохранить вам много времени и нервов. Например, можно писать скрипты, чтобы автоматизировать рутинные действия, хранить их в системе контроля версий и не бояться менять, а документацию писать на языке разметки. Этим вещам мы будем учиться. Для этого придется выполнить много маленьких (и не очень) практических заданий. Они взяты из жизни, но большинство упрощены, чтобы их можно было выполнить в разумное время.

Вы научитесь

  • работать с командной строкой, писать скрипты на баше,
  • познакомитесь с языками разметки, научитесь рисовать схемы текстом,
  • освоите базово гит, увидите как он применяется,
  • разберетесь с пулл-реквестами и гитхабом,
  • научитесь искать паттерны в тексте с помощью регулярных выражений,
  • “потрогаете” HTTP и напишете маленький микросервис,
  • познакомитесь с Докером, завернете туда свой микросервис,
  • автоматизируете деплой, посмотрите, для чего нужен мониторинг,
  • научитесь писать юнит тесты.

Пререквизиты

Установить Linux (mac подойдет), это очень важно. Во всех заданиях подразумевается, что вы будете выполнять их в Linux. Linux-экосистема — это большая часть мира промышленного программирования. Вам так или иначе придется столкнуться с ним в жизни. Но это не так сложно, как может показаться на первый взгляд.

Уметь программировать на уровне “написать сортировку пузырьком”. Будет несколько заданий, где надо будет программировать на Python (чуть-чуть) и на Си (еще меньше) Если вы не знаете Python — ничего страшного — лектор его тоже не знает. Еще раз, курс про инструменты, но иногда нужна маленькая программка, чтобы показать, как пользоваться инструментом.

Для кого курс

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

Вам точно будет скучно если:

  • у вас была хотя бы одна практика в CS центре,
  • вы проучились год в CS центре,
  • вы работаете.

Сложность

Мы начнем с простого, но сложность заданий будет постепенно нарастать. Сложнее всего будет в середине, на лекциях про http и docker. Тут придется напрячься и потерпеть. Потом сложность опять снизится до средней по курсу.

Как будет проходить курс

Лекции

Лекции будут в zoom. Планируется записывать лекции и выкладывать на ютуб.

Лабораторные

Сразу после лекции вам будет предложено выполнить несколько заданий наподобие будущей домашки. Делается это для того, чтобы иметь возможность сразу вам помочь. Не обязательно оставаться на лабораторные, но т.к. это экспериментальный формат, ваша обратная связь очень нам поможет.

Часы приема

Раз в неделю (в обед) у Равиля будут “часы приема” (office hours), где можно задать любой вопрос, попросить помощи или просто похоливарить.

Опросы

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

Домашние задания

Будут обязательные, бонусные и задания “со звездочкой”. Если задание не сдано в срок, то его все равно надо сдать и сдать еще одно бонусное как “штрафное”. Задания со звездочками совершенно не обязательны к выполнению, но каждая звездочка стоит одно бонусное (или штрафное). У обязательных заданий дедлайн одна неделя, у бонусных две.

Некоторые задания вложенные! Есть задачи “добавьте Х в предыдущей домашке”. А, значит, для выполнения текущей задачи задача из прошлой домашки должна быть сделана.

Разборы

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

Оценка за курс

Оценка за курс ставится по системе Зачёт/Незачёт. Оценок 2, 3, 4, 5 за курс нет. Для получения зачета нужно сдать все обязательные задания и половину бонусных. Для сдачи одной задачи нужно набрать не меньше половины баллов.
Оценка за задания ставится по системе Зачёт/Незачёт. Оценок 2, 3, 4, 5 за задания нет. Баллы за решения не суммируются, сдать нужно каждое из них.

Мы не одни

Кроме нас, есть еще похожие курсы:

The Missing Semester of Your CS Education от MIT — та же самая идея.

Software Carpentry — двухдневные семинары для ученых.

Технологический Семинар от CS центра.

Несколько отзывов с прошлого года

“Во-первых, сразу и безоговорочно посадить всех на Linux. Потому что люди беспричинно сопротивляются, а потом тратят уйму времени из-за неправильного отображения jobs в Cygwin, незаводящегося Docker-а и т.д, в итоге не успевают делать домашки и еще больше нервничая.
Ну мне кажется, что каждому computer scientist-у так или иначе придется тыкать Linux, как говорится, тяжело в учении, легко в бою….”

“Отталкивает, когда преподаватель что-то рассказывает и часто говорит я не знаю, как сделать то-то

“...Отмахиваясь словами такого же рода задания будут на вашей работе, они формулируют задания менее чётко, чем все остальные преподаватели и в моём вузе, и в csc, которые меня учили....”

“...Также лекция про языки разметки была абсолютно бесполезной, ее тоже стоит убрать....”

Немного позитива:)

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

“Курс понравился. Особенно первые две темы по линуксу помогли вникнуть в суть и заинтересовали. Узнал много полезного, С чем придется сталкиваться. Оказался курс емким и много времени на дз уходило. Но итог стоил всего этого. Небольшое замечание: иногда формулировка неточна. Но преподаватели активны в слаке, так что все ок.”

“Не думал, что пройду курс, но все таки получилось. В любом случае курс оказался мегаполезным, я бы сказал это был продвинутый минимум. До начала курса мог иногда что то запрогать на питоне, даже в своих пет проектах было много сложностей. Однако по ходу курса я смог неплохо поучаствовать в хакатоне, сделать небольшой пет проект с Flask и базой данных, возможностей стало больше и в целом жить легче)

Большое спасибо за огромное количество дополнительных материалов и полезные комментарии к проверенным заданиям!”

Преподаватели

Список лекций

Введение в Linux

Сегодня в программе

  • Буквально пара слов о том, что такое ядро
  • Набор исторических фактов (от Unix к Linux)
  • Файловая система
  • Пользователи
  • Файлы
  • Процессы
  • Unix way
Командная строка Linux
  • Вводные общие слова
  • bash как REPL
    • Wildcards
    • Переменные
    • Специальные переменные
    • Выражения
  • Unix way
    • Streams
    • Pipelines
  • Шебанг
  • make
Система контроля версий git

Примерный план

  • Общие вводные слова (как всегда)
  • git
    • commit
    • branch
    • merge
  • git flow
  • github
Языки разметки и XML
  • Markdown
  • AsciiDoc
  • Graphviz/dot
  • \(\LaTeX\)
  • XML/JSON/YAML
Регулярные выражения
  • Регулярки
  • grep
  • sed
  • awk
Взаимодействие с сетью
  • Разбираемся как работает посылка пакетов
  • Рассматриваем простейшие утилиты работы с сетью
  • Знакомимся с DNS, CDN, VPN и другими словами на три буквы
  • Пишем сервер на сокетах
Протокол HTTP
  • HTTP
  • REST
  • Микросервисы

Может быть * ProtoBuf * GraphQL * HTTP 2

Контейнеризация
  • chroot
  • Docker
  • Docker compose
Архитектура приложений
  • Спагетти код
  • Лазанья код
  • Равиоли код

Ну и может поговорим про паттерны и ООП

Тестирование приложений
  • Тестирование
  • Логгирование
Опасность в приложениях
  • Хеширование, контрольные суммы
  • Авторизация vs Аутентификация; JWT
  • Обмен ключами Диффи-Хеллман
  • RSA
  • TLS
  • Двухфакторная аутентификация
Билд-системы
  • make к TravisCI
  • dockerhub
Кодировки, даты, локали

Разбираемся, почему /dev/random печатает краказябры

Дебаг
  • Исключения
  • Дебаг
  • Может быть профилирование (но зачем?)
Попурри и ответы на вопросы

Есть темы которые стоит упомянуть, но посвящать им целую лекцию слишком много.