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

Особенно, если вы ищете должность старшего уровня.

Как и многое в разработке программного обеспечения, вопросы на собеседовании не имеют ничего общего с реальностью.

Как проходит собеседование

Интервьюер дает вам абстрактное описание услуги. Ожидается, что вы придумаете ответ самостоятельно.

На собеседовании нужно задавать вопросы. В общем, собрать требования.

  • Что должно делать приложение?
  • Как люди будут его использовать?
  • Сколько человек будет его использовать?
  • Есть ли интенсивные нагрузки на приложение?

Обычно у интервьюера есть несколько идей относительно решения, которое он ожидает увидеть.

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

Это пугающее интервью. По сути, вы должны разработать производительный сервис всего за несколько минут разговоров/размышлений об этом.

Одно только ограничение по времени нереально.

Дизайн системы в реальном мире

Что-то работает медленно или плохо масштабируется в вашем приложении.

Там уже есть код, и вам нужно понять, как он работает. Сбор требований — это процесс выяснения, кто использует существующий сервис и что с ним не так.

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

Теперь вам нужно придумать предложенный план. Итак, вы пишете проектную документацию. Обычно у вас есть дни или недели, чтобы изучить, спланировать и записать свои идеи.

В течение этих дней и недель вы будете обсуждать с другими инженерами их идеи. У кого-нибудь есть лучшее решение, чем у вас? Есть ли подход, который вы не рассмотрели?

После того, как вы напишете дизайн-документ, вы поделитесь им с командой. Все ли понимают схему? Какие опасения есть? Как мы можем улучшить его?

Теперь вам нужно спланировать работу по реализации дизайна. Каков план тестирования новых изменений? Как убедиться, что изменение не требует времени простоя? Какие другие команды должны знать об этом дизайне и пересматривать его?

Интервью против реальности

Реальность существенно отличается от интервью.

Подсчитаем отличия:

  • Интервью с нуля, абстрактная новая проблема. Реальность работает в рамках существующего приложения и зависимостей.
  • Сбор требований к интервью — это простые вопросы. Реальность такова, что вам нужно прополоть старый код и поговорить со старшими разработчиками/другими командами, которые знают об этом.
  • Интервью занимает несколько минут с ограничением по времени. Реальность требует дней / недель, чтобы придумать жизнеспособный дизайн системы.
  • На собеседовании вы работаете один. На самом деле проектирование системы требует тесного сотрудничества и требует общения со многими заинтересованными сторонами.
  • В интервью есть словесный план и, возможно, диаграмма или две. На самом деле вам нужно уметь четко написать проектный документ и включить в него отзывы.
  • Интервью предполагает идеальную идею, на месте. Реальность признает, что всегда есть компромиссы, и вам нужно время + несколько участников, чтобы прийти к лучшему решению.
  • Интервью относительно мало заботится о планах тестирования, заполнении существующих данных, предотвращении потери данных во время периодов миграции и развертывании с нулевым временем простоя. На самом деле, это самые сложные части.

Изучение дизайна системы

Я слышал от многих инженеров-программистов, что дизайн системы их пугает. «Я недостаточно знаю, и я боюсь, что меня уволят за то, что я этого не знаю!»

Вот правда…

Вам, вероятно, потребуется знать основы проектирования системы, чтобы пройти этап собеседования. Вот некоторые ресурсы для интервью по системному дизайну.

Но не пугайтесь и не думайте, что работа действительно такая.

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

Итак, сделайте глубокий вдох. Вас не уволят из-за дизайна системы.

Ежедневный список

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

Присоединяйтесь к Medium за 5 долларов — получите доступ ко всему Medium + поддержите меня и других!