Программист Perl
Мы попросили представителей компаний рассказать о знаниях, навыках, опыте, актуальных для программистов Perl.
1. Какими знаниями и навыками должен обладать программист Perl?
2. Каков инструментарий программиста Perl?
3. Каковы требования компании к уровню образования потенциальных сотрудников?
4. Какой необходим опыт работы?
5. Есть ли особые требования, которые обусловлены спецификой деятельности компании?
Александр Горный, директор по информационным технологиям Mail.Ru Group
1. Главное, чтобы программист Perl просто был. Язык давно потерял популярность, разработчики в большинстве своем перешли на Python или Go или, как я, стали руководителями.
«Перловиков» в России осталось очень мало, новые люди в этот язык почти не приходят, и любой проект, в котором остался Perl, всегда страдает от того, что ему не хватает программистов на рынке. У нас в Технопарке (это один из образовательных проектов Mail.Ru Group, созданный на базе МГТУ имени Баумана) даже запущен специальный полугодовой курс для подготовки сильных «перловиков». Мы набираем примерно 40-50 человек каждые полгода, до конца доходят 10-12. Лучших трех-четырех мы берем к себе в компанию.
Над курсом работают три разработчика из трех разных бизнес-подразделений: Почты, Поиска и Моего Мира.
2. В этом нет серьезных технических причин, но исторически сложилось, что разработчики на Perl – самые хардкорные из всех программистов на скриптовых языках. «Перловик» может не знать JS или даже основ CSS, но зато он обязан отлично разбираться в SQL, оптимизации запросов и архитектуре Unix. Многие из них знают С на уровне, достаточном для написания собственных модулей на технологии XS.
3. Программисты Perl обычно в том возрасте, когда вопрос об образовании уже не слишком актуален. Какая по большому счету разница, что за вуз был закончен программистом 15 или 20 лет назад, нынешний специалист совсем не похож на того выпускника, хоть и носит ту же фамилию. Да и языку Perl его там точно не учили. Мне самому, например, до сих пор проще всего писать именно на Perl, и, думаю, я мог бы снова работать программистом на нем, но диплом МГУ 2000 года работодателя в этом никак не убедит.
Если же мы говорим о выпускниках нашего Технопарка, то в ходе обучения они проходят огонь, воду и медные трубы, так что сомневаться в их квалификации не приходится. Кроме того, как я уже сказал, на работу в Mail.Ru Group приглашаются лучшие из них.
4. Если это Perl-разработчик и у него нет за спиной хотя бы пяти – семи лет опыта, то, наверное, это американский шпион. Если серьезно, то требования к опыту от языка почти не зависят. Обычно пары лет работы достаточно, чтобы полностью освоиться с любой технологией, Perl тут не исключение.
5. На Perl написана значительная части Почты Mail.Ru, это сердце нашей компании. Естественно, мы ждем от программистов-«перловиков» максимальной ответственности и умения работать со сложными высоконагруженными проектами.
Руслан Закиров, Team-lead команды Perl-разработки в ООО «Спортс.ру»
1. Знать Perl, уметь пользовать perldoc. Поскольку Perl придерживается принципа TIMTOADY (There's more than one way to do it), подразумевающего, что существует больше одного способа сделать что-либо, то программист должен иметь хорошие навыки проектирования поддерживаемого и читаемого кода для работы над долгосрочными проектами.
2. Perl, Vim/Emacs, SSH, Git, man, perldoc, CPAN, DBI, Dancer, Mojo.
3.У нас нет жестких требований в плане наличия у человека высшего технического образования, он вполне может быть и самоучкой. Но наличие хорошей теоретической базы поможет ему в работе и в развитии внутри компании.
4. Опыт от трех лет – прям хорошо, но больше не значит лучше. Важен опыт работы в реальных проектах, в реальных боевых условиях и в команде.
5. Желание разбираться не только в бэкенд-разработке, хорошее чувство юмора.
Алексей Мележик, senior software developer, EPAM Systems
1. Программировать в принципе, понимание базовых понятий в разработке ПО, рефакторинга кода, тестирования, знание общих структур данных (массивы, хеши), ООП.
Также важно умение обосновывать свою точку зрения при выборе того или иного решения, анализировать, находить больше, чем один подход, при решении задачи, умение сравнивать выбранные методы.
2. Юнит-тесты Test::More, веб-фреймворки – хотя бы знать, что такие есть, Mojolicious, Dancer2, Catalyst, Kelp и т.д. Средства для работы с реляционными базами данных, DBI must have, ORM (DBIx::Class) – желательно, но не обязательно – опять-таки, чтобы показать свой кругозор. Ну и, конечно, умение написать какой-нибудь простой SQL join-запрос.
3. Опять же знание теории как таковой неплохо, и какой-то минимум важен, но гораздо существеннее умение думать и находить решения.
4. Смотря кого ищем. Если синьора, то, несомненно, соответствующий стаж, если юниора, можно взять с минимальным опытом, даже не обязательно на Perl. В любом случае главное, чтобы человек показал, что он умеет думать.
5. Все зависит от конкретной позиции и ситуации внутри компании, какой человек ищется, а это всегда по-разному.
Илья Чесноков, проект PerlJobs.Ru
1. Знание языка Perl – основы, структуры данных, ООП, основы регулярных выражений. Хороший список вопросов для самопроверки опубликован по ссылке http://modernperlbooks.com/mt/2011/01/how-to-identify-a-good-perl-programmer.html (документ этот на английском, и, разумеется, английский язык тоже необходим).
Неплохо знать язык Си, чтобы иметь возможность писать XS-модули или хотя бы понимать их код.
Обязательно понимание реляционных баз данных и способов их использования в Perl – «чистый» DBI и ORM (DBIx::Class, Rose::DB...).
Если речь идет о веб-разработке, то нужны базовые знания HTML/CSS/JavaScript и популярных веб-фреймворков (Catalyst/Mojolicious/Dancer и т.д.) – в каждой компании обычно используется только один, но желательно иметь о каждом общее представление и понимать основные принципы шаблона MVC и протокола PSGI, на которых они основаны.
Нужно понимание объектно-ориентированного программирования и современных способов работы с ним в Perl. Зачастую на интервью спрашивают, как создать объект в Perl: при этом классический пример вида bless $ref, $class; уже не является 100% правильным ответом – более правильно будет предложить использовать один из ООП-фреймворков.
Так как на Perl легко написать неудобочитаемую кашу вместо кода, программист должен придерживаться определенного стиля кодирования – принципы написания наиболее читабельного кода описаны в книге Damian Conway «Perl Best Practices», которая весьма рекомендуется к прочтению. Как правило, компании выбирают предпочтительные для них принципы и оформляют их как локальный style guide, которого необходимо придерживаться.
Также советую прочитать и иметь под рукой «Рефакторинг» Мартина Фаулера.
Еще одна хорошая книга – «Modern Perl», ее особенность в том, что в ней говорится, как писать идиоматический код и использовать возможности Perl по максимуму (чтобы Perl-код выглядел и работал как код на Perl, а не как код на Си).
2. Программы на Perl запускаются, как правило, в nix-среде, так что претендующий на роль Perl-программиста должен уметь хорошо ориентироваться в nix-системах. Умение писать и отлаживать код в консоли помогает отлаживать программы на удаленных серверах или виртуальных машинах.
Говоря об отладке, стоит вспомнить встроенный консольный отладчик Perl – он довольно функционален, так что его обычно достаточно для большинства задач по отладке программ, хотя программисты часто предпочитают просто выводить отладочные данные на экран. Также имеются другие отладчики – например, один из лучших – в (платном) Komodo IDE – если не ошибаюсь, он является оберткой над тем же самым консольным отладчиком.
Безусловно, необходимо уметь пользоваться какой-либо системой контроля версий кода, моя любимая – Git.
Помимо этого, Perl сам предоставляет множество инструментов для эффективной работы. Их в первую очередь стоит искать на CPAN. Например, это системы управления инсталляциями Perl и его модулей – perlbrew, local::lib, cpanminus.
Perltidy позволяет отформатировать код в соответствии с принципами из Perl Best Practices (по крайней мере теми из них, которым вы готовы следовать), perlcritic покажет нечитабельные или потенциально опасные места в коде, а Devel::NYTProf позволит выявить узкие места в производительности программы.
Хороший Perl-разработчик должен уметь писать тесты для своего кода (на CPAN большой выбор модулей с именем Test::*), запускать их утилитой prove, а также документировать свои программы с помощью языка разметки POD.
3. Зависит от компании, но я бы сказал, что сейчас требования к образованию не слишком высокие (особенно за рубежом, где обучение в университете зачастую стоит неоправданно дорого), а на первом месте стоят скорее способность и желание обучаться самостоятельно. Например, я знаю замечательного программиста, который вообще не имеет никакого технического образования, а закончил, если я не ошибаюсь, только факультет психологии.
Хотя в целом высшее техническое образование – несомненный плюс, а еще лучше, если будущий Perl-программист поработал до этого некоторое время системным администратором (плохо, если он работал C, JS или, не приведи господь, PHP-программистом).
4. Это также зависит от специфики деятельности компании и ее потребности в Perl-программистах. Некоторые компании не предъявляют высоких требований к опыту и готовы сами обучать сотрудников (спасибо им за это!), другие же предпочитают сразу найти опытного сотрудника, который будет учиться сам и делиться своими знаниями с коллегами.
Как правило, приветствуется некоторый опыт работы в той же области, которой занимается компания, наличие написанного программистом кода где-нибудь на GitHub (а еще лучше – на CPAN), на который можно посмотреть и оценить качество программы, образ мыслей разработчика и стиль кодирования, – в общем, по-моему, тут все так же, как и с другими языками.
5. Как Perl-разработчик я работал в основном в хостинг-провайдерах – там нужно понимать общепринятые протоколы обмена данными (как правило, это что-нибудь основанное на XML/JSON, хотя бывают и неприятные исключения), потому что деятельность хостинг-провайдеров по большей части связана с перепродажей сервисов других компаний, заказ которых происходит через API. Кроме того, нужно уметь принимать платежи, используя API платежных систем. Плюс еще зачастую необходимо писать API для своих клиентов – так что да, в хостинг-компаниях API со всех сторон.
Обязательно знание SQL баз данных. Часто NoSQL, очереди задач, конкурентное программирование – если нужно выжать из программы максимум производительности. Разумеется, нужно хорошо разбираться в принципах работы протокола DNS. Как правило, все это рано или поздно приходит в процессе работы.
Виктор Турский, технический директор компании WebbyLab (http://webbylab.com)
1. Perl-разработчиков на рынке не так уж много. И в целом наиболее важное – это знание самого языка Perl, понимание его идиоматики. Также важно следование современным практикам разработки, так называемый Modern Perl. Это использование систем контроля версий (типа Git), разработка через тестирование, правильная работа с исключениями, использование PSGI-абстракции для веб-приложений, современные подходы к структурированию приложений (Dependency Injection) и т.д.
Также важно, чтобы кандидат обладал системным мышлением и системными знаниями. Мы занимаемся интернет-приложениями и соответственно хотим, чтобы кандидат не только умел писать код на Perl, но и понимал, как работает интернет.
2. С того, что мы используем каждый день, и то, что присутствует почти в каждом нашем проекте:
- plenv – инструмент для управления версиям Perl;
- Carton – для управления зависимостями и фиксации их версий;
- Perl::Tidy – для форматирования кода;
- Test::Most – для тестирования;
- Devel::Cover – для оценки покрытия кода тестам;
- Devel::NYTProf – лучший профайлер под Perl;
- Moo – ООП-фреймворк;
- Mojolicious – веб-фреймворк;
- Rose::DB::Object – ORM;
- Validator::LIVR – валидатор;
- Try::Tiny – для обработки исключений.
Остальные инструменты уже специфичны для проекта. Разработку ведем под Linux.
3. Мы всегда отдаем предпочтение кандидатам с высшим образованием, но образование не обязательно должно быть профильным. Просто университет дает студентам подходы к изучению и структурированию новой информации.
Конечно, мы рассматриваем кандидатов и без высшего образования, но тогда от него требуется релевантный опыт работы. Если кандидат без образования и без опыта, то либо он только закончил школу и ему 17, и, возможно, он слишком мал для ответственной работы, либо он старше (например, 21), тогда возникает вопрос, если он не учился и не имеет опыта работы, то что он делал четыре года и умеет ли он работать вообще?
4. Для нас не так важно количество лет, как наличие грамотного подхода к разработке и готовность разобраться в новых вещах. Конечно, если мы говорим о старших разработчиках, то для нас всегда важно увидеть, что человек до этого строил проекты сопоставимой сложности и в состоянии справиться с такими же задачи в нашей компании.
5. Мы создаем веб-приложения, соответственно желательно разбираться в веб-технологиях. Каких-то других специфических требований нет.
Александр Ружников, Perl-программист в компании Intermedia
1. Ну в первую очередь конечно, знание языка Perl, типы переменных, функции, операторы, ООП. Часто приходится смотреть в чужой код, поэтому необходимо знать что делает тот или иной оператор или конструкция.
Тут нет большого отличия от других языков программирования. Perl позволяет одну и ту же вещь сделать многими способами, поэтому желательно сразу выработать у себя единый подход к написанию кода для того, чтобы у других разработчиков не вытекали глаза от того, как вы реализовали задачу.
Также часто требуется знать один-два веб-фреймворка (например, Catalyst и Mojolicious) + какой-нибудь из шаблонизаторов, например, Template-Toolkit.
2. Тут тоже как у остальных разработчиков: IDE или текстовый редактор, например, Eclipse или Sublime Text. Также в мире разработки сейчас никуда без системы контроля версий. Git тут правит балом, хотя другие системы (svn, mercurial) тоже встречаются порой в различных компаниях.
Как правило, код на Perl запускают на операционной системой GNU Linux. Самые распространенные из них – это Centos и Debian/Ubuntu. На рабочих машинах разработчиков тоже нередко используется Linux, т.к. он прям-таки создан для того, чтобы писать под него на скриптовых языках. Иногда можно встретить людей, пишуших код на Perl на Windows, но мне сложно представить, чтобы я когда-то такое начал делать – сам использую Linux Mint.
Ну и часто (даже правильнее сказать, почти всегда) в проекте используется одна из распространенных СУБД: MySQL, PostgreSQL или Oracle. Иногда также используются No MySQL базы типа MongoDB и различные кэши: Redis, Memcache и пр.
3. Ну лично я ни разу не сталкивался с таким, чтобы человека без высшего образования не взяли на работу программистом из-за отсутствия этого самого ВО. В мире ИТ в первую очередь смотрят на то, что ты умеешь делать и где ты ранее работал, а высшее образование играет меньшую роль. Это, конечно, не касается компаний, где разработка ПО ведется на сложных математических алгоритмах. Здесь да, будут смотреть, откуда пришел человек, что он заканчивал и какой экспириенс в плане алгоритмов он имеет. Но в большинстве же компаний большой математический бэкграунд не требуется, важнее иметь знания в области используемых языков и фреймворков.
4. Если устраиваешься джуниором (начинающим) разработчиком, то опыт работы часто вообще может быть нулевым. Важно желание развиваться и писать код на используемом языке программирования.
Для средних разработчиков (мидлов) обычно просят не менее 1-2 лет опыта работы на данном языке.
По стеку технологий опять же зависит от того, что используется в компании. Как правило, это веб-фреймворк, как писал выше, Catalyst, Mojo или аналогичный, далее шаблонизатор для рендеринга страниц, ну и, конечно же, опыт работы SQL. Чаще с MySQL, реже с PostgreSQL и/или Oracle.
Иногда также требуется опыт работы с версткой, чаще с JavaScript. Но, как правило, это требование является желательным, но не обязательным.
5. Конечно. Каждая компания имеет свою специфику работы и каждый раз требуется некоторое время для того, чтобы вникнуть во внутренние бизнес-процессы. Как правило, у опытного разработчика это занимает не более 1-2 недель.
Мое мнение такое, что чем больше у человека опыта, чем больше он интересуется различными технологиями и языками программирования, тем проще ему бывает вникнуть в особенности работы на новом месте.
Порой в вакансии декларируется, что от человека требуется знание языка Perl, а на месте выясняется, что неплохо бы ему еще знать PHP, JavaScript и в особых случаях C++. Знающему и подготовленному человеку будет проще, неподготовленному придется в спешном порядке получать требуемые знания.
Пронин Олег, технический директор Crazy Panda
1. Программист Perl, как и любой другой программист, в первую очередь должен обладать аналитическим складом ума и умением быстро писать эффективный и понятный код, хорошо владеть отладчиком и уметь быстро искать утечки памяти (а лучше – писать код, не требующий таких операций). Программисты Perl высокого уровня также хорошо разбираются во множественном горизонтальном наследовании, различных фреймворках типа Catalyst, DBIx::Class, а также на отличном уровне владеют языками C/C++ для написания XS-модулей к Perl.
2. Из обязательного, пожалуй, можно отметить отладчик и разнообразные профилировщики. Что касается среды разработки, то она может быть совершенно разнообразной – от консольного VI через терминал или блокнота в Windows до IDE типа Eclipse/IDEA с графическими отладчиками и прочими плюшками. Обычно компании никак не регламентируют и не ограничивают этот инструментарий.
3. По моему опыту, большинство компаний не требуют высшего образования при приеме на работу программистов, и, более того, это обычно и плюсом то почти не является. Если бы, например, к нам пришли программист с красным дипломом и другой программист с двумя классами образования, но более соображалистый/умный, то дипломник однозначно в пролете.
4. Формально у нас опыт работы не требуется. В любом случае, уровень кандидата и его возможности оцениваются на собеседовании. Если начинающий толковый программист решит у нас поработать, мы с удовольствием его возьмем на Junior Perl.
5. В нашей компании специфических требований нет. Плюсами являются технический английский и положительное отношение к играм.