Software Quality Award, 2017

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Это третий год Software Quality Award. Приз остается тем же - $4,096. Правила остаются прежними. Читайте дальше. Предыдущие годы: 2015, 2016.

  • Одно лицо может представить только один проект.

  • Предоставление заявок принимается до 1 сентября 2017 года.

  • Я проверю историю коммитов, чтобы убедиться, что вы являетесь основным участником проекта.

  • Я оставляю за собой право отклонить любую отправку без объяснения.

  • Все представленные работы будут опубликованы на этой странице (включая отклоненные).

  • Результаты будут объявлены 15 октября 2017 года на этой странице и по электронной почте.

  • Лучший проект получит $4,096.

  • Окончательные решения будут приниматься мной и не подлежат обсуждению (хотя я могу пригласить других людей помочь мне принять правильное решение).

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

Каждый проект должен быть:

  • По крайней мере 10 000 строк кода.

  • По крайней мере один год.

  • Объектно-ориентированный (это единственное, что я понимаю).

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

Что не имеет значения:

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

  • Шум и тренды. Даже если ваш проект - это еще один парсер аргументов командной строки, он все равно подходит для награды. Мне не важно ваше маркетинговое положение; качество - это все.

Кстати, если вы хотите спонсировать эту премию и увеличить бонус, напишите мне на электронную почту.

На данный момент было представлено 28 проектов (в порядке представления).


[15 сентября 2017 года] Я пригласил шесть человек, чтобы они помогли мне просмотреть проекты. Их имена:

[15 октября 2017 г.] Это краткое изложение всего, что они мне прислали: award-2017.txt. Я выберу победителя в ближайшие дни, оставайтесь на связи!

[21 октября 2017 г.] Мой список включает в себя шесть проектов (в случайном порядке): php-ai/php-ml, vavr-io/vavr, zetaops/ulakbus, mafagafogigante/dungeon, ribtoks/xpiks, javascript-obfuscator/javascript-obfuscator. Завтра (надеюсь) я решу, как разделить 4096 долларов.

[23 октября 2017 г.] Это мои собственные наблюдения по каждому проекту из списка. Я буду упоминать только негативные вещи, так как все проекты довольно хорошие, нет необходимости говорить о том, насколько они хороши. Я перечислил проблемы в порядке их важности (самые критические сверху).

php-ai/php-ml (9.8K LoC PHP, 29K HoC):

  • Getters, setters and mutability in many places - Получатели, установщики и изменяемость во многих местах.

  • NULL присутствует во многих местах (опять же, я знаю, что в PHP нет перегрузки методов).

  • -ER: Оценщик, Классификатор, Кластеризатор, Оптимизатор, и т.д.

  • код в конструкторах (да, я понимаю, что это PHP)

  • пустые строки в телах методов

  • Score: 5

vavr-io/vavr (70K LoC Java, 834K HoC):

  • Есть действительно большие “классы”, они огромны в пакете io.vavr.collection.

  • Интерфейс Seq имеет более 120 методов! Что происходит?

  • Классы утилит, статические методы.

  • Некоторые файлы .java содержат несколько классов Java. Почему?

  • Не удалось создать ветку master: #2147

  • Score: 4

zetaops/ulakbus (25K строк кода на Python, 707K строк кода вместе с комментариями):

  • Нет CI, нет тестового покрытия, нет автоматизации статического анализа?

  • Посмотрите комментарии от рецензента.

  • Score: 2

mafagafogigante/dungeon (14K строки кода на Java, 88K суммарное количество символов):

  • Статические методы, геттеры, сеттеры, изменяемость

  • Коммиты не связаны с задачами и запросами на слияние (PR).

  • В комментариях внутри тела метода есть во многих местах, это плохая практика.

  • Score: 5

ribtoks/xpiks (180K+ LoC C/C++, 739K HoC):

  • Типы довольно большие, с множеством методов.

  • Утилитарные классы, помощники

  • -ERы: CommandManager, SpellCheckWorker и т. д.

  • Я не нашел много документации внутри кода.

  • Коммиты не связаны с задачами/запросами на внесение изменений (issues/PRs).

  • Score: 4

javascript-obfuscator/javascript-obfuscator (72K строк JS/TS, 400K строк HoC):

  • Аннотации для внедрения зависимостей

  • -ERы: reader, sanitizer, emitter

  • Публичные атрибуты в классах

  • Я считаю, что здесь многие “объекты” - это просто DTO.

  • Интерфейсы имеют префикс I, это анти-паттерн

  • Score: 4

В целом, моё впечатление от этого года состоит в том, что я получаю гораздо меньше “мусора”. Представлено меньше проектов, но их качество гораздо выше, чем в предыдущие два года. Рад видеть эту тенденцию. Для меня это означает, что я делаю правильные вещи.

На этот раз я уделил больше внимания элегантности ООП и поддерживаемости кодовой базы. Ключевыми факторами для поддерживаемости были:

  • Автоматизированный статический анализ

  • Автоматическая сборка (CI)

  • Automated tests

  • Соблюдение коммитов через задачи и запросы на слияние (PR).

Для элегантности ООП, как обычно, я обратил внимание на отсутствие анти-паттернов, включая NULL, геттеры, сеттеры, статические методы, изменяемость и т.д.

В этом году есть два победителя: php-ai/php-ml и mafagafogigante/dungeon. Но мне не очень нравится код, который я нашел в этих репозиториях. Он, конечно, лучше, чем у всех остальных, но далеко не идеален.

Вот почему я принял такое решение: я дам всего лишь $1,024 каждому победителю, вместо $2,048.

Поздравляю @itcraftsmanpl с php-ml ($1,024) и @mafagafogigante с dungeon ($1,024).

Вот ваши значки:

Разместите этот код в файле README на GitHub (замените ??? на свое имя пользователя на GitHub в URL).

Благодарим всех за участие! Увидимся в следующем году.

Translated by ChatGPT gpt-3.5-turbo/36 on 2023-11-17 at 12:45

sixnines availability badge   GitHub stars