Обо мне

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

Smalltalk - это о больших мечтах. Java - это маленькие реалии.

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

Я являюсь приверженцем фреймворка Java Collections с открытым исходным кодом под названием Eclipse Collections, который был вдохновлен моим опытом использования Smalltalk еще в 90-х годах. Eclipse Collections развивается более 12 лет. Симметрия определяет большую часть работы в Eclipse Collections. Я люблю говорить, что симметрия подобна гравитации. Когда я вижу отсутствующие или непохожие модели, я чувствую тяжесть симметрии. Это работа, которую еще предстоит сделать.

Что такое симметрия?

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

На рисунке выше представлена ​​комбинация функций, доступных в коллекциях Eclipse. У нас есть API для фильтрации, который называется select. При хорошей симметрии для select он будет доступен во всех структурах данных для нетерпеливого / ленивого поведения, последовательного / параллельного выполнения, читаемых / изменяемых / неизменяемых интерфейсов, объектных и примитивных версий каждого контейнера.

На рисунке выше вы увидите select API, определенный для нескольких интерфейсов в иерархии типов Коллекций Eclipse. На RichIterable select возвращает RichIterable. Каждый подтип RichIterable определяет ковариантное переопределение для select. ListIterable, select возвращает ListIterable. LazyIterable, select возвращает LazyIterable. MutableList возвращает MutableList, ImmutableList возвращает ImmutableList и т. Д.

Есть и другие формы симметрии. Для каждой структуры данных обычно существует соответствующий интерфейс Читаемый (например, ListIterable), Изменяемый (например, MutableList) и Неизменяемый (например, ImmutableList). Для большинства типов это распространяется как на объектные, так и на примитивные контейнеры (например, IntList, MutableIntList, ImmutableIntList, DoubleSet, MutableDoubleSet, ImmutableDoubleSet и т. Д.).

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

Черепахи полностью вниз

«Одна из этих вещей не похожа на другие…» - Улица Сезам.

В Smalltalk все является объектом. Это «черепахи до упора». Это упрощает достижение хорошей симметрии. В Java все не является объектом. В Java есть восемь примитивов (boolean, byte, char, double, int, float, long, short). Примитивы и объекты ведут себя по-разному. Примитивы - это маленькая реальность Java. Достижение хорошей симметрии между объектами и примитивами в структуре коллекций является сложной задачей.

Мы решительно подходим к решению этой задачи. Коллекции Eclipse поддерживают как объектные, так и примитивные коллекции. Это может иметь огромные преимущества (эффективность / производительность / беглость) и неприятные затраты (усилия / время / размер кода). Мы исправляем недостающую симметрию, когда находим ее, но только тогда, когда знаем, что для нее есть вариант использования. Генерация кода помогает значительно сократить объем человеческой работы, но может создать много дублированного кода, если мы не будем осторожны.

Будущее

Если вы сегодня программируете на Java, обратите внимание на Коллекции Eclipse. Эта удивительная структура коллекций делает Java лучше и увлекательнее для программирования. Если вы начнете использовать ее в своих проектах, вы поймете, почему я так питаю симпатию к симметрии. Симметрия значительно упрощает для разработчиков изучение и использование такой многофункциональной и обширной среды, как Eclipse Collections. В будущих блогах я планирую осветить, где симметрия помогает развивать фреймворк.

«Лучший способ предсказать будущее - это изобрести его». - Алан Кей

Я все еще кодирую Smalltalk, когда у меня есть время. Smalltalk напоминает мне о том, как все было когда-то и как они могут быть снова, когда мы извлекаем уроки из прошлого и делимся этими уроками с другими. Мне приятно знать, что есть разработчики, которые все еще усердно работают над тем, чтобы язык Smalltalk и сообщество оставались живыми и растущими. Если вы не знаете или не использовали Smalltalk какое-то время и хотите увидеть, чего вам не хватает, взгляните на Pharo Smalltalk или Dolphin Smalltalk. Обе они представляют собой отличные среды разработки Smalltalk с открытым исходным кодом.

Я руководитель проекта и ответственный за проект OSS Коллекции Eclipse в Eclipse Foundation. Eclipse Collections открыта для пожертвований. Если вам нравится библиотека, вы можете сообщить нам об этом, отметив ее на GitHub.