Уникальный язык и сложные задачи: в Intetics рассказали о новом проекте

Даже в коммерческой разработке есть проекты, которые предлагают нетривиальные задачи и требуют от своих сотрудников нестандартных навыков и мышления. Разработкой одного из таких проектов занимается одна из самых успешных датских компаний совместно с 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. В компании отмечают, что оцениваться будет не только конечный результат, но и способ решения, и количество итераций для нахождения правильного решения. 

Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 8
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Страницы

Аватар пользователя Petro47

savely пишет:

> Раз не знаешь, тогда и не выступай

Я уж как-нибудь сам решу, когда мне выступать, ОК? 

В таком случае я, столь же самостоятельно и пространно распишу, когда этого делать не стоит. Мне же нельзя запретить бесполезный треп?

 

Код и решения были верными. Возможно (подозреваю, что даже точно), есть какие-то выверты, которые позволяют решить задачу быстрее или эффективнее, ну так пусть и выложат здесь решение. И мы все разом поумнеем.

 

Petro47 пишет:

savely пишет:

> Раз не знаешь, тогда и не выступай

Я уж как-нибудь сам решу, когда мне выступать, ОК? 

В таком случае я, столь же самостоятельно и пространно распишу, когда этого делать не стоит. Мне же нельзя запретить бесполезный треп?

 

Код и решения были верными. Возможно (подозреваю, что даже точно), есть какие-то выверты, которые позволяют решить задачу быстрее или эффективнее, ну так пусть и выложат здесь решение. И мы все разом поумнеем.

 

Присылайте нам Ваше решение, мы обязательно Вам ответим.

Petro47 пишет:

Помните, что самое главное - не конечный результат, а эффективность, изящность и легкость решенияsmiley

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

Но, что касается меня, то даже верный результат решения этой задачи (уверен) - не под силу получить ни одному журналисту (а я, как раз, журналист). Так что, для такого, как я, это уже немало.

 

В нашей компании нет никакой дискриминации, в том числе и по возрасту. Мы рады любым кандидатам!

Если Вы в душе программист, но в силу обстоятельств работаете журналистом, то дерзните, пришлите нам свое решение. Оно того стоитsmiley

Аватар пользователя savely

> Код и решения были верными. 

Какой и какие именно? Ты уверен, что  601106 - верный ответ? 

А для уверенности в верности ответа я и предложил тупо получить ВСЕ палиндромы тупым перебором без всяких оптимизаций (ибо как раз функция IsPal дает верный результат)  и далее найти максимальный. А уж потом извращаться с циклами и т.п., НО(!) имея явно верный ответ. 

Аватар пользователя mike

993*913 = 906609

Всё просто:

... Я и предложил тупо получить ВСЕ палиндромы (ибо раз определение IsPal дает верный результат)  и далее найти максимальный.

И Savely оказался прав.

Аватар пользователя savely

> Если Вы в душе программист

В дУше я певец! ;)

С моей стороны не ждите. На работу не претендую. Мне 64.

Как я и говорила выше, для нас главное талант, а не возраст. Будем рады Вашей заявке!

Помните, что самое главное - не конечный результат, а эффективность, изящность и легкость решенияsmiley

Может, при приёме на работу и так. А на практике? Без смайла.

Конечно, на практике однозначно важны и результат, и то, как он был получен.

Аватар пользователя savely

> И Savely оказался прав.

Я привык. ;)  Особенно, если советую подбирать пароль брутфорсом. ;) Ну, а теперь вторая часть "марлезонского балета" - получить этот же результат "эффективно, изящно и легко". ;)

Аватар пользователя mike

...Для нас главное талант, а не возраст. Будем рады Вашей заявке!

smileyСпасибо, конечно. Но работа у меня есть.

Аватар пользователя savely

>  Мне 64.

А я системщик. Язык, на котором нельзя написать драйвер или прошивку, записать куда угодно в память (ну, если даст система, ессно) и в котором нет арифметики над адресами - не мой язык. ;)

 

Страницы