Информация об изменениях

Сообщение Re: Наставление молодым от 18.03.2020 20:01

Изменено 18.03.2020 20:04 vsb

Re: Наставление молодым
Я, конечно, пока сам молодой, но всё же напишу, может самому через 15 лет интересно будет прочитать.

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

В качестве ЯП Java. Долго пробовал Kotlin, он хорош, но я немного разочаровался в векторе его развития, они начали, как better Java, что меня и подкупило, а сейчас они уже пошли в какую-то свою степь, Kotlin Native, corutines и прочее, мне всё это не нужно от слова совсем, в общем фокус у них ушёл с моих нужд, поэтому я вернулся назад к Java.

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

В качестве библиотек: либо голые сервлеты, если совсем мало нужно, либо Spring MVC. Если к фронтэнду требований больших нет, то делаю серверный рендеринг с помощью Thymeleaf, а так Angular планирую использовать, но пока ещё таких проектов не было. Из интересного пробовал Wicket, два приложения на нём написал, но не очень доволен. Хотя тут сложный вопрос, для некоторых видов приложений он будет очень хорош, там, где куча состояния на сервере в сессии удобно хранится и где очень нужна компонентная модель. Это его две сильнейшие стороны.

В качестве доступа к базе MyBatis, как универсальное решение. Для простых случаев голый JDBC, для некоторых можно Hibernate, но в целом это для совсем уж дубового CRUD. Но Hibernate надо относительно хорошо знать, так просто подключить, пролистать туториал и пойти использовать не выйдет, скорей всего получится плохо. MyBatis мне не очень нравится, но ничего лучше я не нашёл. Хотелось бы более низкоуровневое решение.

Не нашёл подходящую библиотеку для генерации бинов, когда-нибудь я её таки напишу. Что-то вроде Google AutoValue но чуть по-другому. В целом мне нужна одна простая фича: чтобы поля могли быть неинициализированными и кидать исключение при вызове геттера. Ну и, естественно, чтобы оно всё работало со скоростью вручную написанного кода.

Что я пробовал и не понравилось:

Google Guava — иммутабельные коллекции. В теории штука хорошая, на практике вот это слово Immutable всё портит. ImmutableList l = ImmutableList.of(1, 2, 3). Очень длинно. Им бы сделать ImList и всё. Да, вот только из-за именования и не пользуюсь. Ну и ещё у них очень странная идея того, что null хранить в коллекции нельзя и они это не разрешают. А я порой храню и мне удобно.

@Nullable/@NotNull аннотации. Кстати и в котлине система типов с этими non-null типами мне не нравится. У меня никогда не было проблем с NullPointerException-ами, поэтому мне далека проблема, которую они пытаются решать, а вот неудобства от того, что надо ублажать компилятор, присутствуют повсеместно. Ну и, конечно, неразмеченные этими аннотациями примерно все Java-библиотеки. Почему не делают инструмент, который анализируя байткод сам сгенерирует все эти аннотации, я до сих пор не понимаю, задача-то тривиальная. Вон ребята с TypeScript натянули систему типов на JavaScript и не постремались сгенерить кучу аннотаций для существующих JavaScript-библиотек. Ситуация очень похожая.
Re: Наставление молодым
Я, конечно, пока сам молодой, но всё же напишу, может самому через 15 лет интересно будет прочитать.

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

В качестве ЯП Java. Долго пробовал Kotlin, он хорош, но я немного разочаровался в векторе его развития, они начали, как better Java, что меня и подкупило, а сейчас они уже пошли в какую-то свою степь, Kotlin Native, corutines и прочее, мне всё это не нужно от слова совсем, в общем фокус у них ушёл с моих нужд, поэтому я вернулся назад к Java. Но он всё равно хорош и я его держу в загашнике.

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

В качестве библиотек: либо голые сервлеты, если совсем мало нужно, либо Spring MVC. Если к фронтэнду требований больших нет, то делаю серверный рендеринг с помощью Thymeleaf, а так Angular планирую использовать, но пока ещё таких проектов не было. Из интересного пробовал Wicket, два приложения на нём написал, но не очень доволен. Хотя тут сложный вопрос, для некоторых видов приложений он будет очень хорош, там, где куча состояния на сервере в сессии удобно хранится и где очень нужна компонентная модель. Это его две сильнейшие стороны.

В качестве доступа к базе MyBatis, как универсальное решение. Для простых случаев голый JDBC, для некоторых можно Hibernate, но в целом это для совсем уж дубового CRUD. Но Hibernate надо относительно хорошо знать, так просто подключить, пролистать туториал и пойти использовать не выйдет, скорей всего получится плохо. MyBatis мне не очень нравится, но ничего лучше я не нашёл. Хотелось бы более низкоуровневое решение.

Не нашёл подходящую библиотеку для генерации бинов, когда-нибудь я её таки напишу. Что-то вроде Google AutoValue но чуть по-другому. В целом мне нужна одна простая фича: чтобы поля могли быть неинициализированными и кидать исключение при вызове геттера. Ну и, естественно, чтобы оно всё работало со скоростью вручную написанного кода.

Что я пробовал и не понравилось:

Google Guava — иммутабельные коллекции. В теории штука хорошая, на практике вот это слово Immutable всё портит. ImmutableList l = ImmutableList.of(1, 2, 3). Очень длинно. Им бы сделать ImList и всё. Да, вот только из-за именования и не пользуюсь. Ну и ещё у них очень странная идея того, что null хранить в коллекции нельзя и они это не разрешают. А я порой храню и мне удобно.

@Nullable/@NotNull аннотации. Кстати и в котлине система типов с этими non-null типами мне не нравится. У меня никогда не было проблем с NullPointerException-ами, поэтому мне далека проблема, которую они пытаются решать, а вот неудобства от того, что надо ублажать компилятор, присутствуют повсеместно. Ну и, конечно, неразмеченные этими аннотациями примерно все Java-библиотеки. Почему не делают инструмент, который анализируя байткод сам сгенерирует все эти аннотации, я до сих пор не понимаю, задача-то тривиальная. Вон ребята с TypeScript натянули систему типов на JavaScript и не постремались сгенерить кучу аннотаций для существующих JavaScript-библиотек. Ситуация очень похожая.