👩🏫 Как практиковать систем дизайн?
Я выработал в себе позицию, что навыки всегда должны стоять выше заученных ответов.
Что это значит?
Я вижу, что много людей при подготовке сильно полагаются на просмотр решений. Их идея состоит в том, что если я просмотрю 100 видео по всем возможным вопросам, то на интервью смогу примерно вспомнить и решить правильно.
На практике же все превращается в кашу. Кандидат помнит, что должны быть очереди, но не помнит куда их поставить, кандидат говорит в целом правильные вещи, но сильно путается в деталях.
Поэтому видео должны дополнять практику, а не заменять ее.
Как готовлюсь я
Оставим за бортом изучение теории, представим на минуту, что я изучил основы Sql vs Nosql, sharding, balancing, protocols, etc.
Чтобы закрепить полученные знания, я должен научиться мыслить как архитектор. Я нахожу в интернете или придумываю сам себе любую задачу, например реализовать TikTok. Потом нахожу в офисе свободный кабинет с большой доской и начинаю рисовать.
Я иду по порядку
• Определить требования
• Попробовать расчитать нагрузку
• Накидать схемы таблиц и выбрать хранилище
• Нарисовать общую схему работы
• Попробовать найти узкие горлышки и устранить
Во время определения требований, я сам себе задаю вопросы и сам же на них отвечаю. Например, “Нужно ли реализовать комментарии к тик ток видео?”, “Давай пока нет, только лайки, но мы можем вернуться к этому вопросу потом”.
Потом во время решения, я задаю себе вопросы, почему я выбрал ту или иную технологию, могу ли я обосновать выбор?
Я не ограничиваю себя во времени, скорость второстепенный показатель, мне важен именно мыслительный процесс.
Как понять, что я решил правильно?
Главный закон систем дизайна - нет единственного правильного ответа. А это значит, любое решение которое вы придумаете имеет право на жизнь.
Поэтому “Как понять, что я решил правильно?” - неверная постановка вопроса. Точнее будет “Что я не учел при проектировании системы?” “Можно ли было решить оптимальнее с учетом требований?”
После этого я читаю или смотрю видео, как другие люди решают эту задачу. Когда я читаю чужие решения, я хочу понять, где мне не хватило креативности, каких знаний у меня нет, какие подходы я мог применить, но не додумался.
После такого процесса у меня получается небольшой список тем, которые стоит мне поизучать. Это мои зоны роста.
Каждый раз проходя такой круг, я как бы калибрую сам себя. С каждым разом нарабатываю практику и закрываю теоретические пробелы.
Ставь 🔥 - если нравится решать system design задачки
Если не нравится, то 🤮
Post #368
1.64K
- 🔥 48
- ❤ 10
- 👍 7