Говнокод и как на этом заработать

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

Думаю рассказывать что такое говнокод — смысла ноль, каждый сам писал его в начале своей карьеры, а потом вдохновившись чужими изобретениями втихаря хачил что-то по-быстрому, лишь бы заработало с надеждой потом отрефакторить. Несомненным мастером разоблачения в этой сфере является комикс Geek&Poke, так что если вы над ними смеётесь, то узнаете себя и свою работу. Тут некоторые скажут что комиксы (про Марвел отдельно) это бугагашечки, которые созданы для того, что бы вы потратили в никуда бесценные рабочие часы и не стоит выискивать в них скрытый смысл. Отвечу цитатой:

Если Вы не хотите, чтобы Ваши дети были похожи на Барта Симпсона, не будьте такими родителями как Гомер Симпсон. (с) Мэтт Грейнинг

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

Оценочное суждение

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

«Говнокод» как оценка ничего не говорит о коде, а только о ЧСВ оценивающего. Код можно измерять по разному, считать количество строк/символов, оценивать быстродействие, проверять на отказоустойчивость, даже WTF/min. Но самое главное, как многие со мной не согласятся, это показатель «выполняет ли код бизнес требования?» и «сколько времени нужно, что бы он начал их выполнять?». Чаще всего диагноз «говнокод» говорит о желании переписать все с нуля, а это значит что показатель затраченного времени стремиться удвоиться. Более того на взгяд заказчика, ровным счетом ничего не понимающего в программировании, или еще хуже — уже разобравшимся в своем продукте или в совсем безнадежном случаи — его написавшем, код выглядит вполне нормальным, только с багами. Поэтому удвоение времени не дает реального результата, а только является дополнительной тратой денег. Нормальный управленец на такое не пойдет.

Поставить себя на место заказчика

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

А дальше фантастика по Фрейду — у него тоже есть взгляд на жизнь сформировавшийся за его 25+ лет, основанный на его окружении, образовании и отношениях с родителями. Вы никогда не думали, что вашего начальника в детстве родители нещадно пиздили, за то, что он что-то проебывал? И теперь он подсознательно не хочет, что бы его отчитывали инвесторы и он сделает все что бы этого не произошло, а так как другого метода, кроме того как воспитывали его, он не знает, а метода этот точно действенный — он ведь вон какой вырос, он будет его применять. Или наоборот, что родители его разбаловали и подарили бизнес который до этого был успешным, он пустил все на самотек, а сам нюхает кокаин на яхте.

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

Поставьте себя на место говнокодера

Того самого который написал «говнокод» с которым вам предстоит работать.

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

Поставить себя на место студента куда проще — надо только отмотать пару лет :) Недостаток образования, отсутствие опыта, давление со стороны начальства, экзамены, девочки, все это никак не сопутствует написанию приличного кода.

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

Если хочешь понять как код работает пойми как он возник

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

Места которые вызывают больше всего WTF обычно латки одно программиста в коде другого. Ну не хотел он вникать в логику происходящего, просто правил багу. Так возникает анти-шаблон проектирования «магические цифры».

Объекты-боги возникают от непонимания зачем нужны утилитарные классы и статические методы.

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

Продайте заказчику то что он хочет купить

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

  • Уменьшение размера кода/картинок (актуально дял мобильных приложений).
  • Уменьшение трафика за счет перехода от XML на JSON (актуально дял мобильных приложений).
  • Поддержка новых платформ за счет отказа то методов специфичних для даной платформы.
  • Модулизация проекта.
  • Система автоматической сборки, версий продукта под разные платформы.
  • Увеличение быстродейстия за счет внедрения технологии «X» нужно продавать несколько раз, по разу для каждой внедряймой технологии.
  • Увеличение скорости процесса разработки за счет внедрения технологии «Y», смотри выше.
  • Увеличение отказоустойчивости (путем замены if/else на try/catch).
  • Увеличение время отклика системы за счет перехода на асинхронные компоненты.
  • Написание системы мониторинга состояния приложения (добавить вывод в лог).
  • Дальше по мере разработки находятся места, в котором идут самые большие потери и продаеться рефакторинг каждого такого места в отдельности.

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

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

5 Комментарии “Говнокод и как на этом заработать

  1. Ай молодец, — все по полочкам :)
    А вообще, так им и надо — пускай платят, особенно когда задачи ставить не умеют :)

  2. ППКС, я вообще свой говноблог закрыл, чтобы секреты говнокода не выдавать =)

  3. думаю перейти в другой формат, чтото типа «психоделия программирования»

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

Комментарии закрыты