Александр Фисунов — кандидат технических наук, доцент ДГТУ, где он преподает программирование и цифровую обработку сигналов, декан факультета Java в GeekUniversity, руководитель отдела разработки в НИИ многопроцессорных вычислительных систем. Работает над проектами в области анализа данных, компьютерного зрения и видеоаналитики, использует языки Java, C++, Python.
— Александр, первый вопрос о тебе. Как наука и радиотехника пересеклись в твоей жизни с программированием и конкретно с Java?
— Вообще изучать программирование я начал лет с 8: приставка Subor + JBasic. Потом продолжил на компьютере — QBasic и Visual Basic. Все это я осваивал без книг и интернета — «методом тыка», — а на практике закреплял написанием простеньких игр и участвовал в конкурсах (например, с игровым проектом GALAXY FORCE).
Более серьезно заниматься разработкой я начал в вузе, в середине второго курса. Один из наших преподавателей проводил исследования в области улучшения качества образования в высших учебных заведениях. Ему нужно было собирать данные о том, как студенты справляются с тестами, и обрабатывать ответы. Из результатов можно было понять, насколько корректно распределена сложность в вопросах тестов и насколько сложен изучаемый студентами материал.
Я взялся реализовать такое приложение. Для анализа применял методы, предложенные преподавателем. В качестве языка программирования мы выбрали Visual Basic, который я к тому моменту уже достаточно хорошо знал.
Функций у системы на первых этапах было не так много: загрузка результатов тестирования, работа с графическим интерфейсом, вывод отчетов (в текстовый файл или таблицу .xls), пакетная обработка результатов, перенос математических формул в программный вид.
Ближе к четвертому курсу возможностей VB6 для нашего проекта стало немного не хватать, так что параллельно я стал разбираться с C# и переносить проект на платформу .NET.
Насколько помню, итоговую версию программы даже купили для своих учебных отделов несколько университетов. Параллельно с разработкой этого проекта, чтобы набрать опыт, я писал игры на XNA Framework (3.1, 4.0).
— Для каких задач ты начал использовать Java?
— Ближе к концу обучения в специалитете и поступлению в аспирантуру потребовалось перевести проект в веб-формат, с чего и началось мое знакомство с языком Java. К середине аспирантуры появились более важные задачи и дальнейшую разработку этого приложения пришлось остановить.
Основными моими направлениями в аспирантуре были обработка сигналов и изображений, а также видеоаналитика. Нужно было реализовывать мобильные версий приложений для анализа изображений. Вот тут и понадобилась Java.
Параллельно с обучением в аспирантуре появилась возможность разобраться с фреймворком Spring. В течение полутора лет я в составе небольшой команды писал веб-приложение для немецкой компании, которая занималась производством и продажей картин. Приложение позволяло управлять внутренними процессами производства и формированием заказов.
После завершения работы над предыдущим проектом появилась новая задача — написать сервер для сбора, обработки и анализа данных, получаемых по результатам обработки видео и изображений. Этот проект мы развиваем до сих пор.
— Какие перспективы, варианты развития есть у Java-разработчика?
— Думаю, стоит выделить три основных направления: веб-разработка, Android-разработка и автоматизация тестирования. Можно писать бэкенд для веб-приложений, высоконагруженных, банковских и корпоративных систем.
Про Android-разработку и роль Java и Kotlin в мобильном направлении намного более подробно рассказал в своем интервью Александр Аникин — декан факультета Android.
Так сложилось, что Java — в числе основных языков, используемых для автоматизации тестирования. С помощью фреймворка Selenium можно эмулировать действия пользователя в веб-приложении, генерировать и проверять ввод правильных/ошибочных данных, проверять реакцию системы на такие действия. Это тоже очень перспективная область. Приведу пример из жизни.
Через знакомых знакомых меня нашел manual-тестировщик Алексей, который работает в США. Алексей для себя решил разобраться в Java Core и основах автоматизации тестирования. За 8 месяцев (примерно 120 часов консультаций) он не только освоил Java Core и Selenium, но и полностью автоматизировал рабочие задачи.
Дальше с Middle manual-тестировщика его взяли на позицию Middle QA Engineer в компанию, разрабатывающую веб-приложения для страховых организаций. Там на Java + Selenium он написал свой фреймворк для автоматизации тестирования всего проекта. До него в команде были только manual-тестировщики.
Алексей набрался опыта автоматизации на предыдущих двух проектах и с сентября 2018 года перешел на должность Senior QA Engineer в Disney. Теперь тестирует REST-сервисы внутренних продуктов компании.
Он нисколько не жалеет о времени, потраченном на изучение Java. Результаты его работы: очень хороший карьерный рост, повышение зарплаты и возможность два дня в неделю работать из дома.
В недавнем своем проекте Алексей использовал вот такой набор инструментов: Java, TestNG, Selenium (WebDriver, Grid), GitLab CI, Docker, SoapUI, Zap Proxy, Jersey Client и плюсом к этому зоопарку — внутренние разработки команды тестировщиков Disney.
При таком стеке технологий он уже выполняет задачи не только тестировщика, но и частично DevOps. Меня очень радует — не только в Алексее, но и вообще во всех студентах и знакомых разработчиках, — когда люди не пытаются что-то изучить и сидеть на месте, а постоянно двигаются вперед, осваивают все новые и новые технологии, о каком бы направлении мы ни говорили: разработке, тестировании, исследовании.
Кстати, сейчас развивается сравнительно новое направление — автоматизация тестирования мобильных приложений с помощью Java и фреймворка Appium (аналог Selenium, только под мобильные платформы). Это тоже открывает новые перспективы.
— Если я выбираю, на чем писать бэкенд, по каким признакам можно понять, что мне нужен Java?
— Это 100 % НЕ одностраничники или простенькие интернет-сайты, для создания которых можно использовать готовые решения на других языках программирования.
— Расскажи, пожалуйста, о программе обучения на факультете и о конкретных курсах. Ты участвовал в их составлении?
— Да, я принимал участие в разработке курсов по направлению Java: это были базовый, продвинутый и профессиональный уровни, «Разработка игр под Android», «Java. Углубленное изучение». Сейчас занимаюсь улучшением курсов Spring 1, 2.
Курсы на факультете постоянно дорабатываются и улучшаются. Если перечислить их все, получим: три уровня Java (базовый, продвинутый, профессиональный), «Разработка игр под Android», «Java. Углубленное изучение», «Алгоритмы и структуры данных на Java», шаблоны проектирования на Java, Java EE, Spring 1, Spring 2 и командная разработка. Плюс не забываем про смежные курсы.
Первые три курса — теория и задачи для быстрого вхождения в язык Java, разбор ООП и создание первых проектов. Дальше для опыта и практики создаем игру: основную часть (процентов 70 %) пишем на занятиях, а в качестве домашних заданий студенты дорабатывают отмеченные преподавателем блоки. На следующем курсе («Java. Углубленное изучение») приходит время самостоятельной практики — студенты разрабатывают сетевое хранилище. Конечно, они могут обращаться за помощью к преподавателю, плюс два занятия отводится на code review, но большую часть пишут сами. Если сравнивать, курс по играм — это 70–80 % кода от преподавателя, а проект на «Углубленном изучении» — 90 % от студента.
— Какие проекты делают студенты в ходе обучения?
— Первое и простейшее — крестики-нолики. Дальше — сетевой чат. Это возможность поработать с базой данных, сетью, передачей сообщений, графическим интерфейсом.
Следующий проект — игра под Android на библиотеке LibGDX. Его студенты особенно охотно дорабатывают и выпускают. После этого — облачное хранилище типа DropBox. Финальные проекты, которые у меня сейчас делают студенты: новостной портал и интернет-магазин.
— По какому принципу выбирали практические задания?
— Для изучения основ ООП пишем игру крестики-нолики, которую легко реализовать в консольном варианте. Смысл проекта в том, чтобы студенты научились строить логику программы в соответствии с принципами ООП.
Идею написать сетевой чат и облачное хранилище предложил Евгений Картавец. А разработку игры под Android я выбрал, когда по вебинарам заметил, что студентам эта тема нравится. Изначально задумывалась космическая стрелялка, но я всегда на курсе провожу голосование за жанр будущего проекта: пакман, танчики, tower defence, арканоид, бомбер, Марио, стрелялка. Что наберет больше голосов, то и пишем.
— А как насчет фреймворков? Они есть в учебном плане?
— Для написания сетевых проектов на младших курсах GeekUniversity изучаем Netty. Большие курсовые проекты (новостной портал или интернет-магазин) пишем после знакомства с фреймворком Spring.
— На что надо смотреть, когда выбираешь язык под задачу? Я так понимаю, основные факторы — это платформа, под которую собираешься писать, и набор подходящих библиотек языка?
— Как правило, под конкретный круг задач подходит определенный набор языков программирования. Если мы хотим написать приложение для «тяжелой» работы с 3D-графикой, вероятнее всего возьмем C++ и OpenGL.
Если хотим заняться машинным обучением, теоретически можно попробовать С++ или Java. Но на деле оказывается, что большинство библиотек для работы с машинным обучением представлены на Python.
Если вы умеете программировать, но не знаете Python, проще за несколько дней познакомиться с «питоном» и начать решать на нем поставленные задачи. Это лучше, чем держаться за знание другого языка и искать для него какие-то обертки над стандартными библиотеками для машинного обучения.
Если вы совсем не умеете программировать и интересуетесь машинным обучением, выбор языка программирования очевиден.
Когда под вашу задачу подходит несколько языков, смотрите, с каким из них вам приятнее работать, хотя бы даже на базовом уровне.
Если речь о backend-разработке, приходится выбирать между PHP, C# ASP.NET, Python с Django и Java Enterprise. И здесь надо учитывать масштаб задачи, какие в вашем регионе вакансии, ну и, конечно, нравится вам работать с этим языком или нет.
С момента выхода языка на Java написано так много, что даже если программисты перестанут разрабатывать новые проекты, все равно останется огромное количество работы по поддержке существующих. Поэтому в ближайшее время Java вряд ли сойдет со сцены. Люди, умеющие с ней работать, будут востребованы.
— С выпускниками общаешься?
— Да, я всегда готов помочь, если у выпускников есть вопросы по Java Core или веб-разработке. И очень радуюсь, когда студенты пишут, что они устроились на работу и занимаются интересными проектами.
— Спасибо, что уделил время, рассказал о своей работе и о факультете, который возглавляешь. Как всегда, ждем вопросов и откликов в комментариях.
Пройти обучение
Комментарии