
Беседуем с разработчиком в ООО НЦИТ «Унипро» Евгением Гриценко.
Расскажите немного о том, как вы пришли в IT-сферу, с чего начинали, с какими языками программирования работали.

Как и у всех, у меня в школе была информатика. На ней давали зачатки программирования на Pascal. Тривиальные задачи наподобие инвертирования массива. В дальнейшем, когда поступил в НГУ и началось программирование на С, познакомился со всем поближе: алгоритмы, структуры данных. В тот момент понял, что это именно то, чем я хочу заниматься. Тогда я больше тяготел к системному и прикладному программированию, и с тех пор интерес не изменился.
В дальнейшем пошел в летную школу Parallels, где занимался разработкой алгоритма асинхронного шифрования на С++ около полугода. Это направление позже попросту закрыли. На следующем курсе начался С++, который был уже не в новинку. Именно тогда решил, что надо уже это все применять на практике. Из-за расписания и требований к разработчикам на С++ не получалось работать полный день в офисе, и я решил себя попробовать во фрилансе.
Сначала были маленькие проекты связанные с веб-программированием. Тогда же и изучил основной стек — PHP, JS, SQL, HTML, CSS. Хоть это и приносило доход, особого интереса не вызвало, так как задачи в основном были однообразные. Постепенно стал брать проекты, связанные с системным и прикладным программированием. Здесь я смог применить знания, полученные в университете, и набраться опыта в С++.
Через некоторое время я посчитал, что у меня уже достаточно практики, и пошел на направление, которое всегда привлекало — разработка компиляторов. В нем я и работаю с февраля текущего года. Так же пробовал и другие языки, например, AHDL\VHDL, Java, Ruby — но продакшеном на них не занимался.
Что такое разработка компиляторов? В чем ее особенности?
Разработка компиляторов — одно из направлений в системном программировании, довольно науко- и трудоемкое. С одной стороны, нужно учитывать особенности языка, для которого делаешь компилятор, то есть оптимальное промежуточное исполнение, наиболее важные оптимизации кода. Приходится, не теряя в корректности генерируемого кода, балансировать между скоростью компиляции и производительностью. Что особенно чувствительно в интерпретируемых языках — Java, JS, C# и т.д. С другой стороны, надо учитывать и особенности конечной платформы. Например, на VLIW-архитектурах нужно еще и формировать машинное слово из нескольких инструкций.
Книг по теории трансляции и интерпретации хоть и много, но большинство из них устаревшие. Та же “Книга Дракона” больше напирает на фронтенд компилятора и в большинстве своем упускает многие современные веяния и исследования в данной области. С другой стороны, книга С. Мучника прямиком из 20 века, и избитая техника — SSA форма — в ней преподносится как нечто новое. Там упускаются все те усовершенствования, что появились за эти годы. Вот и приходится самому искать информацию и фильтровать её, что усложняет работу.
Где используются подобные инструменты?
Компиляторы? Да, собственно, все разработчики ими пользуются. Хотя разработчики на JavaScript и попытаются возразить, но виртуальная машина, которая исполняет весь их написанный код, имеет внутри себя jit компилятор. Именно их разработкой я и занимаюсь.
Если можно, приведите какой-то пример. Проект или задачу, связанную с предметом вашего курса, которую вам пришлось решать на работе.
Работа во фрилансе подразумевает еще и работу аналитика. Одному из клиентов требовалось интерактивное веб-приложение. А для успешной реализации надо понимать среднюю посещаемость, отклик, платежеспособность посетителей. Из данных показателей, собственно, прямым путем вытекала архитектура самого приложения, а также некоторые детали. Например, там были фиксированные ставки в викторине, размер которых и приходилось оценивать, исходя из аудитории. Также от этого зависела длительность викторины и время на ответ, число участников и так далее. И немаловажен был отклик самого приложения, что сразу подразумевало использование WebSocket.
В текущей деятельности приходится анализировать огромное количество кода, которое предстоит обработать компилятору, чтобы понимать, какие оптимизации имеют наибольшее значение для производительности и скорости компиляции. И там, и там нужно собирать статистику и подробно ее анализировать. От этого и будет зависеть успешность продукта.
Чему будет посвящен ваш курс по технической аналитике? Чему вы будете обучать, какие конкретно задачи смогут решать выпускники?
В первую очередь, программированию, умению использовать инструменты для решения задач той же аналитики. С другой стороны, аналитике написанного продукта, пониманию его слабых и сильных сторон, а также способам исправления и улучшения.
Обучение подразумевает практику программирования на JavaScript, что позволяет писать скрипты для анализа различных данных, и практику на языке SQL для работы с базами данных. Также в обучение входит разработка средств аналитики и анализа данных, учет нюансов в подобной разработке.
Какими знаниями, навыками, качествами надо обладать, чтобы освоить этот предмет? Как определить для себя — подходит он мне или нет?
Опыт программирования, даже небольшой, уже будет большим плюсом, но и отсутствие такого опыта не станет помехой. В первую очередь, требуется гибкое мышление и последовательность в рассуждениях. Чтобы понять, подходит курс или нет, достаточно ответить на пару вопросов. Нравится ли мне решать задачи, сопряженные с трудностями? Нравится ли мне находить закономерности? Если оба ответа положительны, то можете не сомневаться.
Насколько востребованы специалисты по такому анализу, какие у них есть варианты развития карьеры? В каких смежных IT-дисциплинах эти знания будут преимуществом?
На мой взгляд, профессия аналитика довольно востребована, особенно на IT-рынке. У аналитика большой выбор в построении карьеры. Он может перейти в бизнес-аналитику, QA, стать техническим писателем. Навыки, которыми обладает аналитик, могут пригодиться на поприще разработчика, особенно если вспомнить модный сейчас тренд — ответственный разработчик. Это когда работнику приходится вникать в деятельность компании, в которой он трудится, и на основе этого принимать решения.
Дайте несколько советов вашим будущим ученикам. Как им преодолевать трудности, к чему готовиться при обучении на курсе?
В первую очередь, надо понять, что простого пути нет. Нет волшебных палочек, колодца желаний и джинна. Придется делать все самому — решать задачи, не сдаваться на первых трудностях. Стоит готовиться к тому, что не всё и сразу будет получаться. Главное — это упорство и трудолюбие, и тогда никакие преграды не страшны.