The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
Я являюсь ярым сторонником правил и дисциплины в разработке программного обеспечения; в качестве примера можно посмотреть статью “Вы хакер или дизайнер?”. Кроме того, я являюсь поклонником объектно-ориентированного программирования в его самой чистой форме; например, см. “Семь добродетелей хорошего объекта”. Я также являюсь соучредителем и генеральным директором Zerocracy, компании по разработке программного обеспечения, в которой я воплощаю свою любовь к дисциплине и чистому дизайну на практике.
Я хочу побудить вас разделить мою страсть — не только путем чтения этого блога, но и созданием настоящего программного обеспечения с открытым исходным кодом дисциплинированным образом. Эта награда предназначена для тех, кто достаточно смел, чтобы плыть против течения и ценить качество превыше всего.
Отправьте мне свой собственный проект для рассмотрения и примите участие в конкурсе.
Один человек может подать до трех проектов.
Подачи принимаются до 1 сентября 2015 года и больше не принимаются.
Заявки необходимо отправлять по электронной почте на адрес me@yegor256.com. Вам достаточно предоставить свой логин GitHub и название репозитория; я проверю историю коммитов, чтобы убедиться, что вы являетесь основным участником проекта.
Я оставляю за собой право отклонить любую представленную работу без объяснений.
Все представленные материалы будут опубликованы на этой странице (включая отклоненные).
Результаты будут объявлены 15 октября на этой странице и по электронной почте.
Лучший проект получит $4,096.
Лучшие 8 проектов получат 1-годовые лицензии на открытый исходный код для любых продуктов JetBrains (одна лицензия на проект).
Окончательные решения будут приниматься мной и не подлежат обсуждению (хотя я могу пригласить других людей, чтобы помочь мне принять правильное решение).
Каждый проект должен быть:
Как минимум 5 000 строк кода.
По крайней мере, один год.
Объектно-ориентированный (это единственное, что я понимаю).
Лучшие проекты будут иметь (подробнее об этом):
“Continuous delivery” - “Непрерывная доставка”.
Отслеживаемость изменений.
Самодокументирующийся исходный код.
Строгие правила форматирования кода.
Что не имеет значения:
Я считаю, что любой язык программирования, используемый правильно, может быть применен для создания высококачественного продукта.
Ажиотаж и тренды. Даже если ваш проект - еще один парсер аргументов командной строки, он все равно имеет право на награду. Мне не важно ваше маркетинговое положение; качество - это все.
Кстати, если вы хотите спонсировать эту премию и увеличить бонус, напишите мне на электронную почту.
158 проектов было представлено до сих пор (в порядке представления):
“
robertop/triumph4php
” - “robertop/triumph4php
””
blambeau/wlang
” - “blambeau/wlang
””
siom79/japicmp
” - “siom79/japicmp
””
AdamsLair/duality
” translates to “AdamsLair/duality
” in Russian.Pacmanfan/UVDLPSlicerController
-Pacmanfan/UVDLPSlicerController
”
arnaudroger/SimpleFlatMapper
” - “arnaudroger/SimpleFlatMapper
””
trade-manager/trade-manager
” - “trade-manager/trade-manager
””
DeqingSun/ESP8266-Dash-Button
” - “DeqingSun/ESP8266-Dash-Button
””
wewoor/ZBLOG
” - “wewoor/ZBLOG
”“
ddasilva/scheme-droid
” - “ddasilva/scheme-droid
””
wbotelhos/raty
” - “wbotelhos/raty
””
chylex/Hardcore-Ender-Expansion
” - “chylex/Hardcore-Ender-Expansion
””
daimor/NBStudio
” would be translated to Russian as “daimor/NBStudio
”.“
yaylas/AndroidFaceRecognizer
” - “yaylas/AndroidFaceRecognizer
”restorer/gloomy-dungeons-2
- перевод не требуется, это ссылка на репозиторий GitHubrestorer/Gloomy-Dungeons-3D
- переведите на русский язык без перевода технических терминов и собственных имен.”
restorer/zame-haxe-particles
” should be translated to Russian as “restorer/zame-haxe-particles
”.”
Floens/Clover
” - “Floens/Clover
””
chrisshayan/TechLooper
” - “chrisshayan/TechLooper
””
blundell/WoodyFaceDetection
” - “blundell/WoodyFaceDetection
”jasonycw/MemeCreator
- перевести на русский язык”
ysc/QuestionAnsweringSystem
” - “ysc/QuestionAnsweringSystem
””
omry/banana
” - “omry/banana
”jackrex/AndroidCacheFoundation
- переведите на русский язык”
scireum/parsii
” - “scireum/parsii
”scireum/sirius-kernel
- переведите на русский язык.yazeed44/ResizableView
- перетаскиваемый и масштабируемый вид для iOS, который позволяет пользователям изменять размеры и перемещать представления на экране.”
markkerzner/FreeEed
” - “markkerzner/FreeEed”sdorra/angular-dashboard-framework
- переведите на русский язык, не переводя технические термины и имена собственные.”
dolda2000/ashd
” - “dolda2000/ashd
”jaredsburrows/AndroidGradleTemplate
– переведите данный Markdown параграф с английского на русский язык, не переводя технические термины и собственные имена.ReikaKalseki/ChromatiCraft
- перевод данного Markdown абзаца на русский язык сохранит ссылку без изменений.katzer/cordova-plugin-local-notifications
- переведите на русский язык.katzer/cordova-plugin-background-mode
- переведите на русский язык.nivdul/actitracker-cassandra-spark
- переведите этот абзац из Markdown с английского на русский, не переводя технические термины и собственные имена: “nivdul/actitracker-cassandra-spark
””
LuckyJayce/ViewPagerIndicator
” - “LuckyJayce/ViewPagerIndicator
””
mifmif/mspider
” - “mifmif/mspider
”KeldOelykke/FailFast
- Келд Оелюкке/ФейлФаст”
erudika/para
от@albogdano
”
4 октября: Несколько недель назад я попросил троих парней, которые работают со мной, проверить каждый проект из этого списка и дать свою обратную связь. Я получил от них три обычных текстовых файла. Вот они, объединенные в один, почти без исправлений: award-2015.txt
(вы можете найти свой проект там). Исходя из их мнений, я решил выбрать следующие 12 проектов для более детального рассмотрения (в алфавитном порядке):
”
kaitoy/pcap4j
” - “kaitoy/pcap4j
”raphw/byte-buddy
(добавлено 5 октября)trautonen/coveralls-maven-plugin
- переведите этот абзац на русский язык, не переводя технические термины и имена собственные.
Я скоро их просмотрю. Победитель будет объявлен 15 октября.
5 октября: Я получил электронное письмо от автора raphw/byte-buddy
, просившего пересмотреть моё решение по этому проекту. Я быстро посмотрел, почему проект был отфильтрован, и решил включить его в список финалистов. Кстати, если кто-то из вас считает, что его проект был исключен по ошибке, не стесняйтесь писать мне письма.
11 октября: Сегодня я проанализировал все 12 проектов. Все они действительно хорошие проекты, поэтому, чтобы найти лучший, я сосредоточился на их недостатках, а не достоинствах. Вот что я нашел, предварительно.
coala-analyzer/coala
(14K строк кода на Python, 160K строк высшего порядка)
Есть глобальные функции, например
get_language_tool_results
иDictUtilities
. Это определенно плохая идея в ООП.Класс
Constants
- ужасная идея.Проверка типов объектов во время выполнения - плохая идея, например,
ClangCountVectorCreator.py
Что не так с
cindex.py
? Там почти 3200 строк кода, это слишком много.Статический анализ не является обязательным шагом в процессе сборки и выпуска. Вот почему, я полагаю, форматирование кода не согласовано и иногда довольно некрасиво. Например,
pylint
сообщает о сотнях проблем. (обновление: используется scrutinizer, но я все равно считаю, что локальное использование pylint серьезно улучшило бы качество кода)Некоторые методы имеют документацию, а другие нет. Я не понимаю логику. Было бы здорово, если бы все методы были задокументированы. Кроме того, не все классы имеют документацию.
Score: 5
checkstyle/checkstyle
(83K строк кода на Java, 553K строк кода высокого уровня)
Есть целый набор утилитарных классов, что, безусловно, является плохой практикой в ООП. Они даже сгруппированы в специальный пакет
utils
, такая ужасная идея.Сеттеры и геттеры повсюду, вместе с неизменяемыми классами, которые на самом деле не являются объектно-ориентированной концепцией, например
DetectorOptions
.NULL
активно используется во многих местах - это серьезный антипаттерн.Я нашел пять файлов
.java
с более чем 1000 строк в каждом из них, например, 2500+ вParseTreeBuilder.java
.Есть прямые коммиты в основную ветку, сделанные разными участниками проекта, и некоторые из них не связаны ни с одними тикетами. Невозможно понять, почему они были сделаны. Посмотрите на пример:
7c50922
. Были ли обсуждения? Кто принял решение? Совершенно не ясно.Релизы вообще не документированы.
Процедура выпуска не автоматизирована. По крайней мере, я не нашел никакого сценария выпуска в репозитории.
Score: 3
citiususc/hipster
(5K Java LoC, 64K HoC) - citiususc/hipster
(5K строк кода на Java, 64K строк кода высшего порядка)
Существуют публичные статические методы и даже утилитарные классы, например этот, с забавным названием
F
NULL
активно используется, особенно в итераторах - это плохая идея.Документация JavaDoc не является последовательной, некоторые методы задокументированы, а другие - нет.
Не все коммиты связаны с тикетами, вот пример:
8cfa5de
.Изменения фиксируются напрямую в ветке
master
, pull-запросы не используются вовсе.Я не нашел автоматизированной процедуры для выпуска. Я нашел одну для регулярного развертывания снимков в Bintray, а что насчет выпусков? Они выполняются вручную?
Отсутствует статический анализ, поэтому код иногда выглядит беспорядочным.
Количество модульных тестов довольно небольшое. Кроме того, я не нашел нигде опубликованный полный отчет о покрытии кода.
Score: 4
gulpjs/gulp
(700 JS LoC) - gulpjs/gulp
(700 строк JS кода)
- Score: 0
kaitoy/pcap4j
(42K строк кода, 122K строк комментариев).
NULL
используется в изменяемых объектах, например вAbstractPcapAddress
; это плохая идея.Слишком много
static
методов и переменных. Они буквально повсюду. Есть даже модуль, называемыйpcap4j-packetfactory-static
, полный “классов” с статическими методами.Документация JavaDoc не является последовательной и иногда просто неполной, проверьте, например, здесь.
Есть всего несколько проблем и только шесть запросов на слияние. Коммиты не связаны с проблемами. Практически отсутствует возможность отслеживать изменения.
Процедура выпуска не автоматизирована, релизы не документированы.
Нет статического анализа, поэтому код иногда выглядит беспорядочно.
Score: 3
raphw/byte-buddy
(84K LoC, 503K HoC) - Репозиторий raphw/byte-buddy
(84K LoC, 503K HoC).
Есть много
public static
методов и свойств. Я понимаю, что, возможно, это единственный способ работать с областью проблем в Java, но всё же…instanceof
используется очень часто, и это плохая практика в ООП. Опять же, я понимаю, что иногда это может понадобиться в контексте конкретной проблемной области, но всё же…Большинство коммитов выполняется непосредственно в ветке master, без создания pull-запросов или тикетов, поэтому их прослеживаемость нарушена.
Процедура выпуска не автоматизирована (я не нашел скрипт).
Score: 5
subchen/snack-string
(1K LoC, 2K HoC) - subchen/snack-string
(1K строк кода, 2K строк дочернего кода)
- Score: 0
gvlasov/inflectible
(5K LoC, 36K HoC) translates to: gvlasov/inflectible
(5 тыс. строк кода, 36 тыс. строк документации)
- Score: 10
testinfected/molecule
(10K LoC, 43K HoC) - testinfected/molecule
(10 тыс. строк кода, 43 тыс. строк кода, содержащих только комментарии).
В некоторых классах есть методы установки и получения, хотя они имеют другую соглашенную нотацию, например
Request
иResponse
.Большинство файлов
.java
не содержат блоков Javadoc, и они выглядят последовательными, но внезапно некоторые файлы имеют документацию, напримерWebServer
.Есть не так много проблем, и большинство коммитов нельзя проследить до какой-либо из них, например
b4143a0
- зачем он был сделан? Неясно. Кроме того, почти нет pull request. Похоже, автор просто коммитит в master.Процедура выпуска не задокументирована/автоматизирована. Я не нашел ее. Кроме того, релизы вообще не задокументированы.
Статический анализ отсутствует.
Score: 6
trautonen/coveralls-maven-plugin
(4.5K LoC) - переведите на русский язык
- Score: 0
wbotelhos/raty
(8.7K LoC, 63K HoC) - wbotelhos/raty
(8,7 тыс. строк кода, 63 тыс. символов)
Есть глобальные функции, например в
helper.js
jasmine.js
имеет 2400 строк кода, что является слишком большим количеством.Я не понимал, почему файлы
.html
находятся вместе с файлами.js
в одном каталоге, напримерrun.html
Не все изменения могут быть прослежены до проблемы, например
0a233e8
. В проекте нет так много проблем и всего несколько запросов на слияние.Процедура выпуска не автоматизирована (по крайней мере я не нашел никакой документации об этом).
“Отсутствует статический анализ”
“Нет модульных тестов”
Score: 2
xvik/guice-persist-orient
(17K строк кода, 54K строк кода, содержащихся в других модулях)
В данном проекте активно используется инъекция зависимостей, что, по моему мнению, является не лучшей идеей в ООП в целом. Но в данном случае, я понимаю, что это требуется предметной областью проблемы. В любом случае…
Есть всего несколько проблем и практически нет запросов на объединение изменений (pull requests), и коммиты нельзя проследить обратно к проблемам, например, к этому:
e9c8f79
Не существует статического анализа (статический анализ присутствует, с набором проверок Checkstyle, PMD и FindBugs).
Score: 5
Я уделил наибольшее внимание анти-паттернам, которые являются первым и самым ужасным грехом, от которого мы должны пытаться избегать. Наличие null
, например, гораздо серьезнее повлияло на оценку, чем отсутствие автоматизированной процедуры выпуска.
15 октября: Таким образом, у нас есть эти лучшие проекты из 158, представленных на конкурс:
coala-analyzer/coala
- переведите на русский язык
Поздравляем @gvlasov
, победителя! Вот ваш значок:
Положите этот код в README
на GitHub:
Все восемь проектов получат бесплатную одногодичную лицензию для одного пользователя на один продукт JetBrains. Я напишу вам всем письмо, и мы разберемся, как их передать.
Спасибо всем за участие! Увидимся в следующем году.
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-05 at 22:09