Здравствуйте, меня зовут Дмитрий Карловский и я… практикую терморектальную ароматерапию. Понимаю, что каждый любит своё болото, и будет защищать его до последней капли жижи. Тем не менее, высокая инженерная культура требует объективности в оценке инструментов.
Часто для решения одной и той же задачи существует более чем один подходящий по функциональности вариант. При прочих равных, хотелось бы выбрать такой проект, который доставит меньше всего проблем. Но как навскидку оценить объём этих проблем, не тратя несколько человеколет для собственноручного набивания всевозможных шишек?
Что ж, давайте разберём, какие бывают проблемы, как их оценить и посравниваем некоторые популярные проекты.
Проблемы
Ошибки в коде
Никому не нужен инструмент, который глючит или попросту не работает. На них обычно заводятся issue c тегом "bug".
Грабли в архитектуре
Архитектура может быть не заточена под нужный вам способ использования. Более того, порой архитектура никуда не годиться, даже в казалось бы основных сценариях использования. Issue в таком случае если и заводятся, то пространные в духе "как сделать то-то?" или "почему работает не так, как я ожидаю?".
Документация
Если документация не полна, не актуальна или её вовсе нет, то освоение инструмента будет сопряжено с трудностями. На неё обычно заводятся issue с тегом "documentation".
Несовершенство
Если какая-либо фича реализована не очень удобно или вообще не реализована, то приходится писать свои фасады, декораторы, адаптеры и прочие прокси, чтобы приспособить инструмент к реалиям своего проекта. На них обычно заводятся issue с тегом "improvement".
Поддержка
Нет ничего идеального. Ни проект, ни его автор, ни его пользователь. А значит неизбежно появление проблем. И борьба с этими проблемами может быть отдельной проблемой. Например, вашу проблему могут не заметить, или забыть, или не понять, или просто послать вас с вашей проблемой куда подальше. Issue по такому случаю уже не заводятся. Но постоянно растущий список открытых проблем на это неиллюзорно намекает.
Сравниваем
Что ж, получается, что каждая issue — это та или иная проблема, которая либо уже возникла у пользователя, либо могла бы возникнуть, либо просто есть и принимается им как данность. А это значит, что чем больше открытых issue, тем больше проблем есть в проекте. Как правило проекты с простой архитектурой вызывают меньше проблем, чем хитровыкрученные олимпиадные изыски или нагромождение паттернов.
Однако, важно понимать, что быстро поднятое упавшим не считается. Даже большое количество проблем может компенсироваться хорошей оперативной поддержкой. Фактически значимость проблемы определяется не только её серьёзностью, но и тем, сколько времени она остаётся для вас актуальной. Если проблема решается за пару часов, то она слабо повлияет на вашу работу. Но если же она висит годами, то она попьёт много крови, даже если каждый глоток будет мизерным.
Поэтому наша оценка проблемоёмкости должна быть пропорциональна не только числу открытых проблем, но и времени, в течении которого они остаются открытыми. Так что просто выкачаем все открытые issue, сложим их возраста в днях и сравним этот показатель для разных проектов решающих одну и ту же задачу. Итак, поехали...
TypeScript или FlowJS?
Правильный ответ — Haxe. Во всяком случае проблемность его существенно ниже. Хотя и тоже далеко не блещет.
React или Angular?
Разрабы Angular замутили переусложнённую архитектуру, что привело к огромной кодовой базе, в которой много багов и граблей. На поддержку всего этого дела требуется настолько много сил, что команда профессионалов из Гугла не справляется с поддержкой своего детища. Такие у меня впечатления после полу года работы с этим фреймворком. И графики это хорошо иллюстрируют.
Redux или MobX?
MobX может похвастаться образцовой поддержкой. Если вы откроете issue, то можете быть уверены, что вскоре она будет закрыта. Разумеется резолюция будет не всегда такой, как вам бы хотелось, но она хотя бы вообще будет.
А вот у RXJS с поддержкой всё не ладно. Очевидно, дело в куда более сложных абстракциях, которые протекают во всех возможных местах и очень плохо укладываются в головах разработчиков. Существование сайтов типа RxMarbles это только подтверждает.
MomentJS или Luxon?
Ага, красный флаг у date-fns. А ведь именно её часто рекомендуют любители функциональных многоножек и шатания деревьев.
Выводы
К сожалению, если за инструментом стоит большая корпорация, то это вовсе не значит, что огребёте вы с ним меньше, чем с другим, который поддерживает один разраб на голом энтузиазме. Более того, крупная корпорация с гораздо большей вероятностью сделает неповоротливого монстра, которого благополучно закопает через несколько лет, оставив вас с тонной легаси (привет, AngularJS, здарова, Polymer, виват, GWT, алоха, GCT). Малые же команды более мотивированы сделать что-то простое, что они смогут поддерживать своими небольшими ресурсами.
Тем не менее, лучше не гадать на кофейной гуще, а измерить, как обстоят дела у конкретных, интересных вам проектов. Возможно от каких-то из них проблем будет больше, чем пользы. А возможно и наоборот. Оценка проблемности — одна из многих характеристик, которая поможет вам быть чуть более объективными.
Разумеется, есть разные вырожденные случаи типа "да этот проект никто не использует", "да тут проблемы в принципе не закрывают" и "да там просто документацию в проблемах ведут, чтобы и на гитхабе лежала и с комментариями была". Поэтому важно не просто измерять пипирки, но залезать в проекты и разбираться почему длина пипирки именно такая, и является ли это шоу-стопером.
Моя тулза для сравнения доступна на compare.github.hyoo.ru. Имейте ввиду, что она использует API гитхаба с вашего IP, а у него довольно жёсткие лимиты. Так что если гитхаб начнёт сыпать 403 ошибками, то можете либо подождать немного, либо поменять IP через VPN.
Прикладывайте скрины с вашими любимыми проектами и анализом, почему результаты именно такие, а не другие. Импрувменты и багрепорты, как обычно, приветствуются.
VovanZ
theaklair
Эта авторская «оценка проблемности» ничто иное как обычный количественный показатель, более ни о чём не говорящий.
Насколько я слышал автор знаменит своими набрасываниями на вентилятор в несчастных потугах продвинуть самописный инструмент ?\_(?)_/?
nin-jin Автор
Проблемность проекта от числа пользователей слабо зависит. Зависимость может быть разве что от истеричности. Одни сами разбираются с проблемами и не беспокоят мейнтейнеров, другие строчат гневные комментарии из-за каждой мелочи. Но это опять же влияет не на самому асимптоту, а лишь на динамику приближения к ней.
dopusteam
У меня есть пет проект, там вообще нет issues,) выглядит так, как будто я лучше Google)
nin-jin Автор
Так и есть, вы отлично справляетесь с поддержкой вашей нулевой аудитории.
Apathetic
Проблемность от числа пользователей слабо зависит, но ты же не проблемность оцениваешь (даже грубо), ты оцениваешь число заведенных issue и их суммарный возраст. Доказательства, что этот параметр коррелирует с "проблемностью" у тебя в статье нет, и оно вовсе не очевидно.
Apathetic
Либо ты подразумеваешь под "проблемностью" что-то своё, что прямо соотносится с числом проблем в трекере. Ок, но в таком случае полезность понятия "проблемность" в твоей интерпретации точно так же стремится к нулю.
nin-jin Автор
Каждая проблема вызывает боль своим существованием. Интегрируем по времени существования проблемы — получаем общий размер вызванной ею боли на текущий момент. Вероятность вызова боли конкретной проблемой единична лишь в худшем случае. Поэтому проблемность — оценка объёма боли сверху.
antirek
Аналогично смутило сравнение нишевых вещей типа haxe и какой-то hyoo-ru/mam-mol с популярными продуктами ))
а вот для сравнения между собой angular/react/vue — весьма интересно наблюдение, не более
mayorovp
Что именно может подтвердить существование документации?
nin-jin Автор
Это не документация, а интерактивная визуализация. Не от хорошей жизни она потребовалась тут. И не от плохой она не потребовалась для остальных.
dopusteam
Приведите пример достаточно сложного продукта, который не требует визуализации в том или ином виде в документации
Ну или пример суперпростой альтернативы продукту, аналогичному rxjs по функционалу/задачам
nin-jin Автор
Рядом на скриншоте несколько достойных альтернатив.
adictive_max
То есть вы правда считаете, что mobX или, просто Господи, redux — это альтернативы rxjs?
Откройте тот же RxMarbles, и скажите, что из этого кроме Behavior Observable можно сделать на redux?
nin-jin Автор
Пользователи всеми этими инструментами решают одни и те же задачи. И это отнюдь не задачи типа "как сджойнить потоки событий так, чтобы они не приводили ко гличам".
adictive_max
Это примерно как сравнивать 5-осевой фрейзер и сверлильный станок на основании того, что «пользователи с их помощью решают одни и те же задачи».
PsyHaSTe
То есть технология в которой 1 проблемный ишьюс не закрытый в течение 15 лет будет хуже чем та у которой 25 ишьюсов висящих полгода. Казалось бы. стоило бы хотя бы поделить возраст ишьюсов на их количество чтобы хотя бы среднее (а лучше медиану) оценивать.
А так что сказать
nin-jin Автор
Представьте, что автор этого единственного ишьюса — вы. Как впечатления от проекта?
PsyHaSTe
Апеллирование к эмоциям — не очень объективная аргументация. Расстроюсь, что уж, но проект не ради меня же одного существует, правда?
А у вас получается что проект с 1 юзером и 0 жалоб — идеален.
nin-jin Автор
Да, для этого 1 юзера он идеален.
iroln
Какая же ерунда. Вы среднее то хоть пробовали считать в ваших "метриках"? Или какие-то другие статистики: медиану, квантили? Или отбрасывание выбросов делали? И даже так всё равно получится ерунда, потому что эти числа не выражают тот смысл, который вы в них вкладываете. Issues могут быть открытыми долгое время по разным причинам, это не обязательно должно означать, что проект плохо поддерживается и развивается. Тем более неразумно сравнивать "слона" с "муравьём" таким образом. Разные масштабы и отсутствует какая-либо нормировка. Это "исследование" вообще не выражает ровным счётом ничего разумного. Просто "я получил какие-то числа, давайте считать их мерой качества/проблемности проекта".
mikaakim
Почему issue сразу стали проблемой? Вон в той же джире уже «тыщу лет» висит тикет на темную тему для облака с 2016 года и они даже не собираются над ней пока работать (но помнят).
Issues маркированных как баги в typescript всего 1600 открытых на данный момент, например.
nin-jin Автор
Первая половина статьи посвящена ответу на ваш вопрос.
4reddy
Спасибо за статью.
Не могли бы Вы дать определение термину проблемоёмкость?
nin-jin Автор
Не думаю, что какая-то дополнительная формализация определения, даст что-то помимо очередного терминологического спора.
Siemargl
Идея может и хорошая, но определенно требует доработки.
Я, например, смотрю только на количество мейнтейнеров и обновляемость проекта.
Ingulf
у более молодого инструмента по определению будет меньше багов и ишьюз и висеть они будут менее долгое время…
nin-jin Автор
Это хороший повод присмотреться к нему повнимательнее. Если этот инструмент не так хорош, то у него быстро появится много issue. А если же появится не так уж и много, значит всё же хорош.