Даже в коммерческой разработке есть проекты, которые предлагают нетривиальные задачи и требуют от своих сотрудников нестандартных навыков и мышления. Разработкой одного из таких проектов занимается одна из самых успешных датских компаний совместно с Intetics Inc.
Кроме разнообразных и необычных задач, стоящих перед командой, проект отличает главная технология разработки — функциональный язык, специально разработанный заказчиком. Что это — дань главному тренду девелопмента последних лет или уникальный способ решения задач проекта?
Разобраться, чем проект интересен различным по опыту специалистам, зачем был создан функциональный язык, в чем его перспективы – помогут Егор, Ярослав, Павел и Вита – ребята, пришедшие на проект с различным опытом, пройдя путь до Senior разработчиков (некоторые еще в пути).
Знакомьтесь:
Ярослав, 25 лет, Senior Software Engineer. Окончил КПИ. Работает 3 года, ранее писал на JavaScript.
Павел, 34 года, Senior Software Engineer. Окончил ХАИ. На проекте 3 года. Раньше был программистом и администратором 1С.
Вита, 21 год, Junior Software Engineer. Учится в ХНУРЭ. 7 месяцев на проекте, немного писала на .NET.
Егор, 29 лет, Senior Software Engineer. Окончил ДОННТУ. Работает на проекте 2 года, ранее писал на Java, Maximo.
— Итак, что за проект и какими задачами занимаются разработчики?
Цель проекта — создание собственных продуктов, которые объединяет научный подход и инновационность (программы для адаптивного обучения, для автоматизации кодирования в медицине, разработка комплексной платформы для программирования и многие другие). С другой стороны, значительная часть команды занята на подпроектах, связанных с работой над ядром языка, созданием библиотек и фреймворков для него, компиляторов для различных платформ, и даже с разработкой собственной IDE.
Егор: Я занимаюсь ядром языка, разработкой фреймворка, реализующего концепцию WYSIWYG. Но для каждого сотрудника есть специализированные задачи, с учетом его предыдущего опыта и навыков. Также возможны перемещения из одной команды в другую, чтобы человек не уставал от одного типа задач.
Павел: Я работаю над частью системы дистанционного обучения, представляющую собой мультиплатформенную (IOS, Android, JS, C++, SWF) среду, предназначенную для сопровождения процесса обучения.
Продукт, над которым я работаю, состоит из нескольких модулей:
- модуль, в котором студенты выполняют тестовые задания;
- модуль, в котором преподаватели создают эти тестовые задания.
Текстовый и графический редакторы используются во втором модуле для создания тестовых заданий.
Ярослав: Я занимаюсь разработкой приложений для корпоративных клиентов в сфере адаптивного обучения. Основные задачи сконцентрированы на создании UI и построении необходимых клиенту специфичных для него инструментов. Обычно я выступаю в роли тимлида на этих проектах.
— Основная «изюминка» проекта — это язык. Работа ведётся на кроссплатформенном языке программирования, специально разработанном заказчиком из Дании, и который сочетает в себе особенности функциональных и императивных языков. На что же он похож и сложен ли в освоении?
Ярослав: В принципе, похож на Haskell, но не такой «страшный». Это не чистый функциональный язык, здесь нет монад, в целом все проще: event-подобная модель, реактивное программирование, observer.
Павел: С точки зрения функционала - заимствования из Haskell, ML. Этот язык строго типизирован, это от Java. Не поддерживает ООП (классы, интерфейсы), поэтому чем-то похож на Python.
Перейти на новый язык не составит труда любому человеку, который знает методы построения алгоритмов, а они от языка программирования не зависят.
— Обосновано ли создание нового языка для целей проекта?
Павел: На момент создания языка других мультиплатформенных решений было совсем немного, а те, которые существовали, не подходили по разным критериям (технология, стоимость поддержки). Свой язык гораздо легче поддерживать, обновлять и подстраивать под свои нужды в условиях быстро меняющейся реальности.
Ярослав: Здесь есть свои плюсы и свои минусы. Достоинства в том, что синтаксис очень прост, а небольшое количество языковых конструкций и принципов гарантирует быстрый старт для новых разработчиков и, если код-стайл был учтен, легкое понимание старого кода. Да, делать интерфейсы с языком, заточенным под это - легко. Но только при условии хорошей оптимизации основ самого языка. Главный минус такого подхода в том, что язык "законсервирован" внутри проекта и ему не хватает внешнего коммьюнити для развития.
Егор: Мне сложно оценить целесообразность, для этого нужно было бы попробовать реализовать тот же функционал/приложение/фреймворк на каком-то другом языке и потом сравнить. В общем, проектов сейчас очень много, и они очень разнообразные. Нравится то, что достаточно гибкий, так как, если не хватает какого-то функционала «из коробки», всегда можно это реализовать.
— Сложно ли научиться новому языку с нуля? Особенно, если до этого был опыт лишь в ООП?
Ярослав: У каждого новичка на проекте есть опытный ментор, который в первую очередь помогает настроить среду разработки. Затем каждый новичок получает пакет задач нарастающей сложности, решение которых и есть обучение языку. Ограничений по времени нет, занимает этот этап от 2 недель до месяца. А сам по себе туториал по языку небольшой, страниц на 20.
Егор: Для помощи также есть общие чаты, в которых можно задавать любые вопросы.
Ограничение по времени на выполнение тренинг-тасков практически отсутствует, а значит, снимается фактор стресса для новичка. После успешного прохождения курса сотрудник включается в реальные задачи, которые «находят» своего исполнителя, основываясь на его навыках и желании.
Самое главное для будущих сотрудников — это огромное желание решать нетривиальные задачи и мыслить «функционально». Функциональное программирование – достаточно специфическое направление, основанное больше на математических понятиях. Таких, как лямбда-исчисление, рекурсия, функции высших порядков, и в принципе непохожее на привычное ООП.
Павел: Я бы посоветовал почитать, что такое функциональные языки, посмотреть примеры кода, понять, что такое функциональное программирование. Будет плюсом знакомство с книгами Дональда Кнута.
Вита: Что точно понадобится, так это стремление пробовать новое. Нужно подготовиться к небольшому «хаосу» — свободе в задачах и действиях. Также надо будет активно общаться с командой.
— Какая задача была самая сложная из тех, с которыми ты сталкивался на проекте?
Павел: Самая сложная задача — это, пожалуй, разработка графического и визуального редакторов с нуля, так как это требовало создания каркаса приложения на раннем этапе, когда ещё не ясны все требования к нему. Именно это "создание продукта в условиях неопределенности, когда нет четких требования и функционального описания" и является для меня интересным.
Вита: Самой сложной, наверное, была задача, где мне пришлось добавить поддержку django в приложение, написанное на языке заказчика. Я до этого вообще особо с Python не работала, а тут пришлось долго разбираться в чём-то новом.
Ярослав: Для меня самым интересным был опыт работы тимлидом на одном из подпроектов. Это было соединение двух интересных для меня областей - коммуникационной и архитектурной. Тогда я попробовал на практике несколько нововведений - архитектурные диаграммы и код-ревью.
— Какие подходы и методологии разработки применяются на проекте?
Павел: Та часть проекта, на которой работаю я, исповедует строгий Scrum-подход с ежедневными митингами, релизами и строгой отчетностью. Это оправдано, так как данная часть проекта уже давно находится в продакшене и здесь очень важна стабильность системы.
Вторая часть проекта использует другой подход, более похожий на то, что называется "экстремальное программирование", в нем больше гибкости и скорости. Это обосновано тем, что в этой части проекта разрабатывают с нуля новые продукты, и здесь на первое место выходит скорость и гибкость разработки в условиях постоянно меняющихся или нечетких требований.
Вита: Номинально у нас экстремальное программирование, но из приёмов XP используются не все. Используется непрерывная интеграция - все приложения собираются на сервере, и если где-то билд упал, то сразу приходит оповещение, можно быстро исправить. Ещё общее владение кодом используется, т.е. вообще любой кусок кода в репозитории кто угодно может править.
Ярослав: Четкого и определенного подхода как такового нет. У разработчика много свобод для реализации того процесса, которого захочет именно он. Конечно, нужно будет хорошенько заинтересовать команду, чтобы все перешли на него.
На нашем проекте мы проводим регулярные ревью кода, контролируем код-стайл и архитектурный подход (схожий с Model View Update в Elm). Чтобы гарантировать светлое будущее для больших проектов.
Главное, здесь все нужно будет делать в рамках парадигмы функционального программирования. Поэтому о классах и mutable состояниях нужно будет забыть и научиться думать по-новому — более математично, чистыми функциями.
Сам проект существует уже более 7 лет, и почти 4 года в нём задействован Intetics. За это время сформировалась большая команда, которая состоит из очень разных людей.
Павел: В харьковском офисе работают очень необычные люди с разным опытом работы. Есть коллега, который 8 лет программировал на одном языке, а тут решил заняться чем-то новым.
Ярослав: Атмосфера в Intetics дружеская, коллеги в команде коммуникабельны. И это мне очень нравится. Я увлекаюсь математикой, физикой, компьютерными науками.
Егор: Помимо Intetics, в проекте участвуют ещё разработчики из Дании, США и России. Работают люди разного возраста, разных увлечений, например, есть мастер спорта по стрельбе из лука. Есть призёры международных олимпиад по программированию.
Коллег объединяет убеждённость в перспективности выбранного пути, как они сами об этом говорят.
Павел: Этот проект не имеет фиксированного срока, мы постоянно что-то улучшаем, модернизируем, переходим на более производительные технологии, базы данных. Новичок (выпускник ВУЗа) здесь получит базис, узнает процесс написания кода, познакомится с системой контроля версий.
Ярослав: Это перспективно в первую очередь для тех, у кого нет опыта. Здесь задаётся вектор, но точно нужно заниматься саморазвитием. Это путь в функциональное программирование вообще — в те же Scala, Erlang.
Для новичков, которые хотят попробовать свои силы и попасть в проект, уже доступно тестовое задание. Для этого стоит прислать свой запрос на почту job@intetics.com. В компании отмечают, что оцениваться будет не только конечный результат, но и способ решения, и количество итераций для нахождения правильного решения.
Комментарии
Страницы
> Вообще, мне кажется ущербной проверка десятичного числа через деление и остаток от него
> Главное, чтобы работала функция IsPal.
И она работает. А вот решения нету. А оптимизировать софт, еще не решающий задачу - как-то не оно.
P.S. Хотя никто не мешает тупо засунуть все найденные палиндромы в массив/список и уже потом найти макcимум в массиве. ;)
> И, конечно, ждем, что бурное обсуждение задания перерастет в присланные нам варианты ваших решений
Не ждите. ;)
> Савелий, а текст софтинки? Результат? Критиковать и смайлить -- это просто.
А я кому-то пообещал решение? Хм, не заметил. ;)
Как и отмечали мои коллеги в статье, готовые решения, существовавшие на момент старта проекта, не подходили по многим причинам. И опыт показал, что выбор в пользу самописного языка (и фактически целой платформы разработки) оказался верным. Сейчас языку более 7 лет, он успешно развивается и оптимизируется под нужды проектов.
Выходит, конечный результат мы, все-таки, получили? Этого достаточно. На работу у вас никто и не претендует - мы люди уже немолодые, причем настолько, что ни одна кадровая служба нас уже никуда не пропустит.
Но, что касается меня, то даже верный результат решения этой задачи (уверен) - не под силу получить ни одному журналисту (а я, как раз, журналист). Так что, для такого, как я, это уже немало.
Раз не знаешь, тогда и не выступай (без обид)...
> Раз не знаешь, тогда и не выступай
Я уж как-нибудь сам решу, когда мне выступать, ОК?
Так а что, правильный ответ так никто и не нашел?
Серьезно? Тут же очевидно все, имхо.
Не 601106?
Решение, на которое Вы сослались, как я и сам отметил, НЕ ВЕРНОЕ. А последующее решение с декрементом на 11 -- тоже?
С моей стороны не ждите. На работу не претендую. Мне 64.
Может, при приёме на работу и так. А на практике? Без смайла.
Страницы