Make Streak, Not Holywars
В какой-то момент я присмотрелся к панели «Your Contributions» в своем профайле на GitHub. Помню, я тогда подумал что-то типа: «Какого черта мой аккаунт выглядит так заброшенно!? Это же не так!»
GitHub я использую практически ежедневно. В основном это сводится к чтению фида, поиску различных модулей и библиотек, примеров для вдохновения. А вот работу над своими штуковинами я постоянно откладываю. Ну как, откладываю… Периодически что-то выкладываю, но та-а-а-ак редко. И это при том, что я пишу код по будням, по выходным, по праздникам, в новый год, в ванной, в день рождения, и за обедом. И сны мне снятся на Canvas и WebGL.
Я решил, что пора бы что-то здесь менять. Не дня без коммита! Хватит тянуть с тем, что давно хотелось сделать! Хватит откладывать в долгий ящик то, с чем давно хотелось разобраться! Свои велосипеды? Почему бы нет! Будет интересней смотреть на чужие.
NPM
Последние полгода я пишу под NodeJS. В комплекте с Node идет отличный менеджер зависимостей — «npm». Как благородный NodeJS-кун, я, конечно же, что-то там публикую. Обычно, это небольшие и достаточно независимые компоненты которые я планирую довести до ума и применить где-то еще. Вот только выношу я что-то достаточно редко. Обычно лень.
Лень
Да, лень! Лень обдумать ответственность компонента. Лень чистить его от хлама. Лень выносить в независимый модуль. Лень его потом поддерживать. Сам смотри:
- Скачивай репозиторий,
- вноси правки,
- заливай на GitHub,
- публикуй в npm,
- обновляй зависимость в своем проекте.
Сплошные неудобства!
Если вы считаете так же — ударьте себя. Или попросите кого-нибудь сделать это. Черт подери! Вы ведь считаете, что монолитная, громоздкая система, которая получилась в результате вашей лени — это в порядке вещей. В старости, сидя с кружкой пива на прокуренной кухне, вы будете жаловаться своим друзьям: «Я был программистом. Это тяжелая работа». Средний палец — мой самый выразительный жест.
Модулей!
Я думаю, что по большей части, проблему поддержки модулей можно решить тестами и граммотным проектированием. И первому и второму можно научиться в процессе. Ну ошибешься ты при проектировании API, ну придется тебе что-то там серьезно менять. Отлично! Намотаешь на ус.
Стремление к созданию модульных систем помогает развиваться.
- Сама необходимость создавать независимые модули помогает развивать навык проектирования.
- Так как ты работаешь не с монолитным крепко связанным гордиевым узлом кода, а с набором модулей, то ошибки становятся более локализованными, следовательно легче анализировать те или иные факапы.
- Фидбек от пользователей, пулл-реквесты, комьюнити, если конечно, повезет.
- Приятно получить сообщение: «Ты идиот! Неужели ты не знал о библиотеке X, которая делает в точности то же самое, только лучше!?». Сидишь ты в своем вакууме, создаешь не пойми что, а тут человек показал, что, дескать, все это за тебя уже сделали. А ты такой не в курсе.
Мне нравится то что я делаю, и я хочу делать это лучше. Поэтому, 30 дней назад, я решил уделять больше внимания опенсорсу.
Итоги
В течение последних 30 дней я ежедневно что-то писал на GitHub. Гарантированный результат, который я получу за это — опыт. Если это окажется не единственным, что я получу в итоге — я буду визжать как сучка от радости!
За этот месяц я наконец-то хоть как-то разобрался с юнит-тестами, узнал, как создавать CLI с помощью NodeJS, наконец-то отрефакторил свой блог, написал плагин для GruntJS, пару переводов во Frontender Magazine. Кроме того, я выяснил и опробовал на практике кучу тонкостей языка, пополнил свои сниппеты, сделал пару полезных утилит, и обзавелся массой интересных идей.
Даже если все, что я написал за этот месяц — это никому не нужные велосипеды, ну или, что более вероятно, просто идиотская хрень, то я все равно счастлив. Я чувствую как я продвигаюсь вперед, а Streak на GitHub отличный повод продвигаться вперед ежедневно.
Похожие статьи:
-
node-clusterize-cli — кластеризация NodeJS web-сервера
habrahabr.ru
О моей маленькой консольной утилите, позволяющей без изменений кода приложения, запусткать демонический кластер
-
Правильные модули
frontender.info
-
Инструменты frontend-разработчика. Утилиты
-
Паттерн «объект-представление»
7 паттернов для рефакторинга JavaScript-приложений
-
Паттерн «объект-запрос»
7 паттернов для рефакторинга JavaScript-приложений
-
Паттерн «объект-форма»
7 паттернов для рефакторинга JavaScript-приложений
-
Паттерн «объект-сервис»
7 паттернов для рефакторинга JavaScript-приложений