Блог

Где нужен Java и как его преподают в GeekUniversity

Интервью с деканом факультета Java-разработки Александром Фисуновым.
7 минут7602

Александр Фисунов — кандидат технических наук, доцент ДГТУ, где он преподает программирование и цифровую обработку сигналов, декан факультета 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, арканоид, бомбер, Марио, стрелялка. Что наберет больше голосов, то и пишем.

А как насчет фреймворков? Они есть в учебном плане?

— Для написания сетевых проектов, ближе к началу обучения студенты осваивают Netty. Большие курсовые проекты (новостной портал или интернет-магазин) они пишут уже после знакомства с фреймворком Spring.

На что надо смотреть, когда выбираешь язык под задачу? Я так понимаю, основные факторы — это платформа, под которую собираешься писать, и набор подходящих библиотек языка?

— Как правило, под конкретный круг задач подходит определенный набор языков программирования. Если мы хотим написать приложение для «тяжелой» работы с 3D-графикой, вероятнее всего возьмем C++ и OpenGL.

Если хотим заняться машинным обучением, теоретически можно попробовать С++ или Java. Но на деле оказывается, что большинство библиотек для работы с машинным обучением представлены на Python.

Если вы умеете программировать, но не знаете Python, проще за несколько дней познакомиться с «питоном» и начать решать на нем поставленные задачи. Это лучше, чем держаться за знание другого языка и искать для него какие-то обертки над стандартными библиотеками для машинного обучения.

Если вы совсем не умеете программировать и интересуетесь машинным обучением, выбор языка программирования очевиден (Python).

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

Если речь о backend-разработке, приходится выбирать между PHP, C# ASP.NET, Python с Django и Java Enterprise. И здесь надо учитывать масштаб задачи, какие в вашем регионе вакансии, ну и, конечно, нравится вам работать с этим языком или нет.

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

С выпускниками общаешься?

— Да, я всегда готов помочь, если у выпускников есть вопросы по Java Core или веб-разработке. И очень радуюсь, когда студенты пишут, что они устроились на работу и занимаются интересными проектами.

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

программированиеразработкаgugeekuniversityjava
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!
Posts popup