Разработка
4 урока за 4 года работы в Facebook в качестве разработчика
Мне предстоит еще многому научиться и сильно вырасти, но я надеюсь, что эти личные уроки все еще могут быть полезны.
Я присоединился к Facebook в качестве инженера-программиста в сентябре 2016, и сегодня мой четырехлетний «Faceversary». Я хочу воспользоваться возможностью, чтобы обдумать и систематизировать свои мысли вокруг некоторых из наиболее важных уроков последних четырех лет. Мне еще предстоит многому научиться, но я надеюсь, что и эти мои мысли будут достаточно полезны.
Чтобы внести ясность, я пишу это не потому, что планирую уйти. Я пишу это, потому что интроспективное размышление через письмо — это то, как я лучше всего усваиваю свои знания и понимаю свой рост.
В этой компании полно самых выдающихся людей из всех слоев общества, и я постоянно трепещу перед тем, как мне повезло находиться с ними одной комнате.
Я начал работать в одной из команд Messenger в Менло-Парке. Через полгода наша команда распалась. Я переехал в Нью-Йорк, чтобы присоединиться к команде Instagram Search and Explore в качестве iOS-разработчика. Я выбрал Нью-Йорк, потому что хотел разнообразия (тут не все, кого вы встречаете, разбираются в технологиях), четырех прекрасных времен года и энергии настоящей городской жизни (поездка из Сан-Франциско в Менло-Парк — это не то).
Я остаюсь в Instagram уже 3.5 года и работал над различными функциями в области обнаружения, исследования, поиска, страниц мест, страниц хештегов, историй, сохранения, коллекций, поиска по ключевым словам, целостности и конфиденциальности, а в последнее время — покупок.
Вкратце, вот 4 главных урока за 4 года работы в Facebook и Instagram.
Убивайте своих любимых
Я наткнулся на эту цитату в мемуарах Стивена Кинга о писательстве:
Убивайте своих любимых, убивайте своих любимых, даже если это разбивает сердце вашего эгоцентричного маленького писаря, убивайте своих любимых.
Она описывает процесс отделения эмоций от того, что вы написали, это искусство сложения путем вычитания.
Как инженер-программист, вы работаете в быстро меняющейся среде. Функции, которые вы создаете, независимо от того, сколько времени они занимают, сколько людей работали над ними или насколько многообещающими они казались во время планирования, могут быть закрыты до того, как вы закончите, после того, как вы закончите, закончите, но не загрузите в прод, загрузите, но потом выгрузите.
Лучший способ создавать успешные продукты для ваших клиентов — как можно быстрее выполнять итерации и извлекать уроки из тестирования и данных. Мусор — естественный положительный побочный продукт такого подхода к разработке продукта.
В начале своей карьеры я очень гордился тем, что делал, но не умел отделять результат от процесса. Вы можете сделать все правильно, создать идеальный продукт, который вам нравится, без ошибок, а затем узнать, что вашим клиентам он не нравится, или что он влияет на другую не подлежащую обсуждению метрику, которая более приоритетна для компании.
Гордитесь тем, КАК вы создаете свой продукт, но отделите свои эмоции и индивидуальность ОТ продукта. Эмоциональная реакция на результаты отражает незрелость и неспособность принимать рациональные и непредвзятые решения. Неудачный проект считается провалом только в том случае, если вы не извлекли уроки из него или не получили ценной информации о продукте и ваших пользователях.
Любите проблему, а не в свое решение.
Убивайте своих любимых. Не позволяйте своему эго встать на пути команды/компании. Отделите результат от процесса и отделите эмоции от узнавания нового.
Бритва Оккама/Сначала сделайте простое
С инженерной точки зрения философия бритвы Оккама — «простейшее решение обычно является правильным». Это то, к чему я постоянно возвращаюсь как к самому важному принципу решения проблем.
Когда в предлагаемой архитектуре или решении возникает чрезмерная сложность, мне всегда хочется сделать шаг назад, заново оценить то, что мы действительно пытаемся решить или сделать, и подумать, есть ли более простой способ достичь той же цели. Иногда в ходе этого можно понять:
- Проблема, которую вы пытаетесь решить, на самом деле не настоящая.
- Сложное решение — это плохое лекарство, которое на самом деле требует больше времени, чем устранение основной причины.
- То, что вы пытаетесь построить, может быть намного проще, если вы сузите объем решения до одной задачи.
- Запутанная сложность на самом деле является ненужной зависимостью, которая должна быть инкапсулирована и отделена.
Парадигмы программирования, которых я в значительной степени придерживаюсь в своей работе, — это единый источник истины, неизменность, однонаправленный поток данных, классы единой ответственности и инкапсуляция. Все они следуют одному и тому же принципу упрощения работы за счет уменьшения количества переменных и зависимостей. Идеальной архитектуры не существует, но я считаю, что если все уровни моей архитектуры подчиняются этому принципу, система, которую я придумываю, всегда оказывается более надежной, простой для понимания и расширяемой/удаляемой. “Рефакторинг” — моя любимая книга по программированию, которая научила меня многим этим концепциям.
С точки зрения продукта, принцип «сначала делай простое» всегда был главной ценностью, которая больше всего соответствовала основным ценностям Instagram. Мне нравится простота приложения Instagram, без раздутых функций по сравнению с основным приложением Facebook. Я считаю, что это также связано с этой основной идентичностью философии продукта Instagram. Здесь очень активна роль сложения с помощью вычитания, с чем, я думаю, Instagram отлично справляется. Мы постоянно отключаем функции, которые больше не актуальны, для простоты взаимодействия с пользователем и упрощения кодовой базы. Выполнение простых вещей первыми также поможет вам двигаться быстрее.
Недооценка важности софт скилов
Хотя навыки программирования являются основополагающими для того, чтобы стать хорошим инженером-программистом. По моим наблюдениям, лучшие инженеры-программисты — это в основном те, кто сочетает в себе код и очень сильные софт скилы.
Инжиниринг — это не просто создание вещей, это также выяснение того, что на самом деле надо делать, а также убеждение в этом других. Особенно это касается Facebook, где инженеры должны владеть большой частью дорожной карты и понимать направления развития проектов. Вы работаете не только с другими инженерами из разных стеков, но и с дизайнерами, контентом, продуктом, исследованиями, менеджментом, людьми из других команд и т.д. Часто добиться согласованности в том, что делать, бывает сложнее, чем на самом деле сделать это. Вам нужны социальные навыки, чтобы убедиться, что то, что вы создаете, действительно можно отправить пользователям.
Когда дело доходит до создания идей и получения поддержки в отношении того, что делать, я вижу, что лучшие инженеры быстро собирают прототип и передают его в руки людей. В питчинге идеи «легче сделать, чем сказать», а не «легче сказать, чем сделать». Играть с чем-то реальным как минимум в 10 раз лучше, чем просмотр мокапов и обсуждение слов. Хакатоны — отличное место, чтобы размять мышцы.
Когда вы хотите выпустить функцию, вам нужно не только ее создать, но и убедить комнату, полную заинтересованных сторон и членов команды, в том, что она должна дойти до прода, добавив к этому описание пользовательского опыта, надежную поддержку данными и поддержку от руководства.
Софт скилы — это не только вербальное общение, я считаю, что навык письма — самый недооцененный навык в жизни. Это способность кратко и четко перейти к сути дела в письменной форме и писать заметки/документацию, в которой даются ответы на вопросы до того, как они будут заданы. Письмо — ключевой навык, особенно в мире, где общение происходит более асинхронно, а не в реальном времени.
(Экстремальное) владение
В нашей команде/организации у нас есть положение под названием «DRI» — Directly Responsible Individual («Непосредственно ответственное лицо»). Идея состоит в том, чтобы предоставить инженерам полное право владения проектом от планирования до запуска. Цель состоит в том, чтобы расширить возможности людей, создать подотчетность и уменьшить зависимости. Мы избегаем зависимости от менеджеров, которые говорят команде, что делать, и увеличиваем доверие к команде, чтобы самоорганизоваться и выяснить, как действовать дальше. Успешный DRI заставляет менеджеров чувствовать, что они действительно не нужны после передачи права собственности на проект.
Один мой менеджер однажды познакомил меня с книгой Джоко Виллинка «Экстремальное владение», которая хорошо согласуется с этой концепцией и помогла мне значительно вырасти на работе и вне ее.
Ключевое понятие — то, что случается с вами, это не всегда ваша вина, но всегда ваша полная ответственность.
- Я не виноват в том, что кто-то написал плохой коммит, который привел к ошибке, но я обязан подумать: как я могу лучше спроектировать свои компоненты, чтобы эту ошибку вообще было невозможно внедрить? Какие предупреждения или тесты я могу добавить, чтобы выявить регресс раньше?
- Я не виноват, что проект, которым я владею, провалился из-за x, y, z, но я обязан изо всех сил постараться увидеть это заранее, чтобы, возможно, предотвратить это.
- Я не виноват, что товарищ по команде не смог работать на ожидаемом уровне, но вместо того, чтобы обвинять его в провале проекта лучше подумать о том, что я мог сделать, чтобы создать более работоспособную среду или помочь ему. Провал по большей части на мне, а не на нем.
- Я не виноват, что потребности команды не согласуются с моими потребностями в карьерном росте, но я обязан четко общаться и управлять проектами, чтобы обеспечить как мой карьерный рост, так и потребности команды.
- Я не полностью виноват в том, что моя жизнь такая, какая она есть, но я полностью отвечаю за то, чтобы сделать ее такой, какой я хочу.
Возьмите на себя полную ответственность за свою кодовую базу, свой проект, свою карьеру, свою внимательность и свои отношения, чтобы упростить жизнь вам и всем вокруг.
Вывод
Невозможно рассказать все то, что я узнал за последние четыре года, в нескольких абзацах, но я хотел воспользоваться своим собственным советом и сделать этот текст простым и кратким. Мне предстоит еще многому научиться и сильно вырасти, но я надеюсь, что эти личные уроки все еще могут быть полезны!
Из моего карьерного роста в Facebook выделяется один урок, который приносит мне наибольшее удовлетворение — это сосредоточение внимания не на том, что вы сделали, а на том, что вы дали другим возможность делать. Это лучший способ расширить свои возможности и масштаб вашего влияния.
За четыре года работы в Facebook и Instagram я научился сначала делать простые вещи, убивать любимых, ценить социальные навыки и брать на себя полную ответственность за свою работу и свою жизнь. Эти уроки не только помогли мне в карьере, но и оказали огромное влияние на мою жизнь вне работы.
Я закончу эту статью еще одной вещью, моим любимым афоризмом, который я узнал в Facebook, о котором я постоянно думаю и который больше всего поддерживает мои амбиции и приключения моей жизни: