Русский
Русский
English
Статистика
Реклама

Блог компании beeline казахстан

Путь казахстанского разработчика как я пришел к Java

01.06.2021 14:09:01 | Автор: admin
Привет! Меня зовут Бинали, я руководитель отдела разработки в Beeline Казахстан, работаю в компании почти год. Пришёл в Beeline 1-го июня 2020-го года на позицию Java-разработчика, сейчас я менеджер отдела по разработке ESB. Менеджмент начинает занимать много времени, но пока ещё есть время, чтобы иногда взять задачу в разработку, дабы не потерять навыки программирования.

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



История становления


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

Я с детства интересовался техникой. Магией для меня было вставлять пластмассовую деталь в магнитофон и слышать как играет музыка. Позже я заинтересовался электричеством. Один раз пытался починить неисправную переноску, подсмотрев, как это делает дядя-электрик. Изолента, нож и моя гениальная идея соединить провода друг с другом привела к короткому замыканию, выбитым пробкам и паре шлепков от мамы. В 2007 году, когда я был семиклассником, у меня появился первый собственный мобильный телефон Nokia 6151.


Через пару месяцев мне уже хотелось сделать какой-то аналог сайтика tegos.ru. На телефоне был только WAP (олды, думаю, вспомнили), а компьютера с интернетом у меня не было. Но я все равно искал варианты реализации идеи. Мне попался конструктор wap-сайтов wen.ru максимально примитивный, но в этом и была его особенность. Так мне пришлось осваивать разметку WML расширение XML для WAP. Да, в то время был уже xHTML, но я ещё ничего не понимал.


Нашлось в архиве :)

Я сделал сайт, на котором в основном хостил полезные ссылки для владельцев Nokia, а еще нашел сервис для организации чата. Так и началась мини-тусовка фанатов Nokia на сайте, который содержал всего пару десятков страниц. Здесь я познакомился со множеством единомышленников из Беларуси, Азербайджана и России. Кстати, если здесь есть кто-то из той тусовки, отзовитесь в комментах.

Следующий этап моей технической эволюции сайты с формой регистрации, гостевые книги и формы обратной связи. Главная фишка в них обилие цветов и фоновых картинок. Тут произошло знакомство с xHTML и PHP4. К этому моменту у меня появился компьютер пекарня на базе процессора AMD Athlon XP, 2Гб ОЗУ, 128Гб HDD. Его купила руководительница моей мамы, которая заметила мое рвение к технологиям. В 2008 году б/у комп обошелся 18 000 тенге (сейчас это около $ 40). Началось мое путешествие в мир настоящего программирования с прочтения кучи статей о PHP, а писать код я начал, чтобы найти решение разных проблем.

Уже в 11 классе занимался фриланс-проектами приложений на PHP, а со второго курса нашел официальную работу в небольшой IT-компании, занимавшейся разработкой продуктов. Программировать нужно было на С#. Чтобы пройти собеседование я сам для себя создал и выполнил тестовое задание: описание тут, код тут. Реализовано оно было на PHP, спасибо сеньорам, которые в тот момент просто хотели понять, умею ли я писать хоть на чем-то.

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

Потом еще пара переходов из компании в компанию, собственный gamedev-проект, работа над системой менеджмента обслуживания (ТОиР или MMS) с активным использованием RFID-технологий. Кстати, в этом проекте мы с коллегами создали фреймворк для фреймворка, который руководители нам разрешили вывести в OpenSource. Код тут.

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

Мой первый проект на .NET


С .NET я столкнулся на первом официальном месте работы: небольшой IT-компании, сотрудничающей с нефтянкой. Мой первый проект был про расчёт наработки труб в нефтяных скважинах. Я получил рабочий образец реализации этой идеи, написанный на ASP.NET, .NET 4.1. Честно, тогда я вообще не понимал, как работают эти технологии.


У нас есть проект который работает, но мы не можем его собрать

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

После сборки меня ожидал ещё один сюрприз: проект предоставлял интерфейс для загрузки excel-файла. Для чтения он запускал полноценный MS Office и бегал по ячейкам, считывая значения в память. После чтения в память и проведения расчётов, приложение снова открывало Office и записывала данные по клеткам. Да да, прямо графическое приложение через interoperability.

Я был в шоке, ведь мне сказали, что проект уже работает и нужно просто развернуть его на IIS под Windows Server. Тут-то и началось мое настоящее знакомство с миром .NET.

На сервере, естественно, ничего не работало. Причина очевидна сервер IIS не имеет доступа к графической подсистеме, поэтому и не может что-либо запускать, в том числе и взаимодействовать с рабочим столом.

Засучив рукава, я начал искать решение как вызывать графический Office и разбирать excel-файл вручную.Так я освоил библиотечку OpenXML, которая далась мне нелегко, но быстро решила все вопросы. Теперь файл разбирался с помощью OpenXML, после чего данные сохранялись в БД. Выходные данные можно было получать в виде отчета с нужными фильтрами.

Я был очень рад, что смог будучи джуном убрать костыль.

.NET со временем показался мне ещё более крутой технологией, и я совсем перестал писать на PHP. В какой-то момент начал участвовать в спорах и обсуждениях крутости той или иной технологии, и выступал именно за .NET. Сейчас мое мнение все-таки поменялось.

Самое ужасное с чем мне пришлось столкнуться это разработка под Windows Mobile на .NET Compact Framework. Кстати, это было в рамках компании о которой я писал выше. Такие проекты были настолько сложны в разработке, что сеньор постоянно отвечал нашему менеджеру это невозможно на запрос о любой фиче :)

В целом язык C# и платформа .NET мне понравились, но обо всех плюсах и минусах я подробно напишу в следующей статье. Там же расскажу сколько раз я переходил со стека на стек, и почему остановился на Java.
Подробнее..

Как я выбирал между .NET и Java

02.06.2021 10:16:01 | Автор: admin
С .NET я познакомился на первом официальном месте работы: небольшой IT-компании, сотрудничающей с нефтянкой. Это продолжение истории, начало можно почитать здесь.



Чем мне понравился .NET


.NET имеет обширную историю. Не такую как у Java, конечно, но тоже интересную. Еще нужно разделять .NET Framework и .NET Core. Второе ИМХО то, чем .NET должен был быть изначально. Давайте договоримся, что когда я говорю просто .NET имею ввиду .NET Framework. Про .NET Core буду писать с дополнением.

В самом .NET мне понравилось наличие экосистемы, худо-бедно, но, зная один язык программирования, ты можешь без особых проблем писать:
  • серверные;
  • десктопные;
  • мобильные (Windows Mobile);
  • веб (привет, Silverlight, LightSwitch, ASP.NET WebForms, ASP.NET MVC);
  • киоск приложения;
  • игры.


Порог вхождения в .NET довольно низкий, чему всегда способствовали обширные мероприятия и гайды от Майкрософт. Наличие экосистемы позволяет разработчику не думать о том, какую библиотеку ему выбрать, всё уже известно.
Хочешь веб? Бери ASP.NET. Мы, как большая компания (Microsoft), пользуемся и тебе подойдёт. И так во всем.

С# это улучшенная Java, тут тебе и легкая жизнь с auto-property, и легкая модель асинхронного программирования, LINQ который вдобавок можно расширять реализацией провайдеров. Например, LINQ to SQL, LINQ to XML и так далее.

EntityFramework, который поддерживается Майкрософт, и, понятно, во многих аспектах работает как часы. Нельзя промолчать и о миграциях в EntityFramework. Поменял модель, миграция сгенерировалась и не нужно постоянно писать их руками.

Nuget стал центром всего .NET-сообщества: обширное количество библиотек от Microsoft и комьюнити.

.NET Core можно считать работой над ошибками Microsoft. Все изменения произошли, в том числе благодаря CEO Microsoft Сатья Наделле, который показал всему миру, что MS loves Linux. Мы получили конкурента Java.

Возможно кто-то скажет: А просто .NET Framework?
Я отвечу так: Java обрела популярность именно из-за OpenSource-нацеленности. Бизнес не боялся, что завтра придут какие-то чудаки из Sun или Oracle и начнут качать свои права. .NET Framework изначально проприетарная платформа, о благодаря адекватному менеджменту MS, они исправили этот недостаток.

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

Я рассматриваю .NET Core как полноценного конкурента Java. Язык и инструментарий доступен на GitHub под лицензией MIT.

Что ещё добавилось с момента выхода .NET Core:
  • появилась поддержка OS Linux, macOS;
  • была улучшена работа в средах контейнеризации (.NET Core подбирает подходящие параметры в рантайме в зависимости от среды запуска);
  • началось активное развитие Xamarin. Разработчики получили возможность писать шустрые приложения на iOS и Android;
  • начало развиваться направление IoT;
  • WPF стал опенсорс проектом и появилась большая надежда на его кроссплатформенность;
  • WEB разработка стала еще доступнее благодаря Blazor (можно как WebAssembly, так и рендерить все на стороне сервера).


В сухом остатке имеем следующее: в 2020 году, зная язык программирования C#, можно написать все, что хочешь и без костылей как, например, браузер под капотом электрона :)

Что мне не понравилось в .NET?


Честно? Понимание того, что Microsoft нагло скопировал Java по многим фронтам :) Напомню, что до .NET товарищи из MS пытались реализовать свое представление Java: J++ в последствии J#.

Казалось бы, намерения благие. Хотели, чтобы у джавистов был выбор. Но, MS в то время ничего не делал во благо разработчиков. Достаточно почитать эту статью на Википедии (Поддержать, надстроить и уничтожить).

В .NET Framework на момент моего первого опыта работы, не понравилось:
  • сложная структура файлов проектов;
  • вечные проблемы с биндингом зависимостей в рантайме;
  • VisualStudio она реально медленная и тормознутая :D;
  • только Windows, на тот момент я уже вовсю интересовался OS GNU/Linux;
  • Windows Mobile разработка: она ужасна во всем.


Знакомство с Java



Согласны?)

В феврале 2015 года я устроился на работу Java-разработчиком. Опыта разработки приложений на Java у меня не было, но я был в теме, потому что много читал про язык. Писали на Java 7, а первый день программирования показался не очень сложным. Это как C#, только неудобный, подумал я.

Мой проект был реализован в JavaEE (запускались под TomEE), фронтенд на Vaadin. В целом я не испытывал особых проблем взаимодействия с новой для меня технологией, скорее местами был в шоке.

Поражало обилие конфигурационных XML-файлов, настройки Maven'a на 300 строк. Пугало наличие большого количества аннотаций. Здесь же нельзя не сказать о любви джавистов к аспектно-ориентированному программированию.

Параллельно в этой же компании велась разработка на JavaSE, в качестве фреймворка использовался Spring 4. Я так до конца и не понял, почему всем не нравился проект на Spring, но тимлид постоянно ругался с разработчиком на Spring. По моим наблюдениям там было слишком много кодогенерации, а из-за этого сложным был сам UI.

Сборка проекта (JavaEE) в Maven первый раз у меня заняла минут 20. Было ощущение, что я скачиваю все библиотеки мира. За это можно сказать спасибо Maven, как самому родному сборщику. На самом деле, просто в то время я не знал о существовании Gradle.

Проект, на который меня посадили, реализовывал CRM с уклоном в сторону туристических компаний. MVP удалось поднять достаточно быстро, но к сожалению, проект закрылся из-за нехватки финансирования.

Чем мне понравилась Java 7


  • Java стабильна;
  • Java это обратная совместимость;
  • есть много реализаций различного инструментария. У разработчика есть выбор, на чем собирать проект: maven, Gradle или вообще `javac` :);
  • в интернете много статей и знаний о решении проблем, с которыми может столкнуться разработчик;
  • Java имеет опенсорсную реализацию в лице OpenJDK;
  • Java активно используется при разработке финансовых систем; Порог вхождения в Java, особенно после опыта в .NET, показался мне не слишком высоким;
  • Конечно же IDE: IntelliJ IDEA она прекрасна во всем.

Что не понравилось в Java 7


на момент моего первого опыта в 2015 году
  • отсутствие экосистемы: разработчику приходится искать подходящую библиотеку среди сотни;
  • комьюнити зачастую сильно расходятся во мнениях;
  • бардак в API при работе с датами и временем;
  • Maven: почему так медленно и многословно?
  • JavaEE: идея супер, реализация плохая. Кто придумал столько декларативной настройки в XML?
  • медленно развивающееся API;
  • отсутствие функций высшего порядка и альтернативы LINQ;
  • сама Java 7 очень многословна.


Поэтому я вернулся в .NET


Не совсем поэтому, конечно, но когда я устраивался на работу Java-разработчиком на проект, мне обещали highload, интересные задачи и кучу сложностей. По факту: уныло, недостартапно, никакого highload и в помине нет.

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

Что изменилось в .NET


Я перешел обратно на .NET в 2016. Ровно в тот момент, когда мои коллеги с нового старого места работы начали с нуля писать бизнес-платформу. Замысел был следующий: разработать систему оперативного учета и контроля, которая могла бы расширятся с помощью модулей. То есть что-то типа SAP PM, только в бюджетной категории. Почитать про SAP PM можно тут.

Стек был такой: .NET 4.5, ASP.NET MVC 5 (Owin), EF Core, MS SQL Server. Фронтенд на SAP UI5 это такой опенсорс JS-фреймворк, который позволял строить бизнес приложения, используя готовые контролы.

Параллельно активно развивался .NET Core, поэтому передо мной встала задача по переносу проекта с .NET Framework 4.5 на .NET Core 2.1. Это было очень увлекательно и сопровождалось немалым количеством рефакторинга. Параллельно мы распиливали монолит на какие-никакие, но отдельные сервисы.

Собственно, пока я занимался рефакторингом и собирал пожелания моих коллег, в стенах компании родился небольшой web-фреймворк. Я назвал его NextApi.

Почему NextApi? Когда в прошлой версии системы мы с синьор-программистом разрабатывали новое API, назвали его следующий Next. И название нового фреймворка это небольшая дань уважения совместной работе. Ссылка на проект тут.

На этом моя миссия была выполнена: компания получила сервисы, работающие на едином инструментарии. Нам удалось переиспользовать бизнес-логику на мобильных клиентах и десктопах, Offline first. Также получилось полностью уйти от Windows Server. Пришлось оставить небольшую виртуалку, чтобы билдить WPF приложение, но это мелочи.

Пришло время идти дальше


После того, как я перенёс проект на .NET Core и распилил его на сервисы, мне перестало хватать чего-то нового в разработческой жизни. Я был в должности тимлида, мы успешно запустили продукт у нескольких крупных заказчиков, задач хватало, проблемы решались, но хотелось челленджа и возможности раскрыть себя.

Параллельно в голове была мысль о востребованности .NET-разработчиков. В Казахстане, в отличии от стран запада, не такой высокий спрос на эту технологию. Чего нельзя сказать о а Java-разработчиках.

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

Мой выбор пал на Beeline Казахстан мне хотелось поработать над популярными сервисами. К тому же я понимал, какие здесь задачи и клиентская база, а Java была мне довольно близка. Также, было интересно иметь возможность посмотреть на всю разработку со стороны .NET-разработчика, дополнительно изучить аспекты проектирования highload-систем и оставить хороший след в истории компании.

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

Что сейчас



Было и такое)

В Beeline мы в основном на Java 8, но уже начали смотреть на Java 11, используем Spring Boot, начали активно писать на Kotlin. Я вижу, что Java реально стала двигаться вперед, релизы каждые полгода. Скажи Java-разработчику об этом в начале 2010, он бы покрутил пальцем у виска. На мой взгляд, Java меняется в лучшую сторону.

В Java 8 появились функциональные интерфейсы, которые позволяют сделать код красивее и реализовывать функции высшего порядка. Также подъехал Stream API, который немного облегчил жизнь. Хотя до LINQ далековато, но и это уже радует.

Это я ещё не описал фишки которые появились в более свежих вервиях Java :)

Мне удалось познакомиться с системой сборки Gradle. Она настолько мне понравилась, что я начал писать переиспользуемые скрипты для сборки, чтобы реализовать нечто похожее на файлы проектов в .NET Core.

В Java более прозрачная работа с асинхронностью: когда пишешь код действительно приходится о многом думать. Это и хорошо, и плохо. Мне этот момент нравится, потому что, имея любовь к ОС и железу, приятно иметь возможность влиять на JVM как хочешь.

Что касается личных планов, мне интересна тема highload-приложений. Пока она не раскрыта для меня до конца, но я активно её изучаю.

Стараюсь не фанатеть от DRY, но по возможности делаю все, чтобы переиспользовать знания.

И, конечно, я хочу подтянуть знания в Kotlin, чтобы начать писать крутые сервисы на корутинах. Сам Kotlin это то, чем должна была быть Java. Андрей Бреслав и Ко проделали отличную работу.

Разница между Java и .NET по большей части компенсируется появлением в моей жизни Kotlin. Но я скучаю по многому из .NET.

Основные моменты:
  • скучаю по консольному тулсету dotnet. Там можно и проект сбилдить, и создать новый из шаблона, и много чего другого;
  • мне не хватает нормальной альтернативы для EntityFramework с LINQ;
  • Java действительно кажется более прожорливой по ресурсам, чем .NET. Компьютер иногда просто уходит в себя.


Но, в реальной жизни Java, пожалуй, самое интересное, что случалось со мной в последнее время.

Выводы и напутствие


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

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

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

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

Моё мнение, что перед тем как вступать в споры о крутости технологии, нужно попробовать альтернативную. Например, в Beeline Казахстан у меня была возможность использовать .NET 5 для реализации одного микросервиса. То есть использовать его в компании, где основным языком для серверного ПО является Java. Микросервис вписался в весь ландшафт без проблем. Моим коллегам было интересно делать код-ревью, мы даже обсуждали принципиальные различия. В общем ребятам тоже стало интересно расширить свой кругозор.

В моем мире настоящий программист не тот, кто топит за один язык программирования или кричит направо и налево, что используемая им технология лучшая. Настоящий программист тот, кто может решить задачу быстро, эффективно и недорого, а главное, в долгосрочной перспективе. Таким людям не важно, на каком языке программирования разрабатывать, они выбирают инструмент, исходя из задачи.

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

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

Это не значит, что нужно везде писать спагетти-код и трехэтажные конструкции. Всегда нужно придерживаться подходов разделения ответственности и писать простой код. Но, при желании, можно и костыли позволить. Мы все грешны :)

Бросайте себе вызов и всегда будьте на вершине!

P.S. Если вы пришли в статью, чтобы узнать какой язык и платформа лучшие или написать своё мнение об этом, давайте холиварить.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru