Как дела с программистом алексеем. Из Яндекса в Лондон

Мой путь

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

Но в последних классах (93-95 годы) познакомился с компьютерами, и меня полностью затянуло.

Сначала бесконечные олимпиады по информатике, потом первый модем дома, потом в нашем Брянском техуниверситете открыли специальность «Программирование» и я конечно на неё прошёл. Сам не заметил, как прошли годы, очнулся примерно на 5 курсе, в районе диплома, погоревал по своим школьным мечтам минут 10 и с тех пор безвылазно работаю по специальности.

Работать “по-настоящему” начал на 3 курсе, когда по маминому заказу стал писать мелкие штучки для банка, в котором она тогда возглавляла IT. Сначала какие-то перекодировщики файлов, потом скрипты в терминальной программе Telemate для работы с расчётно-кассовым центром, потом был большой проект - рабочее место валютного кассира. Интернета не было, как и обилия книг - впитывал всю информацию, до которой удавалось дотянуться.

Зачитывал до дыр и мануалы к Клипперу, и новости Turbo Pascal 7.0 в журнале «Компьютер-Пресс». Пробовал все программы. Так, однажды я приволок домой диск FreeBSD и поставил рядом с Досом. Затянуло мигом: я полностью забросил FoxPro и Delphi, начал писать на awk и Perl и через два года сумел найти работу в ISP.

Были у меня свои кумиры: отрасль молодая, горячая, всё бурлит, каждые полгода - открытие и новая звезда.

Но в основном восхищался всякими великими иностранными учёными конечно. Дейкстра, Диффи, Буч. Ричард Столлман, когда я стал постарше и помудрее. Ну и один мамин коллега, программист из Брянска, Леонид Осовцов:) Он был такой живой, настоящий кумир, не икона. Уехал давно, живёт счастливо в Израиле.

Главное открытие тех времён для меня - невероятно огромный мир свободного ПО. Один диск с дистрибутивом FreeBSD содержал больше программ, чем я видел за все предыдущие годы под Досом. И ни одна из них не требовала поиска серийника. Да ещё и всё в исходниках. Я быстро включился в процесс разработки, писал патчи, дискутировал с разработчиками. Как-то в один момент компьютер из игрового автомата и печатной машинки превратился в окно в большой мир. Интернет практически полностью состоял из программистов, и поэтому мне тогда там было очень легко.

Я довольно быстро достиг потолка в Брянске и сразу после получения диплома уехал в Москву. Артус, Агава, Инлайн, Первый канал, Рамблер. В Рамблере поработал 4 года, сначала запрограммировал веб-почту, потом создал под неё отдел на 15 человек и поруководил им.

Примерно в 2002 году, уже переехав в Москву, я обнаружил Рунет:) Плотно завязнув в англоязычной среде (я не говорю «сайтах», потому что в то время Интернет состоял не только из веба), я попросту пропустил момент его появления. Пришлось спешно подтягиваться.

НадоБы

Сейчас я работаю универсальным техническим солдатом в стартапе НадоБы.ру . Формально - технический директор, но по совместительству и сисадмин, тестировщик, архитектор, постановщик задач, product- и project-менеджер, юзабилист, верстальщик и программист на 3,5 языках. В общем, помогаю своей технической команде из 4 человек по всем фронтам. Задачи в основном лёгкие концептуально, но требующие быстрой реакции в условиях большого количества неизвестных. Интересные, большие, творческие задачи стараюсь отдавать сотрудникам, иначе могу увлечься и уйти в них с головой надолго и тогда страдает менеджмент. [От редакции: сейчас, спустя 4 года после написания этого текста, Алексей работает в почтовом отделе Яндекса]

Есть занятия и вне работы. В последнее время бываю связан с организацией всякого рода технических конференций. Принимаю участие в работе Московской группы Перл-программистов Moscow.pm . От случая к случаю создаю, поддерживаю и участвую в разнообразных open source-проектах. Интересно, что всё это удаётся хорошо совмещать с непрекращающимся процессом самообразования, так что получается win-win.

Работа в стартапах

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

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

Идеальный программист

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

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

Здесь несколько важных слов.

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

Во-вторых, 15 минут. Программист постоянно учится. Просто вообще всегда. Это общая черта многих (если не всех) молодых профессий, но она плохо сочетается со слесарностью. С тем, что человек должен быть одновременно и вечным студентом, и хорошим работником. Ведь как оно у рабочих людей - любимым молотком можно отлично, продуктивно работать 20 лет. У нас все наоборот. Хотя есть и отдельная большая история про людей, которые достигают уровня создания себе своих собственных станков.

В-третьих, этот самый станок. Сейчас каждый программист использует (числа взяты с потолка) 45 библиотек, 5 фреймворков, 2 текстовых редактора, 2 операционных системы, 5 тесно переплетающихся языков, 2-3 системы контроля версий и ещё множество других инструментов, таких как багтрекер, вики-среда, отладчик, профайлер и так далее. Это действительно большой и сложной станок, практически кабина самолёта. Само рабочее место стало сложной системой, станком с ЧПУ. Люди, досконально знающие один текстовый редактор и язык Си, мало где применимы. (Как правило, они очень ценны на своих местах, но вот мест этих - раз, два и обчёлся).

А может быть...

Есть очень хороший вариант для тех, кто сомневается: пойти в науку. Очень советую. После диплома сразу искать хорошую аспирантуру в Европе или США и ехать грызть гранит.

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

Если бы я сам не стал программистом - был бы учёным, стопроцентно естественником, скорее всего биологом.

Почему? Ну я вообще плохо понимаю людей, которые выбирают профессию рационально, по расчёту. У нас в институте были такие ребята - шли, например, учиться на унылую специальность «Турбины», потому что турбинистов брали в Газпром. Я вижу, что у современного человека работа - это большая и часто самая важная часть жизни, и её надо выбирать только по любви. У меня была первая любовь с биологией, но потом я от неё ушёл к информатике.

Будни программиста

Сейчас моя работа состоит из заполнения скелета продуктовой задачи «мясом» и полного обеспечения программисту возможности комфортно для себя её полностью решить. Такая работа директора по разработке. В любом стартапе технический директор - сначала директор по разработке, а уж потом настоящий техдир, то есть завхоз. Чтобы было хоз, надо его сначала разработать.

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

Плохо то, что в работе слишком много бизнеса. Ненавижу бизнес, люблю честность, свободу и коммунизм:)

К счастью я рано понял, что только бизнес гарантирует свободу. Честность, если напрячься, можно блюсти в себе и в близких, а коммунизм мы построим, когда изобретём искусственный интеллект, который добудет нам бесплатную энергию. Пока всё идёт по плану:)

Качества, которые нужно постараться развивать, чтобы стать выдающимся профессионалом, это:

  • Терпение. Программист, решивший 10 задач по 10 раз часто лучше, чем другой, который решил 100 разных задач. Потому что (сюрприз) повторение - мать учения.
  • Коммуникации. Аутичных программистов больше не нанимают. Индустрия взрослеет, всё меньше стоящих дел можно сделать в одиночку.
  • Смелость в принятии рисков.
  • Лёгкость на подъём.
  • Слепая печать:)

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

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

Мы будем говорить о требованиях к единственному программисту, отвечающему за небольшой интернет-магазин (30-3000 карточек товаров, 1-10 заказов в сутки). Этот специалист должен быть универсалом, то есть одинаково знаком и с бэкендом – разработка на стороне сервера, и с фронтендом – разработка на стороне браузера пользователя).

1. Минимальные требования

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

Если компания собирается разрабатывать сайта с «нуля», то программист должен знать:

  • один из распространенных языков: PHP/Python/Ruby/C#;
  • одну из СУБД: MySQL/PostrgreSQL/MSSQL/Oracle/MongoDB;
  • одну из распространенных систем управления сайтами (CMS): Bitrix, UMI, Drupal, ShoppingCart, WordPress;
  • обладать навыками администрирования Linux и web-серверов, например, одного из Nginx/Apache/IIS или иметь опыт размещения веб-серверов в Cloud-платформах AWS, Google Cloud, Azure.

Отсутствие этих навыков не говорит о том, что он дилетант. Он вам просто не подходит.

2. Заочное знакомство

Признаки слабого программиста можно выявить еще до собеседования по резюме, изучив портфолио. Если программист указал свои работы (сайты), то стоит открыть их в Google Chrome, зайти в раздел меню браузера «Дополнительные инструменты», выбрать пункт «Инструменты разработчика» и открыть вкладку «Console».

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

Отсутствие портфолио или отказ его продемонстрировать – верный признак неопытного разработчика.

3. Плавали, не знаем

Естественно, большое значение имеет практический опыт работы. Если на собеседовании в ответ на вопросы о прошлых разработках, кандидат «плавает» и не может объяснить собственные действия, стоит насторожиться.

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

Грамотный специалист сможет подробно рассказать о своих разработках и объяснит почему использовал конкретные технологии.

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

4. Птичий язык

Еще один важный момент – способность кандидата разговаривать на «человеческом» языке. Хороший специалист сможет объяснить свою работу простыми словами. Но если соискатель разговаривает исключительно терминами, ему будет сложно взаимодействовать с коллегами и владельцем компании.

Как проверить: попросите рассказать о какой-то ошибке, за которую ему «влетело» от руководства. Например, на сайте 2 недели не работала форма «обратной связи». Представьте, что это ваш сайт.

Уточните в чем была суть ошибки, как он о ней узнал, как нашел причину и устранил ошибку. Если соискатель будет рассказывать «заумными терминами» - попросите разъяснить. Если вы все еще не удовлетворены объяснением, сработаться с ним будет сложно.

5. «ОпенСорс»

Многие специалисты публикуют собственные разработки на сайте GitHub (или BitBucket). Если у программиста несколько публичных проектов и тем более их отметили или скопировали (fork) другие пользователи – это существенный плюс. Большое количество копирований говорит о высоком уровне профессионализма.

Программист уровня Dan Abramov будет искать крупную компанию, уровня (он сейчас там работает), однако если ваш кандидат имеет проекты с ненулевыми отметками и «зеленая область» тоже заполнена – отлично! Смело зовите его на собеседование.

Как проверить: попросить соискателя прислать ссылку на аккаунт в GitHub (BitBucket) и перечислить проекты, которыми он гордится. Обратить внимание на «возраст аккаунта», количество проектов и число копирований кода другими пользователями.

6. Старый багаж

Грамотный специалист должен следить за появлением новых инструментов и технологий. Одно дело, если программист вынужден работать с сайтом, написанном на устаревшем языке, другое – когда он использует слишком консервативный подход.

Современные средства позволяют существенно сократить время разработки. К слову, гнаться за и необоснованно внедрять все новое – тоже плохо.

Как проверить : спросить, какие инструменты или технологии кандидат узнал за последние год-два и как они помогли ему в работе.

7. Цены с потолка

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

На простые задачи типа «замена цвета кнопки» или «создание карты сайта» стоит ожидать быстрые ответы – «дело 5 минут» или «справлюсь за 2 часа» соответственно.

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

Как проверить: спросить у кандидата, сколько времени ему понадобится, чтобы заменить цвет кнопки «Купить» в интернет-магазине и сделать карту сайта (site map).

8. Ручная работа

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

Если программист не умеет оптимизировать собственную работу, он потратит много времени и денег работодателя на однотипные задачи.

Как проверить: уточнить, как программист подходит к созданию кода, попросить привести пример. Хорошо если изначально он ищет готовое решение, а при его отсутствии, пишет код самостоятельно. Можно, к примеру, спросить у программиста, как он разработает календарь, который может понадобиться в форме заказа для выбора даты доставки. Хороший ответ – найти готовый компонент.

9. Лишние близнецы

Дубли кода – верный признак неопытного программиста.

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

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

Как проверить: спросить кандидата, дублирует ли он код. Не дилетант скажет «да, бывает», но объяснит это нерациональными расходами времени на избавление от дублей. Если ответ «нет», то программист врет, мало писал или перфекционист - любое из этих объяснений - плохой вариант.

10. Резать по живому

По-хорошему, программист должен делать копию сайта, тестировать изменения на ней и только после проверки изменений переносить их на основной ресурс.

Как проверить : спросить кандидата, как он обновлял сайт на предыдущем месте работы.

11. Доверяет, но не проверяет

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

Без проверки работоспособности сайта после изменений может возникнуть множество ошибок, которые обнаружат пользователи. Проблемы оттолкнут потенциальных клиентов, что негативно отразится на прибыли компании.

Важно, чтобы программист проверял не только работоспособность сайта, но и тестировал его на ошибки, которые могут совершать пользователи. Так, при разработке формы обратной связи нужно проверить не только ее корректную отправку, но и ответ сайта при ошибочном заполнении полей. Например, проверить, чтобы при случайном вводе номера телефона в поле «Email», пользователю выводилось указание ошибки.

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

12. Улыбаемся и машем


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

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

Как проверить: попросить программиста рассказать, как он узнавал об ошибках на предыдущих проектах.

В отличие от многих моих коллег я не был рожден программистом. Я был рожден музыкантом. Я не учился программировать в ВУЗе и до определенного времени даже и не собирался связывать свою жизнь с IT.

Зато меня всегда привлекала Москва, с ее широкими тротуарами, длинными набережными и огромными парками. Но оказавшись там, ты чувствуешь потребность в деньгах более чем в любом другом городе нашей удивительной родины. В то время мой старший брат снимал квартиру вместе с двумя программистами, работающими в каком-то банке. Так, в одной из кухонных бесед, я первый раз погрузился в мир Python. С того момента прошло еще немало времени перед тем как я устроился на первую работу в качестве Python-developer.

Первые шаги в программировании

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

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

Первая работа

На удивление, я никогда не работал junior-ом. Сразу в middle пошел. Но попытки устроиться младшим разработчиком у меня были. Я хорошо помню то собеседование.

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

А что дальше

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

Так вот. На моей первой работе программистом я был единственным бекенд-разработчиком в компании! Вот уж хуже не придумаешь! Ну, что хотел, то и получил. Зато на второй работе я попал в замечательный коллектив, где работали настоящие профессионалы с огромным опытом. Благодаря им я приобрел культуру кода и узнал про высокие стандарты в разработке. Миша Корсаков и Андрей Беляк - респект и уважуха!

Сейчас

А сейчас я работаю удаленно в одной международной компании и в этом есть свои плюсы! Только не подумайте, что я сейчас лежу на пляже с ноутбуком и наслаждаюсь жизнью по полной. Я все также много работаю и много устаю, но в офис ходить не нужно. Живу в Питере, иногда путешествую. Успел пожить в Португалии, в Италии, в Грузии, но не скажу, что я там как-то особо отдыхал. Организация путешествия накладывает много дополнительных сложностей, и в сочетании с работой это может быть в два раза тяжелее, чем работа из дома или офиса. Но увидеть можно очень много нового, красивого и интересного. И это явный плюс!

Менторство

А мое менторство началось очень забавным образом и без моего участия. Как-то раз я был в гостях у друга и случайно забыл у него книжку по Python и Django. А в следующий раз встретились мы только через год, и тогда он меня удивил. Говорит, а я теперь работаю программистом! Помнишь ты у меня книжку забыл, так вот я ее прочитал, сделал по ней свой сайт и недавно получил первую работу.

И такое бывает!

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

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

Вопросы

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

Вписывайтесь в любую движуху! Не упускайте ни одной возможности практиковаться! Будьте открыты всегда и к любым предложениям!

И что очень важно:

“Встретив двусмысленность, отбрось искушение угадать.” - zen of python

Как ты сохраняешь свои навыки актуальными? Как постоянно растёшь и становишься лучше как разработчик?

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

Топ 3 книжек для новичка
  • Марк Саммерфилд - "Программирование на Python 3. Подробное руководство"
  • Уэсли Чан, Пол Биссекс, Джеффри Форсье - “Django. Разработка веб-приложений на Python”
  • Роберт Мартин - “Чистый Код” - Читайте ее даже если не понимаете Java, там очень много просто хороших советов. А заодно и Java начнете изучать.
Работа на Западе привлекает многих наших соотечественников, обладающих профессиональными познаниями в области программирования и желающих реализовать свой потенциал в Европе или Северной Америке. Помнится, автор этих строк отправлялся в своё время на два года учиться за рубеж по программе обмена студентами. Если бы мне довелось поговорить с людьми, которые уже учились там до меня, то адаптироваться было бы намного проще. Да и вопрос - уезжать или нет - вызывал бы меньше сомнений. Поэтому сегодня мы задаём вопросы Андрею Шулинскому - человеку, работавшему программистом в России и уехавшему в канадский Торонто, дабы там продолжить свою профессиональную деятельность...

Интервью

Алексей Перевертайлов : Благо мы с тобой знакомы лично, сразу перейдём на "ты" и менее формальный формат беседы. Первый вопрос - когда ты уехал из России и каковы были мотивы такого, в общем-то серьёзного и у многих людей требующего долгих раздумий шага?


Андрей Шулинский : У моего отъезда довольно долгая история. Решение было принято после печально известного банковского кризиса 1998 года. По ряду причин иммиграционный процесс сильно затянулся, интервью я прошел в ноябре 2001 года, в декабре 2002-го получил визу. Срок её действия истекал в феврале следующего года, так что сразу же поехал в Канаду на пару недель, оформил там необходимые документы и вернулся в Москву. Окончательно же перебрался на новую родину в октябре 2003 года.
Из-за чего я сменил среду обитания? Наверное, ничего нового не скажу. Надеялся на лучшие профессиональные перспективы. Всегда сильно не любил многие особенности российской жизни: бытовое хамство, грязь, нестабильность. Упомянутый кризис был для меня очень сильным ударом, прекрасные иллюзии разбились вдребезги... Я также очень люблю путешествовать, что гораздо проще делать с канадским паспортом.


Алексей Перевертайлов : Сразу ли тебе удалось найти работу? Какие вообще были предложения, которые ты рассматривал, и какие требования предъявлялись к претендентам?

Андрей Шулинский : Первый контракт получил уже в ноябре 2003-го. Помог мой друг. Проект был небольшим, но достаточно интересным и очень помог как психологически, так и профессионально. "Размял мускулы" перед более серьезной работой, которая нашла меня в конце января 2004 года.
Требования, за исключением пресловутого североамериканского опыта, вполне обычные - в двух словах, "знание предмета". :-) К сожалению, многие компании и рекрутеры действительно не любят работать с недавно прибывшими, другие же, напротив, пользуются готовностью новых эмигрантов согласиться на любые условия. Не скажу, что это повсеместная практика, но встречается не так уж и редко.
Меня чаша сия минула, хотя уже был готов идти сканировать документы. Вообще, я всегда себя готовил к тому, что будет непросто и, возможно, придется заниматься не самым любимым делом. Подавал резюме на все позиции, которым оно хоть сколько-то соответствовало.


Алексей Перевертайлов : Программистом какой сферы ты являешься? Какие дипломы и сертификаты у тебя есть?

Андрей Шулинский : Я - типичный прикладной программист/аналитик/архитектор широкого профиля. Закончил кафедру системного программирования ВМК МГУ, но в жизни не написал ни одной строки "системного" кода. :-) Раньше писал на С++, несколько лет назад перешел на Java. Долго работал в банковской сфере, потом была пара телекоммуникационных проектов. В Канаде сначала делал систему хранения и обработки документов для маркетинговой компании со звучным именем Арнольд . Сейчас работаю в фирме "Новатор" , занимаюсь созданием Java-версии "движка" для сайтов, занимающихся онлайновыми розничными продажами.
Диплом у меня один. Получен в 1996 году на факультете вычислительной математики и кибернетики Московского государственного университета. Перед отъездом сдал экзамен Sun Certified Java Programmer, 1.4. Планировал получить остальные сертификаты этой линии, но работаю много, и найти на это время никак не удается.



Алексей Перевертайлов : Вообще, можешь сказать - какие языки программирования и какие программисты сейчас более востребованы за рубежом, да и в мире в целом?

Андрей Шулинский : В первую очередь, .NET и J2EE. А что ты думал услышать? ;-) Эти 2 платформы закрывают собой небо... Впрочем, судя по объявлениям на посвященным поиску работы сайтам, до сих пор есть определенный спрос на знатоков С++, Cobol, Perl. Бывают нужны - и даже очень - узкие специалисты, знающие какой-нибудь "навороченный" SAP. Но, разумеется, основную массу программеров и прочих сениор девелоперов составляют "джависты" и "дотнетчики". :-)


Алексей Перевертайлов : По своему опыту, расскажи - есть конкуренция между программистами внутри компании? Есть ли какие-то жёсткие правила? За что могут уволить? Есть ли карьерный рост? Сверхурочная работа бывает и если да - как оплачивается? Ты работал программистом в России, можешь сравнивать, поэтому такой вопрос: какие ты заметил отличия в профессиональных требованиях и организации рабочего процесса дома и за границей? Тяжело ли тебе было находить общий язык с руководителем проекта?


Андрей Шулинский : В тех компаниях, где мне довелось поработать, явной конкуренции aka "соцсоревнование" не было. :-) Но при этом действует простой закон: если хорошо работаешь - заметят и оценят. По крайней мере, со мной было именно так. И зарплату повышали, и более интересную работу доверяли.
Уволить, конечно, могут. В основном, это бывает связано с проблемами компании (сокращение штатов) или с явным несоответствием возможностей человека занимаемой должности. Столь не любимый многими испытательный срок бывает полезен. Так что не стоит слишком сильно преувеличивать свои возможности на интервью. Бывают также случаи увольнения из-за противозаконной деятельности сотрудника.
К вопросу о жестких правилах - не стоит хранить на жестком диске рабочего компьютера гигабайты детского порно - могут наказать. Все контракты содержат более-менее стандартные пункты о неразглашении информации, интеллектуальных правах компании на ваш код (сомнительный актив, ИМХО:-)). Часто запрещают переходить в компании, работающие в той же отрасли, подрабатывать на стороне. Степень подобной паранойи зависит от многих факторов. Крупные банки и прочие "крутые" компании заставляют подписывать списки на 8 листов. Но ведь то же самое есть и в России, просто здесь, думаю, несколько строже следят за выполнением этих условий.
Профессиональные требования в Торонто и Москве одинаковые. Подозреваю, что они совпадают с требованиями лондонских и токийских фирм и близки к парижским запросам. Разница - во Франции может понадобиться французский язык. Именно может, а не должен - я общался с рекрутерами, набиравшими людей для работы в компании, находящейся в Лионе. Я честно признался, что не владею французским языком даже со словарем. "А, там весь документооборот на английском", - было мне ответом. :-)
Организация рабочего процесса очень сильно зависит от людей, ведущих проект. Если они поставили дело хорошо с самого начала и не позволяют проекту пойти вразнос даже при авралах, то работа идет достаточно гладко. Иначе - привычный бардак. Уважаемые читатели, вероятно, уже догадались, что бывает чаще. :-)
С руководителями проектов пока ни разу не было проблем. Я всегда легко находил общий язык с людьми - как в России, так и в Канаде. Вы наверняка обратили внимание, как часто я повторяю слова "так же", "одинаково", "нет разницы". Действительно, я обнаружил, что россияне и канадцы не так сильно отличаются друг от друга, как принято считать. Безусловно, трудности перевода существуют. Но, как и в одном замечательном фильме, они большей частью связаны с индивидуальными особенностями людей, а не с "цивилизационными" различиями. Вот такое у меня сложилось "ИМХО". :-)


Алексей Перевертайлов : Программисты в Канаде - высокооплачиваемая профессия по отношению к другим? Если сравнить это соотношение с Россией - где лучше работать программистом (по финансовой выгоде)?

Андрей Шулинский : Да, до сих пор зарплаты выше средних. Конкуренция стала больше, но платят по-прежнему неплохо. Впрочем, это лишь субъективное мнение, а я в Канаде меньше двух лет. :-)


Алексей Перевертайлов : Как думаешь, где легче повысить свой профессиональный уровень - дома или за рубежом? Это вообще зависит как-то от страны (или же скорее зависит от конкретного человека)?

Андрей Шулинский : Мое мнение - прежде всего от человека. Кто ищет, тот всегда найдет полезные книги, журналы, форумы и, разумеется, тех, с кем можно общаться на профессиональные темы. Конечно, я предполагаю, что вы работаете в стране, где индустрия ИТ хорошо развита.


Алексей Перевертайлов : Какой инструментарий вы используете (среды разработчика и т.д.)? Я так полагаю, в Канаде всё программное обеспечение, используемое в компаниях-разработчиках ПО - лицензионное, или же нет?

Андрей Шулинский : Скажем так - большая часть программ или куплена, или получена бесплатно. :-) Иногда народ ставит что-то добытое нелегально, но это делается именно для ознакомления - если недоступна пробная версия. Компании же либо запрещают использовать пиратское ПО вообще, либо заставляют подписать документ, по которому ты сам несешь ответственность за содержимое жесткого диска.
Используются же самые разные приложения. IDE: Eclipse, IDEA, NetBeans. Средства работы с базами данных: DbVisualizer, Aqua Data Studio. Код и документы хранятся в CVS. Из покупного имел дело с WebSphere. Знакомые все лица, не так ли? :-) И, конечно, .NET - там есть решения на все случаи жизни.


Алексей Перевертайлов : Можешь припомнить какие-нибудь смешные или курьёзные случаи на работе?

Андрей Шулинский : Пожалуйста. Только что начальник спрашивает одного из коллег, давно ли тот обновлял код. "Э-э-э.... дня три назад..." - грозный взгляд - "м-м-м... может быть два" - грозный взгляд - тишина - я подсказываю: "один, иначе сделка сорвется" - обстановка разряжается. :-)


Алексей Перевертайлов : Хотелось бы задать тебе несколько вопросов общего характера, если не возражаешь... Как думаешь, реально за границей самому организовать своё дело? В случае с программистом - создать свой коммерческий программный продукт и его продавать, развивать, поддерживать? Что, по твоему, для этого нужно?

Андрей Шулинский : Мое мнение - да, это реально. Здесь предприниматель может не опасаться рэкета со стороны бандитов и властей, зарегистрировать и вести свое дело довольно легко. Но, разумеется, без двух главных слагаемых любого успеха - хорошей идеи и готовности посвятить ее реализации все время и силы - ничего не получится. "Идейный трудоголик" же имеет шанс. Пример - президент моей нынешней компании, писавший первую версию системы в подвале своего дома. :-) Сейчас "Новатор" преуспевает.


Алексей Перевертайлов : Каково твоё отношение к сообществу Open Source?

Андрей Шулинский : Разумеется, положительное. Считаю труд этого сообщества огромным благом для прогресса вообще, и основной причиной успеха Java-технологий в частности - что тоже явно идет на пользу индустрии. Вряд ли иначе можно было бы успешно конкурировать с известным монстром. :-) Безусловно, в использовании Open Source продуктов есть определенный риск. В то же время многие такие решения имеют прекрасную репутацию, находятся на рынке много лет - и вам совершенно не обязательно досконально знать их "внутренности". Общество поможет решить практически любую проблему, что делает далеко не всякая коммерческая служба поддержки.


Алексей Перевертайлов : Как ты относишься к патентному праву в области программного обеспечения? Душит ли оно прогресс? Какие ты видишь оптимальные механизмы защиты инноваций в сфере программного обеспечения?

Андрей Шулинский : К сожалению, я не готов отвечать на данный вопрос. Это достаточно серьезная тема, материалом по которой я владею недостаточно хорошо.


Алексей Перевертайлов : В своей работе тебе приходится сталкиваться с поиском уязвимостей в создаваемом продукте? Сейчас много уделяется внимания написанию безопасного кода, который даёт меньше шансов использовать различные ошибки переполнения буфера и т.д. В своей работе ты следишь за потенциальной безопасностью кода? Есть у вас какие-либо инструкции по этому вопросу?

Андрей Шулинский : Тестирование, только тестирование - и еще раз тестирование! Считаю модульное тестирование ("unit testing") ключевым инструментом обеспечения безопасности кода. Как правило, все занимающиеся разработкой ПО компании пытаются создать и поддерживать в актуальном состоянии набор тестов. К сожалению, это редко удается - в основном, по причине жестких сроков сдачи проектов. А ведь долгосрочный эффект от грамотного тестирования трудно переоценить. В результате и к определенной дате из-под рук ваятелей выходит отнюдь не Галатея, и доводка приложения до сколько-нибудь стабильного состояния затягивается надолго, вызывая стресс у всей команды.
Также очень важны дисциплина кодирования и построение хорошей архитектуры. Лично я многое почерпнул из книг Мартина Фаулера (Martin Fowler) и Рода Джонсона (Rod Johnson).


Алексей Перевертайлов : Ну и напоследок такой вопрос - если была бы гипотетическая возможность начать всё с начала - ты всё равно бы стал программистом?

Андрей Шулинский : Да. Именно специальность помогла мне практически безболезненно переехать в другую страну, преодолеть обычные эмигрантские психологические и материальные проблемы. Моя квалификация и профессионализм востребованы, к моему мнению прислушиваются коллеги, я здесь свой, хоть пока знаю английский язык хуже Java. :-) Кроме того, я очень люблю свою работу. Все, кто занимался программированием, наверняка помнят моменты, когда она - программа - начинает работать так, как ты задумал. Я до сих пор в такие мгновения по-настоящему счастлив.
И еще. Я очень благодарен своим родителям за огромную помощь в выборе профессионального пути и становлении на нем. Не каждому удается найти _свое_ дело. Без их участия вряд ли это получилось бы и у меня.
P.S. Конечно, помогло и то, что я такой умный и красивый. :-)


Алексей Перевертайлов : Спасибо за ответы, желаем тебе всяческих успехов в профессиональной деятельности!

Андрей Шулинский : Спасибо, удачи тебе лично и Ф-Центру в целом. :-)

Top