У разработчиков должен быть опыт системного администрирования
Перевод статьи Professor Beekums http://blog.professorbeekums.com/2017/01/software-developers-should-have.html
Быть разработчиком программного обеспечения и быть системным администратором — очень разные вещи. Многие объединяют эти профессии в одну, но на самом деле набор необходимых навыков совпадает только отчасти. Разработчики пишут код. Сисадмины настраивают системы компьютера таким образом, что код работает.
И то, и другое необходимо. Программное обеспечение представляет ценность для пользователей, таких как мы с вами, но оно не может существовать без среды, в которой его запускают.
Многие компании предпочитают распределять разработчиков и сисадминов по разным командам. Теоретически, в этом есть логика. Если имеется два разных набора навыков для двух разных профессий, почему бы не сделать две отдельные команды?
Самая большая загвоздка в том, что при создании программ ключевую роль играет контекст. Разработчики должны понимать среду, в которой будет запускаться их код, иначе они могут написать его не так, как нужно. По аналогии: представьте, что перед вами стоит задача построить здание, не зная, где оно должно быть расположено. Вы можете спроектировать вполне сносное здание.
А потом кто-то возьмёт ваш чертёж и построит дом…на склоне.
Упс.
Если у разработчика нет никакого представления о работе системного администратора, он напишет код, который будет работать только в теории. Разработчики обычно пишут программы на своём одном-единственном компьютере. Но большинство программ в интернете запускается на многих компьютерах. Крупные сайты, такие как Google или Facebook, работают на тысячах и тысячах компьютеров. Но, как и наше теоретическое здание, которое отлично выглядело на плоской поверхности, теоретический код может потерпеть полный крах, как только станет доступным для пользователей. Это может произойти в виде багов или поломки.
Например, представьте сайт, на который вы загружаете изображения, вроде Facebook или Twitter. У Facebook и Twitter так много пользователей, что они просто не могут позволить себе запускаться только на одном компьютере или сервере. Поэтому у них настроено множество серверов, раздающих вам их сайт.
Почему это так важно? Помните, мы упоминали, что разработчики зачастую пишут код на одном компьютере. Они могли бы написать код, который сохраняет изображение на жёсткий диск сервера, на котором запущена программа. Но когда код доходит до обычного пользователя вроде нас с вами, возникают проблемы.
Если есть три веб-сервера, а изображение сохранено на жёстком диске только для одного из них, то двое из трёх пользователей его попросту не увидят. Если у вас 300 друзей, только 100 из них смогут просмотреть изображение, которое вы загрузили. Что за ужасный сервис!
Исправить это можно, используя распределённую файловую систему, доступную для всех серверов.
А вот разработчик, не имеющий опыта, этого не поймёт. Он напишет код только на компьютере. Изображение появится в 100% случаев, когда он будет тестировать код на своём же компьютере. И только когда код начнёт использоваться реальными людьми на веб-серверах, проблема проявит себя.
Существуют десятки, если не сотни, других примеров. Кто-то должен объяснять разработчикам, как оно работает, но когда тебе что-то объяснили, это всё равно далеко не так эффективно, как если бы ты понял это на собственном опыте. Опыт эффективен, когда ты его получаешь непосредственно. Опыт способствует более глубокому пониманию.
И это понимание поможет избежать ошибок ещё в процессе работы. Разработчик без опыта системного администрирования обречён попасть в этот порочный круг:
- Он пишет код
- Он перекидывает его через стену для обзора и тестирования
- Ему возвращают код для исправления ошибок.
Обычно это достаточно времязатратный процесс.
Всё может пойти ещё хуже, потому что иногда сисадмины не проверят код разработчика. А это значит, что первыми баги увидят пользователи. Такие вещи тоже достаточно сложно отслеживать, потому что на компьютере разработчика всё будет выглядеть как нельзя лучше. И воссоздать проблему будет нелегко.
Признаюсь, я ненавижу делать работу сисадминов. Я знаю, что есть люди, которым она приносит удовольствие, но для меня это только неиссякаемый источник разочарования. Эта работа требует навыков, отличающихся от написания кода, но она стоит на моём пути к тому, чтобы предоставить людям код, который я написал.
Как бы то ни было, я делаю эту работу. Я делаю её, потому что контекст помогает мне писать лучший код. Я делаю это, потому что код, который запускается только на моём компьютере, никому не нужен. Важен только код, работающий на живых веб-серверах для всех остальных. Просто писать код — значит делать только половину работу, которую должен выполнять разработчик программного обеспечения.
Конец перевода.
От меня
На самом деле распределенная файловая система — не всегда хороший вариант. К тому же заниматься архитектурой приложения должен архитектор, а не сисадмин. Но я на 100% согласен с утверждением, что девелоперы должны понимать, как их код работает на проде. Связанный с продом девелопер вынужден разобраться с тем, как надо устроить мониторинг, деплой, как решить реальные проблемы эксплуатации, которые могут возникнуть. В итоге он начинает понимать, как именно работает его приложение, что отлично сказывается как на экспертизе, так и на стабильности и безопасности.