Экология программирования

GTD
Речь не пойдет о пользе для лесов Бразилии перехода на электронный документооборот или выключении Num lock для экономии электроэнергии. Я хочу поговорить об «экологии» как более широком (или же наоборот, более специализированном) понятии, как взаимодействии разработчика со средой разработки в широком смысле этого слова.


Так уж случилось, что я, к своему стыду, очень ленив. Второе мое отрицательное качество — нетерпеливость. Мне лень сходить к компьютеру в комнате и расшарить папку — я лучше зайду на него по RDP и меня жутко раздражает ожидать, пока компьютер включится — я лучше оставлю его включенным на ночь. Однако, как выяснилось, оба этих качества весьма и весьма полезны для разработчика.

Первый проект, на котором я работал, всецело зависил от веб-сервисов на другом конце света. Приходилось каждый день начинать с подключения к медленному (потому что более быстрый был уже занят, когда я приходил на работу) VPN, который имел привычку отваливаться в самый неподходящий момент. Веб-сервисы были далеко, поэтому каждый запуск проекта для отладки мог занимать до пяти минут. Проект был немаленький — полная сборка занимала минуты три, плюс запуск минуты две (сервисы же далеко) — получалось, я ждал пять минут, чтобы проверить, правильно ли я изменил один символ в строчке…
Понятно, что мне было лень подключаться к VPN и меня раздражала скорость запуска проекта.
Самое неприятное из всего этого то, что окружающие относились к этому весьма терпимо, мол «что же тут поделать». Меня это буквально поражало — как так можно, даже не пытаться улучшить свою даже не ежедневную — ежеминутную работу. Я не смог так долго терпеть — в голову пришла идея написать «кэширующий прокси», который отвязал бы меня и от VPN, и от внешних сервисов, позволяя начать отладку так быстро, как только возможно. Итог — мой «прокси» продался заказчику и теперь используется чуть ли не в production, а к VPN теперь не надо подключаться – заказчики расщедрились на site-to-site VPN (хочется верить, что мое еженедельное нытье по поводу VPN тоже имело к этому отношение). Нужно отметить, что от идеи до реализации прошло, увы, очень много времени, да и «прокси» так и не был доведен до ума…

Следующим моим большим заданием было собирать билды и ставить их на удаленные машины приблизительно на том же краю света, где и сервисы. Опять-таки, занятие было нудное и долгое — все приходилось делать руками. За полный рабочий день я успевал собрать и поставить четыре билда — два часа на билд. И опять, руководство не видело (или не подавало виду), что это плохо — видимо, это обходилось дешевле, нежели наладить нормальный билд-процесс. Мне все-такие удалось уговорить свое начальство дать мне время на создание билд скрипта. Как итог — скрипт, в случае, если с исходниками все хорошо, собирал билд за 20 минут, мне оставалось лишь запустить установку на удаленной машине. Сейчас этот скрипт является основой билд-процесса уже как минимум двух проектов…

Еще я могу вспомнить приведение в порядок репозитория — до этого коммиты в проект приходилось делать в пять веток и не дай бог кто-то будет коммитать одновременно с тобой. И маленький фикс в девелоперской тулзе, который позволял не вводить каждый раз имя пользователя. И возможность смотреть XML в отформатированном виде вместо raw text, и макрос для студии, облегчающий поиск специфических проектных ресурсов, и еще много всего.

И меня, честно говоря, всегда удивляли две вещи. Первая — это покорность моих коллег, не пытавшихся, в своем большинстве, ничего изменить в надоедливых, неудобных и медленных рутинах своих ежедневных действий. Вот уж правда — разработчик должен быть ленивым. Мне лень делать изо дня в день то, что легко поддается механизации и упрощению.

Вторая непонятная вещь — как же сложно «продать» изменения в экологии проекта заказчикам и менеджерам. С другой стороны, конечно, их очень просто понять: вклад в экологию — это очень долгосрочные инвестиции, сопряженные с рисками «ничего-не-вышло». Однако из своего опыта я могу сказать, что эти изменения обычно бывают очень дешевы, по сравнению с теми ежедневными затратами времени и сил каждого разработчика в команде.

Сейчас я перешел на новый проект, где опять вижу кучу «экологических» проблем — и script-hell для поддержки баз данных в рабочем состоянии, и отсутствие выделенного сервера для тестов производительности, и кучу конфигов и магических пассов для запуска сервреа, и разброд в репозитории, и отсутствия kick-off для новых людей в команде. И опять — на все мои возгласы «Да как же так» я слышу лишь «Так тут было всегда» и вижу, что даже если мой непосредственный начальник очень хочет что-то поменять, придется опять и опять биться головой о стену, пытаясь доказать заказчикам, что это все нужно и можно изменить.
+39
17 августа 2010, 01:10
16
Sane 21,3

комментарии (38)

+3
vsviridov #
Ещё Larry Wall (создатель языка Perl) говорил — Laziness is a virtue of a programmer.
+3
Sane #
Буду развивать надменность.
+1
emaster #
Вообще-то лень.
–8
torsion #
атата
–3
torsion #
не атата?
–2
torsion #
Я вас не понимаю, господа
–1
inTagger #
Может быть и «атата», но комментарий плохой =).
+4
murr #
[TrollMode]
Вообще, заметно, сколько лет они Perl6 уже делают?
[/TrollMode]
0
vsviridov #
Делают для того чтобы делать или сделать? :)
+4
intr13 #
Да все нормально, к тому что большинство тупо пишет код (не улучшая процесс) надо просто привыкнуть.

Кстати, есть такая забавная книга Алена Картера — Программистский камень, и там предлагается разделить программистов на паковщиков (обычные рабочие лошадки) и картостроителей (необычные рабочие лошадки, которые помогают обычным эффективно работать).

Это жизнь.
0
Sane #
Для меня стало откровением, что отношение паковщиков-картостроителей может достигать 10 к 1. Может, в других местах с этим лучше.
0
intr13 #
На моей прошлой работе было соотношение паковщиков к картостроителям — 6 к 3. На новой работе — 2 к 3 :)
0
xtender #
Да, конечно, это бесит, когда люди из той же лени(только в данном случае лени «подумать и сделать нормально») делают все механически и бездумно, но в этом-то и плюс для остальных. Пусть занимаются тем же самым — меньше конкуренции, тем кто думает — они в дальнейшем не будут заниматься нудной текучкой.

Кстати не сказано еще про то, что разовые затраты на автоматизацию этой текучки могут занять недели и даже месяцы.
0
iNevil #
Можно ведь сначала прикинуть, стоит ли оно того… и если хоть небольшой выигрыш во времени — надо делать… хотя даже если нет выигрыша во времени, т.е. что с автоматизацией, что без автоматизации — будет потрачено одинаковое количество времени — все равно надо автоматизировать, ибо нудная работа выматывает до жути, а автоматизация превносит разнообразие в рабочий процесс. =)
0
xtender #
Конечно, прикидывать надо, но ПМу. А насчет автоматизирования, у меня вообще больной вопрос, потому что часто пишу скрипты «just for fun» даже для однократных и совершенно не нужных практически вещей(больная привычка от спортивного программирования).
+1
timfactory #
в первый раз — потрудился, во второй — поматерился, на третий — автоматизировал.
+1
Sane #
Да, недели и месяцы. Но с другой стороны ежедневные затраты, на самом деле, еще больше. К примеру — 20 разработчиков теряют по 15 минут в день — это 5 человеко-часов в день. Если я потрачу 40 часов на автоматизацию, выйгрыш начнется уже через 8 дней.
+4
yul #
А мне показалось, что именно ваши коллеги ленивы, а не вы.
+1
anreyyyy #
я бы на вашем месте задумался б о том, чтобы из исполнителя превратиться в руководителя. т.е. замутить свое дело по вашей профессиональной линии (и сделать КАК НАДО, с блекджеком и шлюхами).

имхо, если все вокруг такие безынициативные, то пора брать ВСЕ в свои руки =))
+5
xtender #
Не всем хочется переходить на административные должности.
–1
anreyyyy #
проще говоря, не всем хочется брать на себя дополнительную ответственность? (но при этом хочется глобальных перемен в рабочем процессе). хм…
+1
VolCh #
Можно совмещать приятное с полезным — быть инициатором глобальных изменений, но не нести ответственность: только инициативу надо проявлять не в курилке, а докладной на имя сначала непосредственного руководителя, а если нужно, то и через его голову, со всеми выкладками типа «20 разработчиков теряют по 15 минут в день — это 5 человеко-часов в день. Если я потрачу 40 часов на автоматизацию, выйгрыш начнется уже через 8 дней.» Чревато, конечно, испорченным «моральным климатом», но тут уж каждый выбирать должен, «шашечки или ехать»

P.S. Хотя обычно, насколько я знаю, люди не хотят быть руководителями, не потому что не хотят брать ответственность, а потому что не умеют руководить. Всё таки руководитель (менеджер, администратор) это, прежде всего, работа с людьми, а нас учили (кого учили :) ) работать с кодом (семестр психологии для зачёта не в счёт). Можно возразить: «а ты попробуй, вдруг получится и понравится» (на днях в одном из постов такой совет был, что каждому программисту стоит хотя бы год поработать менеджером проекта), но никто же не говорит «а ты попробуй людей полечить или жилой дом спроектировать» людям без медицинского или строительного образования, так и на руководителя, и вообще работе с людьми, надо учиться (и теорию изучать, и практика нужна). Осознание этого, кстати, может прийти после прочтения умных постов и комментов на хабре про контроль и оценку эффективности подчинённых, распределение обязанностей, делегирование ответственности и т. п. Есть, конечно, самородки, которые руководят интуитивно, и хорошо руководят, так и прогеры такие есть
+3
xtender #
А я просто не люблю руководить. Ну нет у меня желания заниматься административной суетой. А вот быть тимлидом, советчиком, генератором идей или реализовывать сложные задачи — да, нравится.

ps. Все как всегда зависит от характера :)
+3
Sane #
Честно говоря, я уже начал задумываться. Но, с другой стороны, я вижу, сколько на самом деле бюрократии в работе руководителя, и как надо себя ломать, чтобы угодить заказчикам. А я гораздо больше люблю просто программировать.
+2
w1z #
2 года назад, я был участником проекта (довольно крупного). Использовали VSS в структура которого была очень громоздкой.
Была ветвь в которой было ~5000 элементов, мне необходимо было забрать штук 40.

В итоге примерные затраты:
1. Чтобы вытащить ресурсы, уходило порядка 20-30 минут.
2. Уходило порядка часа на сборку пакета (1 билд машина).
3. В случае малейшего изменения одного из ресурсов, все начиналось сначала.

Лень двигатель прогресса, я с более опытным разработчиком (в то время я вообще был в тестировании :) ) начали писать софт (он меня курировал).

В итоге сначала получилась программа забирающая файлы из хранилища (скормил список объектов, он сам их вытащил).
Потом начал раскладывать в каталоги.
Далее была попытка сборки пакета (то что в итоге должны получить).

Этот процесс был утвержден, в данный момент он кардинально переработан, но я могу гордо заявить, что был «у истоков».
+1
Artash #
когда разработчик занят на нескольких проектах сразу и ему постоянно подкидывают задания, то тут не до обдумывания процесса улучшения — лишь бы успеть всё сделать в срок и бежать дальше.
Вот есть у меня пример — работаем с системой сайтов на ужасно написанной самопальной cms, хотя даже это cms назвать трудно. Логики — мизер, ооп или что-то подобное вообще рядом не лежало, чтобы в них разобраться новому человеку — надо потратить месяца два наверное. Так вот, если считать пресловутые человеко-часы, то уже давно было бы эффективнее перенести всё на ту же джумлу или друпал.
Но как вы думаете, поступают пм-ы и заказчики? Им пофиг, что добавление элементарного модуля может занять два-три дня, лишь бы работало.
0
Sane #
Да, именно так. Самое сложное — убедить заказчика.
+4
tyomitch #
Давно сказано: «Лучше день потерять, потом за пять минут долететь»
0
Sergun #
Как же вы плохо про коллег отзываетесь :-) Прямо таки все покорные? :)
Ну а если серьезно, то такие улучшения просто нужно правильно продавать менеджерам, рассказывая о текущих проблемах (и их последствиях в виде потраченных $$$) и способах решения, а также о том, сколько вы потратите этих самых $$$ (в виде своего времени) для того, чтобы потом эти $$$ сэкономить.
Проверено. Даже самые консервативные менеджеры в итоге соглашаются.
0
Sane #
Нет, не все, но большинство — по крайней мере мне так казалось.
Проблема с менеджерами тоже в том, что они привыкли. И заказчики не видят проблем в том, что приложение запускается долго, что настройка среды — нетривиальная задача. Их заботят фичи, попавшие в план, а значит, приносящие деньги. Экология, как я говорил, слишком долгосрочное капиталовложение — немногие заказчики готовы за это платить.
+1
Bahus85 #
Думаю в нашем случае была проблема в том, что у заказчика денег немерено, и манагеры пилят их не сильно заботясь об эффективности этого дела.
0
timfactory #
чтобы одному глобально изменить ситуацию надо быть либо диктатором, либо мучеником
первое далеко не всем интересно, второе — пока наличествует оптимизм, дальше всё начинает сводиться к формуле «Кто не платит за работу — платит за безделье».
0
yelbota #
Не могли бы вы пояснить выражение «отсутствие kick-off для новых людей в команде»?
+1
Sane #
Вводной лекции/workshop, на которой рассказывают, что за проект, какая у него инфраструктура, где взять доки, кто за что отвечает и так далее. Знаю, что на старом проекте kick-off (правда, с рассказам и о нашей конторе) занимает пол-дня-день. На новом, к сожалению, практикуестся практика «кинуть в воду».
0
yelbota #
Спасибо.
0
Sane #
«Практикуется практика» О мой бог!..
0
bashor #
Как то препод говорил:
«программист должен быть ленивым и еще и немного туповат, и не должен быть слишком любопытен»
ленивым — чтобы не делать то что можно автоматизировать
туповат — чтобы мог описать алгоритм(и т.п.) на относительно ограниченном языке(программирования в сравнии, например с ествественным). Надо уметь думать как «тупая машина», знающая только «1» и «0».
не слишком любопытным — главное что работает, неважно как

(с)ББ

0
Sane #
Похоже, ваш преподаватель готовил кодеров, а не программистов.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.