Интервью с разработчиком. В гостях Лев Меренков.

Это первая статья подобного рода, и мы надеемся продолжать цикл разговоров по душам с профессионалами из IT-мира.

И открывает наш цикл старый мой  друг — Лев Меренков.lev-merenkov

— Здравствуй, Лев! Благодарю тебя, что согласился пообщаться с нами. Всегда интересно послушать чью-то cool-story :). Расскажи пожалуйста вкратце о себе: где учился, где работаешь, чем занимаешься и как вообще пришел в программирование?

— Мое знакомство с программированием началось с моего первого компьютера ZX Spectrum. Тогда, помимо игр на магнитофонных кассетах, можно было раздобыть коды новых маленьких игр, набрав и запустив которые ты получал простой, но интересный примитив с иллюзией того, что это твоя работа. Со временем появилось желание разобраться со смыслом тех странных слов, циферок и закарлючек, которые набираешь на экране. Начал читать книжки по бейсику, модернизировать существующие программки и писать новые собственные. Со временем, это переросло из хобби в потенциальное направление для учебы и работы. Я поступил в Донецкий национальный технический университет и закончил специальность «Автоматизированные системы управления».

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

Сейчас я работаю в компании Levi9 на позиции тимлида одной из команд, занимающихся разработкой семейства вебсайтов для голландского правительства.

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

— Я вижу в первую очередь полное вымирание динозавров типа Delphi, Power Builder, Visual FoxPro и др.  Даже лидерство таких технологий, как РНР и С/С++ ушло в прошлое и удалилось в обособленный сегмент. Понемногу теряют позиции и такие языки с динамической типизацией как Ruby on Rails и Python. На плаву остаются два титана  — Java и .Net. На лицо также активное развитие JavaScript и фреймворков на его основе. Также возрастает количество поклонников Scala и Groovy, однако по-моему пока что еще рынок не сформировал достаточный спрос на специалистов в данной сфере.

В целом, по проектам замечается все большее стремление к применению облачных технологий, нереляционных баз данных, фреймворков на базе JavaScript (Kendo, Sencha, jQuery Mobile, AngularJS и т.д), активное использование Html5 и WebSockets, уход от технологии Flash.

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

— Какие проблемы, на твой взгляд, сейчас самые острые в сфере разработки ПО в нашей стране или даже в СНГ вцелом?

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

— Что есть, то есть. Тут не могу не согласиться. Можешь назвать свое самое главное достижение в жизни в плане профессиональной деятельности?

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

— Посещал какие-либо учебные курсы по программированию и что тебе в них нравилось, а что нет?

— Так сложилось, что всем знаниям по Java, которыми я сейчас владею, я обязан в первую очередь себе и тем людям, которые меня окружали на работе и в нужный момент наставляли на путь истинный.

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

Кроме того, мне доводилось видеть программы некоторых курсов. Во многих случаях, я наблюдал там такую картину: очень много времени уделялось простым вещам или элементам, которые уже во многом утратили свою актуальность (например, технологии Swing, AWT, Applets), в ущерб таким краеугольным понятиям, как многопоточность и синхронизация. Или когда технология Spring шла без предварительного серьезного изучения Servlet API, ровно как Hibernate могли преподавать без объяснения базовых понятий теории баз данных. Все это  на мой взгляд приводит к тому, что у слушателей выпадает из понимания серьезный кусок базового материала, что в последствии ведет к ошибкам во время работы над кодом.

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

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

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

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

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

— Так как в текущий момент я работаю с весьма специфичными технологиями (Hippo CMS, JackRabbit), то хотелось бы все же не забывать мейнстрим-технологии как то Spring, Hibernate, JPA, JMS. Очень хотелось бы вплотную поработать с нереляционными базами и InMemoryDataGrid-приложениями (Gigaspaces, Hazelcast).

— Не придерживаясь мейнстрима рискуешь стать динозавром, верно :)? Следующим вопрос касается работы в команде. Что ты ценишь в людях, работая с коллегами над одним проектом в команде?

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

— Возьмем уровень повыше. Что тебе нравится в заказчике когда работаешь с ним напрямую? А что в твоем непосредственно руководителе?

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

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

— Масса интересной информации получилась. И напоследок, что бы ты посоветовал нашим читателям, молодым специалистам, которые только начинают свой путь в IT и тем, кто только думает это сделать?

— Тем, кто еще учится в ВУЗах – выставьте для себя приоритеты по предметам. В первую очередь, не рвитесь  за красными дипломами – ими нынче никого не впечатлишь. Уделяйте больше внимания тем дисциплинам, которые могут пригодиться в дальнейшей работе – основы БД, алгоритмические языки, численные методы и алгоритмы и т.д. Не стоит тратить время на зубрежку философии (если это не «Философия Java»), лучше лишний разок покопайтесь в литературе по прогаммированию.

Для тех, кто только начал заниматься разработкой – чаще смотрите на чужой код, например, из библиотечных классов Java. Старайтесь понять, почему там применен тот или иной подход, ищите ответы на форумах и в литературе. Читайте книги по технологиям и обязательно закрепляйте прочитанное на практике – помните, пока вы не закрепили прочитанное на клавиатуре, это не отложится накрепко в голове! Общайтесь с людьми, уже имеющими опыт в разработке, не бойтесь задавать вопросы (только всегда предварительно попробовав самостоятельно найти ответ). Не наступайте на чужие грабли, изобретайте свои собственные! :)

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

— Всегда рад помочь :). Желаю вашему ресурсу развития и роста.

andrew-stoialtsev

 

 

 

 

Интервью проводил
Андрей Стояльцев.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>