0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>24 мар 2022</li>
2
<ul><li>24 мар 2022</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><h2>Эмиль Шарифуллин из "Яндекса": "Больше всего в работе мне нравится сложность"</h2>
4
</ul><h2>Эмиль Шарифуллин из "Яндекса": "Больше всего в работе мне нравится сложность"</h2>
5
<p>Как выглядит рабочий день инфраструктурного инженера в корпорации, какие задачи он решает и как устроиться сеньором в "Яндекс".</p>
5
<p>Как выглядит рабочий день инфраструктурного инженера в корпорации, какие задачи он решает и как устроиться сеньором в "Яндекс".</p>
6
<p>Иллюстрация: Imgix / Unsplash / Дима Руденок для Skillbox Media</p>
6
<p>Иллюстрация: Imgix / Unsplash / Дима Руденок для Skillbox Media</p>
7
<p>Журналист, коммерческий автор и редактор. Пишет про IT, цифровой маркетинг и бизнес. Сайт:<a>darovska.com</a>.</p>
7
<p>Журналист, коммерческий автор и редактор. Пишет про IT, цифровой маркетинг и бизнес. Сайт:<a>darovska.com</a>.</p>
8
<p>Разработчик инфраструктурных сервисов. Работает в "Яндексе" в сервисе управляемых баз данных. Увлекается воркаутом, практической стрельбой, сноубордом, вокалом, гитарой.</p>
8
<p>Разработчик инфраструктурных сервисов. Работает в "Яндексе" в сервисе управляемых баз данных. Увлекается воркаутом, практической стрельбой, сноубордом, вокалом, гитарой.</p>
9
<p>Я делю всю разработку на бизнес-разработку и инфраструктурную - это моё видение мира. Инфраструктурная разработка - это всё то, что вы делаете для разработчиков, а бизнес-разработка - это всевозможные сервисы для конечных пользователей.</p>
9
<p>Я делю всю разработку на бизнес-разработку и инфраструктурную - это моё видение мира. Инфраструктурная разработка - это всё то, что вы делаете для разработчиков, а бизнес-разработка - это всевозможные сервисы для конечных пользователей.</p>
10
<p>Сам я работаю в Yandex Cloud, а наша команда занимается управляемыми базами данных <a>Redis</a>и <a>MongoDB</a>. Суть управляемых баз данных в том, что клиент избавляется от необходимости настройки и администрирования СУБД для своих проектов, потому что мы предоставляем ему развёрнутую и рабочую базу данных на своих мощностях.</p>
10
<p>Сам я работаю в Yandex Cloud, а наша команда занимается управляемыми базами данных <a>Redis</a>и <a>MongoDB</a>. Суть управляемых баз данных в том, что клиент избавляется от необходимости настройки и администрирования СУБД для своих проектов, потому что мы предоставляем ему развёрнутую и рабочую базу данных на своих мощностях.</p>
11
<p>У "Яндекса" есть несколько дата-центров в России и один в Финляндии - на собственных серверах, которые производят в Китае и Тайване, а проектируют полностью внутри компании, под свои нужды. Приоритеты - энергоэффективность и удовлетворение потребностей.</p>
11
<p>У "Яндекса" есть несколько дата-центров в России и один в Финляндии - на собственных серверах, которые производят в Китае и Тайване, а проектируют полностью внутри компании, под свои нужды. Приоритеты - энергоэффективность и удовлетворение потребностей.</p>
12
<p>В больших компаниях, как правило, существуют разные уровни взаимодействия сотрудников с дата-центрами. Те, кто пишет для них софт, нечасто там появляются и даже могут не особо представлять, как выглядят железки, на которых этот софт запускается. Мои сервисы не слишком низкоуровневые, поэтому сам я в дата-центры не езжу.</p>
12
<p>В больших компаниях, как правило, существуют разные уровни взаимодействия сотрудников с дата-центрами. Те, кто пишет для них софт, нечасто там появляются и даже могут не особо представлять, как выглядят железки, на которых этот софт запускается. Мои сервисы не слишком низкоуровневые, поэтому сам я в дата-центры не езжу.</p>
13
<p>Общаясь с ребятами, которые специализируются на бизнес-разработке, я выделил для себя несколько ключевых отличий от работы над инфраструктурными проектами:</p>
13
<p>Общаясь с ребятами, которые специализируются на бизнес-разработке, я выделил для себя несколько ключевых отличий от работы над инфраструктурными проектами:</p>
14
<p><strong>Предметно-ориентированное проектирование - DDD.</strong>В инфраструктурной разработке оно не используется, а вот в бизнес-разработке применяется довольно часто: реальный мир сложен, и DDD позволяет вам хоть как-то его изучить, чтобы потом на этом описании строить систему. В инфраструктурной разработке требования более формальные и строгие, потому что сервера всегда работают так, как должны и как вы этого от них ожидаете: физику или computer science никто не отменял. У них не так много краевых случаев и исключений, которые постоянно проявляются в обычной жизни. Кстати, именно поэтому я и не люблю бизнес-разработку: там приходится описывать и пытаться формализовать сложные процессы реального мира, взаимодействие людей, а в инфраструктурных проектах сложность заключается в алгоритмах, законах физики и тому подобном.</p>
14
<p><strong>Предметно-ориентированное проектирование - DDD.</strong>В инфраструктурной разработке оно не используется, а вот в бизнес-разработке применяется довольно часто: реальный мир сложен, и DDD позволяет вам хоть как-то его изучить, чтобы потом на этом описании строить систему. В инфраструктурной разработке требования более формальные и строгие, потому что сервера всегда работают так, как должны и как вы этого от них ожидаете: физику или computer science никто не отменял. У них не так много краевых случаев и исключений, которые постоянно проявляются в обычной жизни. Кстати, именно поэтому я и не люблю бизнес-разработку: там приходится описывать и пытаться формализовать сложные процессы реального мира, взаимодействие людей, а в инфраструктурных проектах сложность заключается в алгоритмах, законах физики и тому подобном.</p>
15
<p><strong>Сложные, индивидуальные наукоёмкие задачи.</strong>В инфраструктурной разработке их приходится решать гораздо чаще, чем в бизнес-разработке, большинство задач в которой, как часто шутят программисты, - перекладывание JSON из запроса в базу данных и обработка их по правилам из DDD.</p>
15
<p><strong>Сложные, индивидуальные наукоёмкие задачи.</strong>В инфраструктурной разработке их приходится решать гораздо чаще, чем в бизнес-разработке, большинство задач в которой, как часто шутят программисты, - перекладывание JSON из запроса в базу данных и обработка их по правилам из DDD.</p>
16
<p><strong>Согласованная работа нескольких серверов.</strong>В инфраструктурной разработке это распространённая задача, и тут много подводных камней: например, очень часто программисты считают сеть и жёсткие диски ненадёжными. Плюс нельзя гарантировать, что вашу программу процессор выполнит именно так, как вы её написали: он может по своему усмотрению подвинуть инструкции или выполнить их в другом порядке.</p>
16
<p><strong>Согласованная работа нескольких серверов.</strong>В инфраструктурной разработке это распространённая задача, и тут много подводных камней: например, очень часто программисты считают сеть и жёсткие диски ненадёжными. Плюс нельзя гарантировать, что вашу программу процессор выполнит именно так, как вы её написали: он может по своему усмотрению подвинуть инструкции или выполнить их в другом порядке.</p>
17
<p>Поэтому приходится копать довольно глубоко и разбираться в самых низкоуровневых нюансах. А в бизнес-разработке программист обычно защищён от этих проблем стеной фреймворков и кучей слоёв абстракции.</p>
17
<p>Поэтому приходится копать довольно глубоко и разбираться в самых низкоуровневых нюансах. А в бизнес-разработке программист обычно защищён от этих проблем стеной фреймворков и кучей слоёв абстракции.</p>
18
<p>Кстати, современные IT-системы так или иначе построены на костылях - просто потому, что есть вещи, которые нельзя реализовать чисто физически. Например, вы не сможете сделать так, чтобы у вас на нескольких серверах было одинаковое с точностью до наносекунд время. Даже если вы их соедините оптоволоконным кабелем, всё равно пройдёт какое-то время, прежде чем сигнал пройдёт от одного сервера до другого. Поэтому такие моменты нужно заранее продумывать.</p>
18
<p>Кстати, современные IT-системы так или иначе построены на костылях - просто потому, что есть вещи, которые нельзя реализовать чисто физически. Например, вы не сможете сделать так, чтобы у вас на нескольких серверах было одинаковое с точностью до наносекунд время. Даже если вы их соедините оптоволоконным кабелем, всё равно пройдёт какое-то время, прежде чем сигнал пройдёт от одного сервера до другого. Поэтому такие моменты нужно заранее продумывать.</p>
19
<p>Я нисколько не умаляю значимость работы программистов, которые пишут бизнес-сервисы, - просто у них свой, особый мир. И я не смог бы войти в бизнес-разработку прямо сейчас, потому что у меня нет для этого релевантного опыта. Зато мне очень интересно разбираться, как и что работает под капотом.</p>
19
<p>Я нисколько не умаляю значимость работы программистов, которые пишут бизнес-сервисы, - просто у них свой, особый мир. И я не смог бы войти в бизнес-разработку прямо сейчас, потому что у меня нет для этого релевантного опыта. Зато мне очень интересно разбираться, как и что работает под капотом.</p>
20
<p>Раньше я разрабатывал инфраструктурные сервисы в Red Hat и контуре CI/CD-системы, системы мониторинга и тому подобное, а сейчас перешёл в сервис управляемых баз данных. Сервис управляемых баз данных - это часть "Яндекс.Облака", которая позволяет максимально просто и удобно развернуть облачную БД и не заморачиваться с поддержкой.</p>
20
<p>Раньше я разрабатывал инфраструктурные сервисы в Red Hat и контуре CI/CD-системы, системы мониторинга и тому подобное, а сейчас перешёл в сервис управляемых баз данных. Сервис управляемых баз данных - это часть "Яндекс.Облака", которая позволяет максимально просто и удобно развернуть облачную БД и не заморачиваться с поддержкой.</p>
21
<p>Клиент просто приходит и говорит, что ему нужна MongoDB или Redis и определённое количество ресурсов, а мы устанавливаем и настраиваем нужные пакеты и выдаём ему готовую рабочую БД.</p>
21
<p>Клиент просто приходит и говорит, что ему нужна MongoDB или Redis и определённое количество ресурсов, а мы устанавливаем и настраиваем нужные пакеты и выдаём ему готовую рабочую БД.</p>
22
<p>В маленьких компаниях инженерам, которые отвечают за DevOps, достаточно построить систему, которая просто работает. В больших же компаниях нужно поднимать масштабируемые системы - они должны работать в тысячах или миллионах экземпляров.</p>
22
<p>В маленьких компаниях инженерам, которые отвечают за DevOps, достаточно построить систему, которая просто работает. В больших же компаниях нужно поднимать масштабируемые системы - они должны работать в тысячах или миллионах экземпляров.</p>
23
<p>При этом базовые навыки всё те же: установить пакет и зависимости, которые нужны для работы приложения. Вот только в небольшом стартапе вы будете всё это поднимать на двух-трёх выделенных серверах или арендованном кластере на Kubernetes, в котором всё сразу запустится.</p>
23
<p>При этом базовые навыки всё те же: установить пакет и зависимости, которые нужны для работы приложения. Вот только в небольшом стартапе вы будете всё это поднимать на двух-трёх выделенных серверах или арендованном кластере на Kubernetes, в котором всё сразу запустится.</p>
24
<p>В больших компаниях всё немного по-другому: вам (а скорее вашим коллегам из отдела инфраструктуры) сначала придётся самостоятельно установить и настроить Kubernetes или другой оркестратор и уже после этого добавить все необходимые приложения и конфигурации. А так так подобных задач в больших компаниях много, то есть сотрудники, которые на фул-тайм занимаются исключительно установкой и настройкой Kubernetes.</p>
24
<p>В больших компаниях всё немного по-другому: вам (а скорее вашим коллегам из отдела инфраструктуры) сначала придётся самостоятельно установить и настроить Kubernetes или другой оркестратор и уже после этого добавить все необходимые приложения и конфигурации. А так так подобных задач в больших компаниях много, то есть сотрудники, которые на фул-тайм занимаются исключительно установкой и настройкой Kubernetes.</p>
25
<p>Мой опыт - на стыке DevOps и программирования. Я плотно занимался DevOps на предыдущей работе, в стартапе, а теперь использую знания и скиллы, чтобы создавать инфраструктурные сервисы для разных компаний.</p>
25
<p>Мой опыт - на стыке DevOps и программирования. Я плотно занимался DevOps на предыдущей работе, в стартапе, а теперь использую знания и скиллы, чтобы создавать инфраструктурные сервисы для разных компаний.</p>
26
<p>И на уровне инструментов это очень разные процессы: например, условный<a>Ansible</a>больше подходит для работы на небольших проектах или в небольших командах, так как поддерживать большие плейбуки и раскатывать их на тысячи серверов довольно сложно, поэтому у нас в команде используется salt и куча внутренних специализированных инструментов. И это распространённая практика - даже в <a>Red Hat</a>, команда которой и разработала Ansible, многие его не используют, потому что он им просто не подходит.</p>
26
<p>И на уровне инструментов это очень разные процессы: например, условный<a>Ansible</a>больше подходит для работы на небольших проектах или в небольших командах, так как поддерживать большие плейбуки и раскатывать их на тысячи серверов довольно сложно, поэтому у нас в команде используется salt и куча внутренних специализированных инструментов. И это распространённая практика - даже в <a>Red Hat</a>, команда которой и разработала Ansible, многие его не используют, потому что он им просто не подходит.</p>
27
<p>День разработчика в разных компаниях проходит примерно одинаково. Вы просыпаетесь, идёте в душ, наливаете кофе и садитесь за работу. Сначала смотрите, что произошло со вчерашнего дня, обновляете почту, проверяете, есть ли проблемы с code review, а дальше пишете код, ходите на встречи, обсуждаете проблемы.</p>
27
<p>День разработчика в разных компаниях проходит примерно одинаково. Вы просыпаетесь, идёте в душ, наливаете кофе и садитесь за работу. Сначала смотрите, что произошло со вчерашнего дня, обновляете почту, проверяете, есть ли проблемы с code review, а дальше пишете код, ходите на встречи, обсуждаете проблемы.</p>
28
<p>Помимо стандартных форматов встреч вроде дейли, у нас в команде есть ещё специальные архитектурные встречи, где мы обсуждаем архитектуру проекта и приоритетные задачи по ней. Плюс у меня есть дежурства, на которых надо следить за инфраструктурой и фиксить возникающие проблемы.</p>
28
<p>Помимо стандартных форматов встреч вроде дейли, у нас в команде есть ещё специальные архитектурные встречи, где мы обсуждаем архитектуру проекта и приоритетные задачи по ней. Плюс у меня есть дежурства, на которых надо следить за инфраструктурой и фиксить возникающие проблемы.</p>
29
<p>На прошлой работе я был тимлидом, и мне ежедневно приходилось созваниваться с другими командами, формулировать большие цели, планировать необходимое железо на год вперёд и выполнять ещё кучу рутинной работы, помимо написания кода. А в "Яндексе" я разработчик - поэтому больше всего времени уходит именно на программирование и не приходится так вовлекаться в менеджерские задачи.</p>
29
<p>На прошлой работе я был тимлидом, и мне ежедневно приходилось созваниваться с другими командами, формулировать большие цели, планировать необходимое железо на год вперёд и выполнять ещё кучу рутинной работы, помимо написания кода. А в "Яндексе" я разработчик - поэтому больше всего времени уходит именно на программирование и не приходится так вовлекаться в менеджерские задачи.</p>
30
<p>Чем я пользуюсь в работе:</p>
30
<p>Чем я пользуюсь в работе:</p>
31
<ul><li>Редактор кода - в моём случае это Visual Studio Code.</li>
31
<ul><li>Редактор кода - в моём случае это Visual Studio Code.</li>
32
<li>Средства коммуникации - в зависимости от компании, это может быть Telegram, Zoom, Slack, электронная почта.</li>
32
<li>Средства коммуникации - в зависимости от компании, это может быть Telegram, Zoom, Slack, электронная почта.</li>
33
<li>Консоль - в ней я "живу" и провожу большую часть операций.</li>
33
<li>Консоль - в ней я "живу" и провожу большую часть операций.</li>
34
<li>Хранилище кода и средства для code review - это могут быть и репозитории, и специализированные инструменты вроде<a>Gerrit</a>. Всё зависит от того, чем привыкла пользоваться команда. Например, в Red Hat ребята, разрабатывающие ядро Linux, обмениваются кодом по электронной почте - отправляют патчи прямо в письмах.</li>
34
<li>Хранилище кода и средства для code review - это могут быть и репозитории, и специализированные инструменты вроде<a>Gerrit</a>. Всё зависит от того, чем привыкла пользоваться команда. Например, в Red Hat ребята, разрабатывающие ядро Linux, обмениваются кодом по электронной почте - отправляют патчи прямо в письмах.</li>
35
<li><a>Docker</a>. Он закрывает потребность во всех остальных инструментах. Если нужна база данных, её можно поднять в Docker, если нужны какие-нибудь средства автоматизации, он и тут выручит. Иногда я даже поднимаю в Docker компилятор или интерпретатор, если необходимо собрать код в конкретной версии. В своё время Docker стал прорывной технологией - и я даже не знаю, как вообще можно без него жить.</li>
35
<li><a>Docker</a>. Он закрывает потребность во всех остальных инструментах. Если нужна база данных, её можно поднять в Docker, если нужны какие-нибудь средства автоматизации, он и тут выручит. Иногда я даже поднимаю в Docker компилятор или интерпретатор, если необходимо собрать код в конкретной версии. В своё время Docker стал прорывной технологией - и я даже не знаю, как вообще можно без него жить.</li>
36
<li><a>Kubernetes</a> - оркестратор, инструмент для разворачивания контейнеров на большом парке серверов на кластере. Он создаёт большой виртуальный кластер и помогает удобно им управлять. Сейчас Kubernetes работает не только с Docker - хотя изначально в Google создавали Kubernetes именно под него. Например, существует инициатива<a>Open Container</a>, которая описывает, как у вас должны запускаться контейнеры и как они должны выглядеть - и Kubernetes её поддерживает. А форк Kubernetes от Red Hat -<a>OpenShift</a> - умеет работать с аналогом Docker от Red Hat, который называется<a>Podman</a>.</li>
36
<li><a>Kubernetes</a> - оркестратор, инструмент для разворачивания контейнеров на большом парке серверов на кластере. Он создаёт большой виртуальный кластер и помогает удобно им управлять. Сейчас Kubernetes работает не только с Docker - хотя изначально в Google создавали Kubernetes именно под него. Например, существует инициатива<a>Open Container</a>, которая описывает, как у вас должны запускаться контейнеры и как они должны выглядеть - и Kubernetes её поддерживает. А форк Kubernetes от Red Hat -<a>OpenShift</a> - умеет работать с аналогом Docker от Red Hat, который называется<a>Podman</a>.</li>
37
<li>Собственные инструменты "Яндекса". Для CI/CD мы используем собственные инструменты или общедоступные решения типа<a>Jenkins</a>. Самописные инструменты появляются эволюционно: сначала ты собираешь небольшой скрипт, чтобы автоматизировать какой-то процесс. Потом ты меняешь его, чтобы он по-разному вёл себя в зависимости от задачи, - а дальше внедряешь в другие команды. Например, у нас есть написанные в "Яндексе" система контроля версий, система сборки, свой репозиторий кода. Конечно, такие решения создаются с оглядкой на стандартные инструменты, и многие команды у них совпадают, однако к ним всё равно приходится некоторое время привыкать.</li>
37
<li>Собственные инструменты "Яндекса". Для CI/CD мы используем собственные инструменты или общедоступные решения типа<a>Jenkins</a>. Самописные инструменты появляются эволюционно: сначала ты собираешь небольшой скрипт, чтобы автоматизировать какой-то процесс. Потом ты меняешь его, чтобы он по-разному вёл себя в зависимости от задачи, - а дальше внедряешь в другие команды. Например, у нас есть написанные в "Яндексе" система контроля версий, система сборки, свой репозиторий кода. Конечно, такие решения создаются с оглядкой на стандартные инструменты, и многие команды у них совпадают, однако к ним всё равно приходится некоторое время привыкать.</li>
38
</ul><p>Я работаю на позиции сеньор-разработчика, а для этого грейда прежде всего важен реальный опыт. Поэтому истории про двадцатилетних тимлидов мне всегда казались немножко смешными: если человек не работал программистом с пятнадцати лет, у него просто не хватит опыта, чтобы заниматься большими системами в двадцать. Итак, что должен знать и уметь сеньор в энтерпрайзе.</p>
38
</ul><p>Я работаю на позиции сеньор-разработчика, а для этого грейда прежде всего важен реальный опыт. Поэтому истории про двадцатилетних тимлидов мне всегда казались немножко смешными: если человек не работал программистом с пятнадцати лет, у него просто не хватит опыта, чтобы заниматься большими системами в двадцать. Итак, что должен знать и уметь сеньор в энтерпрайзе.</p>
39
<p><strong>Алгоритмы.</strong>Сюда я отношу фундаментальные знания алгоритмов, понимание, что такое асимптотика алгоритма, как тот или иной алгоритм будет работать, как устроены распределённые вычисления.</p>
39
<p><strong>Алгоритмы.</strong>Сюда я отношу фундаментальные знания алгоритмов, понимание, что такое асимптотика алгоритма, как тот или иной алгоритм будет работать, как устроены распределённые вычисления.</p>
40
<p><strong>Архитектура и насмотренность в разных технологиях.</strong>На предыдущей работе я сам гонял кандидатов по архитектуре и называю это "собеседованиями на сеньора" - потому что понимание архитектуры сразу показывает реальный уровень разработчика. Даже если он легко щёлкает самые заковыристые алгоритмы, но при этом не умеет проектировать системы, он не сеньор.</p>
40
<p><strong>Архитектура и насмотренность в разных технологиях.</strong>На предыдущей работе я сам гонял кандидатов по архитектуре и называю это "собеседованиями на сеньора" - потому что понимание архитектуры сразу показывает реальный уровень разработчика. Даже если он легко щёлкает самые заковыристые алгоритмы, но при этом не умеет проектировать системы, он не сеньор.</p>
41
<p>Ко мне приходили кандидаты, которые проработали 10 лет в одной компании и выросли там от джуниора до сеньора. И все десять лет они занимались одним проектом - да, в нём они разбираются прекрасно, но, когда спрашиваешь у них, как построить какую-то другую систему, они не могут выйти за рамки технологий, которые использовали на протяжении 10 лет. Просто потому, что знают только эти технологии. У них даже появляется некий карго-культ: следовать по определённому маршруту, даже если это далеко не идеальное решение.</p>
41
<p>Ко мне приходили кандидаты, которые проработали 10 лет в одной компании и выросли там от джуниора до сеньора. И все десять лет они занимались одним проектом - да, в нём они разбираются прекрасно, но, когда спрашиваешь у них, как построить какую-то другую систему, они не могут выйти за рамки технологий, которые использовали на протяжении 10 лет. Просто потому, что знают только эти технологии. У них даже появляется некий карго-культ: следовать по определённому маршруту, даже если это далеко не идеальное решение.</p>
42
<p>А нужен разносторонний опыт, и я думаю, его можно получить, если поработать в разных компаниях. Тогда разработчик сможет увидеть разные решения и технологии, развить хорошую насмотренность. При этом технологии в этих компаниях не должны быть одинаковыми - это поможет разработчику быстро переходить со стека на стек, осваивать новые инструменты и практики.</p>
42
<p>А нужен разносторонний опыт, и я думаю, его можно получить, если поработать в разных компаниях. Тогда разработчик сможет увидеть разные решения и технологии, развить хорошую насмотренность. При этом технологии в этих компаниях не должны быть одинаковыми - это поможет разработчику быстро переходить со стека на стек, осваивать новые инструменты и практики.</p>
43
<p>Например, мне как-то понадобился<a>ZooKeeper</a>. До этого я никогда с ним не работал, но за день прочитал документацию, посмотрел, какие алгоритмы используются внутри, и тут же начал его использовать. Скажу так: чтобы базово изучить любую технологию и написать простые приложения, достаточно одного-двух дней. А через пару месяцев практики вы уже будете неплохо разбираться в новой технологии и чувствовать себя уверенно (ну, кроме Kubernetes, там годами можно копаться в его устройстве).</p>
43
<p>Например, мне как-то понадобился<a>ZooKeeper</a>. До этого я никогда с ним не работал, но за день прочитал документацию, посмотрел, какие алгоритмы используются внутри, и тут же начал его использовать. Скажу так: чтобы базово изучить любую технологию и написать простые приложения, достаточно одного-двух дней. А через пару месяцев практики вы уже будете неплохо разбираться в новой технологии и чувствовать себя уверенно (ну, кроме Kubernetes, там годами можно копаться в его устройстве).</p>
44
<p>Единственная технология, к которой я сильно привязан, - это язык Go. Мне он очень нравится, я дичайше кайфую от него и даже проводил<a>курс по Go</a>. При всякой возможности его рекламирую и агитирую всех писать на Go.</p>
44
<p>Единственная технология, к которой я сильно привязан, - это язык Go. Мне он очень нравится, я дичайше кайфую от него и даже проводил<a>курс по Go</a>. При всякой возможности его рекламирую и агитирую всех писать на Go.</p>
45
Доклад Эмиля "Расширение Python с помощью компилируемых языков"<p>На мой взгляд, для инфраструктурных проектов Go сейчас, наверное, один из самых подходящих языков. Он позволяет писать кучу всего - да те же Kubernetes и Docker написаны на нём, а это уже о многом говорит.</p>
45
Доклад Эмиля "Расширение Python с помощью компилируемых языков"<p>На мой взгляд, для инфраструктурных проектов Go сейчас, наверное, один из самых подходящих языков. Он позволяет писать кучу всего - да те же Kubernetes и Docker написаны на нём, а это уже о многом говорит.</p>
46
<p><strong>Софт-скиллы.</strong>Тут интересная ситуация. В нулевых софт-скиллы были не так важны, если человек гениально пишет код. Но в какой-то момент компании поняли, что это не всегда оправданно. Программирование - это командная работа: если завтра гениальный разработчик уйдёт из компании, кто будет дописывать и поддерживать его гениальный код? А когда у вас есть сильная команда, вы застрахованы от этой проблемы.</p>
46
<p><strong>Софт-скиллы.</strong>Тут интересная ситуация. В нулевых софт-скиллы были не так важны, если человек гениально пишет код. Но в какой-то момент компании поняли, что это не всегда оправданно. Программирование - это командная работа: если завтра гениальный разработчик уйдёт из компании, кто будет дописывать и поддерживать его гениальный код? А когда у вас есть сильная команда, вы застрахованы от этой проблемы.</p>
47
<em>Изображение: кадр из рекламы Gillette / Skillbox Media</em><p>Чем выше вы поднимаетесь по карьерной лестнице, тем большую роль начинают играть софт-скиллы - потому что и коммуницировать придётся всё больше и больше. Если<a>джуниор</a>коммуницирует только со своим непосредственным руководителем, то мидл уже обсуждает задачи и решения с коллегами. Тимлид и вовсе выполняет менеджерские обязанности, а значит, коммуникации занимают основную часть его рабочего времени.</p>
47
<em>Изображение: кадр из рекламы Gillette / Skillbox Media</em><p>Чем выше вы поднимаетесь по карьерной лестнице, тем большую роль начинают играть софт-скиллы - потому что и коммуницировать придётся всё больше и больше. Если<a>джуниор</a>коммуницирует только со своим непосредственным руководителем, то мидл уже обсуждает задачи и решения с коллегами. Тимлид и вовсе выполняет менеджерские обязанности, а значит, коммуникации занимают основную часть его рабочего времени.</p>
48
<p>Когда я был тимлидом, менеджментом приходилось заниматься больше, чем программированием. А мне нравятся именно инженерные задачи, и необходимость постоянных коммуникаций - написать людям, создать встречу, сходить на встречу - просто утомила. Поэтому я ушёл обратно в разработку.</p>
48
<p>Когда я был тимлидом, менеджментом приходилось заниматься больше, чем программированием. А мне нравятся именно инженерные задачи, и необходимость постоянных коммуникаций - написать людям, создать встречу, сходить на встречу - просто утомила. Поэтому я ушёл обратно в разработку.</p>
49
<p>Чтобы получить оффер на позицию сеньор-разработчика инфраструктурных сервисов в крупную компанию вроде "Яндекса", придётся пройти несколько<a>собеседований</a>.</p>
49
<p>Чтобы получить оффер на позицию сеньор-разработчика инфраструктурных сервисов в крупную компанию вроде "Яндекса", придётся пройти несколько<a>собеседований</a>.</p>
50
<p><strong>Базовые знания.</strong>На первом интервью я рассказал о себе и решил банальную алгоритмическую задачу. Ещё меня спрашивали про устройство операционных систем и UNIX в частности, проверяли, насколько хорошо я разбираюсь в computer science, задавали вопросы по SQL. Это всё - база, без которой на высоких позициях работать невозможно.</p>
50
<p><strong>Базовые знания.</strong>На первом интервью я рассказал о себе и решил банальную алгоритмическую задачу. Ещё меня спрашивали про устройство операционных систем и UNIX в частности, проверяли, насколько хорошо я разбираюсь в computer science, задавали вопросы по SQL. Это всё - база, без которой на высоких позициях работать невозможно.</p>
51
<em>Фото: личный архив Эмиля Шарифуллина</em><p><a>Junior-разработчик</a>, наверное, может писать код на C#, не зная, что у него под капотом и как работает его код, как создаются те или иные соединения, как происходит сетевое взаимодействие. Он просто посылает HTTP-запрос или обрабатывает HTTP-запросы на своём веб-сервисе, и всё.</p>
51
<em>Фото: личный архив Эмиля Шарифуллина</em><p><a>Junior-разработчик</a>, наверное, может писать код на C#, не зная, что у него под капотом и как работает его код, как создаются те или иные соединения, как происходит сетевое взаимодействие. Он просто посылает HTTP-запрос или обрабатывает HTTP-запросы на своём веб-сервисе, и всё.</p>
52
<p>Но когда вы разработчик более высокого уровня, нужно понимать, что HTTP-запросы - это несколько слоёв абстракции, а значит, на любом из этих слоёв могут возникнуть проблемы. Банально могут закончиться лимиты на открытый файловый дескриптор, или в сети будут неполадки, пакеты могут теряться. Такие нюансы важно понимать, чтобы разрабатывать отказоустойчивые системы, а не просто "писать код".</p>
52
<p>Но когда вы разработчик более высокого уровня, нужно понимать, что HTTP-запросы - это несколько слоёв абстракции, а значит, на любом из этих слоёв могут возникнуть проблемы. Банально могут закончиться лимиты на открытый файловый дескриптор, или в сети будут неполадки, пакеты могут теряться. Такие нюансы важно понимать, чтобы разрабатывать отказоустойчивые системы, а не просто "писать код".</p>
53
<p><strong>Алгоритмы.</strong>Наверное, всем известно, что в "Яндексе" на одном из этапов найма технические специалисты проходят интервью по алгоритмам. Поэтому я советую прокачивать навык решения алгоритмических задач. Честно скажу: это не мой конёк, есть люди, которые решают такие задачи на раз-два, а я перед собеседованием в "Яндекс" тщательно готовился - например, с помощью<a>LeetCode</a>. Плюс мне помог предыдущий опыт.</p>
53
<p><strong>Алгоритмы.</strong>Наверное, всем известно, что в "Яндексе" на одном из этапов найма технические специалисты проходят интервью по алгоритмам. Поэтому я советую прокачивать навык решения алгоритмических задач. Честно скажу: это не мой конёк, есть люди, которые решают такие задачи на раз-два, а я перед собеседованием в "Яндекс" тщательно готовился - например, с помощью<a>LeetCode</a>. Плюс мне помог предыдущий опыт.</p>
54
Пример задачи с <a>LeetCode</a><em>Скриншот: Skillbox Media</em><p><strong>Архитектура.</strong>Мне очень понравилось, что на собеседовании давали абстрактную задачу - в моём понимании именно так выглядит правильное интервью на сеньорскую позицию.</p>
54
Пример задачи с <a>LeetCode</a><em>Скриншот: Skillbox Media</em><p><strong>Архитектура.</strong>Мне очень понравилось, что на собеседовании давали абстрактную задачу - в моём понимании именно так выглядит правильное интервью на сеньорскую позицию.</p>
55
<p>В моей картине мира Junior - это тот, кому дают чётко описанную задачу и говорят, что сделать, а он пишет для этого код. Middle уже может самостоятельно написать какой-то функционально законченный блок программы, выбрать для этого подходящие методы. А Senior берётся за вызовы из реального мира: ему просто обозначают проблему, а он выбирает для её решения конкретные технологии, стек, архитектуру, системы.</p>
55
<p>В моей картине мира Junior - это тот, кому дают чётко описанную задачу и говорят, что сделать, а он пишет для этого код. Middle уже может самостоятельно написать какой-то функционально законченный блок программы, выбрать для этого подходящие методы. А Senior берётся за вызовы из реального мира: ему просто обозначают проблему, а он выбирает для её решения конкретные технологии, стек, архитектуру, системы.</p>
56
<p>Пример абстрактной задачи на архитектуру - спроектировать сервис, который будет выдавать промокоды. Это задача реального мира. Вот как стоит подходить к решению таких задач на собеседовании:</p>
56
<p>Пример абстрактной задачи на архитектуру - спроектировать сервис, который будет выдавать промокоды. Это задача реального мира. Вот как стоит подходить к решению таких задач на собеседовании:</p>
57
<p>1. Проанализировать цель и попытаться определить подводные камни. Чтобы это понять, нужно задать уточняющие вопросы: например, определены ли метрики сервисов, какие будут нагрузки, кто будет пользоваться сервисом, есть ли SLO/SLI/SLA.</p>
57
<p>1. Проанализировать цель и попытаться определить подводные камни. Чтобы это понять, нужно задать уточняющие вопросы: например, определены ли метрики сервисов, какие будут нагрузки, кто будет пользоваться сервисом, есть ли SLO/SLI/SLA.</p>
58
<p>2. Проанализировать, что именно важно для пользователя. Например, для нашей задачи это чтобы запрос на выдачу промокода был всегда работоспособен и чтобы запросы не терялись, а также промокоды не выдавались одному и тому же пользователю повторно. Смысл в том, что сначала вы определяете требования, а потом, в зависимости от требований, начинаете проектировать архитектуру.</p>
58
<p>2. Проанализировать, что именно важно для пользователя. Например, для нашей задачи это чтобы запрос на выдачу промокода был всегда работоспособен и чтобы запросы не терялись, а также промокоды не выдавались одному и тому же пользователю повторно. Смысл в том, что сначала вы определяете требования, а потом, в зависимости от требований, начинаете проектировать архитектуру.</p>
59
<p>Если у вас есть опыт, то вы сразу определите слабые места сервиса. Например, два человека с разницей в пару наносекунд могут прислать запрос на промокод. В этом случае может возникнуть канонический пример гонки данных: сервис возьмёт первый попавшийся код, который ему выдаст база данных, и отправит его сразу двум пользователям. В результате у кого-то из них промокод не сработает. Чтобы это исправить, надо синхронизировать процесс и использовать специальные решения: транзакции или сервисы распределённого консенсуса.</p>
59
<p>Если у вас есть опыт, то вы сразу определите слабые места сервиса. Например, два человека с разницей в пару наносекунд могут прислать запрос на промокод. В этом случае может возникнуть канонический пример гонки данных: сервис возьмёт первый попавшийся код, который ему выдаст база данных, и отправит его сразу двум пользователям. В результате у кого-то из них промокод не сработает. Чтобы это исправить, надо синхронизировать процесс и использовать специальные решения: транзакции или сервисы распределённого консенсуса.</p>
60
<p>3. Оценить, сколько серверов понадобится, и рассказать, как именно вы эту оценку делаете. Можете ли вы представить, сколько у вас в запросе будет данных, какая будет нагрузка, понимаете ли вы, как работают кодировки и сколько символов помещается в тот или иной запрос.</p>
60
<p>3. Оценить, сколько серверов понадобится, и рассказать, как именно вы эту оценку делаете. Можете ли вы представить, сколько у вас в запросе будет данных, какая будет нагрузка, понимаете ли вы, как работают кодировки и сколько символов помещается в тот или иной запрос.</p>
61
<p>4. Порассуждать вслух: спрогнозировать нагрузку и количество запросов, которые вы сможете обрабатывать в секунду, дать верную оценку можно только исходя из опыта.</p>
61
<p>4. Порассуждать вслух: спрогнозировать нагрузку и количество запросов, которые вы сможете обрабатывать в секунду, дать верную оценку можно только исходя из опыта.</p>
62
<p>5. Рассказать, как всё это задеплоить и заставить корректно работать. Многие кандидаты говорят, что надо арендовать сервер и развернуть Docker Compose. И им задают следующий вопрос: "А что делать, если завтра ляжет сервер или сам сервис?" Так интервьюер смотрит, умеет ли соискатель решать проблемы, был ли у него релевантный опыт. В зависимости от опыта, человек может предложить разместить сервис в <a>Kubernetes</a>, сделать геораспределение, геошардирование данных. Или использовать AnyCast, например, чтобы запросы на конкретный IP-адрес шли в ближайший дата-центр. Решений может быть много. Вопрос в том, знает ли кандидат о них.</p>
62
<p>5. Рассказать, как всё это задеплоить и заставить корректно работать. Многие кандидаты говорят, что надо арендовать сервер и развернуть Docker Compose. И им задают следующий вопрос: "А что делать, если завтра ляжет сервер или сам сервис?" Так интервьюер смотрит, умеет ли соискатель решать проблемы, был ли у него релевантный опыт. В зависимости от опыта, человек может предложить разместить сервис в <a>Kubernetes</a>, сделать геораспределение, геошардирование данных. Или использовать AnyCast, например, чтобы запросы на конкретный IP-адрес шли в ближайший дата-центр. Решений может быть много. Вопрос в том, знает ли кандидат о них.</p>
63
<p><strong>Собеседование с командой.</strong>Это последний этап, на котором надо рассказать о себе, понять, насколько у вас получится найти общий язык с командой, есть ли совпадение по культуре. Скорее всего, вас спросят, какие задачи вы раньше решали и как они коррелируют с процессами в команде "Яндекса".</p>
63
<p><strong>Собеседование с командой.</strong>Это последний этап, на котором надо рассказать о себе, понять, насколько у вас получится найти общий язык с командой, есть ли совпадение по культуре. Скорее всего, вас спросят, какие задачи вы раньше решали и как они коррелируют с процессами в команде "Яндекса".</p>
64
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
64
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>