Снова в деле

Ура! Я опять программирую на Kotlin. Скучал, да. После последней записи, прошло 4 года, где я работал на русско-американскую компанию.  Там была только унылая джава. Хоть и 17-я, но все равно, чувствовал себя динозавром. Но, потом проект закончился, и я 1,5 мес искал работу. К счастью, нашел прекрасный вариант — дубайский финтех-стартап. Оказывается я заматерел, сразу взял быка за рога и за пару месяцев сделал отличный микросервис  — workflow-engine aka state machine. А заодно spring-boot-starter либу для работы со всем этим добром. Страшно собой горжусь, но и это еще не все. Через 3 месяца увольняется тех-лид и я вижу, что это шанс для меня. Обговариваю с хэдами и мне делают предложение, от которого я не смог отказаться)) Короче, я уже без 5 минут Head of development, но писать код не перестаю, что меня радует.

Вляпался в Google Web Toolkit

Gwt — то еще дерьмище. На этом можно было бы закончить, но я обосную.

Чтобы нарисовать форму надо создать 100500 классов. Но это полбеды. Чтобы запускать свои сервисы, нужны прокладки в виде фасадов. Надо создавать кучу интерфейсов, их требуют все эти презентеры, виджеты, вьюхи, фасады. На-хе-ра столько телодвижений? Наверно это был прорыв в 2008 году, но в 2021 и особенно после реакта, плачу кровавыми слезами.

Шла 3-я неделя копания в легаси, проект живет с 2010 года, в нем одних только java файлов — 7500 штук!

Но работа есть работа, тем более если за нее хорошо платят.

Проект «Ментор»

Внезапно обнаружился у меня неплохой талант обучения, наставничества. Паре человек я просто решил помочь на пути становления программиста. Все прошло очень круто, получил массу удовольствия, а парни получили профессию. В общем-то я давно заметил у себя тягу к наставничеству (может ещё институтский преподавательский бэкграунд сказался), но не придавал этому значения. Когда на джавараше опубликовал фотку своего рабочего места и сообщил, что мол вот уже после курсов работаю — в личку стали стучаться люди с просьбой поделиться опытом как студенту найти свою первую работу. Этот вопрос мы тоже рассмотрим yes

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

Чем хорошо наставничество — да всем. На онлайн курсах не пишут о нюансах работы. Есть такие знания, которые сразу даже не вспомнишь, но они всплывают во время беседы и демонстрации. На занятиях мы будем заполнять пробелы и шлифовать навыки.

Если вы уже прошли обучение Java core — добро пожаловать на борт. Круто, если Spring, REST и SQL — не просто слова, а вполне освоенные инструменты. Знание этого покрывает потребности 80% рынка. Если нет, то нам просто придется дольше продвигаться к правой части схемы:

Если ВЫ ЗДЕСЬ, значит пришли по адресу smile

з.ы. Скоро доделаю отдельный раздел, где опишу условия.

upd: доделал, не прошло и года -> mentor.kapion.ru

Stay tuned.

Маленькое дерево с большой проблемой

Прошло 2 месяца — в Котлине освоился, но React еще доводит до кипения.
На днях случилось: воевал я с новым компонентом от Ant.design — TreeSelect, ну чтобы выбирать значение в дереве. Нарисовал быстро, а как данные загрузить до прорисовки понял не сразу. Выход нашелся, когда уже глаза покраснели — рисовать спин, а загружать в componentDidMount. Все это успешно отладилось на песочнице, но когда доехало в прод, начались дииикие тормоза. А все из-за того, что записей в дереве получилось в 10 раз больше. А как дерево строится? Ну как обычно рекурсией, а это самая медленная из операций — цикл в цикле, а еще вся эта радость крутиться не на сервере, а на клиенте. Поэтому скорость упала не в 10 раз, а в 100.
Короче, я попал на самую распространенную задачу при отображении дерева с большим количеством элементов. Обычная практика — выделился узел, дети подтянулись. Но этот TreeSelect этот принимает на вход только целое дерево и не умеет подгружать узлы по запросу.

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

Коктейль из Java, Kotlin и ReactJS

Итак, я сменил галеру место работы. И, неожиданно, технологии. Java есть, номинально, но на текущий момент, плотно уже 3 недели изучаю Kotlin в связке с ReactJS.

До этого я конечно слышал, про них, но не пробовал. По котлину пару обучающих видео посмотрел и вперед.

Первые впечатления: точка-с-запятой не нужна, типы указываем после переменной, тернарный оператор урезан и стал «элвис» оператором, статических полей нет, финальная и нефинальная переменные обозначаются val и var, функции заменили методы, все классы по-умолчанию финальные. Аааааа-ааа-а!!!

Пример:

fun getPrintTemplate(data: Map<String, Any?>, metadata: MutableList<String> = mutableListOf()): MutableList<String> {
 data.forEach { entry ->
            val value = entry.value
            if (value is Collection<*> && value.isNotEmpty()) {
                (value.first() as Map<String, Any?>)
                        .keys
                        .forEach { subKey -> metadata.add("${entry.key}.$subKey") }
            }
            if (value is Map<*, *>) getPrintTemplate(value as Map<String, Any?>, metadata)
}
    return metadata
}

По реакту — это даже не фреймворк, напрямую не пишем? а под котлин это выглядит как работа с обычными классами.
Вот например создаем элемент:

fun RBuilder.downloadLink(fileName: String, dataFunc: suspend () -> String, body: ((RBuilder).() -> Unit)? = null) {
    a {
        attrs.onClickFunction = {
            async {
                val base64data = dataFunc()
                downloadFile(base64data, fileName).invoke()
            }
        }
        if (body != null) {
            body()
        } else {
            +fileName
            +" "
            icon("download")
        }
    }
}

А потом обращаемся к нему:

    row{
        downloadLink(attach[Attachment.displayName], dataFunc = { handleDownload() })
    }

 

В общем как новый язык изучать. Угораздило жеж ))

Тренажеры на каждый день

Пара отличных тренажеров для разминки с нетривиальными задачками.

https://proghub.ru — совсем молоденький, но многообещающий ресурс, выделяется названием. Комментирования нет, но можно предложить свой вариант ответа. По Java совсем мало пока (в режиме тестирования ооп — 10 вопросов, по спрингу — 8), можно пробовать без регистрации.

http://www.quizful.net/tset — ресурс постарше, вопросы поинтереснее и разнообразнее, много тем, можно комментировать.

 

 

Про собеседования

Поменять работу — это как развестись и искать новую жену. А собеседования (не нравится мне это слово, предпочитаю термин «техническая беседа») это как смотрины. Рассматривая новое предложение в крутой компании, мы смотрим на нее как на женщину.

Это сложный поиск партнера по жизни, с которым предстоит каждый день видеться и работать и поэтому должно быть максимально комфортно. При первом общении важен каждый взгляд, каждое слово. А эта женщина еще и критикует. Это тяжело.

Парни, вы же знаете это чувство, когда вам отказала женщина? Самооценка ниже плинтуса? Вот-вот.

Редко, очень редко, когда от смотрин остается приятное чувство, и даже если тебе отказали, то сделали это очень тактично. Вот в таких компаниях хочется работать. К таким даже через полгода еще хочется напроситься на беседуsmile

 

Ароматный Java

Java это не только язык, но и кофе. Не даром чашка горячего напитка является его логотипом.

Наконец-то пришла посылка с тру кофе для джависта  cool