Просто невероятно, как много ты не знаешь. Shopify ценит людей с Т-образными навыками, людей, способных углубиться в свою область знаний, но выходящих за рамки их специальности, чтобы способствовать росту, пониманию и сотрудничеству с другими дисциплинами. Хотя я лично считаю, что обладаю этим набором навыков, я пришел к выводу, что даже когда вы думаете, что много знаете об одном, на самом деле вы этого не знаете, и это одновременно захватывающе и страшно.
Этим летом я работал стажером-программистом в команде API-шаблонов в Shopify. Короче говоря, мне нравится думать о нашей команде как о распорядителях API, мы определяем подход компании к API и работаем с группами разработчиков по всей компании для решения практических проблем проектирования и реализации API. Ради этого поста понимание того, что такое API или какие-либо технические вещи, о которых я упоминаю, не важно, я старался, чтобы уроки, которые я извлек, были довольно абстрактными, чтобы их можно было применить ко всему, что я делаю.
В компьютерном программировании интерфейс прикладного программирования (API) представляет собой набор определений подпрограмм, протоколов и инструментов для создания прикладного программного обеспечения. В общем, это набор четко определенных методов связи между различными программными компонентами. Хороший API упрощает разработку компьютерной программы, предоставляя все строительные блоки, которые затем собираются программистом.
Я начал писать этот пост через полтора месяца после стажировки, но, к сожалению, скорость, с которой я учился, была намного выше, чем скорость, с которой я писал эту статью, поэтому я подумал, что имеет смысл резюмировать все это в конце моей стажировки. Я постоянно задаю себе вопросы, поэтому в этой статье я решил спросить себя: «Как я могу стать лучшим инженером?» и пусть мои ответы будут зависеть от уроков, которые я извлек в Shopify.
Как я могу стать лучшим инженером?
Наставничество и ресурсы, которые предоставляет Shopify, дали мне прекрасную возможность вырасти и стать лучшей версией себя, особенно по моей специальности. Я хочу поделиться шестью уроками, которые я извлек.
Нет черных ящиков
Мне нравится создавать программное обеспечение, особенно приложения, с которыми люди взаимодействуют ежедневно. При создании этих приложений я часто полагался на инструменты, которые помогали мне их создавать. Эти инструменты по большей части созданы другими, и понимание внутренней работы часто является второстепенным. В результате я часто ловил себя на том, что использую инструменты, как если бы они были черным ящиком.
В науке, вычислениях и технике черный ящик - это устройство, система или объект, которые можно рассматривать с точки зрения их входов и выходов (или характеристик передачи), не зная об их внутренней работе. Его реализация «непрозрачная» (черная).
Начиная с Shopify, у меня был небольшой опыт работы с Ruby (Ruby - это язык программирования, который мы используем), но я не работал с ним довольно долгое время. В процессе обучения мой наставник Скотт посоветовал мне действительно сосредоточиться на понимании того, что происходит в коде, который вы пишете, и, что более важно, в коде, который вы используете. Понимание кода, который вы используете и пишете, позволит вам избавиться от избыточности, быть самостоятельным и в целом стать лучшим инженером, потому что вы действительно поймете, что делаете, не говоря уже о том, что запоминание становится намного проще. Побочным эффектом этого является то, что на это уйдет больше времени, но когда вы станете экспертом в предметной области, все станет действительно легко и сэкономит ваше время в долгосрочной перспективе.
Я разговаривал со своим лидером, и мы обсуждали разницу между моей работой младшего разработчика и его работой в качестве лидера. Мне было действительно интересно, главным образом потому, что я хочу знать, как выглядит будущее моей карьеры, и он объяснил, что обычно младший разработчик учится решать проблему правильным способом, в то время как ведущий ищет решение правильной проблемы. Это имеет смысл, потому что, как только вы сможете решить проблему правильным путем, вам нужно будет иметь возможность выбирать, какие проблемы стоит решить. Связав это с идеей черных ящиков, если вы относитесь к вещам как к черным ящикам, это ограничивает вашу перспективу и, как следствие, затрудняет поиск и сравнение с альтернативными решениями вашей проблемы. Если у вас нет достаточно большого пула возможных решений, как вы можете быть уверены, что это правильное решение? По-моему, ты не можешь.
Быть резиновой уткой
Задавать вопросы не раздражает (если это хорошие вопросы, и вы сначала попытались ответить на них сами). Задавать вопросы приносит пользу не только вам, но и тому, кто на них отвечает. В программировании есть такое понятие, как «резиновое утки». Сначала это звучит глупо, но имеет смысл и хорошо работает на практике.
В программной инженерии отладка кода «резиновая утка» или «резиновая утка» - это метод отладки кода. Название является отсылкой к истории из книги «Программист-прагматик», в которой программист будет носить с собой резинового утенка и отлаживать свой код, заставляя себя объяснять его построчно.
Когда вы стажер или даже новый сотрудник, вы стремитесь начать работу и оказать влияние. Это действительно сложно без большого контекста или если вы решаете действительно сложные проблемы. Одна вещь, которая помогла мне набрать скорость, - это быть резиновой уткой для моих коллег. Задавая им вопросы о том, что они делают, просматривая их код и заставляя их объяснять мне свои проблемы, я мог учиться с такой скоростью, которую я бы не получил, если бы не сделал этого. Поступая таким образом, я получаю доступ к частям проблемы, которые, вероятно, не увижу, я вижу их решение и почему они выбрали это решение, которое может повлиять на то, как я буду решать свои проблемы в будущем. Я могу высказать свое мнение, которое помогает мне получить ценный опыт в формулировании технических вопросов и многого другого. В ответ мой коллега получает вторую пару глаз и должен объяснить мне свою проблему, что заставляет их структурировать и организовывать ее в своей голове. Это принесло пользу нам обоим и помогло мне понять, какую проблему следует решать, потому что это дало мне представление о различных проблемах и о том, почему они в настоящее время решаются.
Ваша ментальная кеш-память настолько велика
Престижность моей главе за то, что я вложил в мою голову идею «мысленного тайника», так как это делает название красивым.
В вычислениях кэш - это аппаратный или программный компонент, в котором хранятся данные, поэтому будущие запросы на эти данные могут обслуживаться быстрее; данные, хранящиеся в кэше, могут быть результатом более раннего вычисления или дубликатом данных, хранящихся в другом месте.
Когда я присоединился, я почувствовал, что нужно собрать так много контекста, что будет очень сложно оказать влияние в любое удобное для меня время. Мне были даны задачи в основной кодовой базе Shopify, которые были связаны с вещами, о которых я даже не подозревал. Я начал волноваться, я всегда привык полностью владеть проектом, точно зная, что все делает. Когда я создаю побочные проекты, я, как правило, единственный, кто над ними работает, или я работаю над ними с другом, но проекты все еще достаточно малы, чтобы я мог точно знать, какова цель чего-то в коде. Высказав это Скотту (моему наставнику), он сказал мне, что именно по этой причине Shopify не дает стажерам их собственные проекты для работы. Реальность такова, что если вы не начинаете свою собственную компанию, не работаете над небольшим продуктом или не работаете над побочным проектом, вы будете вносить свой вклад в очень большие кодовые базы и работать с большим количеством людей. Shopify хочет, чтобы их стажеры испытали это на собственном опыте, потому что именно так на самом деле выглядит создание крупного продукта, и это поможет их стажерам вырасти и стать лучшими инженерами.
Для меня это было совершенно внове, и мне пришлось выработать совершенно новый набор навыков, чтобы решать проблемы, связанные с вещами, о существовании которых я не подозревал. Поскольку нужно так много знать, мне было трудно держать все это в голове. Это меня очень беспокоило, потому что иногда мне казалось, что я возвращаюсь назад. Я пришел к выводу, что не знать всего - это нормально, ваш умственный кэш очень велик. Однако самое важное - это знать, как собрать контекст, необходимый для проблемы, и это связано с хорошим детективом. Поэтому я бы посоветовал не сосредотачиваться на запоминании. Во-первых, поймите. Затем сосредоточьтесь на том, чтобы знать, где искать, когда вам нужно.
Несколько вещей, которые я обнаружил, помогли мне сохранить этот кеш:
- Записываю каждый вопрос, который я задавал, и ответ на этот вопрос.
В нашем приложении для обмена сообщениями я просто отправлял себе вопросы, которые задавал, и отвечал сам себе. Это было очень полезно, потому что всякий раз, когда я сталкивался с тем же вопросом или похожим вопросом, я просто возвращался к своим личным сообщениям.
- Организация моих ресурсов / информации о чем-то в одном месте.
Одним из хороших моментов в том, что все мои вопросы и ответы были в приложении для обмена сообщениями, было то, что оно действовало как единый источник истины для любого вопроса, который я задавал. Я обнаружил, что наличие этого единственного источника истины позволяет мне получать доступ к информации намного быстрее, потому что я всегда знал, где искать. Поэтому, основываясь на том, что я сделал с вопросами, я начал распределять вещи по определенным местам. Например, для любой новой проблемы, которую я решал, я создавал новый файл заметок в своем приложении для создания заметок и просто выкидывал в мозг все, что я обнаружил / сделал во время работы над проблемой. Это значительно упростило возвращение к проблемам и уменьшило пресловутую сосредоточенность и время на корректировку, которые необходимы разработчикам, чтобы вернуться к своей проблеме после того, как что-то отвлекло их от нее. Изображение ниже довольно хорошо описывает то, о чем я говорю:
Интересный факт: этот вопрос о встречах, разрушающих продуктивность, был такой проблемой в Shopify, что во время моего пребывания там появилось новое правило, запрещающее встречи в среду. Это изменение вызвало смешанные чувства, но я знаю, что все разработчики его оценили!
То, что, по вашему мнению, следует делать, не всегда является лучшим
В первые несколько недель мне очень хотелось писать код. Мне казалось, что моя производительность измеряется количеством строк, которые я отправляю, или количеством созданных мной запросов на вытягивание. Когда вы разработчик, при написании кода возникает чувство успеха, что, на мой взгляд, аналогично для многих профессий. Если вы дизайнер и хотите разрабатывать ресурсы, если вы менеджер проекта, то хотите спланировать свой следующий спринт и т. Д. работа или нет, потому что вам кажется, что вы не работаете.
В Shopify я пришел к выводу, что для вас не характерны ваши результаты, потому что часто вещи, которые вы делаете вне своей обычной работы, такие как написание кода, создание ресурсов дизайна и т. Д., Вносят свой вклад в ваши результаты в долгосрочной перспективе. Я имею в виду, что делая вещи, которые, казалось бы, не связаны с вашей работой, вы становитесь более разносторонними (развивая эти навыки высшего класса). С точки зрения разработчика, когда возникает проблема, это может показаться первым инстинктом - написать код для ее решения. Объективно, лучший подход - это когда-нибудь побыть наедине с собой и решить проблему, подумать о проблеме на листе бумаги или белой доске, поговорить об этом с некоторыми людьми, провести небольшое исследование того, как другие люди решили аналогичные проблемы, или даже пойти на прогулка перед тем, как взяться за это. В десяти случаях из десяти выполнение этих действий перед тем, как приступить к делу, поможет вам решить проблему быстрее и лучше. Для меня это означает сосредоточение внимания на нетехнических аспектах вашей работы.
Не бойтесь что-то остановить
Всегда будут вещи, которые кажутся пустой тратой времени. И когда вы действительно думаете, что что-то действительно не заслуживает того времени или усилий, которые вы ему уделяете, мы обычно стараемся прекратить это делать. Разработчики часто называют это байкхеддингом:
Велосипедная прогулка - непропорционально много времени и энергии тратится на незначительную или несущественную деталь более крупного беспокойства. Этот термин был придуман как метафора, чтобы прояснить закон тривиальности Паркинсона. Паркинсон заметил, что комитет, чья работа заключается в утверждении планов атомной электростанции, может тратить большую часть своего времени на относительно неважные, но простые для понимания вопросы, такие как, какие материалы использовать для велосипедного навеса для персонала, пренебрегая при этом дизайном Сама силовая установка, что гораздо важнее, но и его гораздо труднее критиковать конструктивно.
Иногда это действительно легко увидеть, когда вы прыгаете на велосипеде. В приведенном выше примере очевидно, что строительство атомной электростанции намного важнее, чем выбор материалов для велосипедного навеса для персонала. Но иногда это не так просто увидеть, потому что мы зацикливаемся на маленьких кусочках головоломки, которые мы считаем важными, хотя в общей схеме вещей они не являются. Во время стажировки я испытал это несколько раз и понял, что это плохо для вас и для вашей команды. Иногда, каким бы маленьким ни был навес, он может быть очень сложным. Таким образом, вы тратите еще больше времени на решение сложной проблемы, решение которой имеет небольшое влияние. Когда я оказался в таких ситуациях, мне было трудно остановиться, потому что мне нравится видеть проблемы, над которыми я работаю до конца. Но после того, как я получил совет и узнал о велосипедах, мне стало легче определять, когда я попал в такие ситуации. Так что не бойтесь сделать шаг назад и спросить себя, хорошо ли вы тратите время на выполнение поставленной задачи.
Было бы очень хорошо просто перестать работать над чем-то, когда вы обнаружите, что теряете велосипед. Но, к сожалению, некоторые проблемы нельзя оставлять без внимания (хотя обычно эти проблемы оказывают большее влияние, когда они решаются). Однако, даже если их нельзя оставить без присмотра, вы можете прекратить работу над ними, если вернетесь к ним. Я обнаружил, что застрял на сложной проблеме, которая, если бы была решена, имела бы большое значение. Я долго работал над этим, но под каждым углом я просто не мог понять. Еще через некоторое время Скотт сказал мне прекратить над этим работать. Он сказал мне, что, когда вы застряли, попробуйте решить другую проблему, которая упростит вашу исходную проблему. Это кажется очевидным, но по какой-то причине я не мог позволить исходной проблеме решить эту проблему. из моей головы, и все, что я хотел, это решение. Мне нужно было, чтобы Скотт остановился и сказал мне это. Когда я последовал его совету, я начал видеть успех. Если бы я остановился на этой исходной проблеме, я бы никогда не нашел ее решения, а если бы нашел решение, оно, вероятно, не было бы хорошим. Пытаясь решить подзадачу, я смог найти лучшее решение исходной проблемы и упростить ее решение. Итак, независимо от того, занимаетесь ли вы велосипедом или имеете серьезную проблему, которую вам нужно решить, в которой вы застряли, не бойтесь прекращать работу над ней.
Делитесь, размышляйте, бросайте вызов своей зоне комфорта
Я бы солгал, если бы сказал вам, что мне действительно нравится писать такие сообщения. Но я обнаружил, что когда вы размышляете, это помогает вам думать о том, что вы могли бы сделать лучше и что у вас хорошо получается. Как упоминалось ранее, у меня был преданный наставник. Наставник должен работать с вами и поддерживать вас в вашей работе. Я сидел рядом со своим наставником, Скоттом, но даже несмотря на то, что мы сидели рядом (по большей части я мог спросить его о чем угодно в любое время), у нас все равно были еженедельно один на один, чтобы поговорить о том, как идут дела. На этих встречах мы говорили и размышляли о вещах. Для меня это было впервые в рабочей среде, и мне это очень понравилось. Перед каждой встречей я тратил пятнадцать минут на размышления о своих розах и шипах на прошлой неделе и о бутонах на предстоящей.
Для тех, кто не слышал о Rose, Thorn, Bud. Роза - это хорошее, что случилось, шип - это то, что не было слишком большим, а бутон - это то, чего вы с нетерпением ждете. Когда я раньше играл в эту игру, я всегда ограничивался чем-то одним, но для своих встреч я старался найти по три вещи для каждой. Я обнаружил, что это заставило меня еще больше осознать себя.
Эти встречи были запланированы на тридцать минут, и большую часть времени нас выгоняли из нашей комнаты или уходили со временем, потому что нам было о чем поговорить. Готовность к этим встречам с тем, как я себя чувствую, действительно помогла, потому что я могла поделиться этими чувствами со Скоттом, и он мог дать мне осязаемый совет, чтобы помочь мне. Он действовал как мой щит, и ценность щита не следует недооценивать.
Я никогда по-настоящему не открывался кому-то в рабочей среде, как со Скоттом. Это подтолкнуло мою зону комфорта к разговорам о вещах, которые, как я думал, я делаю хорошо, и даже больше о вещах, которые я думал, что делаю плохо. Трудно сказать людям, что, по вашему мнению, у вас хорошо получается, не создавая впечатление, будто вы не хвастаетесь, и так же трудно сказать кому-то, с чем вы работаете, что, по вашему мнению, у вас плохо получается, это может заставить вас почувствовать себя уязвимым. Однако я понял, что вместе вы должны ценить то, что у вас хорошо получается, и работать над тем, чтобы улучшить то, что у вас плохо получается. Сохранение того, что вы чувствуете внутри себя, не поможет вам.
Летом были и другие сценарии, когда моя зона комфорта была нарушена. Я никогда раньше не выступал с техническими докладами на профессиональном уровне, но мне очень хотелось это сделать. Скотт выступил с докладом на GraphQL Toronto, который я посетил в первые несколько недель, поэтому я тоже был вдохновлен, чтобы попробовать. Тем не менее, Скотт является старшим инженером-программистом и экспертом в GraphQL, поэтому для него было бы разумно поделиться своими знаниями с людьми. Я, с другой стороны, стажер, который работает с GraphQL, но я далек от эксперта, а также довольно нервничаю, выступая перед большой аудиторией. Было такое ощущение, что я ныряю в глубокий конец и не умею плавать. Однако после разговора со Скоттом и менеджером сообщества Shopify (который руководит подобными мероприятиями) они внушили мне веру в то, что я достаточно квалифицирован, чтобы выступить с докладом. И настоящий секрет этих разговоров в том, что даже если вы не являетесь экспертом в данной области, простое выступление действует как катализатор, чтобы сделать вас одним из них.
После выступления я почувствовал огромное чувство достижения, выступил перед множеством людей и не потерпел полного провала. После этого ко мне подходили люди, чтобы поблагодарить и сделать комплименты, людям это действительно понравилось. Итак, из этого опыта я понял, что жить в своей зоне комфорта скучно. И отдача, которую вы получаете от выхода за пределы этой зоны, экспоненциально лучше, чем если бы вы просто оставались в ней. Всегда будет чувство сомнения, но вы просто должны игнорировать его, убедившись, что вы готовы к успеху. Вы можете посмотреть мой доклад в видео ниже:
Мои слайды к докладу можно найти здесь.
Последние мысли
Если бы эта статья еще не была чудовищной, я мог бы продолжать говорить о вещах, которые я узнал в Shopify, потому что это лишь царапина на поверхности. Еще одна тема, которую я хотел осветить, - это то, что я узнал из корпоративной культуры в Shopify. Эта статья получилась довольно длинной, поэтому я решил оставить ее для другого поста, так что следите за этим.
В общем, все, чему я научился, было бы невозможно без поддержки замечательных людей, с которыми я работал и с которыми подружился. Огромный привет моему наставнику Скотту Уолкиншоу. Скотт был в состоянии бросить мне вызов, превышающий мой уровень комфорта, он поставил передо мной сложные проблемы, которые толкали меня, но никогда не заставляли меня чувствовать себя деморализованным, если я ничего не получал. Когда я застрял, он поддержал меня в решении проблемы, но все же позволил решить ее самостоятельно - он просто указал мне правильное направление. Кроме того, мне посчастливилось иметь невероятную сеть поддержки через мою команду, включая Эвана Хьюуса, Криса Батчера, Кияна Азабара и Ника Нойфельда. Спасибо, ребята, за то, что заставили меня почувствовать себя частью команды.
Еще один привет Элли Спирс за то, что она предоставила мне эту возможность. Я отчетливо помню, как вы позвонили мне в пятницу в 19:00 в машине, стоя на парковке, чтобы поделиться новостью о том, что я получил работу. Для меня это был сюрреалистический момент, и вы, поделившись этой новостью с таким же волнением после долгого дня перед выходными, подтвердили мои мысли о Shopify. И последнее, но не менее важное: спасибо моим коллегам-стажерам, с которыми я поделилась множеством веселых и незабываемых впечатлений. Ребята, вы молодцы.
Для всех, кто заинтересован в улучшении коммерции для всех, я не могу более высоко оценить опыт стажировки Shopify. Вы можете ознакомиться с их возможностями стажировки здесь. И не стесняйтесь обращаться ко мне, чтобы поговорить о процессе или задать мне любые вопросы.
Прокомментируйте ниже то, что вы узнали этим летом!
Спасибо, что прочитали мой самый первый пост на Medium! Я планирую писать гораздо больше, уделяя особое внимание опыту, который я получил, делая то, что я делаю, и техническим проблемам, с которыми я столкнулся. Если вы нашли этот пост интересным, дайте ему 👏. Мне также нравится слышать, что думают другие люди, поэтому, пожалуйста, оставьте комментарий или напишите мне по адресу [email protected] в любое время.