Pull to refresh

ABC: Always Be Coding (не переставай программировать)

Reading time5 min
Views74K


Как получить работу инженера?

Давай на чистоту. Ты хороший кандидат на должность инженера? Как ты сам себя оцениваешь? Много ли компаний, в которых ты бывал на собеседованиях? Каково у тебя отношение пройденных интервью к полученным предложениям о работе? Попробуй воспользоваться следующей формулой (это мое сферическое измерение в вакууме, которое не означает ровным счетом ничего):

# x = количество компаний, в которых ты проходил собеседования

# y = количество предложений о работе, которые ты получил

рейтинг = 100 * log(x) * y / x



Если твой рейтинг < 90, обязательно прочти это. Если > 120, возможно, тебе это не нужно, но, все равно прочти.



Кто я такой?



У меня нет университетской корочки об образовании. Программирование стало для меня профессией в 19 лет, когда я переехал из Чикаго в Южную Калифорнию. Все мое имущество с легкостью поместилось в машину. 400 долларов в кармане и предложение о работе джуниором за безумные 40 000 долларов в год — вот все что у меня было. С тех пор прошло 12 лет… Но это уже совсем другая история.

Я работал в Double Helix, Namco Bandai, Google, Obvious и Square.* Получал предложения о работе от таких компаний, как Naughty Dog, Activision, Riot Games, Blizzard, Pinterest, Goldman Sachs и многих других. Если кому интересно — мой рейтинг по формуле, что я привел выше — 132.

За свою жизнь я провел, по меньшей мере, 500 интервью с соискателями на должность инженера. Приблизительно 10% из них получили предложения о работе. Менее 3% я считаю “звездами” и запомнил каждого из них.

Нет ни одного способа, который бы гарантировал тебе успешное получение работы. Слишком много переменных в этом уравнении. Особенно в компаниях вроде Google. Тебя сажают с 5-7 случайно выбранными инженерами и списком вопросов, которые они будут задавать. На таких собеседованиях обычно приходится писать код на доске от руки. Некоторые инженеры — ужасные интервьюеры. Они любят вопросы с подковыркой и предвзято тебя оценивают. Ничего страшного — это случается и с лучшими из нас. Обычно, разрешается завалить одно интервью из серии.

Лучшее, что я могу сделать в этой ситуации — это рассказать тебе, как подготовиться. Перейдем к делу — вот мои советы.


Технические советы



  1. Постоянно пишите код. Все просто: больше кода — выше твой уровень. Когда ты программируешь, ты подкрепляешь знания практическим опытом. И лучшая практика — это сосредоточенная практика. Постоянно держи свои цели в голове, изучай новые области, бросай вызов самому себе. Через какое-то время у тебя должно появиться портфолио находящихся в работе, а так же, завершенных проектов. GitHub — отличное место для размещения портфолио, кроме того, полезно иметь электронную копию своей работы.

  2. Стань профессионалом, как минимум, в одном из мультипарадигменных языков программирования. Изучение языка даст тебе хорошее видение перспективы. Чтобы достичь этого, ты должен писать огромное количество кода и еще больше — читать. Изучи подводные камни и лучшие практики. В идеале, выбранный тобой язык должен быть достаточно популярным и обладать динамично развивающимся сообществом, которое производит огромное количество кода. Хорошие кандидаты — это C#, C++, Java, PHP, Python и Ruby.
    Самый частый вопрос, который любят задавать на собеседованиях по С++: “По шкале от 1 до 10, где 10 — самая высокая оценка, как бы вы оценили свои знания С++?”. Я ненавижу его. И да поможет бог любому, кто ответит 9-10. Его разорвут за это на части. Бьярн Страуструп оценивает свои знания, как 8 или менее. Этот язык слишком сложен, слишком обширен, с очень продолжительной эволюцией. Я опять отвлекся.

  3. Узнай свои слабые стороны. Прочти этот список, а затем оцени свое понимание работы всего этого. Реализуй базовые вычислительные алгоритмы, такие как Dijkstra's algorithm, Floyd-Warshall, Traveling Salesman, A*, bloom filter, breadth-first iterative search, binary search, k-way merge, buble/selection/insertion sort. in-place quick sort, bucket/radix sort, closest pair и так далее. И не прекращай программировать. Вот еще одна очень хорошая статья.

  4. Изобретай колесо. Ты должен вручную реализовать базовые структуры данных на своем языке. Не полагайся на стандартные библиотеки. Реализуй и напиши тесты для следующего: вектор (динамический массив), связанный список, стек, очередь, замкнутая очередь, hash map (хэш-карта), set (набор), очередь с приоритетами, дерево бинарного поиска, и т.д. Ты должен уметь их быстро реализовать, когда понадобится.

  5. Реши свои языковые проблемы. Забудь вопросы вроде этого. Все сводится к фундаментальным концепциям программирования. Потрать не менее 40 часов на кодирование решений для различных задач. Одним из лучших ресурсов для этого я считаю TopCoder. Прочитай это. Попробуй решить задачи. Выбирай такие, которые проверят твою способность реализовывать рекурсивные, pattern-matching, жадные алгоритмы, динамическое программирование, и задачи с графами…
    Просмотри список задач из архива.
    Я уверен, основная причина того, что меня наняли в Google — это мои две недели одержимости TopCoder. Я мог написать алгоритм Дейкстры с закрытыми глазами и с одной рукой за спиной. Я мог решить все задачи с графами на свете. Эта была моя репетиция. Как говорит Eric Schmidt: “Репетиция молитвы не портит.”

  6. Относитесь к программированию проще. По-крайней мере, сделайте его простым с виду. Конечно, не сразу — со временем. Я считаю, что кодинг — это самый честный и простой способ быть инженером. Я часто называю его “простейший этап программирования”, потому что сложнейшая его часть — это до и после написания кода. К примеру, разработка того, что вы собираетесь закодировать и проверка того, что код готов к поставке и выполняет свои задачи. Заставь своего интервьювера понять, что программирование — всего лишь средство для достижения цели.
    Так же, обрати внимание, что кодирование может быть наиболее пугающим этапом. Постарайся попрактиковаться в написании кода руками на доске и в парном программировании. Google часто использует оба этих подхода.
    А еще — прочти статью моего друга и бывшего коллеги Dan.



Общие советы



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

  1. Знай зачем ты здесь. Если тебе предстоит собеседование в компании, о которой ты ничего не знаешь — лучше не приходит на него вообще. Люди отвечающие за найм работников чуют это за версту. Такое сойдет тебе с рук только в больших компаниях, в маленьких — даже не пытайся.

  2. Интересуйся. Если тебе все равно, остальным — тоже. Будь увлечен чем-то. Как на счет того, чтобы сделать программирование своим увлечением? Тебе нравится разрабатывать компиляторы в свободное время? Собираешь квадрокоптеры? Не важно — если ты увлечен чем-то, сможешь сделать это интересным для себя.

  3. Не делай предположений. Задавай вопросы, если неуверен. Если все равно не уверен на 100%, что разобрался после того как задал вопрос — спрашивай снова. Много раз я наблюдал за тем, как соискатель молча движется по неверному пути. В итоге он тратит время на решение не той задачи.

  4. Улыбайся. Сохраняй активность, будь счастлив и позитивен. Но не переборщи с этим. Люди будут оценивать тебя предвзято. Убедитесь в том, что первое впечатление, которое ты производишь — положительное. Улыбка заразительна. Когда я прихожу на интервью не в духе, поглощенный своими делами, позитивный настрой кандидата способен улучшить и мое настроение.



Как я уже говорил, не существует серебряной пули, которая гарантирует получение работы. Лучшее, что ты можешь сделать, как инженер — не переставать программировать.

*В настоящее время, я работаю на себя, создавая что-то новое.

Спасибо за внимание! Хорошего настроения, удачи в карьере и вообще!
Это был перевод. Оригинал: ABC: Always Be Coding by David Byttow (A pirate building things)
Tags:
Hubs:
+71
Comments58

Articles