Всем привет!
Прошло 3 года с тех пор, как я начал работу над библиотекой imaskjs. Хотя opensource — это бесконечный процесс, но можно сказать что в целом работа закончена и перешла в вялотекущий багфикс. На данный момент я сделал все что хотел, других идей нет, разве тесты пописать, но лень.
Это был нелегкий путь: много раз я хотел все бросить, и много раз считал, что все уже идеально. Сейчас все успокоилось и я могу со спокойной душой и чистой совестью вспомнить как это было и пофилософствовать на тему стоило ли оно того и зачем.
Предыстория
Началось все с того, что по работе нам нужна была библиотека для маскирования самых разных полей на самых разных формах. Формат маски отдавался из внешней системы, валидация уже была на бэкенде, но ненасытному тестированию этого было мало. Мало нам оказалось и существующих решений для маскирования. Мы долго боролись с ними, форкали, доделывали, заводили баги. В результате мы так и не добились того, чего в идеале хотели, но все согласились с тем что есть, ну и забыли. Но тогда мне показалось, что что-то здесь не так — на самом деле оно должно быть по-другому. Я видел так много мест для улучшений в исходниках фактически всех популярных библиотек, так почему бы не написать свое решение? Было страшно интересно посмотреть что из этого получится, но идея казалась безумной. Сейчас я знаю, что страх перед новым делом — это хороший знак.
Есть много споров на тему того писать свой велосипед или не писать. В моем случае я тоже не был до конца уверен: ведь еще полгода назад как я только начал свой путь разработчика в компании и считался джуниором, потом вроде оно никому и не надо, и это просто слив времени, никто вокруг ничего такого не пишет, может лучше денег пойти еще заработать… Да, я слил уйму времени, на работе не оценили, и денег я на этом не заработал. Но я уверен, оно точно стоило того. Об этом я и хотел поговорить.
Мотивация
Собственный проект отдает школьной наивностью и беспечностью, это то самое чувство когда ты полностью поглощен процессом, руки чешутся, глаза горят и ничего больше вокруг не существует. Было круто. Конечно, я не мог заниматься библиотекой постоянно, насколько я понял оно и не нужно — скорее нужно давать сообществу время между релизами, чтобы услышать обратную связь и скорректировать вектор развития. Но как только я возвращался к разработке, то самое чувство снова возвращалось, интерес не угасал и не было причин останавливаться. Возможно кому-то повезло больше с работой, но у меня работа довольно быстро превращается в рутину — мир энтерпрайза довольно однообразен и уныл. И чем дольше ты в нем, тем больше опыта и больше рутины. Свои проекты спасают и помогают не выгореть. Конечно, это не обязательно должен быть opensource, но так проще привлечь внимание и получить обратную связь.
Личность и общество
Я считаю общение и обратная связь играет большое значение как для проекта, так и для развития личности. Пока ты не в обществе не понятно кто ты и что умеешь, сложно оценить себя и свои достижения со стороны. А без этого сложно расти. Также и ценность проекта сложно оценить в одиночку. Раньше мне хотелось думать, что плевал я на мнение общества, мне никто не нужен и это не важно. Так бы и сидел у себя на уме, но к счастью желание славы и звезд на гитхабе оказалось сильнее. К еще большему счастью этим дело не ограничилось. Но когда все начиналось мнение других значило очень много — если кто-то находил недостатки или заводил баг, начинаешь суетиться и пытаться быстрее пофиксить чтобы больше никто не увидел — через 5 минут выкатываешь новую версию — но тестов то нет, и оно еще больше разъезжается. А когда статью постишь, вообще можно ночью не уснуть. Возможно я немного преувеличиваю, но в целом — цирк на проекте, дурдом в голове, и каждая версия это огромный стресс. Сейчас все это вызывает улыбку, но я думаю в первый раз многим, кому не все равно что он делает, придется это пройти.
Как и в любом деле, постепенно влияние внешних факторов уменьшается, и хочется разобраться, ты реально сделал что-то ценное и полезное или очередной фантик, который будет выброшен через полгода. К регулярной работе с людьми постепенно привыкаешь, и уже хочется получать обратную связь не от всех подряд, а от тех, кто реально в теме и кто по максимуму использует возможности библиотеки. Мнение людей важно, но это просто рабочий момент.
С другой стороны, не нужно переоценивать мнение общества. Когда только начинаешь вообще кажется, что все против тебя. Ни спасибо тебе, ни молодец, только там не так и это не эдак. Я то считал, что сделал великое дело, душу вложил можно сказать, и теперь все должны восхищаться, но в ответ только критика. Для меня это был больной момент, я не был готов к такому отношению и по началу довольно резко реагировал на замечания, пытаясь защищаться. Потом я начал замечать, что люди то вроде нормальные, че я их отшиваю не понятно, как-то приуныл, извинился даже. Но если нет опыта, то по началу защищаться придется, иначе руки могут опуститься, и все может закончится ничем.
Также с точки зрения мейнтейнера нужно различать мотивы людей. У всех есть свое мнение и все ошибаются. Поэтому нужно фильтровать советы, особенно тех, кто пытается тянуть одеяло на себя, преследуя исключительно личные интересы. Некоторые считают, что все должно быть сделано по-другому, например в моем случае:
- чувак, почему у тебя из коробки нет возможности для отображения маски только при фокусе поля?
- почему у тебя дата по умолчанию работает только с форматом dd.mm.yyyy, который не самый то распространенный, а для других надо докручивать сериалиацию?
- где взять маску для телефона Бразилии?
И т.д.
Все дело в том, что я тоже как личность имею свое видение проекта и это совершенно нормально. То, что библиотека находится в свободном доступе еще не означает, что она подходит абсолютно каждому и что нужно пытаться угодить всем. Можно наблюдать как под влиянием общества некоторые проекты просто растаскивают в разные стороны, лишая его целостности, что ведет к хаосу, багам и обычно медленной смерти проекта. Тем не менее для себя я стараюсь фиксировать запросы общества, особенно если они начинают повторяться. Но решением будет не обязательно изменение в самой библиотеке, это может быть пример кода, кусок документации или комментарий в коде. Как раз сейчас думаю добавить в документацию примеры частых вопросов, вроде тех что выше. Но по началу я также довольно резко реагировал на подобные вопросы, считая их неуместными и где-то возможно глупыми. Одной из причин подобного поведения было то, что хотелось также самому навязать свою точку зрения. Потому что моя библиотека лучше всех!
Быть лучше всех
Это неизбежно вызывает конфликт. Прошло время, но я по-прежнему считаю, что моя библиотека прекрасна, идея и реализация просто гениальна! Не описать словами!!!1 Но с одной оговоркой: она лучше всех для меня и для тех, кто находится в похожих обстоятельствах. Вряд ли может найтись универсальная библиотека для всего: всегда есть какие-то особенности и частные случаи. И это прекрасно, что есть такое многообразие решений для различных случаев, и человека можно не просто отфутболить подальше, а дать то, что ему действительно лучше подходит. Только один момент, к сожалению, обычно забывается во всей этой идиллии: КАЧЕСТВОМ ЖЕРТВОВАТЬ НЕЛЬЗЯ. Каюсь что тестов мало написал. Но нужно строго различать вкусовщину от погрешностей производства, особенно на этапе проектирования. С качеством нельзя идти на компромисс — вот где можно по настоящему занять свои наклонности перфекциониста и круто кайфануть от этого. Ну да, придется переписать разок, может два, может сломать API. Но я считаю, что в целом это полезно и для человека и для проекта, если подходить с умом. Так или иначе вывод который я сделал для себя — “всему своя ниша” — помогает мне везде. Могу точно сказать, что жить стало легче. Когда начинаешь общаться по-нормальному с людьми, начинаешь замечать, что много кто на самом деле хочет помочь и начинаешь ценить эту помощь и отношения.
Отношения
И люди откликаются. Наверно для меня это было ценнее всего. Я познакомился и поддерживаю контакт с людьми, которым реально интересно то, что они делают. Таких мало, и еще меньше тех, с кем можно построить отношения. Так или иначе opensource дает такую возможность и потихоньку набирается команда, чтобы замутить кое-что действительно крутое. А какая еще есть альтернатива? Если мне реально хочется вкладываться в то, что я делаю, а не просто прогнивать за бабки, копируя очередной CRUD или форму интерфейса.
Выгода
Больная тема. Чувствую, что не всем понравится то, что я здесь напишу, но я должен сказать, что мне не нравится и я не согласен все оценивать деньгами. Деньги это хорошо, но просто не в первую очередь. В наше время слишком смещен акцент на деньги, престиж и пр. внешние вещи. Кажется, что уже нет разницы как их добывать, если платят — значит хорошо. Это как раз и приводит к тому, что теряется качество, остается красивый фантик, но смысл потерян.
Вначале я тоже думал, что мне сейчас нажертвуют и заживу, но потом приоритеты поменялись. К слову за 3 года разработки мне подарили 3500р (русских рублей, КАРЛ!), из которых 3000 дал один хороший человек, которому я очень благодарен. Не густо. Но выше я написал много ценностей, которые приобрел в процессе разработки проекта. Еще одна вещь, про которую забыл сказать — мне свалилось очень много предложений по работе от самых разных, компаний, небольших и огромных. Если хотите найти или поменять работу, то opensource — это отличный способ рассказать о себе. Так что в целом я считаю это выгодно. Просто решайте для себя сами что вам важно и ставьте приоритеты. Я не хотел, чтобы это превратилось в очередную работу, поэтому не делал на этом акцента. Мне нравится другой opensource, какой он есть — открытость, свобода, идейность, энтузиазм и движуха. Я бы наверно взболтал и не стал бы разбавлять деньгами. Хотя возможно я не умею готовить. Может Ситник научит.