100 комитов в Rails

May 28, 2012

В сентябре 2011, убедив клиента, что мы работаем исключительно на последних версиях рейлс, я начал свой первый Rails 3 проект. Дополнительная пикантность ситуации была в том, что версию 3.0 зарелизили в августе 2010, однако мне казалось, что там не могло появиться ничего хорошего, рейлс 2.3 мне казались самодостаточными.

Случайно, исследуя создание нового приложения, я нашел, что метод environment в генераторах ставит неправильный отступ в config/appliction.rb. Так я сделал свой первый комит в рейлс. Потом еще. И еще. Ощущение причастности к большому сложному открытому проекту оказалось настолько приятным, что в феврале 2012 я добавил в годовой план цель - достичь к концу года 100 комитов. С радостью сообщаю, что на днях я этой цели достиг. Вообще 2012 - очень ответственный год, так как непонятно сохранится ли спрос на программистов после конца света. Поэтому желательно освободиться от всех обязательств как можно раньше, чтобы успеть сделать действительно важные дела.

Возвращаюсь к рейлс, хочу поделиться с вами тем, что я нашел и узнал в процессе работы. Самое главное, что цель "N комитов" - довольно плохая. Она провоцирует на мелкие подтасовки и, выполняя ее, слишком нервничаешь, когда комит не принимают или игнорируют. Если гнаться просто за количеством комитов, то можно использовать много мелких хитростей, например делать док-фиксы, комментируя каждый метод (док-фиксы проходят прямым комитом в lifo/docrails), можно, решая одну проблему, разбивать ее на несколько частей, или найти направление, которое принесет много комитов. По мелочам, можно забыть сделать git pull --rebase перед комитом опять же док-фиксов. Если вы наблюдаете за мастером, думаю, что не раз видели подобные штуки.

Но у цели "N комитов" есть очень важный нюанс, который делает ее на самом деле хорошей. Не зависимо от того, исправляете ли вы маленькую опечатку в комментарии, рефакторите метод, исправляете дефект или предлагаете новую функциональность, приходится проделывать довольно серьезную работу. Необходимо пройтись по истории, запустить тесты, исследовать граничные случаи, провести анализ и так далее. Вольно или невольно вы изучаете систему очень глубоко и такого рода рутина приучает к методичности. Когда я всерьез увлекся рейлс, то долгое время вставал в 8 утра и 2-3 часа изучал код, файл за файлом. Сейчас в эти утренние часы я подключил ведение блога, работу над персональными опен-сорс проектами, изучение новых технологий и подходов.

Один из моих крайних комитов, самый любимый, исправляет метод Range#sum. Посмотрите, пожалуйста, какую работу пришлось проделать, чтобы найти и исправить 2 ошибки в данном методе. Увидел этот дефект совершенно случайно, я хотел написать в твиттер про этот метод, что люблю, когда люди продумывают такие нюансы, но что-то в этом коде мне не понравилось, и я стал разбираться.

Поэтому цель "N комитов" вполне хорошая, и если вы сделали 10, 20, 50, 100 или 10000 :) комитов, то независимо ни от чего, это по настоящему здорово. Вы помогли комьюнити и помогли себе, получая еще большее удовольствие от профессии. Мне кажется, что последнее время количество русскоязычных контрибьютеров сильно возросло, и это очень хорошо. Евтухович Иван говорил, что гуру рейлс не очень охотно едут в Россию на конференции, из-за недостаточной активности нашего комьюнити. Возможно, это не единственная причина, но все-таки. Поэтому хочу особо отметить активных русскоязычных коллег: Сергея Нартымова (Сергей возглавляет русскоязычный топ), Богдана Гусева, Василия Ермоловича, Равиля Байрамгалина и Алексея Газиева. Отдельно следует упомянуть Егора Хомякова, который получил доступ в основной репозитарий не самым прямолинейным способом.

Некоторое время назад я очень сильно застрял на 80-ти комитах и более 2-х недель ни мог найти ни одной шероховатости (кстати раскрываю рыбные места - ActionPack и ActiveSupport, но ни в коем случае не ActiveRecord. Я нашел 3 ошибки в AR, но пока не знаю как их исправить, потому-что код там - гребанный ад, как однажды сказал Андрей Руденко про бандлер). К счастью потом дело пошло лучше и я успел поразить цель перед самым отпуском, завтра поеду отдыхать от компьютеров и от рейлс. Всем удачного программирования!

comments powered by Disqus