453 subscribers
69 photos
25 files
83 links
Пишу иногда интересно, а иногда не очень. Предложения, сотрудничество @Javacoding_bot
加入频道
Появился отличный перевод статьи Pierre-Yves Saumont про абстракции в ФП и ООП. Задача для примера выбрана не слишком близкая к реальности, зато все расписано предельно понятно.

Полезно прочитать, если хотите:

🔹сравнить практики в ООП и ФП
🔹понять, почему доведение абстракции до предела бывает полезно и в ООП
🔹пофилософствовать на тему: «является ли преждевременная абстракция/оптимизация злом?»

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

Кому интересно, оригинал можно почитать здесь.
Частенько бывает 😄
Pierre-Yves Saumont, Functional Programming in Java

Раз уж на днях публиковал ссылку на статью Pierre-Yves Saumont, надо вспомнить и его книгу.
Pierre_Yves_Saumont_Functional_Programming_in_Java_How_functional.pdf
6.4 MB
Из плюсов:

глубокое и подробное погружение в тему. После прочтения можно смело браться за Haskell, F# – что захотите, база у вас уже будет;

в процессе реально понимаешь, как сделать свой код более читабельным, думая функционально.

Из минусов:

решения некоторых задач откровенно странные. Да, автор демонстрирует принципы ФП в ООП-языке, но местами эффективность от этого страдает, а не повышается.
В программе приведено следующее описание:

1 class A {
2 int a;
3 int b;
4 }
5 class B extends A{
6 int b;
7 ...
8 }
Каким кодом необходимо дополнить описание конструктора класса B, наследующего класс A, чтобы при создании объекта класса B переменные класса A принимали значение 1?
Anonymous Quiz
7%
a.A = b.A = 1;
60%
super.a=1; super.b = 1;
16%
A.a = 1; A.b = 1;
4%
sup.a = 1; sup.b = 1;
13%
a.super() = 1; b.super() = 1;
Не каждый программист захочет разбираться в том, как устроена процедура вывода типов выражений. Но я считаю, что попробовать нужно – чтобы лучше понимать поведение компилятора. А еще потому, что от привычки анализировать напрямую зависит наш профессиональный навык.

Как раз недавно нашел статью про вывод типов.

Ожидал, что читать будет сложно, но написано доступно, все по полочкам – четко обозначены нужные нам контексты для поли-выражений, даны ссылки на соответствующие главы спецификации.

Будет полезно ознакомиться, даже если вы не планируете углубляться в детали.
А ведь сегодня только вторник.
Продолжаю делиться литературой. Pat Morin, Open Data Structures.
ods-java-pat-morin.pdf
1.4 MB
Книга позиционируется как введение в структуры данных, но на деле не так проста.

Читайте, если вы:

уже знакомы с базой по структурам данных (с работами Лафоре, например);

хотите подробнее углубиться в тему или освежить знания;

любите максимально подробные (местами даже душные) разборы примеров.

Вам не подойдет, если:

⛔️ только начинаете изучать вопрос. Для этого можно познакомиться с Лафоре, на канале я делился книгой, пару курсов тоже рекомендовал).
Чему равен элемент массива a с индексом [51]?

int a []= new int [100];
for (int i = 0, j = 100; i < 100; i++, j--){
a[i] = i + j;
System.out.print(a[i]);
}
Чему равен элемент массива a с индексом [51]?
Anonymous Quiz
16%
50
7%
51
55%
100
15%
программа завершится ошибкой
7%
101
Кстати, я отлично завариваю чай.
Из интересных событий в индустрии:

Онлайн-конференция IT Nights 3.0

🗓10 декабря, 19:00
Стоимость билета: 990 ₽

Обещают много инфы про:

☑️ изменения в IT;
☑️ софт скилы;
☑️ собесы и построение карьеры;
возможности для обучения.

Что особенно полезного: доклады Тагира Валеева и Паши Финкельштейна, где они будут сравнивать Java и Kotlin.

Посмотреть полную программу конференции и купить билеты можно здесь.
Важнейшие принципы разработки ПО

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

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

В статье подробно описаны 10 принципов разработки, которые помогут улучшить ваш код. Если придерживаться хотя бы нескольких, эффективность работы точно повысится. Кстати, про мой любимый (и, я считаю, важнейший) принцип KISS я рассказывал здесь.
Какой из перечисленных методов и операций может быть использован для замены символов в строках String или StringBuffer в Java-программах?
Anonymous Quiz
10%
substring()
78%
replace()
6%
getChars()
2%
concat()
3%
charAt()
Tim Roughgarden, Algorithms Illuminated: Part 1: The Basics
algorithms-illuminated-part-1.pdf
5.5 MB
Если хочется лучше разбираться в алгоритмах, читайте Рафгардена. Это первая часть четырехтомника, посвящена введению в основы.

Из плюсов:

максимально понятный язык;
баланс между теорией и разбором конкретных примеров;
все необходимое для хорошей базы: MergeSort, QuickSort, асимптотический анализ, “разделяй и властвуй”, алгоритмы сортировки.

Из минусов:

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