Поднятие качества. Либо пан, либо пропал.

Май 5th, 2008

Я когда-то уже писал о рефакторинге тут.

Просто, мне вспомнилась забавная история. Был большой и достаточно жуткий проект. Жуткий в том смысле, что писан был он большим количеством людей, без какой-либо толковой архитектуры и понимания, что делает каждая часть и как они должны взаимодействовать. Причем туча кода, писалась, хоть и толковыми парнями, но все же пока студентами, что опять же придавало проекту дух … э… ну, в общем студенческий дух. То есть код, вроде есть, вроде что-то делает, но скорее все это было похоже на переросшую (причем дико) лабораторную работу.

И вот один из продвинутых студентов (не я 🙂 ) , начал выбивать рефакторинг, чтобы переварить всю эту кучу (хотел сказать говна, но решил сказать кода) в что-то более менее удобоваримое. Ну и начал он выбивать под это время. Естественно проект не маленький, поэтому время он пытался выбить тоже немало (уж очно не помню, но что-то типа 6-9 ч/м), на что в общем ему ответили, что иди мальчик – подыши свежим воздухом, столько бабок мы лучше в пофикс проекта вложим или скажем в новую функциональность.

Кстати, что меня, прикололо (и послужили поводом для статьи), то, что главный разработчик тоже похерил эту идею на корню (хотя он уж точно должен был поддержать). Не буду дословно цитировать, но что он сказал – что код нормальный, единственное иногда непонятно, что он делает. Поэтому единственное, что надо — больше комментариев писать.

Да, так вот, во первых могу с высоты нынешнего полета заверить – нормальностью там и не пахло. Как я уже писал, полное отсутствие архитектуры, кучу дублирования, жесточайшие заплатки на заплатках.

Вернемся к тому продвинутому студенту. Товарищ поразмыслил и сказал, блин если вы такие жлобы, что не хотите давать 6 месяцев, то давайте хоть все начнем придерживаться единого стиля написания (название переменных, отступы и т.п. штучки).

И вот эту идею уже похерил я (не будучи даже главных разработчиком на проекте). И собственно я и сейчас готов отстаивать бессмысленность идеи. С одной стороны, вроде ясна логика студента, блин если нельзя сделать все красиво и качественно, то давайте делать, хоть что-то красиво и качественно. Но, тут есть одно «Но».

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

Вторая аналогия. У человека перелом ноги, малярия и чесотка. Нам нужно его вылечить. Имеет ли смысл человеку для лечения давать детскую дозу витаминку C?

Оба раза можно ответить – ничего плохого действие не принесет, но задачу это действие сто процентно не решит и вероятнее всего будет просто трата времени и денег (в пример с домом гораздо более актуально, наверное в примере с человек чуть более спорно).

Так вот, возвращаясь к коду. Если код плохой, то его нельзя вылечить витаминкой C (правильным именование переменных), его можно лечить только более серьезными лекарствами (например понемногу начать разгребать/рефактирить кусочки проекта).

Иначе все эти именования переменных будут простой тратой времени. Можно вполне положить скажем неделю, на то, чтобы все переменные назывались правильно. А можно ту же неделю положить на то, чтобы расчистить один модуль. Как по мне второе, гораздо более эффективно.

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

P.S. Несколько вещей, которые были затронуты в комментариях. Отвечу сразу всем.

— Откуда вязалась неделя?

Идея паренька была не просто придерживаться новых мелких хорошестей, но и изменить текущий код, чтобы соответствовать им. Именно это и была та самая неделя (на изменения)

— Был ли это legacy проект?

Проект, содержал legacy части, но сам он не был legacy. Причем, его не собирались выкидывать

— Идея, не прогужения в гавно.

Я бы сказал, есть тонкая разница. Если вы по колено в говне, то идея не погружения очень разумная.

Если говно покрывает вас с головой, то нужно не «не погружатся» а всплывать, иначе дышать тяжело будет.

— Форматирование пробелов можно делать  автоматически

Да. Я об этом знаю. Там было больше чем форматирование. Там был достаточно длинный список в основном визуальных изменений, многие из которых нельзя было автоматизировать.

Остальное в комментариях.

Знаменитость внутри фирмы.

Май 1st, 2008

Короткая заметка на полях.

Если вы хороший разработчик/менеджер и т.п. позаботьтесь о том, чтобы об это знали не только ваш менеджер, но и параллельные ему менеджеры или менеджеры над вашим менеджером.

Подумайте, неровен час, уйдет ваш в менеджер в запо, прийдет другой и вам снова понадобиться показывать чудеса дрессуры, чтобы вас заценили.

А лучше берите деньгами, причем авансом. А еще лучше, вольные хлеба…

Ужас-ужас и полная корпоративная амнезия.

Апрель 30th, 2008

Мне кажется в какой-то из статей я уже задевал эту тему. Меня немного, когда пишут – компания успешно выполнила скажем 500 проектов.

Смешно это тем, что выполнили эти проекты люди, причем, которых в компании уже давным-давно нету. А если все знания о том, как делались проекты были в головах людей, что же осталось в результате у компании? А у компании толком не осталось ничего кроме заработанных денежек.

И что мы имеем? А имеем мы богача с полной амнезией. Так что же, надо писать, компания нарубила бабла за последние 500 проектов, увы мы плохо помним за какие?

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

Кстати, обычно переход уходом какого-то человека производят передачу дел и деление опыта. Это обычно полный ужас-ужас. Я видел единицы случаев, когда передача происходило нормально. Обычно, человеку который уходит уже все пофиг, человеку который принимает дела некогда, так как на нем и так лежат три проекта.

Я уже писал в статье, что накопление опыта, происходит только благодаря тому, что делаются ошибки, анализируются и потом делается правильно. Хитрость состоит, что если в компании спрашивают, почему был завален проект X, а люди отвечают, потому что Вася долб@еб его завалил (уже уволен). И при этом никто не может ответить конкретно, как его Вася завалил и почему так вышло и чем он собственно такой тупой это Вася, то вероятнее всего пришедший на его место Петя или Коля с таким же успехом завалит следующий проект.

http://victorronin.com/2008/04/14/opytnyj-znachit-oshibavshijsya/

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

Это и только это позволит компании иметь память вне людских голов.

Я опущу вопросы, какую информацию собирать и как анализировать. Для разных компаний – это будет по разному. Просто хочу сразу вскрыть основную проблему, почему фактически ни одна компания это не делает.

Сначала я опишу один пример из жизни, а потом уже вернусь, почему же никто толком не занимается корпоративной памятью.

Компания N1 (США) за свое деятельность поменяла 3 или 4 офшорных фирмы. С всеми фирмами были похожие (практически идентичные) проблемы (в большинстве своем инициированные компанией N1). Каждый переход на использование новой офшорной фирмы происходил с серьезными потерями финансов (ну скажем порядка $200-300K, при оборотах фирмы в несколько миллионов) и производительности (толком даже измерять не могу). Очередной менеджер, решил, что проблема в офшоре (и решил от него избавляться), хотя на самом деле, проблема в стратегии поведения Компании N1. Таким образом, из-за отсутствия данных, я думаю суммарно фирма прибила несколько миллионов на борьбу на самом деле с достаточно простой проблемой, то, что она толком не составляла контакт. Даже, если учесть, что достаточно сложно заставить выполнять контракт фирму находящуюся в другой стране, все равно, проблема остается в том, что нигде не были записаны/озвучены точные требования, ожидания и ограничения в работе.

Итак, возвращаясь к статье. Основная проблема с тем, почему информацию не хранят, заключается в следующем:

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

Тоже самое происходит и с менеджерами. Для них описания проблем, с которыми они столкнулись, как они их решали и что произошло — не имеет смысла. Так как они и так это уже знают, а то, что будет с менеджерами в фирме через 2-3 года опять же их не сильно волнует. Правда, ситуация похожа на программистов и документацию?

И точно также как с программистами – им надо объяснить и в приказном порядке заставить писать документацию, точно также надо поступать с менеджерами. Причем, точно также как кто-то должен проверять что документация написана у программистов, нужно проверять, что описаны проблемы и их решения у менеджеров.

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

Воинствующий эволюционист.

Апрель 27th, 2008

Я заметил, что раз в некоторое время мои статьи на IT/бизнес темы упираются в спор мировоззрений.

Ну, например, я считаю, что помочь кому-то, кто заведомо не сможет сделать ответную услугу – является хорошим действием. Это абсолютно невозможно объяснить в рамках бизнеса или здравого смысла, так как корни этой идеи лежат вне рационального объяснения.

Или, например, другой факт – я считаю, что каждая работа должна быть оплачена. Даже, если человек работал плохо и неэффективно и не закончил задачу, я обычно плачу человеку (в случае, конечно, если не было договоренности оплаты по результату), правда после этого больше с ним не работаю. Хотя я знаю, множество людей, которые пошлют нафиг без оплаты, если уровень выполнения работы будет ниже определенного.

Также, в одной из последних статей (Сделай сам) у нас завязалась дискуссия с Александром в которой и обнаружилось, что мы у нас достаточно различные мировоззрения и поэтому очень тяжело найти формулировки которые подходили бы обоим.

Итак, я решил попытаться описать мое мировоззрение и некоторые выводы из него.

Я, шутя, назвал свое мировоззрение «воинствующий эволюционист». «Воинствующий» потому что оно плохо совместимо с другими мировоззрениями и я его пытаюсь (хотя не слишком активно) навязать окружающим. Под словом «Эволюционист» — я подразумеваю то, что я верю, что большинство изобретений/ситуаций/знаний и т.п. развивается эволюционным путем. Выразился очень муторно, так что попытаюсь описать более подробно.

Под эволюционированием я понимаю – повторяемость, изменчивость и отбор. То есть, что-то повторяется одинаково (то, что работает хорошо), потом это потихоньку начинают менять (либо меняться само), это что-то если оно вышло плохим– отпадает, а если хорошим — выживает. Идея эволюции именно в том, что положительное (по какому-то признаку) дает гораздо более живучее потомство (и это относится не только к животным, но и к идеям).

Ну, например, возьмем ситуацию с открытием Америки. Постоянство было в том, что мореплавание было хорошо развито и много плавали. Изменчивость состояла в том, что пытались найти более оптимальные пути (например, в Индию). В результате отбора, какие-то пути откинули и как забавный побочный положительный результат – открыли Америку. Да, была достаточно большая вероятность, что Колумб бы ее не открыл (он мог повернуть назад или затонуть где-нибудь посередь Атлантического океана). Но, даже, если бы так произошло, то Америка все равно была бы открыта (ну скажем на 100 лет позже), так как за достаточно длинный участок времени, благодаря постоянному перебору(изменчивости), таки нашли бы этот в общем-то хороший вариант.

Я не говорю, что все в мире было точно также. Вероятнее всего мир очень сильно бы изменился. Но изменился бы он внешне, и хоть сейчас были другие очертания стран, но все равно благодаря перебору, после этого отрыли бы электричество, ядерную энергию и т.п.

Теперь возвращаясь к знаниям. С знаниями я считаю, происходит тоже самое. Естественно, есть открытия опередившие современность на веки, а есть отставшие. Но тем, не менее, что происходит, это на переднем крае науки (и не только) тыкаются во все стороны и в конце концов выживают только положительные (используемые и реальные) знания и отмирают нереальные и неиспользуемые знания.

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

А) Секретные знания

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

Предположим, древние египтяне знали секрет ну скажем, как получить гигантское количество энергии из камня. И последние пять тысяч лет – это секрет передают из уст в уста монахи в Египте и только избранные знают об этом и могут это использовать. Не правда ли звучит знакомо? Подставьте вместо энергии – лечение, долголетие, левитацию и т.п.), вместо Египта – Китай, Малайзию или другую далекую страну, ну и монахи – заменим сектой с каким-нибудь редкопроизносимым названием.

Так вот, во первых, если знание было обнаружено 5 тысяч лет назад, вероятнее всего оно будет обнаружено еще много раз в других местах за эти самые 5 тысяч лет. Если этот метод позволяет получать много энергии (гораздо более эффективно чем другие методы), вероятнее всего им начали бы пользоваться и он заменил бы разные водяные мельницы, лошадей, рабов с помощью которых строили пирамиды и т.п.

И, судя по всем, абсолютно большинство таких описаний – является сказками чистой воды.

Это мое понимание мира. Я вполне могу быть не прав. Однако, любые идеи, которые базируются на системе секретных знаний, которые хранились тысячу лет в секрете в моей системе координат будут абсурдны. Как впрочем и наоборот, мои идеи обычно абсурдны в другой системе мировоззрения.

Б) Теория заговора.

Опять же это относится к секретным знаниям. Одна из самых распространенных фраз по поводу того, почему секретные знания остаются секретными – это потому, что есть группа, которая либо заинтересована в нераспространение знаний, для того чтобы со всем рубить капусту (скажем, нефтяники не дают развиваться холодному термояду) или наоборот для оберегания мира от зла великий маг и гуру не рассказывает, как вызвать демонов судного дня из ада.

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

Вспомните, с какой скоростью расходятся секрет, который вы рассказали кому-то по секрету? Вы обычно не успеваете и глазом и моргнуть, а его знают уже все ваши знакомые.

Небольшое замечание по поводу А) и Б). Оба пункта актуальны для объективно полезных знаний. Однако, как я писал в статье «Goolge против здравого смысла», манипулировать бесполезными знаниями достаточно просто. Но, вот с полезными знаниями получается так, что даже если их скрывать, то они все равно вылазят наверх.

В) Неправильная наука

Раз в некоторое время, возникает аргумент типа, наука — полная фигня. Обычно это аргументируется фразой типа: “Все равно раз в сто лет, в науке говорят, что раньше все думали неправильно, а вот сейчас уже все думают правильно. И через сто лет все равно окажется, что все, что сейчас думают – уже устарело и было неправильно.”

Опять же, наука – это классические знания которые эволюционируют. Выдвигаются разные теории, методики и т.п. Хорошие и полезные – остаются, плохие и неверные отпадают. Замечу, все современные знания выросли на базе знаний прошлого века, а те в свою очередь позапрошлого и т.п. И аргумент, что все науке раз в X лет выкидывают и выдумывают заново – абсолютно не имеет под собой никакой базы. Если говорить точно, то все в науке эволюционируется и уточняется.

Например, таже Ньютоновская физика не является неправильной, она просто является менее точной (эффективной), чем современные знания. И то, что придумают через еще сто лет не отменит того, что известно сейчас, а просто уточнит.

Итого, суммируя. По моему мнению, большинство знаний, идей и умений, которые мы обладаем – является эволюционировавшими и дико конкурентоспособными по сравнению с другими отмершими. И я не верю, что у кого-то в кармане есть что-то давно известно и лучшее, чем то , что мы имеем сейчас.

Увы, напрямую связать это с бизнесом и iT я не могу, но так или иначе фактически все наши действия базируются на нашем мировоззрении в конечном итоге.

P.S. Кстати, я в шоке. Вчера обнаружил, что кто-то перевел на португальский кусочек моей статьи и выставил на меня ссылку. Спасибо больше и УРА!!!! Я знаменит 😉