Качество программ, которые мы создаем, зависят от многих факторов. В продакшн-среде не существует программ, которые не содержали бы ошибок. Они являются неотъемлемой частью жизненного цикла программного обеспечения, и нужно уметь с ними правильно работать.
Важную роль здесь играют автоматические и ручные тесты, которые пишут и выполняют обычные тестировщики. При этом автоматические тесты не избавляют программу от ошибок.
Представим, что программист делает небольшой прототип, который работает в основном рабочем флоу и отдает его реальным пользователям. После этого начинается шквал обращений в службу поддержки или к самому программисту. Оказывается, программа чаще не работает, чем работает:
Причины бывают разные: пользователи вводят некорректные данные или два раза быстро кликают по кнопке.
Проблема в том, что программа не была на это рассчитана. Чтобы исправить ситуацию, нужно тестировать ее на корнер-кейсы и испытывать в разных условиях: на разном железе, ОС и браузерах.
Когда ошибки исправляются, программа «обрастает» большим количеством специальных конструкций и дополнительным кодом, который обрабатывает эти ошибки. Это может привести к тому, что кода для обработки ошибок становится больше, чем кода для выполнения задачи.
В этом случае у многих пропадает эйфория от процесса программирования. Одно дело – за два дня создать рабочую программу для экспериментов. Другое дело – создать программу, которая способна работать в реальной среде с большим количеством пользователей. Это сложная задача, которая включает в себя много рутины и искусство работы и обработки ошибок. Это мы и будем изучать в данном курсе.
Основные темы курса – это ошибки и их разновидности, а еще способы работы с этими ошибками:
- Коды возврата
- Исключения
На практике используются оба способа. Исключения не заменяют коды возврата и наоборот. Это не единственные способы, но они являются наиболее распространенными в мейнстримовых языках. Поэтому мы и будем работать с ними.
Проект
Также в этом курсе мы будем делать проект. Он включает в себя большое количество ситуаций, в которых возможны ошибки — это работа с файловой системой. Когда мы создаем, удаляем и копируем файлы, мы можем натыкаться на проблемы. Например, не существует директории или файла, файл закрыт для записи, не хватает прав на его модификацию.
Проект поможет увидеть, что код, который обрабатывает ошибки, может превалировать над кодом для выполнения основных задач.
Еще работа с файловой системой – это неотъемлемая часть любого бэкэндового языка. Даже если вы пишете на JavaScript во фронтенде, все равно нужно понимать эти вещи. Поэтому на курсе мы изучим, как работать с файловой системой, и как она устроена внутри. В итоге мы создадим свою файловую систему:
files = new HexletFs();
files.mkdirpSync('/etc/nginx');
files.mkdirpSync('/etc/init');
files.mkdirpSync('/etc/bashrc');
files.readdirSync('/etc');
// [nginx, init, bashrc]
const body = 'directives';
files.writeFileSync('/etc/nginx/nginx.conf', body);
Сразу обратим внимание, что у каждого метода, который используется в нашей библиотеке, в конце суффикс Sync. NodeJS дает инструменты для работы с асинхронными операциями, но в этом курсе мы будем затрагивать только синхронные операции. С тем, как работать в асинхронном режиме, мы познакомимся в следующем курсе.
Применение
Библиотека, которую мы будем разрабатывать на этом курсе, будет нужна не только для обучения. Такие библиотеки используются в реальности.
Благодаря тому, что наша библиотека не работает с реальной файловой системой, а хранит все данные в памяти — это дает преимущества:
- Ускорение работы
- Устранение нежелательных побочных эффектов
Бывают ситуации, когда при разработке можно не создавать файлы, а хранить их в памяти. Это позволяет работать быстро и устранять нежелательные побочные эффекты.
Когда в тестах мы работаем с файловой системой, то при активном создании и перезаписи файлов мы можем получить неконсистентное состояние с артефактами от предыдущих запусков. Но если мы работаем с файловой системой в памяти, то эта проблема уходит. В итоге нам не нужно ничего за собой подчищать. Этот способ используется во всех языках и упрощает работу.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.