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

Моя компания попросила меня приехать на две недели в Москву, в главный офис, поработать вместе с командой. Просьба разумная, я согласился. За несколько дней до отъезда я взял очередной тикет. Нужно было добавить фичу к SDK для десятка проектов, над которыми мы работаем. Эта SDK — непролазное легаси, которую в здравом уме никто не трогает. Там такое болото, что даже прожженные инженеры суеверно крестятся — лишь бы все работало, как работает. Когда нам нужно что-то пофиксить или добавить фичу, мы осторожненько подпираем код ещё одним костылём, и не дыша отправляем её в руки CI и QA.

Я планировал поступить так же. Суть задачи была простая. Сама SDK — обёртка над очень умным сишным бинарём, который умеет поднимать VPN. Она же общается с нашим беком, получает всякие конфиги, авторизует пользователя, фетчит список стран для VPN и так далее.

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

Очень большая ошибка. Не бывает простых задач. Одним глазом я уже перебирал московские бары, где мне надо выпить все пиво, другим — увидел первую проблему. Мы не просто получаем список серверов, мы ещё используем один из них для того, чтобы поднимать VPN-туннель. Раньше мы использовали для этого только страны. Но какой-то гений решил, что будет отличной идеей хранить страны как список строк. Само собой, сущность VPN node — слишком ёмкая штука для того, чтобы уместить её в одну строку.

В итоге в SDK набралась куча методов, которые принимают строку (код страны) и что-то там делают, а теперь все эти методы должны принимать код страны, или объект сервера — и что-то там делать. Всё, что мы делали в коде SDK и приложений со странами, теперь нужно делать и со странами, и с серверами.

Когда я это понял, то почему-то обрадовался. Скоуп задачи теперь позволял мне слегка отрефакторить болото, полное говна, в котором я всё время плаваю. Я заявил о своем желании, и теперь точно знаю — мне дали добро с выражением, как будто впарили инвалидку по цене Мазератти. Я согласовал недельный бюджет и принялся за дело.



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

Когда нормальный человек едет в командировку, он заранее покупает билеты, решает вопрос с жильём, предупреждает жену, и вообще всё делает правильно. Я недальновидный идиот, который поперся в Москву с женой и двумя детьми. Жену пришлось брать, потому что я рассказал ей про поездку за три часа до отъезда. За два часа — только начал искать водителя с минивэном, потому что моя машина сломалась. Квартиру я снял в тот же момент. Шесть часов пути с орущими детьми и недовольной женой закончились так, как и должны были — квартира оказалась ровно в две тысячи раз меньше, чем выглядела на фотках. Хлеще всего был запах — там воняло травой. Горничная, которая нас принимала, сказала, что это они травили тараканов (тараканов!!!). Жена ей поверила, а говорить жене, что я отличаю запах травы от тараканьего яда, не в моих интересах.

Я пришёл в офис, мне выдали ноут. Пол дня я устанавливал среду, со всеми знакомился. Когда всё скачалось и установилось, начал работать. Злоба от ужасного переезда еще не остыла. Я открыл проект с SDK, в очередной раз крепко выругался про себя, и подумал: «А какого хера? Да тут всё к чертям собачим надо выкидывать, и переделывать».

Я сказал об этом лиду, а он, конечно, ответил: «Согласен, фигачь». Проект на 15 тысяч строк, каждая из которых — преступление против человечества. Я собрался его исправить за две недели. А будь у меня десять часов дороги и трое детей, что бы я предложил лиду? Изобрести за неделю новый ЯП специально для проекта?

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

Задача любых граблей — дать тебе по лбу. Пока твои неудачные решения не насрали тебе лично, ты не будешь считать их неудачными.

Свой рефакторинг я стал делать не опираясь на практики. Я мысленно разделил проект на большие логические куски. В его структуре файлов это не было отражено, поэтому я снёс эту структуру файлов к чертям собачьим. Насоздавал папочек верхнего уровня: вот тут у нас работа с бэком, тут работа с VPN, тут хелперы, тут исключения. Существующие юнит тесты я тоже забраковал. Тогда мне казалось, что говнокод не имеет права на жизнь, а сейчас я понимаю — я выпрыгнул из самолёта, и не взял парашют, потому что его уложили с нарушением инструкции.

Я начал переносить говнокод из старых папочек в новые, попутно приводя его в порядок. Ничего особенного, просто следуешь хорошим практикам. Есть класс, описывающий модель пользователя, у него все свойства опциональные, все с сеттерами. Превращаешь его в пацанскую иерархию наследования. Всё ридонли, всё через конструктор. Так, чтобы пользователи этого класса всегда точно знали, что у них в руках. Есть говнометод на четыреста строк — бьешь на сабметоды. Видишь файл с тысячей обязанностей — превращаешь в тысячу файлов с одной обязанностью. Есть класс, у которого метод Initialize, который всегда надо вызывать сразу после создания класса — применяешь паттерн «состояние»

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



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

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

В офисе все были очень радостные — народ собирался пить вечером. У этих москвичей так каждый день. Меня тоже позвали. Я обещал постараться, хотя сам точно знал — нет опций. Снова принялся за работу.

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

Быстро решил, что мой вчерашний подход слишком компромиссный. Если уж переделывать, то вообще всё. Я перестал ограничиваться переименованиями и разбиениями. Каждый файл, который я собирался переработать, подвергался тщательному анализу. Я уже довольно долго на этом проекте, я хорошо понимаю, чего тут хочет бизнес, и что должен делать наш код.

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

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

К этому моменту я зашёл уже достаточно далеко. Проект не собирался, и не было шанса, что он будет собираться в ближайшие несколько дней. Всё, что я в нём меняю, я смогу проверить только в конце работы. А раз я поменял уже так много, почему бы и не поменять тогда публичное API? Хорошо, мне хватило ума сделать копии репозиториев с SDK и приложений, так я мог дублировать изменения API в этих копиях и находить ошибки. Ведь основную версию SDK я даже не мог скомпилить.

Проблемы начались сразу. Изменил сигнатуру одного метода? Лови плюс две сотни ошибок времени компиляции в приложениях. Из-за неправильных сигнатур методам передавались неправильные параметры, а приложения работали. При этом ты работаешь в четырёх окнах IDE. После того, как я поменял три метода, и вылечил все ошибки с ними, подумал — раз работа уже проделана, глупо будет поменять только часть дурацкого API — надо переделывать дальше. И полез в процесс еще глубже.



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

Я понял, что я работал медленно, потому что боялся что-то сломать, пытался где-то разобраться, быть аккуратным. Тогда я сказал себе: «Я умнее чем тот, кто писал это говно, я знаю, что должно быть сделано, у меня есть задача и бюджет на рефакторинг и я имею право на всё». Разбираются и переживают слабаки, мужчина знает чего хочет, и делает, не задавая лишних вопросов.

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

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



В один из вечеров я вспомнил, что обещал жене съездить в Икею. Квартира, в которой мы жили, была ужасна, и жена хотела напокупать всякой уютной херни. Я весь день писал код, мой мозг был в край измотан, но ехать пришлось. Поставил каршеринг, ближайшая тачка была в двадцати минутах ходьбы. Я вызвал такси, чтобы доехать до машины. Представьте себе типичный московский тупичок, забитый автомобилями под завязку. В конце такого меня ждал Рено Каптур. Победив лагающий UI делимобиля я смог открыть это ведро. Там меня ждал сюрприз — коробка автомат. Я никогда не ездил на автомате, но подумал, что справлюсь. Если хочешь ехать вперёд, надо передвинуть ручку вперёд, если назад — назад. Нет. Я понял, что машина едет не туда ровно в тот момент, когда ещё можно было спасти ситуацию.

Вдавил тормоз. Естественно, не той ногой, ведь в дурацком автомате всего две педали, и мой мозг всё понял неправильно. Дикий рывок, тачка встала. Два миллиметра до мерседеса S-класса.

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

Мы вернулись часа в четыре утра, мой мозг отключился, как только глаза увидели кровать.



В восемь утра я снова был на работе. Там снова все счастливые, обсуждают свои московские дела и бары, до которых мне не добраться. У меня снова SDK. С тяжелой головой я бегло просмотрел изменения, которые наделал. Всё очень плохо. Уже завтра митинг по таске, а мне нужно ещё три сотни лет, чтобы всё закончить.

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

Сделанного не воротишь. Главная проблема оставалась — я не мог собрать и запустить всё решение, и понятия не имел, как оно заработает. Это очень пугало, в последний день я посмотрел на диффы и понял, что я переписал почти весь проект. Было чертовски страшно.



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

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

С горящей жопой я мёржу всё за час, запускаю CI и сваливаю домой. Всю дорогу я прокручиваю в голове свой код и я абсолютно уверен — ничего не выйдет. Слишком много изменений, будет сотня багов, и мы откажемся от этого рефакторинга.

Когда я вернулся домой, меня ждала новость — проект работает. Лид поправил пару мелочей, мои изменения прошли автотесты и прямо сейчас успешно проходят ручное тестирование. Я не поверил. Спулил код на домашнюю тачку, собрал и вручную проверил все сценарии, которым не доверял. Оно работало. Работало!!!

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



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

Заказчик решил отказаться от проекта. Почти сотня человек в аутстафе (половина всей компании) оказалась «в ожидании нового проекта». Считай — лимбически безработными. А удаленщиков при таких делах режут в первую очередь. Мне сказали, переезжай в Москву насовсем и переходи на другой проект. Либо мы тебя уволим.

Я спросил, что будет со старым проектом.

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

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

Мне кажется, я все отлично понимал с самого начала. Просто я не хотел быть прагматичным парнем.

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

Комментарии (349)


  1. a1ex322
    15.10.2019 18:00
    +3

    Приятно читать Вашу статью! Когда пишу костыли стараюсь отрефатчить именно эту часть, чтобы для следующего костыля пришлось тратить меньше сил и не сломать остальное самим рефатчем


  1. Nikolai46
    15.10.2019 18:03
    +3

    в самой худшей халупе в мире
    А что не забить на эту и в получше не перехать? Денег жалко?

    Кстати, на каком языке было легаси то? И ещё бы пару обезличенных примеров этого легаси непомешало привести.

    Чтобы настроение поднять
    На приеме старый терапевт слушает больного:
    — Та-ак… Хорошо… Хорошо… Очень хорошо.
    — Доктор, что хорошо?
    — Хорошо, что это у вас, а не у меня.


    1. fillpackart Автор
      15.10.2019 18:30
      +1

      Насчёт перезда, и денег жалко было, и переезжать не хотелось. Для детей и так был огромный стресс засыпать на новом месте.

      Тег поставил.

      Легаси было на шарпах.

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

      class UserResponse 
      {
        string Name {get; set;}
        ...
      }
      

      Так вот, во время запроса что-то могло пойти не так, и в этом случае этот универсальный механизм создавал инстанс модели ответа через РЕФЛЕКСИЮ. Причём не всегда, несколько видов ошибок он умел обрабатывать, и плеваться исключениями.

      public async Task<T> FetchData<T>(string url)
      {
        try
        {
          return await SomeHelper.Fetch<T>(url);
        }
        catch(SomeExeption e)
        {
          throw new SomeAnotherException(e);
        }
        catch(Exception)
        {
          return (T)Activator.CreateInstance(typeof(T));
        }
      }
      


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

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


      1. Nikolai46
        15.10.2019 18:35

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


        1. fillpackart Автор
          15.10.2019 18:37

          Клиентов всех мы сами разрабатывали, я поменял контракт и во всех клиентах переделал вызовы методов либы.


      1. asm0dey
        16.10.2019 11:22

        Мы с детьми всю жизнь ездим по миру, не очень понимаю от чего стресс. Вот стресс от 6 часов в автомобиле — это я бы понял, я стараюсь сделать так, чтобы было комфортно. Но квартира? Мы тут недавно прокатились по 5 городам Италии за 12 дней с детьми 10, 3 и 0 лет. Не понимаю откуда стресс.


        1. dzsysop
          16.10.2019 15:49

          И в каждом вы работали с 8 утра до 24, а жена искала где Икея?


          1. asm0dey
            16.10.2019 17:01

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


          1. asm0dey
            16.10.2019 17:01
            +1

            У жены, слава богу, есть такси и яндекс карты. Искать икею не надо — она есть на карте.


            1. kost
              17.10.2019 00:39
              -1

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


            1. fillpackart Автор
              17.10.2019 12:24

              Дети слишком мелкие — с ними в одиночку очень тяжело куда-то ездить


        1. RaFaeL-NN
          16.10.2019 23:32
          +1

          Мы с детьми всю жизнь ездим по миру, не очень понимаю от чего стресс.

          Стресса у вас и детей нет, так как для вас это норма жизни. Если кто-то никогда никуда не ездит, то для него и выезд на дачу бывает со стрессом


          1. asm0dey
            16.10.2019 23:36
            -1

            Тогда о чём думали родители детей, которые так жестоко поступили?


            1. extempl
              17.10.2019 06:15

              О том, что пора бы, наконец, куда-нибудь съездить, а тут и возможность подвернулась, например?


              1. asm0dey
                17.10.2019 07:22

                Ну тогда не на что жаловаться, м?


        1. ivlis
          17.10.2019 03:55

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


  1. JMaxi
    15.10.2019 18:54
    -1

    «Жену пришлось брать, потому что я рассказал ей про поездку за три часа до отъезда.»
    "«Дома» меня ждал заслуженный скандал, утром — дерьмовый растворимый кофе. "
    " жена хотела напокупать всякой уютной херни."

    Дружище, сочувствую тебе. Жена должна помогать, а не мешать. Ладно, она не понятно о чем думала, но о чем думал ты? Брать жену с 2 мя детьми в новый город, попутно увеличивая свой стресс. Отрефакторь лучше свои легаси отношения с женой. Она должна быть хранительницей очага и надежным тылом, а не источником дополнительного пиз#еца.


    1. fillpackart Автор
      15.10.2019 18:55

      В моём мире, жена мне ничего не должна.


      1. konraddd
        15.10.2019 19:49
        +4

        стало быть и ты ей «ничего не должен»? тогда зачем вы вообще друг другу?
        не пойми неправильно — просто люди сходятся, влюбляются, женятся, заводят детей не только ради галочки «у меня семья — я молодец», а потому что вдвоём выживать в этом мире проще, чем поодиночке… «У каждого меча должны быть свои ножны» (с)


        1. fillpackart Автор
          15.10.2019 20:37

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


          1. x67
            15.10.2019 23:24
            +5

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


            1. Anton_Zh
              16.10.2019 05:47
              +2

              Если не хотите, чтобы вам советовали на форумах, не надо жаловаться на форумах.


              1. x67
                16.10.2019 23:56

                так автор вроде и не жаловался. И помощи не просил) Помощь сама нашла кому помочь)


                1. Anton_Zh
                  17.10.2019 02:27

                  А вы помните, что значит «жаловаться»?

                  Это были худшие две недели в жизни
                  это не «жаловаться»?


          1. Anton_Zh
            16.10.2019 05:46
            +1

            Тогда не надо было вообще про семью упоминать. Чего теперь удивляться, что люди начали комментировать, то, что написано в статье (про брак)? Статья вообще о чем? О ваших чувствах/эмоциях или о рефакторинге?


            1. fillpackart Автор
              16.10.2019 09:40
              +1

              Интересно, если бы я и про дочь упомянул, мне бы заодно объяснили бы, что и дочь у меня дурацкая? Статья — история, для истории важно, в каком я был состоянии. Очевидно, если бы всё было как обычно, я бы и не взвалил на себя неподъёмную задачу, а сделал бы что-то минимально необходимое.


              1. MacIn
                16.10.2019 20:16

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


                1. fillpackart Автор
                  16.10.2019 21:42
                  -7

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


                  1. MacIn
                    16.10.2019 23:47
                    +2

                    Не знал, что где-то существует правило, по которому я даю согласие на критику всего, что так или иначе выношу на публику.

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

                    Здесь можно долго спорить о терпимости и т.п., но… если человек, выйдя в дождь без зонта просто ворчит на свое растяпство — это одно. Если он не понимает причинно-следственной связи между прогулкой без зонта и мокрой одеждой, кляня при этом небеса — это другое.

                    И вот я говорю, что они, и их опыт, который они вынесли на публику — говно собачье.

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


                    1. fillpackart Автор
                      17.10.2019 00:42

                      О оно играет роль для меня. Я же о своём восприятии говорю.


                  1. wormball
                    17.10.2019 01:04
                    +1

                    > Не знал, что где-то существует правило, по которому я даю согласие на критику всего, что так или иначе выношу на публику.

                    Это правило прописано в конституциях большинства стран. Называется «свобода слова».


                    1. fillpackart Автор
                      17.10.2019 11:31

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


          1. eugensk
            16.10.2019 09:28
            +1

            Потому что страна советов, habr хоть и com, но всё же ru. Плюньте.


          1. f_ck_ost100345
            16.10.2019 10:29
            +1

            Не обращайте внимания эти на комментарии. Я например понял зачем Вы упоминали о "семейном" аспекте ситуации. И вопросов или предложений по улучшению качества семейной жизни у меня не возникло.


            1. Neikist
              16.10.2019 10:59

              Мне не нравится переход на семью автора с которого эта ветка началась, но я вот честно вообще не могу понять зачем брать родственников или знакомых в, по факту, рабочую командировку?


              1. f_ck_ost100345
                16.10.2019 11:33

                Мало ли может быть причин. Может у них любовь все дела? Такое тоже случается… Или вот: не смотрели фильм «Смертельные узы»? На героях там были такие ошейники, что им нельзя дальше километра друг от друга отдаляться иначе взорвутся. В общем какая нам разница: надо было — пришлось взять. Я периодически в командировки езжу, с удовольствием взял бы жену с ребенком в Питер, к примеру, ей нравится город. Но как-то все не до того. Да и командировки у нас коротковаты — дней 5.


                1. Neikist
                  16.10.2019 11:38
                  -1

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


              1. emerald_isle
                16.10.2019 16:51

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


              1. S-e-n
                16.10.2019 21:03

                Автора никто не спрашивал, судя по тексту.


        1. 0xd34df00d
          15.10.2019 20:57
          +1

          Лол.


          Одному проще, потому что ты гарантированно знаешь, что ты не сможешь не оправдать ничьи ожидания. Тьфу ты, много «не», но суть понятна, надеюсь. Если у вас нет собаки, её не отравит сосед.


          1. Am0ralist
            15.10.2019 21:08
            +6

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

            Вы должны быть собой, а остальные либо найдут плюсы в общении с вами, либо…


            1. 0xd34df00d
              15.10.2019 21:19
              +3

              Есть некая картина мира, которую можно кратко (и неточно) подытожить как «а нафига я всем этим людям, кроме как их ожидания оправдывать?» Рационально понятно, что в реальной жизни это не всегда так, но тут-то речь идёт об эмоциональной сфере, а как её приводить в соответствие, непонятно.


              Тем более, что все мои взаимодействия с окружающим миром за последние лет 10 (сколько я более-менее стараюсь себя осмыслять) были в рамках этой парадигмы. У работодателя есть ожидания, и в зависимости от уровня их оправдывания я получаю тот или иной результат. У преподов в вузе есть ожидания, и в зависимости от уровня их оправдывания я получаю ту или иную оценку. У ревьювера в опенсорс-проекте есть определённые ожидания, и в зависимости от их оправдывания мой пуллреквест принимается, отклоняется или дорабатывается. И это представляется разумным (особенно если принимать во внимание, что ты не обязан все ожидания оправдывать).


              Так что да, одному проще.


              1. Am0ralist
                15.10.2019 21:30
                +2

                У работодателя ожидания связаны с полученным от вас резюме. Он же не ожидает от вас, что вы вдруг станете суперменом и пр?, Преподаватели в вузе имели не ожидания, а требования, разные для каждой отметки и вы либо выполняли оные, либо не соответствовали планке.
                В личном плане по большей части от вас требуется быть адекватным тому, что вы сами о себе говорите. И тому, что вы сами из себя демонстрируете. Все другие ожидания оправдывать вы совершенно не обязаны, это даже вредно во многих случаях. Когда находишь человека, перед которым не надо лезть из шкуры, чтоб оправдать его ожидания — то внезапно это понимаешь. У моей жены ровно одно ожидание от меня — что я буду таким, каким был эти 2 года. Я все эти 2 года был просто сам собой и не требовал от неё быть другой, чем она была со мной всё это время. И за два года у нас не было ни одной серьезной ссоры или размолвки, что для меня лично не характерно, так как я как раз не люблю, когда меня заставляют соответствовать чужим безосновательным ожиданиям.


                1. 0xd34df00d
                  15.10.2019 21:42

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

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


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

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


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


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

                  Если потребность (или привычка) рассуждать в терминах соответствия чему бы то ни было не идёт изнутри.


                  я буду таким, каким был эти 2 года

                  Гы, интересно, а вот то, что 6 лет назад на шестом курсе я угорал по машинному обучению и был перспективной партией с зарплатой 300k/nanosec, три года назад случайно взял алгебраичный учебник по линалу, и теперь уже всерьёз думаю в следующем году (хотя не, GRE сдать не успею, так что через год) поступать в вуз на PhD в существенно менее перспективную область, с соответствующей сменой стиля жизни, это считается?


                  1. Am0ralist
                    15.10.2019 21:52

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


                    1. 0xd34df00d
                      15.10.2019 22:28

                      Вы ж не будете работать в макдаке за еду?

                      Ну, судя по быстрому гуглу, зарплата макдональдсе — 22к в год. Аспиранту в UPenn платят стипендию в районе 27 в год. Так что...


                      Если кому-то от вас нужны лишь доходы, то возвращаемся к вопросу, а зачем вам соответствовать чужим ожиданиям?

                      А тут тот же вопрос с парадигмой, в которой вы (или я) привыкли жить.


                      PS. Ладно, я завершу офтопик…

                      Да и мне ныть хватит. Спасибо за фидбек.


                1. KvanTTT
                  16.10.2019 12:47

                  У моей жены ровно одно ожидание от меня — что я буду таким, каким был эти 2 года.

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


                  1. JustDont
                    16.10.2019 13:05

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


                  1. Am0ralist
                    16.10.2019 15:46

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


                    1. VolCh
                      17.10.2019 08:48

                      Если заявил "на берегу" что-то вроде "моя карьерная цель стать хорошим тимлидом (со хорошей для рынка оплатой)", то имеешь полное моральное право и перед женой/мужем, и перед работодателем, достигнув этой цели не то чтобы просто сидеть на попе ровно, но отказываться от других карьерных возможностей хоть в сторону CTO/VP, хоть в сторону архитектора, хоть ещё куда-то, развиваясь только чтобы соответствовать меняющимся требованиям к этой конкретной позиции на рынке, чтоб быть уверенным, что не зависишь от конкретного работодателя.


            1. Mitch
              16.10.2019 12:19

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

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


              1. KvanTTT
                16.10.2019 12:50

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

                С теми, кто не достиг, но пытается — тоже хорошо, но нелегко. Не всегда понятно, достигнет ли вообще когда-нибудь успеха.


              1. Am0ralist
                16.10.2019 15:50

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


              1. defuz
                16.10.2019 19:43

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

                Здесь включается второй принцип, который хорошо сочетается с первым: «чем меньше ожиданий – тем меньше разочарований». Если не выдумывать слишком большой список ожиданий к партнеру, то и отвергать всех не прийдется.


                1. Am0ralist
                  16.10.2019 19:56

                  Здесь включается второй принцип, который хорошо сочетается с первым: «чем меньше ожиданий – тем меньше разочарований». Если не выдумывать слишком большой список ожиданий к партнеру, то и отвергать всех не прийдется.
                  Бинго! Какая замечательная формулировка)


      1. ScreamPassion
        16.10.2019 16:42

        Квартира, в которой мы жили, была ужасна, и жена хотела напокупать всякой уютной херни.
        Вы всегда обставляете уютной херней отели в которых побываете во время отпуска, съемные квартиры(в которых планируете жить меньше 2х недель), может быть даже самолет в котором летите на отдых?)


        1. ganqqwerty
          16.10.2019 18:12

          Я сначала подумал, что уютную херню предполагалось отвезти в место постоянного проживания, в город, в котором нет икеи…


          Оу. Нет, это действительно для того, чтобы обставить двухнедельную квартиру.


          1. fillpackart Автор
            17.10.2019 12:20

            Ну так мы же все эти вещи потом домой забрали


            1. ScreamPassion
              17.10.2019 14:07

              Это безусловно все прекрасно, но мне кажется у вас имеются проблемы с планированием времени, иначе довольно сложно объяснить поездку за покупками посреди рабочей недели да еще и с возвращением домой в 4 утра. В спб кстати икея работает до 11-12, сомневаюсь что в мск она работает круглосуточно, по этому опять же тут что то не сходится. Про доставку из икеи я вообще наверное промолчу.
              Не поймите меня неправильно, я вас не осуждаю и не критикую, но ход ваших мыслей (а особенно то, что вы пишете в комментариях выше) мне кажется странным и как для психолога и как для человека.


              1. fillpackart Автор
                17.10.2019 14:12
                +1

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


            1. ganqqwerty
              17.10.2019 15:04

              а, фух…


    1. dzsysop
      15.10.2019 18:56
      +1

      но о чем думал ты?

      по-моему эту мысль автор сам повторил раз 10 по ходу статьи.


    1. konraddd
      15.10.2019 19:42

      странно что минусуют — чувак-то дело говорит


      1. dzsysop
        15.10.2019 19:49
        +2

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


        1. 0xd34df00d
          15.10.2019 20:58
          +1

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

          Включая текст статьи.


          Можно было прокомментировать например: «а вот моя жена, когда мы были в командировке мне в офис борщ горячий привозила».

          Забавно. Мне это кажется более, эм, агрессивной формой.


    1. ormoulu
      15.10.2019 19:43

      Аххахах, расскажите как это сделать, очень нужно.


    1. Carburn
      16.10.2019 17:26

      Как будто у жены не может быть своих планов?


  1. andrew_zola
    15.10.2019 18:54

    Вы выбрали не тот язык, чтобы писать. Вам нужно выбрать обычный русский :)


  1. dzsysop
    15.10.2019 18:55
    +1

    Мои искренние соболезнования.
    Я знаю что в следующий раз все повторится.
    Себя не переделать.
    Вернее переделать себя можно и нужно, но это занимает многие годы.
    И нет никакого мерила того насколько глубоко надо лезть в рефакторинг, но и работать с говнокодом год за годом очень токсично и вредно. Я тут пару лет назад узнал термин «yak shaving».


    1. defuz
      16.10.2019 20:03
      +3

      Зачем переделывать себя, если можно изменить окружение?

      В продуктовой компании, где проекты не выбрасываются так спонтанно, за проделанный труд могли и премию выписать. Просто работать на аутстафе/аутсорсе таким как автор вредно для ментального здоровья.

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

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

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

      Этот комментарий отредактирован 7 раз.

      </диванная психология>


      1. defuz
        16.10.2019 20:27

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


        1. Am0ralist
          16.10.2019 20:59
          +2

          Например, попытаться согласовать четыре фундаментальных взаимодействия или обосновать существование кварков стройной математической системой...
          когда вам на работе дали простую задачу по расчёту вентиляционной системы)


      1. Neikist
        16.10.2019 20:53

        А еще в продуктовой компании, в зависимости от количества средств и финансового выхлопа могли втык сделать за нецелевое расходование «средств»))


      1. ilammy
        16.10.2019 21:13

        Просто работать на аутстафе/аутсорсе таким как автор вредно для ментального здоровья.

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


    1. OrangeCrusty
      16.10.2019 20:09

      У меня на проекте есть команда с таким названием, наконец я узнал, что это значит


  1. shurkandak
    15.10.2019 18:57

    Интересная статья.
    Возможно имело смысл какие-то решения или подходы вытянуть в свой репозиторий, но так чтобы НДА не нарушать там всякие.
    Чтобы уж совсем труды не вылетали коту под хвост.


    1. dzsysop
      15.10.2019 19:28
      +2

      К сожалению, очень часто такой код не имеет особой ценности, будучи вырванным из контекста проекта, даже если нет ограничений в виде  NDA.
      История именно о том что: ради чего выкладываться как при стойка БАМа, если никто не оценит и трудами своими потом нельзя любоваться и гордиться даже. Не говоря уже о какой-то материальной компенсации «ударного труда»?
      По факту человек отработал за 2 недели полугодовой объем команды из 3х человек, получил «дежурное спасибо» и оплату 40ч х 2 нед = 80 часов работы, выжат как лимон, ему требуется время на восстановление, к тому же чувство опустошенности, скандалы в семье и прочие последствия. На самом деле статья на Хабре в данном случае — это все что можно записать в плюс по итогу этой истории.


      1. Siestagirl
        16.10.2019 01:59
        +1

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

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

        Конечно хотелось бы, чтоб таким поступкам давали подкрепление (премии, похвалы, не важно), но это какая-то утопия, стереотипное мышление, которое прививали нам в школе (решил контрольную правильно — получил 5).
        Сам можешь сказать себе что делаешь все классно.


        1. shurkandak
          16.10.2019 08:16

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


          1. VolCh
            16.10.2019 09:57

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


  1. Rinz
    15.10.2019 19:05

    Всего лишь 15к? Искренне рад за вас, вы еще не видели полного трещака за 100к строк, полный монолит и зоопарк из языков )


    1. dzsysop
      15.10.2019 19:30

      И кто-то это сделал за 2 недели в одиночку?
      Мне кажется что 15 тыс отрефакторенного кода за несколько недель в одиночном плавании, да еще не в своей привычном окружении, а на «гастролях», с успешным прохождением тестирования в конце — это реально подвиг и достижение.


    1. eumorozov
      15.10.2019 19:32
      +3

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


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


      Во всех трех случаях ситуации были идиотские до невозможности. Допустим, есть проект на Django. Берут человека его допиливать. Этот человек начинает дописывать функциональность, но при этом в своих кусках использует не шаблоны Django, а Jinja2. То есть, в проекте начинают использоваться два разных (но очень похожих) языка шаблонов. И, допустим, с включением куска одного в другой, возникают проблемы. На вопрос: «зачем?!!» человек сказал, что ему так удобнее, и уволился. Но это были только цветочки. Когда я начал смотреть, что он там написал в Python, то пришлось уже волосы вырывать по всему телу. Кстати, на Хабр он по-моему есть. Я гуглил его из чистого любопытства — просто хотелось понять, откуда взялся такой уникум, и куда ушел… Если он этот комментарий читает, то наверняка вспомнит — ведь он наверное один такой, который пытался сделать проект, в котором используются два разных языка шаблонов. Привет, мозголомщик!


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


      1. tangro
        15.10.2019 23:06
        +1

        проект большой и все еще живет, что для меня удивительно

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


        1. eumorozov
          16.10.2019 07:30

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


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


      1. VolCh
        16.10.2019 07:05

        На Python не пишу, но объективно два шаблонизатора ни о чем ещё не говорят. Гораздо больше шансов на внедрение нового, если внедрять его плавно, а не "за 2 недели" переписать все шаблоны системы


        1. eumorozov
          16.10.2019 07:45

          Немного затрудняюсь объяснить.


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


          Во-вторых, все сторонние приложения, все приложения самого Django сделаны на шаблонах Django. А любой нетривиальный проект на Django использует сотни батареек: для форм, для админки, для автокомплита, для REST API, и т.д. и т.п. Все эти батарейки используют исключительно шаблоны Django. То есть для использования другого шаблонизатора должны быть очень веские причины, т.к. можно потерять совместимость и начать постоянно изобретать велосипед, вместо использования готовых решений.


          В-третьих, этот товарищ не заморочился переписыванием всех шаблонов. И даже не планировал. Просто до него было, скажем, 15 шаблонов на Django. А он просто стал писать все новые шаблоны на Jinja. То есть, его не смущала мешанина из тех и других (что особенно «приятно» с учетом почти одинакового синтаксиса, но все же отличающегося, чтобы постоянно пытаться по ошибке писать в Jinja как в Django и наоборот, и получать ошибки).


          В четвертых, я уже не стал писать, что там было в Python коде, потому что это однозначно выдало бы его с головой, и там был просто адский кошмар. Например, этот товарищ создал абстрактный класс ORM Address. Затем унаследовал от него CustomerAddress. Затем от CustomerAddress унаследовал BusinessAddress. В итоге, получилась иерархия классов и таблиц в базе данных, которые не имеют никакого смысла, особенно в контексте задачи, где в ее определении вообще не требуется никаких разных типов адресов (не говоря уж о том, что в ORM такое реализуется без наследования).


          Уже только по этому стало понятно, что человек до этого никогда не программировал, взял какую-то древнюю книжку-пособие по ООП, и не понимая, что там написано, стал это все применять в жизнь там, где это не нужно. Ну все помнят же эти книги с идиотскими иерархиями наследования типа Shape <- Square <- Circle или Employee <- Manager <- Boss.


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


          1. eumorozov
            16.10.2019 08:08

            Ну а в целом, почему эта ситуация так мне запала в душу и запомнилась. Это фриланс проект. Меня туда очень долго решались пригласить, около полугода. Все эти полгода этот товарищ (скажем, А) хреначил свой неработающий говнокод. Он что-то там показывал, какие-то потемкинские деревни в виде HTML, за которым не стояло никакого работающего кода.


            Заказчик (З) и его менеджер (девушка по имени И.) не обладали достаточными знаниями, чтобы понять, что им морочат голову. В итоге, когда А сказал, что он нашел работу получше, и сваливает немедленно, они в панике решились сделать мне предложение. Я согласился, не видя кода. За полгода мы много раз обсуждали задачу, и она казалась мне интересной.


            Как только я получил доступ к репозиторию и начал работать, то сразу сказал сакраментально-банальное: «Внутри неработающий код и все придется переписать». З и И мне вроде как поверили, но А уже успел написать десятки тысяч строк. Я потихоньку начал в этом разбираться и переделывать. Но каждый час(!!!) И меня спрашивала: «Когда будет первый результат, который можно показать З?». После 4-5 вопроса это нешуточно достало, так как переписать десятки тысяч строк за несколько часов нереально — нужны недели, месяцы. Я попытался объяснить и спросил откуда такая настойчивость, почему обязательно надо дергать меня каждый час. И показала скриншот переписки с заказчиком, где он возмущается, что я уже наработал целых два часа, а результата еще нет.


            Тут я понял, что кашу видимо не сваришь. Сказал, что возвращаю все заработанные на тот момент деньги и прекращаю контракт. У З и И случилась истерика, они обвинили меня в непрофессионализме и т.п. Хотя я успел проработать всего 1-2 дня, и отказался от денег, заработанных в это время (потерянных для меня, как и потерянного времени, когда они полгода постоянно беседовали со мной, но решались пригласить в проект — постоянные собеседования, обсуждения, вытягивание информации, как бы стал делать этот проект).


            Это было на известной бирже фрилансеров. После этого я нашел профиль этого деятеля на бирже. Во-первых, З поставил ему наивысший рейтинг (в отличие от меня, но свою оценку я успешно оспорил). Во-вторых, этот человек поставил себе рейт в два раза выше чем я, хотя ничего не умеет, и за полгода, видимо, заработал астрономическую сумму, не сделав вообще ничего работающего, просто набросав свалку кода, которая ничего не делала и не могла сделать! В-третьих, у него в профиле была куча регалий: закончил серьезный ВУЗ, различные курсы, и швец, и жнец, и на дуде игрец...


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


            1. 7voprosov
              16.10.2019 15:47

              Ну так рынок же.

              Предыдущий работник был в тех же условиях постоянного давления, но успел и денег заработать и опыта набраться и заказчик еще доволен — win win же :)


              1. eumorozov
                16.10.2019 16:08

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


                Правда я вроде бы не занимался такими вещами, как впаривание неработающего кода со словами: «Тут все на 80% готово!», как сделал товарищ А в данном случае. Из-за чего заказчик и полагал, что осталось совсем чуть-чуть поднапрячься и проект будет готов.


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


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


                Дело даже не в вещах, которые субъективны. А например в том, что человек не понимает, что, например, эффективнее написать условие в запросе в БД, нежели чем вытаскивать целую таблицу в память, и проверять условие в коде. Вроде разжевываешь все неоднократно до мельчайших подоробностей. Показываешь, почему это медленно и неэффективно. Человек клянется, что прозрел и все понял. На следующий же день (!) в pull request видишь такую же ботву… В такие моменты руки опускаются.


                1. sentyaev
                  16.10.2019 21:06

                  А например в том, что человек не понимает, что, например, эффективнее написать условие в запросе в БД, нежели чем вытаскивать целую таблицу в память, и проверять условие в коде.

                  Да ладно) Это же зависит от задачи, может там 10 записей в таблице и разницы никакой нет где там что фильтровать.


                  1. eumorozov
                    16.10.2019 21:11

                    Да ладно) Это же зависит от задачи, может там 10 записей в таблице и разницы никакой нет где там что фильтровать.

                    Иногда да. А конкретный человек, про которого пишу, иногда умудрялся написать код, который 500-600 записей из таблицы по одной таскал. Работало очень медленно.


                    1. sentyaev
                      16.10.2019 21:15

                      Сделайте таску на улучшение перформанса, а потом отчитайтесь что этот самый перформанс улучшили в 100500 раз. /сарказм


                    1. VolCh
                      17.10.2019 08:53

                      На самом деле "очень медленно" не значит ничего пока нет конкретных требований к скорости. Если реально "очень медленно", то пользователи/ПО/заказчики на это обратят внимание разработчиков. А таскать записи по одной может экономить память, например :)


                      1. mayorovp
                        17.10.2019 09:35

                        Не может это экономить память, на фоне рантайма самой программы эти 600 записей просто потеряются.


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


                        Если реально "очень медленно", то пользователи/ПО/заказчики на это обратят внимание разработчиков.

                        Иногда лучше не дожидаться пока пользователи или заказчик обратит на что-то внимание.


                        1. VolCh
                          17.10.2019 10:45

                          Так потеряется экономия или не будет экономить? :)


                          Если получить одним запросом, то они уже будут все в памяти. Скорее всего в массиве или типа того. Тут какие-то генераторы/курсоры/сессии/страницы на стороне источника данных нужны, чтобы источник данных мог отдавать результаты запроса клиенту именно построчно/постранично. Только тогда получится сэкономить память на клиенте в рамках "одним запросом". Типа пхпешного PDOStatement::fetch, если источник данных и клиентская либа поддерживают построчную передачу результатов одного запроса


                          1. eumorozov
                            17.10.2019 12:45

                            Конкретно в этой ситуации, человек, например, всегда проверяет, что в таблице есть какая-то строка таким образом:


                            def user_has_listing(user):
                                result = query("SELECT listing_id, user_id FROM listings")
                                return user.id in result.fetchall()

                            (упрощенный псевдокод)


                            Или даже:


                            def user_has_listings(user):
                                 for user in query("SELECT user_id FROM listings").fetchall():
                                       if user == user:
                                           return True
                                 return False

                            Всегда, какие бы ни были проверки и ситуации, он пишет самый неэффективный возможный код.


                            Тем, кто говорит, что раз нет строго определенных требований к проивзодительности, то это норм: уже была ситуация, когда этот человек реализовал несколько фич. Каждое изменение содержало несколько подобных неэффективных мест. После того, как все это попало в production, критические места катастрофически замедились, потому что множество мелких неэффективностей сложились и получился колоссальный кумулятивный эффект. А еще в продакшене данных было намного больше, так что там где O(n?) было незаметно при тестировании на тысячах строк, оно стало невыносимо медленно на сотнях тыcяч.


                            И сто раз объясняешь ему, что эффективнее сразу в запросе проверять. Говорит: «Ох, нифига же себе! Я все понял». Через день вижу такой же код. И история повторяется по кругу.


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


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


                            Говорю ему, например: «Ты пишешь неэффективно, смотри вот хорошая статья на тему итераторов, в которой очень интересно написано, как лучше писать в таких ситуациях код». Он соглашается, исчезает, потом я снова вижу точно такой же код, как и раньше. То ли он не читал статью, то ли не понял, хотя она реально простая… Эхъ...


                            1. VolCh
                              17.10.2019 16:34

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


            1. Vladimirsencov
              17.10.2019 12:19

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


              1. eumorozov
                17.10.2019 12:30

                Я скорее о том, что эта история благодаря этому товарищу стоила мне нескольких потерянных дней и массы потерянных нервов. Потому что объяснить двум людям: заказчику и его менеджеру, что все, что они получили — это кучу ничего не делающих бессмысленных исходников — очень тяжело. Они видели HTML формы, которые имитировали какую-то работу.


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


                А так вообще просто хотел сказать, что у меня за жизнь столько примеров ужасного кода скопилось, что если начинать блог типа The Daily WTF, то моего материала на год хватит писательства регулярных статей.


                Чего только я в жизни не видел… Типа «эксперт» CTO нескольких австралийских компаний, который не знает, как нормализовать базы данных, поэтому в его коде, например, есть таблица с тремя (серьезно, не шучу и не преувеличиваю!) полями: active, is_active, user_is_active. Причем в разных местах в коде устанавливались и проверялись разные атрибуты: один модуль, например, устанавливает флаг active, а другой проверяет is_active. Естественно, когда я начал это нормализовать, мне пришлось долго размышлять над этой троичной логикой в попытках свести ее к одному флагу… И если бы это был единичный такой случай в его коде. Там можно было целую коллекцию насобирать. Также как и его высказываний. Например, он предлагал после выхода каждой новой мажорной версии продукта, начинать историю Git с нуля!


                1. Nikolai46
                  17.10.2019 16:38

                  Потому что объяснить двум людям: заказчику и его менеджеру, что все, что они получили — это кучу ничего не делающих бессмысленных исходников — очень тяжело. Они видели HTML формы, которые имитировали какую-то работу.
                  Решается достаточно просто — пригласить независимого эксперта. Думаю многие согласятся потратить немного денег чтобы получить чёткую картину в подобном положении.


                  1. eumorozov
                    17.10.2019 16:48
                    +1

                    Когда увидел сообщение заказчика, пересланное менедежером, где он писал (почти дословно): «Этот чувак уже забиллил в клиенте биржи 2 часа, а результата еще нет. Он дорого нам стоит. Когда будут результаты?» я просто сразу понял, что лучше получить негативный отзыв и какие-то другие негативные вещи (например, менеджер забанила меня в мессенджерах и т.п., внесла в свой черный список), нежели пытаться варить с таким человеком кашу.


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


                    В другой ситуации, возможно, да, попробовал бы объяснить. Что за два часа ни в каком проекте сложнее hello world с нуля не получить никакой результат. Что он получил имитацию исходников. И так далее. Но в конкретно той ситуации, я понял, что все, что можно извлечь из этого проекта — огромную головную боль и отчеты каждый час. Зачем мне это надо, когда вокруг десятки тысяч адекватных заказчиков?..


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


                    Просто я понял, что с этой нервотрепкой с постоянными запросами по Скайпу «ну когда уже я увижу работающий проект», я бы просто через пару дней взорвался. Либо он зажал бы платить «дорогому разработчику».


    1. Barbaresk
      15.10.2019 23:20

      Я так год рефакторил код объёмом примерно в 300к строк. Это было С++ приложение под Windows со своей кривой реализацией STL, многопоточностью, окошками. Оно не использовало ни стандартные С++ либы, ни стандартную виндовую многопоточность. Всё это было сделано с применением максимального числа антипаттернов, с кучей багов, дедлоков, ошибок и т.д. И сделано это было не для ускорения (всё наоборот тормозило), а просто потому, что те, кто всё это начинал писать, не знали об этих вещах. А потом 8 лет туда присобачивали новые костыли и велосипеды. В общем, я уволился в итоге, потому что стало противно на всё это смотреть.


  1. stalker1984
    15.10.2019 19:34

    Счастья всем, и пусть ни кто не уйдёт обиженным ©


  1. googlodrocher
    15.10.2019 19:36

    Шедевральненько.


  1. Viperous
    15.10.2019 19:42

    До конца не верил, что проект соберется


    1. fillpackart Автор
      15.10.2019 19:43
      +1

      Да, я тоже. Я вот всё пытаюсь понять, а как люди делают такое же в динамически типизированных проектах?


      1. 0xd34df00d
        15.10.2019 21:02

        Ну, во-первых, они придумывают свой собственный маленький тайпчекер в виде юнит-тестов.
        Во-вторых, я бы не стал так уж обольщаться, ибо разница с точки зрения гарантий между каким-нибудь питоном или JS и каким-нибудь С++ куда меньше, чем между С++ и хаскелем или ещё более навороченными языками (при всей моей любви к С++).


        1. fillpackart Автор
          15.10.2019 21:05
          +2

          Я не столько про гарантии сколько про процесс. Вот был у меня тип A, я поменял его публичное АПИ, и получил от компилятора все места, где от этого возникли проблемы.

          А насчёт тестов, обычно у говнокода тесты — такое же говно, которое ничего не проверяет.


          1. 0xd34df00d
            15.10.2019 21:07
            -1

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


            1. missingdays
              16.10.2019 14:54

              Допустим, у меня есть тип А, и его метод a. Есть тип В, который этот метод А#а использует. Я меняю сигнатуру A#a, чтобы вместо двух параметров принимать один. Допустим, падает два юнит-теста. Я их чиню и радостно иду дальше рефакторить. Потом ловлю ошибку в runtime, что из B метод A#a вызывается неправильно. Как в таком случае юнит-тесты помогут решить проблему?


              1. 0xd34df00d
                16.10.2019 15:49

                Не знаю, я не фанат этого подхода.


              1. Yngvie
                16.10.2019 16:51

                Пишите юнит-тест на тот метод В, который падает в runtime :)


                Есть еще статические анализаторы, которые такое иногда могут отловить, и выдадут ошибку. Для python есть pylint, который отработает такую ситуацию и выдаст


                Too many positional arguments for function call (too-many-function-args)


          1. Denis631
            16.10.2019 00:56

            Я не столько про гарантии сколько про процесс. Вот был у меня тип A, я поменял его публичное АПИ, и получил от компилятора все места, где от этого возникли проблемы.

            ну так а refactoring разве не начинается с написания тестов? Если нету тестов, которые прикроют твою спину, то либо их нужно написать либо с идеей refactoring'а завязывать


            1. 0xd34df00d
              16.10.2019 02:01
              +1

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


          1. trueMoRoZ
            16.10.2019 05:38

            у вас есть тесты, ммм.


          1. VolCh
            16.10.2019 07:09

            Статанализ есть не только в компилируемых языках, да и много других инструментов, начиная со старого доброго grep до синтакичнских анализаторов, генерирующих AST, применяющих патч и генерирующих новый код. Но проблем больше немного, да.


            1. potan
              16.10.2019 07:44

              Статанализ проверит сохранение контракта при рефакторинге?


              1. VolCh
                16.10.2019 10:02

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


                1. potan
                  16.10.2019 11:44

                  Сигнатуры — тоже контракт. Во вполне мейнстримовых C++ и Scala их сохнанность при рефакторинге помогает. Думаю в Rust тоже, но рефакторить его мне не приходилось.


                  1. VolCh
                    17.10.2019 08:58

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


                    Не все подобные вещи заметит, но большинство, если нет особо упоротой динамики.


                    1. 0xd34df00d
                      17.10.2019 21:10
                      +1

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


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


                      1. fillpackart Автор
                        17.10.2019 21:27

                        Видимо, потому что типы кажутся им сложными.


        1. kkirsanov2
          16.10.2019 15:35

          Ну, во-первых, они придумывают свой собственный маленький тайпчекер в виде юнит-тестов.

          Не только. Я сейчас вынужден придумывать тайпчекер который через интроспекцию ходит по классам и выверяет типы по аннотациям. :)


      1. AllexIn
        15.10.2019 21:32
        +2

        А как люди раньше писали неделю код, чтобы в ночь выходного запустить его и проверить?


      1. JustDont
        15.10.2019 22:02

        Я вот всё пытаюсь понять, а как люди делают такое же в динамически типизированных проектах?

        С трудом и на полном автопилоте. Я с JS-говнокодом однажды мучался всего лишь неделю (его не очень много было), но к пятнице навык «прочитать говнокод и переписать на нормальный, работающий точно так же со всеми граничными случаями» был прокачан просто до нечеловеческих величин. Справедливости ради, половину пятницы я всё-таки дебажил — тестов не было вообще, так просто взять и добавить их — заняло бы еще добрую неделю. Но в общем, 4.5 дня лютейшего рефакторинга на полдня дебага и потом всё завелось и прошло QA — это, я считаю, было неплохим достижением. Больше никогда в жизни в подобном цирке участвовать не буду.


      1. sentyaev
        15.10.2019 22:20

        Через много тестов. Да и современные IDE помогают сильно, за всех говорить не могу, но с Python работать можно вполне комфортно, это я как человек пересевший на него с C# говорю.


      1. JordanoBruno
        15.10.2019 22:49

        Это зависит от того, как код спроектирован и написан. Иногда рефакторинг практически невозможен или слишком рискован. Если более-менее структурировать нормально — то можно зарефакторить, написав предварительно тесты на определенные моменты — black box/unit/инеграционные тесты.


      1. Yeah
        16.10.2019 02:11

        Да никак. Мы сходу хорошо пишем )))


      1. mayorovp
        16.10.2019 10:20

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


  1. Serg046
    15.10.2019 19:43

    Есть класс, у которого метод Initialize, который всегда надо вызывать сразу после создания класса — применяешь паттерн «состояние»

    Суть паттерна ясна, а можно подробнее именно про этот рефакторинг? Можно ссылкой.
    То, что тело метода инкапсулируется внутрь "состояния" — понятно. Пытаюсь понять, кто и когда дернет этот Initialize у "состояния". А если оно почему-то переедет в конструктор "состояния", то тоже самое можно бы было сделать и с изначальным объектом (но не нужно).


    1. fillpackart Автор
      15.10.2019 19:52

      Эм, ну тут всё вроде просто.
      Допустим есть класс, которому для своей работы нужно сначала сделать что-то асинхронное.

      Асинхронный конструктор мы сделать не можем, вариант с неконтролируемым запуском таска внутри конструктора нас так же не устраивает.

      Вот то что надо сделать — не факт что удачное.

      поэтому люди иногда делают так

      class Some 
      {
        private SomeType data;
        public async Task Initialize()
        {
          this.data = await SomeHeleper.Fetch();
        }
      
        public void DoSomeWork()
        {
          if (this.data != null) 
          {
             //...
          }
        }
      }


      вот это не очень хороший подход.
      Мне больше нравится такой
      
      class CompleteSome
      {
        private SomeType data;
        public CompleteSome(SomeType data)
        {
          this.data = data;
        }
      
        public void DoSomeWork()
        {
             //...
        }
      }
      
      public class Some 
      {
        public async Task<CompleteSome> Initialize()
        {
           var data = await SomeHeleper.Fetch();
           return new CompleteSome(data);
        }
      }
      


      А в клиентском коде мы сами решаем, какие модули у нас инициализируют этот класс, а какие уже работают с проинициализированным.


      1. Serg046
        15.10.2019 20:11

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


        1. fillpackart Автор
          15.10.2019 20:32

          Такой подход гарантирует, что DoSomeWork() не будет вызван до инициализации. А проблема и так всегда была в другом месте, потому что это тут так или иначе именно клиенту придётся решать, где вызывать Initialaize


          1. Serg046
            15.10.2019 20:37

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


      1. sentyaev
        15.10.2019 22:35

        В принципе можно использовать factory method.

        class Some 
        {
          private SomeType data;
          private Some (SomeType data) { this.data = data; }
        
          public static async Task<Some> CreateSome()
          {
             var someData = await SomeHeleper.Fetch();
             return new Some(someData);
          }
        
          public void DoSomeWork()
          {
            ...
          }
        }
        


        1. fillpackart Автор
          15.10.2019 23:28

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


          1. sentyaev
            16.10.2019 00:29

            В таком случае Builder может быть подойдет больше, по сути ваша реализация это builder и есть, если заменить Initialize на Build.
            Оно так и получится:

            var some = new Some();
            some.DoSomeNecessaryStuff().Initialize();
            // или в случе bulder
            some.DoSomeNecessaryStuff().Build();
            


            1. fillpackart Автор
              16.10.2019 09:49

              Я не совсем про это. Вроде, вот такой корректный пример стейта

              class SomeBase
              {
                public virtual string GetSomeInfo();
              }
              
              class CompleteSome : SomeBase
              {
                private SomeType data;
                public CompleteSome(SomeType data)
                {
                  this.data = data;
                }
              
                public void DoSomeWork()
                {
                     //...
                }
              }
              
              public class Some : SomeBase
              {
                public async Task<CompleteSome> Initialize()
                {
                   var data = await SomeHeleper.Fetch();
                   return new CompleteSome(data);
                }
              }
              


              т.е. можно вот так пользоваться:
              var s = new Some();
              s.GetSomeInfo();
              var cs = await s.Initialize();
              cs.GetSomeInfo();
              cs.DoSomeWork();
              


      1. Ascar
        16.10.2019 15:22

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


  1. konraddd
    15.10.2019 20:00
    +1

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


    1. eumorozov
      15.10.2019 20:03
      +1

      И тоже угнетает что всем на этот проект наплевать, я «один в поле воин».

      У меня теперь профессиональная травма: когда указываю в pull request на говнокодплохой код, и мне отвечают: «Какая разница, я проверил — оно работает!» — глаз начинает дергаться, и рука тянется к топору. Потому что видел к чему приводит даже 6 месяцев такого подхода, если не зарубить в самом начале...


    1. kolu4iy
      15.10.2019 22:28

      А в сентябре там было почти пусто и совершенно прекрасно, да-да. Не надо вместе со всеми, факт.


    1. JordanoBruno
      15.10.2019 22:29
      +1

      Рефакторинг должен быть оправдан и далеко не всегда стоит им заниматься в таких объемах. А с такими нервишками лучше про рефакторинг дольше пары дней вообще забыть ).


      1. AlexWenner
        15.10.2019 23:19
        +1

        Про программирование.


  1. AgentRX
    15.10.2019 20:27
    +1

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

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


  1. ChieF_Of_ReD
    15.10.2019 20:42

    Как по мне отличное получилось резюме. =)


    1. Nikolai46
      15.10.2019 20:48

      Наоборот. HR надо наивные глупцы (или по крайней мере те кто ими притворяются), а автор закончил в стиле нуар. Типа больше ни ногой…


      1. Cerberuser
        16.10.2019 04:13

        А надо заканчивать как в том анекдоте — "расстреляли меня, внучек!"?


      1. ChieF_Of_ReD
        16.10.2019 14:17

        Ознакомьтесь с другими статьями автора. После них вы возможно измените своё мнение об этой =)


        1. Nikolai46
          16.10.2019 19:02
          -1

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

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

          Если верить профайлу, парню 25-ть лет, а он успел стать королём, выгореть, потом опять зажечься.

          Пишет хорошо и интересно смотреть на бурление масс, но делитель надо выбирать правильно.


          1. Neikist
            16.10.2019 20:54

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


  1. noomorph
    15.10.2019 21:04
    +2

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


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


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


  1. Nomad1
    15.10.2019 21:09

    Буду знать, к кому обращаться для разгребания нашего легаси кода :)


    1. Nikolai46
      15.10.2019 21:17
      +1

      Надо выбрать небольшой проект (для которого есть тесты проверяющие его работоспособность) и устроить рефакторинг-баттл.

      С временным ограничением. Первый чекин через час. Второй и третий опциональные (через два и четыре часа соответсвенно).

      После этого сделать разбор и сравнение подходов, с голосованием за победителя. Хорошая обучающая статья получится.

      Победитель получает право разгребать легаси за солидное вознаграждение.


      1. dzsysop
        15.10.2019 21:32

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


        1. Nikolai46
          15.10.2019 21:38
          +1

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


  1. AllexIn
    15.10.2019 21:30
    +4

    Жену пришлось брать, потому что я рассказал ей про поездку за три часа до отъезда.

    Где связь внутри этого предложения?

    Естественно, не той ногой, ведь в дурацком автомате всего две педали, и мой мозг всё понял неправильно.

    Естественно? Расположение газа и тормоза не поменялись. Если вы хотели затормозить, то права нога жмет на тормоз, левая — на пустоту или тоже на тормоз. Какой ногой и куда вы промахнулись?

    Дикий рывок, тачка встала.

    Я всё меньше понимаю ситуацию с автомобилем… Почему она дернулась? Почему она встала?
    Дернулась — значит нажали на газ… Остановилась потому-что… Почему?


    1. lgorSL
      15.10.2019 22:25
      +1

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


      1. Sly_tom_cat
        15.10.2019 23:32
        -2

        Я когда первый раз на на своей новой машине с коробкой-автоматом поехал, то для себя решил, что буду левую под тормоз переучивать… Первое выжимание тормоза как сцепления завесило меня на ремнях (хорошо пристегнулся, а то мог бы мордой отформатировать руль и/или лобовое стекло).

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


        1. trueMoRoZ
          16.10.2019 05:44
          +2

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


          1. Sly_tom_cat
            16.10.2019 12:13

            Зачем одновременно? Первая и основная вещь при обучении левой тормозить на автомате — это БЕЗОПАСНОСТЬ.

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

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


        1. AllexIn
          16.10.2019 08:05

          НЕ надо так делать.
          На машинах с автоматом специально для левой ноги есть полочка. Левая нога полочку покидать не должна.


          1. Sly_tom_cat
            16.10.2019 12:04
            +1

            Во сколько учителей жизни сразу образовалось!!!

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


            1. Wizard_of_light
              16.10.2019 13:28

              Просто чтобы понимали. А то возьмут с вас пример, а решение-то не для среднего человека, ибо бенефиты тут примерно как у пистолета без скобы. От бедра стреляет быстрее, но есть нюанс…


              1. Sly_tom_cat
                16.10.2019 13:59
                -1

                А где вы увидели у меня что я другим советую?


                1. extempl
                  17.10.2019 06:33

                  Вы приводите опыт из жизни с профитом. Что ? лайфхак, что в свою очередь для кого-то может быть ? совет.
                  Для того, чтоб этого не было, придумали фразу "не повторяйте это дома" или "автор не несёт отвественности, что …".
                  Как-то так.


                  1. Sly_tom_cat
                    17.10.2019 10:16
                    -2

                    Ок. Только никому не признавайтесь что у вас есть член иначе сочтут что вы насильник.


        1. emerald_isle
          16.10.2019 16:57
          +1

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

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

          Что-то вдруг ещё страшнее ездить стало после таких высказываний…


          1. vadimr
            16.10.2019 17:14
            +1

            Это не нарушение.

            Ну и, чтобы два раза не вставать.

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

            Спортивное вождение автомобиля и выполнение приёмов высшего водительского мастерства подразумевают умение работать с педалью тормоза обеими ногами в зависимости от ситуации. Но это умение надо специально тренировать.


            1. Sly_tom_cat
              16.10.2019 17:35
              -1

              А разве инстинкта в критической ситуации скидывать правую газа у людей нет?

              Я вот довольно долго боролся с этой инстинктивной реакцией на скользкой дороге на переднем приводе… ибо там минимальный занос и брошенный газ — это полный абзац.

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


              1. vadimr
                16.10.2019 17:51

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


                1. Sly_tom_cat
                  16.10.2019 18:19

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

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

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


              1. vedenin1980
                16.10.2019 18:04

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


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


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


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


                1. Am0ralist
                  16.10.2019 18:18

                  Человеческий мозг однопоточный, он не может управлять двумя конечностями прямо в одно и то же время сознательно. Физически не может. <...>
                  Это легко стало понятно когда я пытался писать одновременно двумя руками, один и тот же текст — без проблем, один и тот же текст в прямой и зеркальном отражении — без проблем, пытаешься сознательно управлять двумя руками — сразу начинается бардак и сигналы идут одновременно к обоим.
                  Барабанщики смотрят на вас с недоумением.
                  Более того, человек может читать разными глазами разные страницы и запоминать текст.


                  1. vedenin1980
                    16.10.2019 18:32

                    Барабанщики смотрят на вас с недоумением.

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


                    Более того, человек может читать разными глазами разные страницы и запоминать текст.

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


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


                    1. Am0ralist
                      16.10.2019 20:07

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


                1. Sly_tom_cat
                  16.10.2019 18:34
                  -1

                  Нет и еще раз нет.

                  Сам мозг — очень сильно многопоточный агрегат (читайте тут статьи про работу мозга — недавно были очень интересные).

                  Кроме того, то что работает в критической ситуации — это не мозг, а инстинкты.

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

                  И именно такие, натренированные до автоматизма реакции, вполне себе работают даже в стрессовой ситуации.

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


                  1. vedenin1980
                    16.10.2019 18:47
                    +1

                    Ладно фиг с ним с мозгом.


                    Инерция вашей правой ноги на газе при экстренном торможении куда денеться? А при столкновении?


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


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


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


                    P.S. Есть хорошое высказывание в армии, что "уставы пишуться кровью, тех кто их не соблюдал". То же самое с ПДД, многие вещи почему все именно так — на собственном опыте можно попробывать только попав в ДТП. Просто поверьте — правила безопасного вождения не дураки писали.


                    1. Sly_tom_cat
                      16.10.2019 19:14
                      -3

                      О чем вы?!?

                      Какие такие g, какая инерция и движение вперед? Вы что подняли ногу с газа и больше ее не контролируете что позволяете ей обратно упасть?

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

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


                      1. vedenin1980
                        16.10.2019 23:41

                        доказали мне что мои 20 лет езды на автомате с левой на тормозе просто не оставили мне шанса на выживани

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


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

                        Где там? Наберите "педали автомат" в гугл картинках и увидите, что у разных автопроизводителей очень разные размеры педалей и маленькая педаль газа далеко не у всех. Так же во многих моделях справа от педали газа вообще нет никакого места (сделано, вероятно, что случайно мимо педели не промахнулись).


                        больше ее не контролируете

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


                        1. VolCh
                          17.10.2019 09:07

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

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


                        1. Sly_tom_cat
                          17.10.2019 10:41
                          -2

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

                          fixd.


            1. emerald_isle
              16.10.2019 18:13

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


              1. Sly_tom_cat
                16.10.2019 18:36

                По городу спортивное — не нужно, но нужно безопасное.


                1. AllexIn
                  17.10.2019 08:48
                  +2

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

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

                  Вторая и главная причина: левая нога должна быть опорой водителя во время движения, чтобы надежно держать его в кресле и чтобы обеспечить плотный контакт спины водителя с сиденьем. Зачем? Удерживать в кресле – чтобы водитель использовал руль не в качестве опоры :), а в качестве органа управления. А контакт спины с сиденьем нужен, чтобы чувствовать машину, ее динамику, начавшийся занос и т.д. Это одно из главных правил безопасного вождения, и просто основа гоночной езды. Так что

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

                  «На машине с двумя педалями можно тормозить левой ногой. Но во время движения на любой машине левая нога должна быть не над педалями, а слева от них, и упираться в пол. Такова основа безопасной езды. Поэтому выигрыша во времени при торможении левой ногой вы не получите. „
                  (с)https://kaminsky.su/blog/ezdim-s-avtomatom-a-nuzhno-li-tormozit-levoj-nogoj

                  Оставьте торможение левой ногой автоспорту.


                  1. Sly_tom_cat
                    17.10.2019 10:39
                    -1

                    Интересное мнение. Но это только мнение…

                    Но вы не разносите спорт и безопасность по разные стороны баррикады.

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

                    И еще раз: Я никого не призываю водить как я.

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

                    И это также мой выбор осваивать приемы безопасного вождения. Оставьте мне такое право в конце концов.


                    1. AllexIn
                      17.10.2019 13:14
                      +1

                      Но вы не разносите спорт и безопасность по разные стороны баррикады.

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

                      Но вы не разносите спорт и безопасность по разные стороны баррикады.

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


                      1. vadimr
                        17.10.2019 14:07

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


                        1. AllexIn
                          17.10.2019 14:10

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


                          1. vadimr
                            17.10.2019 14:20

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

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

                            И безусловно, что задний и передний привод – две большие разницы.


                      1. Sly_tom_cat
                        17.10.2019 16:55

                        А зачем вы тут еще и задний/передний привод притянули?
                        Для управления разными приводами радикально разные навыки нужны для управления в экстренных ситуациях.

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

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


          1. Sly_tom_cat
            16.10.2019 17:27

            Оба-на «юристы подтянулись»…
            Пунктик ПДД укажите пожалуйста который я нарушил?


  1. aleksandros
    15.10.2019 21:42

    Ну ведь сделали, сдюжили и это главное;)


  1. Gorthauer87
    15.10.2019 21:45
    +1

    На самом деле тут много проблем добавила импульсивность. Чуть больше бы планирования и было бы намного меньше проблем.


  1. JordanoBruno
    15.10.2019 22:27
    +1

    Статья прям по классике из раздела «Слабоумие и отвага» ).

    Подумал: «А какого хера? Да тут всё к чертям собачим надо выкидывать, и переделывать».
    Я сказал об этом лиду, а он, конечно, ответил: «Согласен, фигачь»

    Лид либо очень Вас не любит, либо как-то совсем не тянет на лида.

    Понятия хорошего и плохого кода очень размытые.

    Это просто от непонимания, на самом деле все довольно четко. Хороший код — тот, который  понятно структурирован, легко читается, легко сопровождается, документирован, можно несложно зарефакторить и предсказуемо работает. Все остальное — разной степени хреновый код, что впрочем совсем не повод бросаться на него с рефакторингом как Александр Матросов на амбразуру.

    В первый же день работы я просидел в офисе до часа ночи и переписал от силы процента два.

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

    Если я не понимаю, зачем нужен код, значит код не нужен.

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

    Я слушаю и понимаю, что мог просто сделать фичу и ходить по барам.

    Иногда надо наступить в говно, чтоб понять, насколько там глубоко. Все приходит с опытом ).


    1. EviGL
      16.10.2019 19:47

      Лид либо очень Вас не любит, либо как-то совсем не тянет на лида.

      Меня это тем более смутило в разрезе командировки. Зачем-то была необходимость приехать в Москву поработать с командой. При этом "я возьму вот эту заранее не запланированную задачу на весь срок командировки" разве не идёт вразрез с любой адекватной целью этой командировки?


      Даже если цель была зазнакомиться с локальной командой, то тем более нельзя было аппрувить затычную задачу, а надо было дать чеклист всех посиделок в барах, чтобы ни одной не пропустил :)


      1. VolCh
        17.10.2019 09:09

        Кто же знал, что автора так занесёт в рефакторинг.


  1. nemilya
    15.10.2019 22:38

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


    Или ещё круче — "переписать на новом крутом языке, что давно хотел попробовать", в этом случае риски увеличивается, но зато быстрое вхождение в новую тему)


    1. sim2q
      16.10.2019 06:04

      «переписать на новом крутом языке, что давно хотел попробовать», в этом случае риски увеличивается, но зато быстрое вхождение в новую тему)
      О, да!)
      — Как раз и новый не дорогой проц (SoC) вышел, хотел глянуть :)


    1. nmrulin
      16.10.2019 11:48

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


  1. aslepov78
    15.10.2019 22:56

    И я принял решение — если я не понимаю, зачем нужен код, значит код не нужен. Я с радостью стал отправлять этот цифровой мусор в преисподнюю.


    мда… большая ошибка конечно


  1. Kwisatz
    15.10.2019 22:56

    Безумству храбрых поем мы песню.
    Сам регулярно переписываю куски легаси и иногда эти куски ну очень большие, но с годами стараюсь делать это как можно реже. Нюанс в том, что иногда выбора просто нет, вот проще взять нырнуть с головой, базу с нуля, код на помойку и все переделать. Да крайность, да сам от таких мыслей отучаю тех кто менее опытен, но когда вокруг тебя код с функциями на на тысячи строк, когда суть этих расчетов вообще некому объяснить, вариантов просто не остается. У вас хотя бы тесты есть, а вот когда еще и их нет, да и код весь обмазан багами сверху донизу — вот тут наступает настояйщий хардкор.


  1. tangro
    15.10.2019 23:08
    +3

    Мораль из этой истории: надо развивать софт-скилы. Судя по поведению ребят в офисе — они всё знали с самого начала. Если бы автор в первый день с ними попил кофе, потом сходил на обед, а вечером в бар, то на утро второго дня уже знал бы все расклады и спокойненько себе пил пиво и гулял с женой по городу.


    1. hhba
      15.10.2019 23:30
      +2

      Плюсодин. Отсюда и легкость лида в пермите на подобный рефакторинг…


    1. eshirshov
      17.10.2019 08:20
      +1

      не отсюда ли «чудо» чудесно «безошибочного» первого запуска аврально написанного кода, написанного в зомби-режиме?


    1. Vladimirsencov
      17.10.2019 13:26

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


  1. Sly_tom_cat
    15.10.2019 23:21
    +1

    Напомнило мой приход на вторую в моей жизни работу.

    Новые инструменты, новая база — десктоп-приложение на пяток тысяч строк, деньги, бумаги, загрузка реестров торгов с биржи, клиринг, выгрузка платежек в ЦБ. Задача «банальная» — деноминация: нужно в денежную часть (т.е. в весь функционал) впилить копейки, которых рам отродясь не было. 15 Декабря мой первый рабочий день — 1 Января система должна работать с копейками (там первый рабочий-торговый день был то ли второго, то ли третье-го, 10-и дней тогда не гуляли). Засунулся в код, а там менять нужно дофига и больше. Ребята, что эту систему делали, загружены переделкой других систем, и на вопросы отвечают, но коротко… В мыле пилю с утра до позднего вечера (благо был не женат тогда). Последние переделки чуть не под звон курантов доделываю. Прихожу на работу 2-го или 3-го загружаю реестры — ок, запускаю клиринг- ок, выгружаю платежки — ок, отправляю в ЦБ...., а оттуда отлупы сыпятся — не готов ЦБ с копейками работать…

    16-го Января!!! ЦБ смог загрузить платежки с копейками.

    Я очень долго матерился.

    Но вписывался сам, сам и расхлебывал, а то что в ЦБ все сроки продинамили так на это расчета быть не могло… пилить все равно надо был что бы до звона курантов все готово было.

    А под следующий новый год я снова искал работу — по осени был обвал ГКО/МКО и зарплата там упала ниже плинтуса.


    1. vadimr
      16.10.2019 16:34

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

      Но, с другой стороны, жизненный опыт часто подсказывает, что если мы такие умные и не успеваем, то наши незадачливые контрагенты не успеют точно.

      image


  1. Neikist
    15.10.2019 23:39
    +1

    Стиль, имхо, с каждым разом все лучше. Особенно концовка «порадовала» с выбрасыванием кода) Спасибо.


  1. x67
    15.10.2019 23:40

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


  1. Psychosynthesis
    16.10.2019 00:48

    Я тоже недавно занимался рефакторингом — переписывал самопальный рендер на JS на более вменяемый на React. Казалось бы, задача сильно проще, чем весь весь проект переписать, но там всего около 2к строк в сумме получилось, а заняло почти два месяца.

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

    А вот тут:

    Мне сказали, этот код больше никому в целом мире не нужен, отправлен на свалку истории.

    Я прямо почувствовал всю боль автора. У меня было нечто похожее на одном из предыдущих проектов, хотя там не так скоро и фатально всё произошло. Ух как это жизненно, сочувствую.

    Чуть в тему холивара про личную жизнь
    Честно говоря, я согласен с тезисом «личная жизнь это не ваше собачье дело», но всё же, раз уж вы об этом сами в статье написали, удивляет почему вы так болезненно на все замечания реагируете. Больше всего вызывает удивления то зачем вам её с собой брать было. И скандал дома, когда ты делаешь работу, а не по барам шляешься это для меня ещё более странно — вот же у людей взгляды на отношения… Моя женщина, например, только сочувствует мне, если приходится на работе задерживаться.


  1. RaFaeL-NN
    16.10.2019 00:57

    Так и не понял, почему вы задачу оценили в неделю, если весьма слабо представляли, что там внутри


  1. Nengchak
    16.10.2019 05:00
    +1

    Разбираются и переживают слабаки, мужчина знает чего хочет, и делает, не задавая лишних вопросов.

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


    1. ganqqwerty
      16.10.2019 18:04

      Может оно только в вопросах кода включается?


    1. KvanTTT
      17.10.2019 03:03

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


  1. ICELedyanoj
    16.10.2019 05:48

    Красиво написано!
    Узнал себя. Тоже потратил кусок своих нервов на глубокий рефакторинг проекта. В отличии от автора статьи — проект я увидел впервые ровно за 2 дня до принятия решения о рефакторинге. Времени ушло побольше.

    • в процессе рефакторинга случилась пара релизов
    • код был почти до последней строки переписан, некоторые методы были ускорены в тысячи и десятки тысяч раз (и да — они прямо влияли на юзер-френдли)
    • структура базы данных была полностью нормализована
    • проект был наконец-то портирован под макось (что обещали ещё за год до моего прихода на проект). А портировать никак не могли, так как в коде была полная вермишель из юайки, базы данных, бизнес-логики и нативных вызовов. Без виндовой юайки приложение было неработоспособно в принципе.
    • количество саппорт-тикетов стало уменьшаться с десятков в неделю до единиц в месяц

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


  1. Anton_Zh
    16.10.2019 06:12
    -1

    А мне статья не понравилась! Она совсем не про совершенный код и рефакторинг. Это очерк из жизни конкретного разработчика, наполненный чувствами, эмоциями и переживаниями. Человек просто ими поделился, вот и всё.


    1. lappy
      16.10.2019 11:25

      Да. Автор зачем-то вывалил на нас подкаблучные отношения с женой и неумение пользоваться в 2019 году коробкой автомат. Остальная часть истории это «ухххх какой мне говнокод попался! я разгребал-разгребал-разгребал — разгрёб!» в стиле джуна, который проработал полгода и мнит себя титаном разработки.


  1. potan
    16.10.2019 07:49

    F# только в картинке дла привлечения внимания?


    1. 0xd34df00d
      16.10.2019 17:08

      Ещё в тегах (как обычно).


    1. fillpackart Автор
      17.10.2019 14:42

      А что, есть запрос на статью про F#?


      1. potan
        17.10.2019 16:54
        +1

        F# есть на картинке и в тегах. Я ожидал, что в статье он тоже будет.
        Мне бы было интересно почитать.


  1. YetAnotherSlava
    16.10.2019 08:03

    На аутстафф жену брать? Детей? В Икею ехать в изменённом состоянии сознания?

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

    Это очень хорошо, что вы в итоге уволились.


    1. Muzzy0
      17.10.2019 09:53
      +1

      В Икею ехать в изменённом состоянии сознания?
      Я, например, с женой (а с детьми — тем более) в нормальном состоянии в Икею не поеду. Чтоб я на такое согласился, я таки должен быть в изменённом состоянии сознания :))))


  1. korsarer
    16.10.2019 09:01
    +1

    fillpackart Спасибо, что поделились своим опытом! Было интересно читать. Честно говоря я ожидал, что в конце ваш код не заработает. И было удивительно, что он не просто заработал, но и в целом улучшил работу всего продукта. Конечно обидно, что эти сраные манагеры опять подложили свинью и закрыли проект, не предупредив вас заранее. Но как вы верно подметили — этим таском вы доказали свою профпригодность. Как одна из дополнительных наград — вы получили новый опыт разработки в режиме «Extremely hard» и к сожалению познакомились с жестокостью грязного бизнеса.

    Мне сказали, этот код больше никому в целом мире не нужен, отправлен на свалку истории.

    Честно говоря, когда я прочитал это предложение, то не нашлось слов кроме «Пи**ец...» В общем крепись мужик, это была славная битва и она не была проиграна =)


    1. VolCh
      16.10.2019 10:06

      с жестокостью грязного бизнеса.

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


    1. Neikist
      16.10.2019 11:04
      +3

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


      1. Corosan
        16.10.2019 13:01

        Сказка ложь, да в ней намёк… :) Не важно, вымысел это, или нет. Ситуация очень жизненная. Это как какое-нибудь художественное произведение — важно, что хотел сказать автор, а не то, были ли у истории реальные прототипы.


  1. kantocoder
    16.10.2019 09:31

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

    Желаю Вам найти нормальную работу на нормальных заказчиков.


  1. Kutlic
    16.10.2019 09:31

    Сам такой же, главное начать) сочувствую


  1. vladinozem
    16.10.2019 09:31
    +1

    Классная статья. И хватит придираться к словам автора о семье. Ну написал он и написал. Вам-то какое дело? Это его право


    1. Barbaresk
      16.10.2019 16:29

      Ну он написал, а его прокомментировали, тоже имеют как бы право.


  1. Aleks_ja
    16.10.2019 09:43

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


    Полагаю, это то, что останавливает других людей от того, чтобы стать программистами, либо хорошими программистами.


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


    1. kantocoder
      16.10.2019 15:15

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

      Вспомнилось: "драться за дело, которое обречено на провал есть высшая честь офис-самурая."


  1. Sybr
    16.10.2019 09:45

    Если программист, плохо знакомый с кодовой базой смог отрефакторить его за 2 недели, значит код в целом был нормальный.


    1. Muzzy0
      17.10.2019 13:54

      Скорее, понятный или читаемый, чем нормальный.


  1. igorgusarov
    16.10.2019 09:57

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


  1. badmilkman
    16.10.2019 10:28

    Остановит ли эссе на тему собственной глупости следующее поколение джунов?

    P.S. Добро пожаловать в профессию кодера разработчика.


    1. Corosan
      16.10.2019 12:58

      Нет, не остановит. Это как поход к гадалке или взгляд в будущее через машину времени. Вроде тебе всё объяснили, всё понимаешь, а сделать с собой ничего не можешь :)


  1. Eldhenn
    16.10.2019 10:52
    +1

    Как-то странно. Огромный проект, огромное легаси, которое не разбиралось, за первые сутки 2% работы по оптимистичным оценкам, ночью с женой в Икею до четырёх утра (дети где в это время были?), а потом в последний день всё волшебным образом доделалось, собралось и заработало.


  1. Whuthering
    16.10.2019 11:21

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


  1. Mmmbelove
    16.10.2019 11:27

    Когда-то на заре карьеры прочитал программисткую мудрость: "Если понимаешь, что заходишь в болото — развернись и найди другой путь". У меня бывали случаи, когда ситуация начинала развиваться как у вас, но ревертил и находил более простое решение.


  1. Krasovsky
    16.10.2019 11:32
    +1

    Пошаговая инструкция «как загнать самого себя в капкан».


  1. nmrulin
    16.10.2019 11:43

    А ведь вполне возможно, если бы код перешёл кому-то дальше, он бы этот код тоже назвал говнокодом и тоже стал бы рефакторить…

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


  1. Corosan
    16.10.2019 12:56

    Интересное чтиво! Может буду немного резковат, это был похвальный и глупый поступок. Но все программисты делятся на тех, кто так сделал хотя-бы раз, и тех, кто так сделает обязательно (если не уйдёт в другую отрасль). Я тоже через это проходил. Да и сейчас приходится каждый день иметь дело с разным уровнем легосятины и очень аккуратно выбирать, что можно отрефакторить и где границы.

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

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

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


    1. Muzzy0
      17.10.2019 13:57

      Очень интересный вопрос, который тут уже поднимали, и который я себе задаю всё чаще — а скольким людям захочется отрефакторить мой код.
      А им и приходится. Тем не менее, я не раз слышал от этих людей, что мой код, возможно, самый культурный и аккуратный во всём проекте :)


  1. sashavoloh
    16.10.2019 13:24

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


  1. apro
    16.10.2019 13:32

    Когда я вернулся домой, меня ждала новость — проект работает

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


    1. JustDont
      16.10.2019 14:08
      +2

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

      Тесты не увеличивают правильность вашего кода и не уменьшают её.


      1. apro
        17.10.2019 00:46

        Из личного опыта. Как-то заказчик в ТЗ прописал что хочет покрытия тестами, так как после основного этапа разработки собирается сопровождать разработанное ПО своими силами. И в проекте было полно тестового кода не только юнит тестов, но эмулирующих работу с GUI и т.п… Но тесты начали приносить пользу (раз где-то в неделю отлавливая баги) только когда доля покрытого тестами кода стала превышать 80% покрытия.
        А до этого момента автотесты прогоняемые CI помогало найти ошибку до начала ручного тестирования только считанное количество раз.


    1. Drag13
      16.10.2019 15:05

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


      Во-первых не реалистичное начало:


      Жену пришлось брать, потому что я рассказал ей про поездку за три часа до отъезда

      Т.е. жене рассказали о коммандировке за два часа и она внезапно потребовала что бы ее взяли с собой вместе с детьми? Маловероятно, но допустим. Есть люди авантюрного склада характера. Но такие в походах обычно не ноют, а молча тащят рюкзак. А тут прямо истерики и "холодный кофе".


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


      И маловероятная концовка. За 2 недели обойти все костыли и правильно их отрефакторить — ну шансов очень мало. Максимум это успешная сборка (но герой об этом даже не знал пока не попробовал в самом конце). Что странно, потому что первое что ты пробуешь после рефакторинга — это тесты или хотя бы сборка.


      Так что по-моему это или обработка или вообще литература.


    1. defuz
      16.10.2019 22:57

      Предполагаю что автор писал на F#. Для строго типизированных языков с уклоном в функциональщину, с алгебраическими типами данных и отсутствием null такое не редкость.

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

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


      1. Neikist
        16.10.2019 23:21
        +1

        Нет. Автор просто известен тем что пишет на C# но любит F# в теги добавлять и на КДПВ.


  1. dss_kalika
    16.10.2019 14:10

    Если одного понимания как должно работать достаточно для того что бы переписать всё и это понимание содержалось всего в одном программисте — не так уж и велик проект и плох код был )

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


  1. Fr0sT-Brutal
    16.10.2019 14:21
    -1

    Кул стори.
    Мейн фейл — это пуллить вайфу, тем более с юнлингами, в джобовый трип.
    Секондари фейл — рефакторить хип олдового буллшита без весомо пейеблового таска.
    Энивей, респект топикстартеру за скиллы.


    1. Fr0sT-Brutal
      16.10.2019 14:46
      +1

      Эх, не ценит народ тонкий юмор…


  1. sarapinit
    16.10.2019 14:34

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


    1. Neikist
      16.10.2019 15:35
      +1

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


      1. sarapinit
        16.10.2019 15:43
        +1

        Если это художественный вымысел, то можно его поместить в хаб «Читальный зал». Но если это действительное состояние человека, то ему нужна помощь. Что-то явно идет не так.


        1. Neikist
          16.10.2019 15:47

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


          1. sarapinit
            16.10.2019 15:54
            +1

            От таких текстов создается впечатление, что в разработке всё плохо и всем плевать. Короче не верьте в это. Есть хорошие проекты, где и за кодом следят и к людям хорошо относятся и тесты пишут и договариваются. Если проект не такой, то надо поискать другой. Ну а если 5 подряд не такие, то надо искать причину в своём подходе и пытаться получить от людей адекватную обратную связь. От коллег, психологов, врачей и прочих специалистов.


            1. dzsysop
              16.10.2019 16:16

              От таких текстов создается впечатление, что в разработке всё плохо и всем плевать

              У кого как. У меня создается впечатление что я не один. И что надо два раза подумать прежде чем ввязываться в драку со многими неизвестными.
              Короче не верьте в это.

              Почему? Вы утверждает что это ложь? По-моему верить надо. И надо делать выводы, а не исетрить что «ВСЁ ПРОПАЛО!».
              Есть хорошие проекты, где и за кодом следят и к людям хорошо относятся и тесты пишут и договариваются. Если проект не такой, то надо поискать другой.

              С этим автор и не спорил. Просто когда все хорошо, то писать особо не о чем :-). Все молча работают и пьют пиво по вечерам и рассказ получился бы скучным.
              Ну а если 5 подряд не такие, то надо искать причину в своём подходе и пытаться получить от людей адекватную обратную связь. От коллег, психологов, врачей и прочих специалистов.

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


              1. KvanTTT
                17.10.2019 03:12

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

                Это неправда, можно нескучно писать о том, как все хорошо, попробую это скоро на собственном примере :)


            1. Eldhenn
              16.10.2019 21:19

              Ну почему. У меня вот сейчас огромное легаси. Без тестов вообще, и их туда не добавить, потому что совсем легаси. Процедурное на 99% и с кучей нарушений MVC. На полумертвом языке. И я его не первый год разгребаю, потому что рефакторить некогда, надо постоянно дорабатывать под новые требования бизнеса.


            1. KvanTTT
              17.10.2019 03:10

              От таких текстов создается впечатление, что в разработке всё плохо и всем плевать.

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


            1. VolCh
              17.10.2019 09:18

              Ну вот автору разрешили потратить две недели на рефакторинг. Где вы нашли, что всё плохо и всем плевать?


              1. sarapinit
                17.10.2019 10:12

                В своих рассуждениях я учитываю предыдущие посты автора.


      1. VolCh
        17.10.2019 09:17

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


  1. IvanIvanoff
    16.10.2019 14:34
    +1

    И Москва — говно, и код- говно, и москвичи с их барами — говно, и автор- Д`артаньян
    Молодец, показал сраным москвичам и их мамашам как надо работать!


  1. zzoond
    16.10.2019 14:55

    Читал как про себя.
    «С первого взгляда все выглядело просто, но потом мы увидели код !»


  1. ra2003
    16.10.2019 16:04

    Статья напомнила давнюю историю, как пришлось командовать штабом блока "МТМ" по Псковской области в госдумовские выборы (тоже командировка за 2300 км). Офис сняли над городской прокуратурой Пскова. Таки да, веселуха встречается. Но жену взять не додумался.


  1. emerald_isle
    16.10.2019 16:39

    говорить жене, что я отличаю запах травы от тараканьего яда

    Но почему? А жена запах травы не различает что ли? Как это можно перепутать?

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

    В двадцати минутах или в ста двадцати минутах?.. Разве ожидание такси и поездка по пробкам сильно быстрее?

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

    Пять баллов!


    1. dss_kalika
      16.10.2019 18:53
      +3

      Но почему? А жена запах травы не различает что ли? Как это можно перепутать?
      К примеру, если никогда не курил травы и не знаешь как она пахнет.


      1. Neikist
        16.10.2019 20:56
        +2

        Ну вот я не курил, но как пахнет знаю))


        1. dss_kalika
          17.10.2019 09:54

          А я курил и как пахнет не узнаю всё-равно. =)


      1. emerald_isle
        17.10.2019 12:12

        Я тоже никогда не курил, но пожалуй слишком часто «слышу» этот запах на улице. Раздражает. Немного (запах табака, пожалуй, раздражает сильнее, но это индивидуально). Перепутать его сложно с чем-то другим.


  1. pavelkolodin
    16.10.2019 16:39

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


    1. Stopy
      17.10.2019 19:37

      О, я тут живу.

      Но не мойщица поддонов
      А разработчик на том самом заводе


  1. Akon32
    16.10.2019 17:02
    +1

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


    А 15к строк — не так уж много. Если уж мериться длиной кода, то когда-то одним из первых моих заданий было переписать кое-какую фичу в системе и переключить на использование нового API кодовую базу на ~1М строк.


    1. Muzzy0
      17.10.2019 13:59

      Если уж мериться длиной кода,
      то круче тот, у кого код оказался меньше ;)


  1. gban
    16.10.2019 17:33

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


  1. Tufed
    16.10.2019 17:51
    +1

    От создателя «нас не просили, но Мы написали самый полезный код в своей жизни, но его выкинули на помойку. Вместе с нами » продолжение «меня не просили, но Я в одиночку отрефакторил 15 тысяч строк легаси. Это были худшие две недели в жизни и опять выкинули на помойку „. Может между этими случаями есть что-то общее?
    Я не хочу обидеть автора, вероятнее всего он очень крутой программист, даже гений. Но гениев не очень любят за то что ими очень трудно, почти невозможно, управлять. Дали задачу одну, мааахонькую, на пару дней. В итоге делал совсем не то что задали, и две недели.


  1. vsantonov
    16.10.2019 18:05
    -1

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

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


  1. ganqqwerty
    16.10.2019 18:07

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


    1. JustDont
      16.10.2019 20:06
      +1

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


    1. defuz
      16.10.2019 23:39
      +1

      Идея для стартапа: Remote Sensei за $10 в месяц, который звонит вам каждый день в указанное время и спрашивает какую задачу мы решаем. Если ваша интонация не убедительна, задает уточняющий вопрос – «чтобы что?».

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


      1. ganqqwerty
        17.10.2019 00:54

        Ещё нужно уберизировать оплеухи, для делюкс версии


  1. Gargo
    16.10.2019 18:48
    +2

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


  1. PerlPower
    16.10.2019 19:28
    +1

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


    1. ganqqwerty
      16.10.2019 23:08

      причем ведь в итоге рефакторил в одиночку


    1. VolCh
      17.10.2019 09:23

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


  1. Samurai23
    16.10.2019 23:43
    +3

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


    Тоесть муж «рвёт» жопу на новом месте, работает до часа ночи, в надежде на заработок и перспективу для обеспечения семьи. В это время его жена приезжает на всё готовое, весь день сидит дома, хотя могла бы и сама вам помочь новую хату найти.
    И в итоге, вместо слов поддержки и ужина уставшему и затраханному мужу, получает заслуженный скандал! facepalm

    У меня вопрос, как можно жить с человеком, который вас реально за раба бесправного держит, не уважает и практически презирает? Нашлась тоже королева, сидит у вас на шее, не работает и ещё ноги вытирает об васк?
    И самое страшное, что вы считаете это нормальным, т.е скандал вы заслужили…
    Не обижайтесь, я много каблуков встречал, но до такой степени не уважающих себя людей видел не часто.


  1. os9
    16.10.2019 23:43

    Жена не работает, дети в садик/школу не ходят, что так просто взяли и поехали — не в отпуск, а в командировку?
    Нет, это все художественный вымысел. Стеб, чтоб некоторые посмотрели на себя и свои ценности со стороны. «Деревня дураков» на современный IT-лад.


    1. ganqqwerty
      17.10.2019 00:19
      +1

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


  1. Arkanium77
    16.10.2019 23:43
    +1

    Москва не такой уж жуткий город, ну правда. У нас тут довольно мило.


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


  1. vism
    16.10.2019 23:54
    +1

    Я читал и как будто попал в кошмарный сон…
    Сам недавно рефакторил код 60 часов, но хотя бы дома и оценка была с запасом…

    Хоррор блин, пойду попью водички…


  1. vadimr
    17.10.2019 02:13

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


  1. ehots
    17.10.2019 04:54

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


  1. shahbazyan
    17.10.2019 09:13

    Присоединюсь к предыдущим ораторам.
    Во-первых, брать жену в командировку идея сама по себе дурацкая. Это блин командировка, а не отпуск.
    Во-вторых, раз уж она с Вами увязалась, если ее нужно всюду водить за ручку и она не способна в случае таких экстремальных задержек мужа:
    — самостоятельно в Москве (!)* организовать досуг для себя и детей;
    — не устраивать скандалов, а обеспечить комфортное возвращение мужа домой и послужить надёжным тылом, как и полагается хорошей жене
    То стоит задуматься, а тот ли это человек, с которым хочется проводить годы и годы до смерти (причём Вашей, по выбранной ею модели поведения она Вас точно переживёт).
    > меня ждал заслуженный скандал
    Тут вообще всё плохо. Если Вы реально считаете, что этот скандал Вы действительно заслужили, а не жена отвратительно воспитанная разбалованная мадам, то у меня плохие новости.
    — в Москве (!)* — я не случайно выделил. Всё же это не условный Задрищенск, можно найти ивент по душе и развлечь и себя, и детей вместо сидения в бетонной коробке, если включить голову. Да хоть в ЦПКиО тот же самый съездить погулять.


    1. EvilBeaver
      17.10.2019 09:27

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


      1. shahbazyan
        17.10.2019 10:43

        Такая жена и есть нырок в говно :)


    1. VolCh
      17.10.2019 09:28

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

      А хорошему мужу что полагается? Служить надёжным фронтом?


      Если Вы реально считаете, что этот скандал Вы действительно заслужили

      Тут всё зависит от договренностей/обещаний перед поездкой. Если автором было сказано "Я там буду работать по рабочим дням с 9 до 18, а всё остальное время будем вместе", то может не скандал, но какое-то порицание он точно заслужил за невыполнение обещания. Тем более, что это не какие-то форс-мажоры на работе, это было исключительно его желание.


      1. shahbazyan
        17.10.2019 09:46

        > А хорошему мужу что полагается? Служить надёжным фронтом?
        Он им (фронтом) и служил. Пахал как трактор Беларусь ради семейного благополучия. А жену в командировку мужа, собственно, никто и не приглашал. Сама напросилась, и чего теперь скандалить, совершенно неясно.
        > Тут всё зависит от договренностей/обещаний перед поездкой.
        Там договорённостей не было и быть не могло, как я понял :) Жена потащилась в поездку, узнав о ней часа за 3 до выезда.


        1. VolCh
          17.10.2019 11:00

          Могли быть договоренности, как и не факт (может пропустил, конечно), что сам напросилась. Вполне представляю диалог:


          • мне в командировку надо ехать через три часа, могу вас взять — всё (или почти всё) на шару
          • ты сдурел?! три часа!
          • давай-давай собирайтесь, халява же
          • а что мы там делать будем, ты же работать будешь?
          • ну я только с 9 до 18 по рабочим дням, всё остальное время с вами. Будем по Москве гулять, ходить везде, Москва же!
          • ну ты и мёртвого уговоришь...


      1. Samurai23
        17.10.2019 11:53
        -3

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


        1. 0xd34df00d
          17.10.2019 21:23

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


          1. Cerberuser
            18.10.2019 07:03

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


        1. fillpackart Автор
          17.10.2019 21:26
          -1

          Тварь? Мужик, ты что-то совсем берега путаешь.


    1. Samurai23
      17.10.2019 12:15
      +1

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


      1. alexkmbkdr1
        17.10.2019 13:47

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


  1. Muzzy0
    17.10.2019 09:47

    Снимаю шляпу. Обидно, что отправилось в мусорку…
    И неправильная декомпозиция с самого начала. Я имею в виду, брать семью в командировку, когда изначально знаешь, что надо ещё вечерами работать. Опять же, это неправильно — работать работу вечерами.
    С другой стороны, основная задача (фактически) была доказать, как автор крут. Как минимум, себе, как максимум — коллегам.
    И, прошу прощения, не могу удержаться:
    image


  1. Samurai23
    17.10.2019 12:04

    Автору, судя по отношению жены к Вам, необходимо провести ДНК тест ваших детей, очень вероятно, что они не ваши…


  1. alexkmbkdr1
    17.10.2019 13:04

    Наглядная реклама холостяцкого образа жизни, и антиреклама семейного.


    1. Muzzy0
      17.10.2019 14:00

      Наглядная антиреклама неорганизованного образа жизни. И, как минимум, одного эпизода, в котором не получилось разделить личную жизнь и работу.
      А ещё наглядная антиреклама излишнего и необоснованного оптимизма.


  1. dunkelfalke
    17.10.2019 17:20
    +1

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


  1. perlestius
    17.10.2019 17:32
    +1

    Читая статью, представлял себе, как звучит текст в исполнении закадрового голоса из фильма "Город грехов". Прям завораживает...


  1. StraNNicK
    17.10.2019 18:37
    +4

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

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

    У меня, как и у автора случались и случаются в жизни факапы, дети неидеальны и способны за день сожрать мозг родителям, я могу внезапно сорваться и наорать на жену, жена может внезапно сорваться и вынуть мне всю душу. Мы обычные, в сущности, люди. Не самые хорошие, не самые плохие.
    Но мне наш брак нравится. И дети, внезапно, тоже.

    «Ах-ах, зачем автор тут пишет о семье?»
    Да затем, чтобы показать уровень внезапного ада, хикки вы непонятливые.

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

    В общем, держись там


    1. 0xd34df00d
      17.10.2019 21:26

      «Ах-ах, зачем автор тут пишет о семье?»
      Да затем, чтобы показать уровень внезапного ада, хикки вы непонятливые.

      Когда семья становится частью ада, то, ну, что-то происходит не так.


      1. StraNNicK
        17.10.2019 23:30
        +1

        это жизнь, бро. Сама жизнь иногда становится частью ада.
        Что ж теперь, стреляться?

        Семейная жизнь — часть жизни. Если ВСЯ семейная жизнь — ад, то да, что-то происходит не так. Если ты ждёшь, что в семейной жизни ВООБЩЕ ада не будет, то прости, маленький хикки, тут взрослые про какие-то скучные вещи говорят.


        1. 0xd34df00d
          18.10.2019 00:03

          Что ж теперь, стреляться?

          Нет, осознавать, что твоя жизнь в твоих руках, и менять ад на неад.


          Если ты ждёшь, что в семейной жизни ВООБЩЕ ада не будет, то прости, маленький хикки, тут взрослые про какие-то скучные вещи говорят.

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


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


          1. StraNNicK
            18.10.2019 00:26
            +1

            Это само собой. Я просто как-то осознал, что иногда либо не всё зависит от меня, либо я сам что-то не то делаю.
            В статье, вроде, ситуация «хотел как правильно, а получилось внезапно вот».

            Бывает, чо.


            1. 0xd34df00d
              18.10.2019 00:37

              Именно так.


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


      1. StraNNicK
        17.10.2019 23:32
        +1

        и, да, привет 0xd34df00d.
        Я тоже тот ещё затворник и сто лет не видел тебя со времён жуйка.


        1. bogolt
          17.10.2019 23:57
          +2

          Ну так и ты из жуйка исчез давным давно. Привет Странник. Привет Дедфуд.


          1. 0xd34df00d
            17.10.2019 23:58
            +2

            А меня там забанили :(


            Чего в c_plus_plus@ не бываешь? Даже Миха раз в год-два появляется.


        1. 0xd34df00d
          17.10.2019 23:58
          +2

          Да уж, сколько времени-то прошло. Забавно иногда вспоминать какие-то из своих тогдашних идей и видений будущего и, ну, смеяться.


          1. StraNNicK
            18.10.2019 00:26

            это да.


  1. saneea
    17.10.2019 19:36
    +1

    Закидайте меня минусами, и прости меня автор, если я всё же ошибаюсь но…

    мне кажется что вся эта история — чистый вымысел. Люди, которые не знакомы с IT-никами могут услышать такую историю и похихикать «какие же эти компутершики странные». Но на хабре наверное 99.999% пользователей — IT-ники, и мы знаем, какие мы: мы +- логичные люди, +- умеем планировать, +- знаем когда нужно остановиться, если зашли не туда. А в этой статье просто сборник фрагментов, как я (и все мои коллеги и знакомые IT-шники) никогда бы не сделал.


    1. JustDont
      17.10.2019 21:51
      +2

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


    1. KvanTTT
      17.10.2019 21:53
      +2

      Но на хабре наверное 99.999% пользователей — IT-ники, и мы знаем, какие мы: мы +- логичные люди, +- умеем планировать, +- знаем когда нужно остановиться, если зашли не туда.

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


      1. vadimr
        17.10.2019 22:21
        +1

        Да и в коде у многих с логикой не особо.


    1. StraNNicK
      17.10.2019 23:46
      +1

      Я, с одной стороны согласен. Там много вопросов к организации, к семейной жизни, много к чему.
      А с другой — вот мне щас 41. Я, вроде, тоже IT-шник, вроде не самый плохой, вроде умею в планирование и всякое такое.

      Я такую дичь иногда делаю.
      Мне просто уже довольно много лет, чтобы не стесняться в этом признаться.
      Жизнь меня научила одному — все мы несовершенны и иногда творим очень странные вещи. Хоть IT-шники, хоть нет.


  1. SbWereWolf
    18.10.2019 02:00
    +1

    У автора определённо литературный талант, прочитал на одном дыхании, во многом узнавал себе.
    Автор, да и фиг с ним что твой идеальный код ушёл в утиль, за то ты можешь собой гордиться что ты смог проделать титаническую работу и существенно повысить качество этого кода.
    У тебя появился ОПЫТ, ты применил НАВЫК, который сможешь с меньшим успехом применить в более везучем проекте.
    Автор ты молодец!


  1. an24
    18.10.2019 07:49

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


    1. Eldhenn
      18.10.2019 09:12

      Ну как вам сказать. «Так исторически сложилось». Кто-то написал^W наговнокодил систему 15 лет назад. Ну то есть 15 лет назад уже надо было по-хорошему разделять логику и представление, но не сложилось. Да и задачка-то изначально была примитивная. Потом чуть-чуть добавили. Потом ещё чуть-чуть. Потом разрослось. Потом за это отвечали люди, которым лень было что-то менять. А ещё бизнес постоянно давит — давай-давай, нам через неделю нужна рабочая подсистема. Потом бизнес НЕМНОГО изменяется, маленький свечной заводик превращается в крупное предприятие по производству осветительных систем…


      1. an24
        18.10.2019 09:24

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


        Хотя иногда встречаешь программу от слова "ну совсем"! Типа 10 Kloc в одном модуле! Но это, скорее, редкость, чем правило. Обычно видишь работу приличного чувака, зажатого в тиски времени, который подумал что рефлексия ему поможет много чего не писать (кстати, десять лет назад так и думали вполне себе приличные разработчики).


        1. Eldhenn
          18.10.2019 13:24

          Посчитал строки в одном магическом/божественном файле. 3200. Ещё не совсем ужасно :)


    1. Nomad1
      18.10.2019 09:53

      Почти любой код, который не развивается, был утерян автор и/или поддерживается в ключе «надо срочно добавить фичу, потом почистим», становится говнокодом — требования к нему растут, костылей становится все больше, а заодно и технологии меняются, как и подходы и знания разработчиков. И глядишь — 10 лет назад было красиво и хорошо, а сейчас уже можно было бы и async вместо TheadPool использовать, и надо бы убрать собственные аналоги Tuple, Parallel.For, System.Numerics.Vectors и еще вагон несовместимых вещей. И это еще лишь в C#/Java, а в случае С++ 98 так и половину программы можно выкинуть.
      И хорошо если рефакторишь потом свой же код, а не чей-то еще, с непонятной логикой, стилем и тараканами. У меня вообще был забавный расклад: я научил джуна писать полностью в моем стиле, его код в большом проекте не отличим от моего. И когда через 15 лет дошло до переиспользования я смотрел как баран на новые ворота и никак не мог вспомнить, почему я такое написал и что имел в виду, хотя явно же код выглядит как мой, только логика ускользает. Уже позже пришло понимание, что это не склероз, просто логика не моя :)


    1. JustDont
      18.10.2019 10:00

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

      Так тут вроде ни в статье, ни в комментах не утверждает никто, что он говнокод исключительно устраняет, и никогда не создаёт.

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


    1. Am0ralist
      18.10.2019 10:11

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


    1. eumorozov
      18.10.2019 11:59

      Разные причины. Иногда смотрю на свой код 5-10 летней давности и думаю: «Как я мог такое написать? Это же нечитаемо». Иногда нет времени, сверху давят: «Эта фича нужна вчера, давай быстрее, без размышлений, без тестов», и делаешь как попало, как можно быстрее, костыля везде. Когда болеешь или выгорел, код получается на порядки хуже.


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


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


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


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


      1. JustDont
        18.10.2019 12:20

        те, кто нанимают не всегда могут отличить плохого от хорошего — формальной методики не существует

        Я даже больше скажу — не у всех есть деньги и задачи для хороших. Многим достаточно и плохих, или как максимум, «нормальных».


        1. eumorozov
          18.10.2019 12:29

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


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


          1. Neikist
            18.10.2019 12:35

            Ну а если добавить к этой статистике бизнес необходимость из за которой разработчики любого уровня экономят на качестве — становится еще грустнее.


            1. fillpackart Автор
              18.10.2019 12:39

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


              1. Neikist
                18.10.2019 12:56

                Я скорее про случаи «сделай чтобы не падало с NullPointer и пофиг что бизнес логика поломается если просто проверку на налл влепить» и прочее в таком стиле, а так же про случаи чуть помягче. Короче про случаи когда важны только сроки.
                Или вот бывает видишь что код будет написан 1 раз, функциональность расширяться не будет ближайшие несколько лет, но сделать чтобы работало стоит X, а сделать более менее хорошо 5X. Озвучиваются риски менеджеру, а он уже решает, что выгоднее, сейчас за X а в будущем уже за 10X переписать либо нужные правки внести, либо сейчас за 5X а в будущем за X вносить правки.


                1. fillpackart Автор
                  18.10.2019 14:09

                  Честно говоря, я не покупаю эту историю с озвучиванием рисков, и типа таким грамотным взвешиванием. Обычно к тебе приходит чувак, которому завтра нужна фича, ты говоришь что можно накостылить, но будет говно. Он спрашивает, а сколько времени если норм делать? И вот на самом деле он уже всё решил. Если срок хорошей переделки будет хотя бы на час больше, никто её не выберет. Ну и это довольно логично, ведь менеджеров не оценивают по качеству кодовой базы. Поэтому я считаю — нужно врать. Врать по разному и всё время, выкраивая себе новые и новые часы на рефакторинг. Потому что добавление фич к херовой кодовой базе её всегда ухудшает, в не зависимости от того, насколько хорошо ты эту фичу кодируешь.


                  1. Neikist
                    18.10.2019 14:12

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