Вопросы и ответы для студентов с инженером-программистом Facebook

Эти вопросы и ответы предназначены для учащихся старших классов или высших учебных заведений, но те, кто заинтересован в разработке программного обеспечения или информатике, вероятно, найдут это также полезным.

Оглавление

  1. "Что ваше текущее положение?"
  2. Расскажите немного о своем высшем образовании.
  3. Что тебе нравится в своей работе?
  4. Не могли бы вы поделиться своими мыслями о том, как лучше всего подготовиться к карьере программиста?
  5. Как ваша средняя школа и / или высшее образование подготовили вас к разработке программного обеспечения?
  6. Есть ли какие-либо курсы средней школы и / или послесреднего образования, которые вы бы порекомендовали пройти в качестве подготовки?
  7. Каковы некоторые атрибуты людей, которые наиболее успешны в разработке программного обеспечения?
  8. Как вы думаете, какие секреты стоят за тем, чтобы добраться туда, куда вы пришли?
  9. Каково работать инженером-программистом во время COVID-19?
  10. Какое лучшее карьерное решение вы когда-либо принимали?
  11. Как вы принимаете решения?
  12. Как вы думаете, какие ваши самые сильные стороны?
  13. Как вы думаете, какие ваши самые слабые стороны?
  14. "Что ты читаешь?"

Какова ваша нынешняя должность?

Я инженер-программист в Facebook и работаю здесь уже два года. Я работаю над инфраструктурой обмена сообщениями для WhatsApp. Некоторые примеры областей, на которых я сосредоточен, - это хранение и доставка сообщений, поддержка новых функций продукта и управление конфигурацией.

Расскажите немного о своем высшем образовании.

В 2012 году - из-за моего желания создавать роботов, которые помогают людям - я пошел на 5-летнюю совместную программу Mechatronics Engineering в Университете Ватерлоо. После пары стажировок в области разработки программного обеспечения я обнаружил, что мне очень нравится работа и образ жизни программиста. Я также понял, что вместо того, чтобы создавать роботов, я мог бы создавать программы, которые помогут людям. Это побудило меня переключиться на Разработку программного обеспечения после второго года обучения. Смена программы вернула меня на год назад, но также дала мне две дополнительные стажировки; Это привело меня к 8 стажировкам в таких компаниях, как Yelp, Snapchat, Uber и Facebook. Мои стажировки были разделены между Канадой и США, разработкой программного обеспечения и наукой о данных, а также небольшими и крупными компаниями. В конце концов я закончил учебу в 2018 году и вскоре после этого присоединился к Facebook.

Что тебе нравится в своей работе?

Мне нравится создавать продукты и функции, которые влияют на миллионы, если не миллиарды людей. Нет ничего лучше, чем рассказывать друзьям и родственникам, что вы создали эту функцию в их приложении. Мне нравятся различные обязанности инженера-программиста, такие как кодирование, проектирование системы и сотрудничество с другими. Самое главное, мне нравится решать сложные задачи. Я ежедневно занимаюсь спортом, развлекаюсь и творчески тренирую свой мозг. Люди тоже замечательные; они обычно действительно амбициозные и вдохновляющие люди. Работа - одна из причин, по которой я с нетерпением жду возможности вставать каждый день.

Можете ли вы поделиться своими мыслями о том, как лучше всего подготовиться к карьере программиста?

Во-первых, вы должны изучить и понять, что влечет за собой работа и какие навыки вам нужны, чтобы добиться успеха. Вы должны убедиться, что это соответствует вашим чаяниям и индивидуальности. Например, существует заблуждение, что инженеры-программисты кодируют весь день, но мы также ведем обсуждения дизайна, общаемся с заинтересованными сторонами и сотрудничаем с коллегами. Проведите небольшое исследование и спросите себя, нравится ли вам повседневная работа и работа в целом.

Затем вы должны начать научиться программировать; изучите основы программирования, например, как использовать переменные, циклы, функции и классы. Вы можете научиться программировать на уроках информатики в школе или онлайн. Вам следует начать создавать программное обеспечение, потому что это один из лучших способов применить то, что вы узнали; Вы можете начать с создания чего-то простого, например, Крестики-нолики. Сотрудничать с другими еще лучше; вы можете работать с друзьями, посещать хакатоны или даже вносить свой вклад в разработку программного обеспечения с открытым исходным кодом. Со временем вы даже можете начать заниматься более сложными темами, такими как параллелизм, операционные системы и распределенные системы.

После этого вам следует попытаться получить реальный опыт работы. Это один из лучших способов технически развиваться и получить все необходимые для работы навыки межличностного общения. Я бы рекомендовал попытаться пройти стажировку как можно раньше; если это в старшей школе, это даже лучше. Необязательно быть в большой компании. Это может быть где угодно, например, в школе или в бизнесе друга семьи. Я также предлагаю изучить базовые алгоритмы и структуры данных, потому что они необходимы на технических собеседованиях при стажировке и работе на полную ставку. Я считаю, что для стажировки важно найти организации с выдающимися инженерами, которые могут помочь вам расти, наставляя и создавая для вас возможности для роста.

Как ваша средняя школа и / или высшее образование подготовили вас к разработке программного обеспечения?

Одним из наиболее важных выводов были основные основы программирования и концепции, которые вы узнаете из лекций, проектов и лабораторных работ. Школа предоставляет строительные блоки для вашей карьеры, которые позволяют: изучать более сложные темы, проводить мозговой штурм инновационных решений и способствовать углубленным обсуждениям. Кроме того, вы, вероятно, забудете большую часть того, чему учились в школе; в любом случае большая часть его бесполезна в повседневной работе. Когда вы начнете работать, вы будете использовать и развивать только несколько основных концепций. Даже если вы забудете эти концепции, их будет легче выучить заново, потому что вы уже выучили их раньше.

Я считаю, что мой школьный опыт помог мне развить творческое мышление, которое имеет решающее значение в разработке программного обеспечения. Креативное мышление важно, потому что, когда вы разрабатываете решения проблем с большим количеством требований, это требует мозгового штурма идей, которые удовлетворяют всем ограничениям, но при этом просты для понимания и эффективны для системы - инженерия - это искусство в этом аспекте. Есть много способов решить одну и ту же проблему; у каждого свои компромиссы. Креативность проявляется в школе через: изучение открытых проектов, работу над побочными проектами с друзьями и посещение хакатонов. Кроме того, изучая несколько различных предметов, вы можете создавать уникальные решения с помощью междисциплинарного мышления. Было доказано, что глубокие знания по различным темам эффективны в творческом мышлении, даже вне разработки программного обеспечения.

Если вы пойдете в университет, не применив свои навыки управления временем, вы быстро поймете, что у вас не будет достаточно времени, чтобы делать все, что вы хотите. Расстановка приоритетов - важный аспект управления временем; вам следует выяснить, какие задачи являются срочными, и сосредоточить на них свое время и энергию, например, учеба для этих сложных основных классов или проводить меньше времени с людьми, с которыми вы не близки. Вы также можете использовать диспетчер задач, например Asana, и приложение-календарь, например Google Calendar, чтобы управлять своими задачами, планировать расписание и держать себя в руках. Тайм-менеджмент важен в разработке программного обеспечения, потому что у вас может быть много дел, особенно по мере того, как вы становитесь старше. Обычно вы работаете над несколькими проектами одновременно; Кроме того, вы также можете обучать новичков или консультировать и сотрудничать с коллегами.

Есть ли какие-либо курсы средней школы и / или послесреднего образования, которые вы бы порекомендовали пройти в качестве подготовки?

Я бы рекомендовал посещать уроки информатики (CS) в каждом классе средней школы. Классы CS сосредоточены на основах, которые важны для программирования. Я бы также сосредоточился на математике, особенно дискретной математике, потому что она включает в себя множество понятий, которые переносятся в CS, например теорию чисел и графов. В целом математика и естественные науки учит вас логически мыслить, понимать абстрактные концепции и решать задачи. Когда я говорю решать проблемы, я имею в виду способность читать проблему, понимать ее, разбирать ее, решать, какие вычисления делать, выполнять вычисления и, наконец, сообщать результаты - этот логический подход - это то, что вы будете делать часто. в программной инженерии.

Каковы некоторые характеристики людей, наиболее успешных в разработке программного обеспечения?

По моему опыту, «успешные» инженеры-программисты обычно: дальновидные, внимательные к деталям, трудолюбивые и всегда обучающиеся. Когда я учился в школе, я не думал, что эти качества так важны, как сейчас.

  1. Провидцы - они способны понять общую картину и заглянуть за пределы того, что считалось возможным. Они предлагают смелые и амбициозные идеи, которые имеют долгосрочное влияние. Они могут продавать свои идеи, ясно их передавать и вовлекать людей. Будучи дальновидным, вы можете вдохновить на новые идеи, которые повысят влияние вас и вашей организации.
  2. Ориентация на детали. Они точны и дотошны, особенно когда дело касается их работы и общения. Их работа качественная и практически не вызывает никаких проблем. Они часто указывают на проблемы, которых не хватает большинству людей. Они умеют задавать вопросы, которые могут выявить упущенные из виду проблемы. Очень важно действовать осторожно, потому что исправление ошибок при разработке программного обеспечения может быть дорогостоящим для клиентов и компании.
  3. Трудолюбивые. Они упорны и не сдаются. Работа сложная, они готовы бороться и испытывать дискомфорт. Иногда они могут даже терпеть неудачу, но в компаниях этого часто приветствуют, а не избегают. Программная инженерия - это конкурентная область для инженеров и компаний, твердость которых является важным преимуществом в этой области.
  4. Всегда учусь. Карьера в области разработки программного обеспечения динамична и постоянно меняется. Они открыты для изучения и изучения новых областей, которые могут быть полезны в будущем. По мере накопления опыта они должны осваивать различные навыки. Вначале они могут сосредоточиться на написании чистого кода; но позже они могут сосредоточиться на проектировании системы и ведущих проектах. На протяжении своей карьеры они могут присоединяться к разным командам; Это означает, что им, возможно, придется изучить различные инженерные парадигмы, процессы и технологии.

Как вы думаете, в чем секреты достижения того, чего вы достигли?

Самый главный "секрет", который у меня есть, - у меня есть четкая цель жить счастливой жизнью. Счастье для меня означает несколько вещей: помощь другим в достижении их представления о счастье; прекрасные воспоминания о людях, которых я люблю и дорожу; и оказывать долгосрочное положительное влияние на этот мир, будь то воспитание замечательных детей или создание полезных программных продуктов. Я стараюсь принимать решения таким образом, чтобы в конечном итоге они приносили счастье мне и другим. Я стараюсь максимизировать положительный и длительный опыт, воспоминания и отношения. Работа также является важной частью вашей жизни и должна способствовать вашему счастью. Если это не приносит вам счастья, выясните, почему; возможно, пора сменить команду, компанию или профессию; или, возможно, вам нужен перерыв, чтобы во всем разобраться. Погоня за счастьем - это как марафон, а не спринт. Возможно, будет лучше обменять краткосрочное счастье на большее счастье позже. Я делаю это часто, и это известно как отложенное вознаграждение. Было показано, что это коррелирует с большим счастьем в жизни.

Каково работать инженером-программистом во время COVID-19?

Мне повезло, что я работаю в отрасли, которую не затрагивают большинство разработчиков программного обеспечения. Технологии - это отрасль, которую COVID-19 несколько укрепил. Например, люди гораздо чаще, чем раньше, используют приложения для доставки еды, потокового видео и видеозвонков. Работать удаленно в качестве инженера-программиста очень просто, большая часть вашей работы может выполняться индивидуально, и единственный физический инструмент, который вам нужен, - это компьютер.

Сотрудничать и проводить обсуждения стало сложнее, чем раньше. Но, как и в других секторах, мы адаптировались к использованию программного обеспечения для видеоконференций, такого как Zoom, и текстовых асинхронных средств связи, таких как электронная почта. Это не то же самое, что делать что-то при личной встрече, но это настолько хорошо, насколько это возможно. К счастью, есть много компаний, которые стремятся улучшить удаленную работу.

Ранее существовала возможность удаленной работы, но переход на универсальную удаленную работу ускорил COVID-19. Я считаю, что удаленная работа хороша для инженеров-программистов, потому что она дает нам доступ к возможностям, которые были строго привязаны к местоположению, например, работа в американской компании из вашего родного города в Канаде. Удаленная работа дает нам возможность работать ближе к нашим друзьям и семье или жить в городе с более предпочтительной культурой и окружающей средой.

Какое лучшее карьерное решение вы когда-либо принимали?

Моим лучшим карьерным решением было присоединиться к Facebook на стажировку и, в конечном итоге, присоединиться к Facebook в качестве штатного инженера-программиста. Я счастлив в Facebook, потому что считаю компанию, культуру, людей и преимущества просто фантастическими. Facebook предоставляет вам множество ресурсов и возможностей, которые помогут вам в карьере, например, возможность стать наставником стажера или работать над проектами с высоким риском и высоким вознаграждением. У них есть большие преимущества, которые упрощают жизнь, такие как тренажерные залы на территории, 3-х разовое питание и корпоративные автобусы на работу и обратно. Культура открыта, прозрачна и ориентирована на результат. Я работаю над WhatsApp, которым пользуются более 2 миллиардов человек; в таком масштабе работа невероятно сложная, интересная и впечатляющая. Имейте в виду, что Facebook не для всех; ваш опыт может варьироваться от команды к команде.

Как вы принимаете решения?

Если у меня есть время, я обычно взвешиваю все за и против, получаю отзывы и отзывы от других и думаю о альтернативных издержках. Мой процесс принятия решений обычно логичен и рационален с некоторой долей интуиции. Я ужасно спонтанен и обычно принимаю неверные решения, когда это нужно делать быстро. Я стараюсь позиционировать себя так, чтобы у меня было достаточно времени и пространства для принятия решений.

Как вы думаете, в чем ваши самые сильные стороны?

Я считаю, что умею ставить цели, понимать и рационализировать свои мотивы и добиваться этих целей. Я помню о своих долгосрочных целях при планировании и выполнении краткосрочных и среднесрочных целей. Я напоминаю себе, что нужно быть гибким, потому что цели могут измениться, например, когда планы не соответствуют ожиданиям или меняются приоритеты. В разработке программного обеспечения важны создание, передача и выполнение целей; особенно для вашей команды - например, для разработки и реализации дорожной карты вашей команды - и для себя - например, для реализации проектов и управления своей карьерой.

Еще одна моя сильная сторона - Я открытый человек во всех смыслах этого слова. Мне нравится пробовать что-то новое, например новые впечатления, продукты питания и занятия. Я открыт для новых и даже спорных идей; особенно от людей с другим воспитанием и / или политическими взглядами. Я восприимчив к отзывам, потому что это отличный способ стать лучше и улучшить жизнь всех, кто меня окружает. Я не вру: я честен, прямолинеен и прозрачен. Моя открытость укрепляет доверие и дух товарищества с моей командой, что помогло мне расти и развиваться в моей карьере. Открытость помогла мне в личной жизни, позволив мне испытать новый опыт и увидеть мир за пределами того, что я раньше мог себе представить.

Как вы думаете, какие ваши самые большие слабости?

Я разборчив в своих действиях; другие могут посчитать это банальным или придирчивым. Иногда я слишком откровенен и самоуверен, что может создать напряжение или неловкие ситуации. Я понял, что у всех разные стили работы и общения. Я должен признать, что то, что наиболее эффективно и продуктивно для меня, может быть другим для кого-то другого.

Я недостаточно сочувствую. Иногда это может создавать трения с другими. Даже когда я пытаюсь посочувствовать, уникальные особенности и культурное воспитание другого человека могут сделать это трудным. Я пытался уменьшить трения с другими, будучи более открытым, терпеливым и вежливым в отношении своих мыслей и идей.

Я привык следовать стадному менталитету в университете, особенно когда дело доходило до стажировки. Я проходил определенные стажировки, потому что думал, что они считались «престижными» или были востребованы многими людьми. Я не задумывался, зачем мне проходить стажировку, поэтому в конечном итоге потратил много времени и энергии. Я гнался за мечтами других людей, а не за своими собственными. В эти дни я стал лучше понимать свои стремления и увлечения благодаря более вдумчивым личным размышлениям и консультациям с семьей и друзьями.

Что ты читаешь?

В старших классах я читаю только перед школой. В университете я читал много статей по инженерному делу, карьерному росту и новейшим технологическим тенденциям. Но поскольку я стал более уверенным и уверенным в своей карьере, я начал читать более широкие темы с целью лучше понять, как все работает; от политики до личных финансов и от психологии до астрономии. Что касается книг, я читаю и художественную, и научно-популярную литературу. Я также время от времени читаю Quora и Medium и читаю ежедневные информационные бюллетени, такие как Morning Brew и New York Times.

Если вы нашли это полезным или у вас есть какие-либо мысли, я хотел бы услышать их в комментариях ниже. Спасибо за чтение!

Первоначально опубликовано в HackerNoon: https://hackernoon.com/14-things-i-wish-i-knew-before-becoming-a-software-engineer-r55o3z9y