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

О портале Каталог профессий

Поиск по порталу

Разработчик UI

Важное место в разработке программного обеспечения занимает создание User Interface (UI). Это специальность новая, и соответствующих специалистов практически нигде не готовят.

Мы обратились к представителям компаний, чтобы они поделились с нами требованиями и пожеланиями, которые выдвигают к кандидатам на должность разработчика UI

1. Какими знаниями и навыками должен обладать UI-разработчик?

2. Каков инструментарий UI разработчика?

3. Каковы требования компании к уровню образования потенциальных сотрудников?

4. Какие требования предъявляются к опыту работы?

5. Есть ли особые требования, которые обусловлены спецификой деятельности компании?


Павел Нечаев, руководитель отдела быстрой разработки «Лаборатории Касперского»

1.  Знания специфики устройства и разработки UI под требуемые платформы, причем нужны знания конкретных фреймворков в зависимости от ситуации, например:

  • для Win это QT, WPF, wxWidjets;
  • для Mac Cocoa – QT;
  • для xNix это QT, GTK, wxWidjets
  • и т.д.

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

3.  Высшее техническое образование, лучше в сфере информационных технологий. Приветствуется понимание принципа верстки UI.

4.  Минимум три года практического опыта в разработке. Хорошее знание одного из объектно-ориентированных языков С++, C#, Objective C, Java. Четкое понимание основных архитектурных шаблонов. Все зависит от конкретной кандидатуры и поставленных задач.

5.  Как показал опыт, кандидат прежде всего сам должен хотеть заниматься разработкой UI, так как некоторые считают эту сферу деятельности неинтересной. Специфика разработки UI в «Лаборатории Касперского» заключается в том, что нужно учитывать возможные перехваты и блокировки системы при работе продуктов.


Юрий Макаров, руководитель GUI-команды, Parallels

1. Что требуется обязательно? Во-первых, знание С++. Поскольку значительная часть кода проекта написана на C++, то отличное знание этого языка – must have. Во-вторых, Parallels Desktop – это большой и сложный проект, поэтому важную роль играет опыт разработки именно сложных продуктов. Это, как правило, могут себе позволить крупные игроки, поэтому кандидатам из таких компаний уделяется особое внимание. В-третьих, так как это UI-вакансия, то опыт разработки пользовательских интерфейсов также очень важен. Внимание к деталям, отточенный глазомер и, как бы банально это ни звучало, вкус. Все это навыки, которые приобретаются со временем и которые очень пригодятся на этой должности. И, наконец, любовь к своему делу. Я знаю достаточно много программистов, для которых их профессия является средством зарабатывания на жизнь и не более. Эти люди не читают книг, не интересуются отраслью, трендами и тем, куда движется индустрия. Мы ищем увлеченных людей, фанатиков своего дела, которым интересно программирование само по себе, вне стен офиса. По некоторым резюме это читается. Увлечение функциональными языками программирования, например.

Что желательно? Во-первых, опыт работы на Mac очень важен, так как целевой платформой продукта является OS X. Стандарты пользовательских интерфейсов на этой платформе выше, чем на Windows/Linux, и в целом UI этой платформы достаточно сильно выделяется. Требуется время, чтобы научиться отличать нормально сверстанный, соответствующий HIG (Apple Human Interface Guidlines) интерфейс от поделки. Большой плюс – знание Objective C и Cocoa – сейчас это основной инструментарий разработчика приложений под Mac. Ну и, поскольку значительная часть нашего кода – кроссплатформенная и активно использует Qt, знание этого фреймворка – также большой плюс.

2.  Xcode, Qt Creator, AppCode, vim, Emacs – по большому счету неважно, какой редактор/IDE вы используете. Хотя со временем, полагаю, Apple сделает так, что пользоваться чем-то, кроме Xcode, для разработки под Мак/iOS будет сложнее.

3. Теоретически образование роли не играет. Однако мой опыт показывает, что есть корреляция между вузом и навыками, которые кандидат демонстрирует на собеседовании. Я очень сомневаюсь, что эти навыки люди получают в университетах – скорее тут речь об обучаемости и трудолюбии. Человек, своими силами поступивший в МГУ или МФТИ, почти наверняка способен обучаться.

4. Требования C++ и Qt для маковского продукта обычно означают кроссплатформенность. В нашем случае это именно так. Причем изначально большая часть UI-кода была написана на Qt, и довольно много усилий было потрачено на приведение ее в «нативный» вид. Сейчас мы стремимся ограничить использование Qt бизнес-логикой приложения, а для разработки UI использовать Cocoa.


Владимир Пимахов, проектировщик интерфейсов компании «1С-Битрикс»

1. Проектирование интерфейсов – это довольно специфическая профессия на стыке дизайна, инженерных специальностей и психологии. Основная задача проектировщика – сделать удобный интерфейс, который решает задачу пользователя. Для этого важны как понимание и выявление потребностей пользователей, так и проектирование сценариев пользовательского взаимодействия. Чем больше отраслей знаний захвачено проектировщиком, тем лучше (аналитика, психология, маркетинг, программирование). Приветствуется базовое знание HTML, CSS, JavaScript.

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

К услугам UI-разработчика сейчас большой выбор как платных, так и бесплатных сервисов и программ разного качества и специализации. Но стандартом я бы назвал две: программы Axure и Sketch. Важным плюсом для разработчика является умение работать с Axure в связке с Photoshop – проектировать и в дальнейшем отрисовывать детали интерфейса. Такие знания позволят внедрить интерфейс в точности в том виде, в каком он был задуман проектировщиком.

3. Специалистов с профильным образованием в данной сфере отыскать довольно сложно. Для России UI-дизайн – это новая специализация, так что проектировщики интерфейсов обычно «вырастают» из дизайнеров, получая знания из тематической литературы и собственного опыта.

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

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


Станислав Фомин, директор по технологиям компании «РОСА»

1. Сразу отмечу, что понятие «UI-разработчик» очень расплывчато и сильно меняется в зависимости от продуктов и технологического стека компании. Это может быть и frontend-девелопер веб-сервисов, и C++-разработчик сложного интерфейсного многоплатформенного десктоп-продукта, «ваятель формочек с сотнями кнопок и полей» на Java/.NET/PowerBuilder/Delphi/… и мобильный разработчик под Android/iOS.

С другой стороны, технологическая спецификация программиста тоже достаточно абстрактна, вспоминаются кучи историй, когда HR крупных компаний нагоняют толпы людей под вакансию «С++-разработчик», даже не представляя, чем им придется заниматься – переписывать ядро системы хранения или рисовать интерфейс под Qt Designer.

Но не ошибусь, что, так или иначе, идет речь о разработчике, а любой программист обязан обладать минимальной профессиональной грамотностью:

  • бегло владеть современными системами управления версиями, централизованными и распределенными;
  • представлять базовый процесс разработки хотя бы на уровне Code&Fix и основные средства коммуникации и документирования – трекер задач и ошибок, вики-системы – таких систем полно, но принципы работы у них схожие;
  • не говоря уже об обычной офисной грамотности – браузер, почта, instant messaging, базовые знания текстового и табличного процессора, вот это все.

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

  • Для веб-разработчика в любом случае требуется знание TML/CSS/JavaScript, по серверной части опять-таки возможны варианты, ибо любой стек (Java/.NET/Python/Ruby/Node.js/…) имеет свой набор постоянно меняющихся и эволюционирующих фреймворков, даже перечисление которых выйдет за рамки этого краткого интервью.
  • Для ваятеля формочек под Rapid Application Development Tools – принципиальное понимание моделей хранения данных (реляционные базы данных, SQL, объектно-реляционные адаптеры) и знание этого RAD, с чем сейчас иногда бывают сложности, ибо информационные системы живут десятилетиями, переживая компанию – разработчика этих средств (бывало, мне даже писали знакомые: «Говорят, ты 20 лет назад работал с XXX — у тебя не осталось документации?»)
  • Для С++/Java/.NET/… – кроме знания языка и библиотек, полезны навыки работы с соответствующими IDE, «погруженные в костный мозг» клавиатурные хоткеи и все такое, чтобы процесс код-компиляция-отладка был просто «на кончиках пальцев».

Ну и отдельный мир – мир мобильных приложений, непересекающиеся миры iOS-стека с ObjectiveC и Android с своеобразной Java и попытки сделать кроссплатформенные мобильные приложения на базе фреймворков типа PhoneGap.

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

2. В нашей компании общие инструменты, используемые для разработки, это:

  • система управления версиями GIT;
  • доработанная MediaWiki из проекта MediaWiki4Intranet, для документирования и базы знаний;
  • Bugzilla, как трекер багов;
  • Redmine, для внутренней системы задач;
  • Etherpad/Ethercalc/Etherdraw – Сервис онлайн-блокнотов, таблиц и рисунков, для коллаборативных постановок при удаленных совещаниях;
  • наша собственная система сборки и совместной работы ABF, http://abf.io, которая является нашим продуктом – мы придерживаемся принципа eat your own dog food и при разработке пользуемся своими же продуктами, десктопными, серверными и веб-системами.

Дальше, как я уже объяснял, все зависит от технологического стека.

Есть и веб-разработчики со стеком Ruby On Rails, впрочем, им приходится работать и с Python и Perl.

Есть разработчики именно десктопных продуктов и даже элементов самих «рабочих столов». В основном это C++-разработка под Qt, Qt Creator как IDE, но не только – при разработке под GNOME приходится вместо продвинутого Qt-стека мучиться с GTK, расширения под GNOME SHELL вовсе пишутся на JavaScript.

Иногда веб- и UI-разработкой (сервисы, небольшие графические утилиты) приходится заниматься и отделу технологий и сопровождения – тут уже может быть и PHP, и Perl (Perl-CGI и Perl+GTK) и Node.js…

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

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

Аналогично полезным навыком для UI-разработчика будет графический дизайн, чтобы, условно говоря, он был способен нарисовать приличную иконку, не дожидаясь работы «отдела технических дизайнеров», область кроссфункциональности UI-разработчика должна расширяться на UI-проектирование, технический дизайн и, кстати, Usability-тестирование. Надо всегда уметь поставить себя на место пользователя, и не делать «страшное и неудобное», сваливая результат на проектировщиков и тестировщиков («А я что? Как написано в ТЗ, так и закодил» – вот это все недопустимо).

Собственно, кроссфункциональность, итеративность, адаптивность с быстрой обратной связью – это все современный тренд AgileDevelopment.

3-4. Вероятно, это вопросы о наборе в команду, и в любой нормальной компании на него должны ответить – it depends. Только совсем странные люди указывают при рекрутинге какие-то страшные и непроверяемые цифры стажа или загадочные уровни «middle/senior». Все зависит от вакансии и кандидата: можно взять и недоучившегося студента – на удивление неленивый студент из нестыдного технического вуза скорее всего уже самостоятельно обучился базовым инструментам. Кстати, у нас есть программа летней стажировки студентов ВШЭ, и этот опыт позитивен.

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

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

5. О редкой специфике предметной области («системное программирование») я уже упомянул выше. Причем это не только разработка с нуля, но и в основном доработка существующих огромных Open Source-проектов, работа с чудовищно огромной чужой кодовой базой, исправление чужих ошибок, внесение нужных функций со слабыми возможностями глобального изменения общей архитектуры. Приходится чинить устаревший legacy-код, то, что обычно разработчики не любят, обычные продуктовые и заказные команды почти всегда могут «взять и все переписать».

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


Константин Хоматьяно, дизайнер интерфейса в команде .NET компании JetBrains

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

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

2. Основным инструментом является Adobe Illustrator – для рисования эскизов, а также для подготовки графических материалов, поскольку векторные изображения хорошо транслируются для использования с WPF, что позволяет создавать масштабируемые интерфейсы, адаптирующиеся к разным разрешениям экрана. Как вспомогательные инструменты используются Microsoft Expression Design и Expression Blend.

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

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

5 Специфика наших продуктов в том, что они создаются программистами для программистов. Поэтому, как правило, не возникает сложностей с определением решаемых задач, моделей использования, функциональных требований. Фактически задача проектировщика UI в данном случае – упорядочение логики интерфейса, «прихорашивание» его и согласование интерфейса продуктов внутри себя для поддержания единого стиля. С моей точки зрения, это похоже на верстку книжного текста – здесь нет места красивости ради красивости, и результат работы может быть (даже, пожалуй, должен быть) незаметен на первый взгляд. Это сугубо утилитарный дизайн, торжество минимализма и здравого смысла.


Вадим Пацев, руководитель отдела разработки интерфейсов персональных сервисов Яндекса

1. Прежде всего разработчик интерфейсов должен разбираться в том, как устроен веб, что такое протокол HTTP, как работают серверы и браузеры, и знать три основные технологии: HTML, CSS и JavaScript. Как и любому программисту, ему пригодятся знания структур данных, алгоритмов, паттернов программирования, а также принципы ООП и функционального подхода. Помимо этого, будет полезно знать принципы UX/UI-дизайна, потому что разработчик интерфейсов часто вынужден решать подобного рода задачи.

2. Основные инструменты разработчика – это IDE (Webstrom, Atom, Sublime Text, Vim), терминал, git и браузер. Что касается библиотек и фреймворков, с появлением Node.js и PhoneGap инструментарий фронтенд-разработчиков сильно расширился. Теперь веб-технологии могут работать не только в контексте браузера, но и на сервере или на мобильных платформах. В связи с этим появилось множество инструментов автоматизации, тестирования и качества кода. Здесь стоит отметить такие проекты, как Gulp, Grunt, PhantomJS и CasperJS. Стандартом де-факто в браузере остается jQuery. К тому же есть много интересных фрейворков для single page applications и MVC: AngularJS, Backbone, ReactJS. Важно добавить библиотеки для работы с графикой Raphael и D3 и «функциональные» underscore и lowdash.

3. У нас нет формальных требований к уровню образования кандидатов. Нам важно, чтобы человек хорошо разбирался в базовых вещах. Например, в том, что происходит после нажатия на ссылку в браузере, какие процессы идут в браузере, какая информация отправляется на сервер, и как она обрабатывается. Кандидат должен знать основные технологии и уметь писать работающий код. Особое внимание мы уделяем JavaScript, где нам важнее хорошее понимание того, как работает сам язык, а не знания отдельных библиотек и фреймворков. Плюсом всегда являются опыт в дизайне или хорошая computer science подготовка и умение быстро осваивать новые инструменты.

4. Нам прежде всего интересны люди, которые участвовали в создании сложных веб-проектов и имеют опыт работы в команде – неважно коммерческий ли это проект или Open Source. Главное, что люди умеют писать код. Также большим плюсом будет интерес к миру технологий в целом, стремление к развитию и участие в профильных сообществах. На позиции стажеров мы часто ищем людей без особого опыта, но с большим желанием чему-то научиться. Также у нас есть собственная Школа разработчиков интерфейсов – https://tech.yandex.ru/education/shri.

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


Подготовил Игорь Штомпель