Как стать автором
Обновить

Я в одиночку отрефакторил 15 тысяч строк легаси. Это были худшие две недели в жизни

Время на прочтение 10 мин
Количество просмотров 100K
Совершенный код *Проектирование и рефакторинг *Карьера в IT-индустрии
Всего голосов 427: ↑369 и ↓58 +311
Комментарии 401

Комментарии 401

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

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

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

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

Вот самый дикий кейс, что я там встретил выглядел примерно так
Есть методы. которые забирают что-то с апишки. Внутри них зачем-то вызывается универсальный механизм запроса на дженериках, который возвращает нужный инстанс модели ответа.
Типа такого:
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));
  }
}


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

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

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

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

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

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

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

В автомобилях обычно есть 12В розетки (они же бывшие прикуриватели). С их помощью можно заряжать смартфоны. Не благодарите. :)

Спасибо, теперь буду знать!
Дети слишком мелкие — с ними в одиночку очень тяжело куда-то ездить
asm0dey писал, что у него из мелких годовасик и трехлетка. Куда уж мельче. Если трехлетку еще можно оставить с няней, то грудничка очень сомнительно… так что вероятно у него жена сама перемещается куда нужно. Хотя возможно в Италии это делать проще…

Уточним: я летал с детьми практически в любом возрасте: от 1 месяца до 10 лет. Но никогда не летал дальше чем на 4 часа. Я живу в мск, мне удобно, в 4 часах от меня вся Европа кроме Испании и Португалии. Летаем только без пересадок чтобы не усложнять. Никогда не перемещаемся быстро между городами. Поживём 2-3 дня, потом на поезд в следующий поезд. Иногда подолгу живём в одну месте — 5-8 дней.
Не живём в отелях, живём к вартирах, снятых через AirBnb — там есть стиралка, кондиционер и всё необходимое. Едим в ресторанах/кафе, но иногда покупаем что-то домой в продуктовых. Особенно если продуктовые поблизости есть.
С няней/бабушками никого не оставляем. Дети ничем не заслужили такого бросания с моей точки зрения. Он итакие же полноценные члены семьи как я и имеют права на развлечения и на то, чтобы смотреть новое не меньше чем я.

А это режим отдыха или работа? Т.е. в этих поездках работать приходится?

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

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

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

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

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

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

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

Хвастаетесь?

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

Опа, сишарп уже легаси. =8-[ ]
Сам ЯП то тут причём? Это код на нём легаси, а шарп вполне себе современный

Даже сам шарп может быть легаси почти 20 летней давности:) я не исключаю, что то код, который я писал тогда ещё крутится

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

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

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

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

Если не хотите, чтобы вам советовали на форумах, не надо жаловаться на форумах.
так автор вроде и не жаловался. И помощи не просил) Помощь сама нашла кому помочь)
А вы помните, что значит «жаловаться»?
Это были худшие две недели в жизни
это не «жаловаться»?
Тогда не надо было вообще про семью упоминать. Чего теперь удивляться, что люди начали комментировать, то, что написано в статье (про брак)? Статья вообще о чем? О ваших чувствах/эмоциях или о рефакторинге?
Интересно, если бы я и про дочь упомянул, мне бы заодно объяснили бы, что и дочь у меня дурацкая? Статья — история, для истории важно, в каком я был состоянии. Очевидно, если бы всё было как обычно, я бы и не взвалил на себя неподъёмную задачу, а сделал бы что-то минимально необходимое.
Вполне может быть. Ведь не упоминается просто наличие, рассказывается про какие-то взаимодействия, причем с явно негативным окрасом.
Не стоит сначала выносить личное на публику, а потом кручиниться о том, что люди это обсуждают с позиций своего опыта.
Это все равно что человек, сняв штаны, потряс голой задницей на публике, а потом ругается на то, что кто-то это снял и выложил на youtube. Но он сам вынес что-то на публику…
Я не оправдываю тех, кто дает вам советы по поводу как вам жить. Просто странно ожидать иного.
Не знал, что где-то существует правило, по которому я даю согласие на критику всего, что так или иначе выношу на публику. В любом случае, у других людей есть право говорить что угодно, так же как и у меня. И вот я говорю, что они, и их опыт, который они вынесли на публику — говно собачье.
Не знал, что где-то существует правило, по которому я даю согласие на критику всего, что так или иначе выношу на публику.

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

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

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

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

Это правило прописано в конституциях большинства стран. Называется «свобода слова».
Свобода слова про то, что тебя не могут наказывать силой закона за слова. Говорить тебе, что ты должен заткнуться могут — ведь свобода слова не только у тебя есть. Вот например внизу чувак оставил комент, в котором наоскорблял меня лично, но у него мало кармы, и я мог отклонить его комент — вот в моём понимании, если бы я отклонил — это было бы нарушение свободы слова. А принять, и сказать, что он мудила — тут всё нормально.
Потому что страна советов, habr хоть и com, но всё же ru. Плюньте.

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

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

Лол.


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

НЛО прилетело и опубликовало эту надпись здесь

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


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


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

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

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


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

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


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


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

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


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

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

НЛО прилетело и опубликовало эту надпись здесь
Вы ж не будете работать в макдаке за еду?

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


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

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


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

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

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

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

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

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

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

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

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

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

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

Свои ожидания всегда можно не оправдать.

Но про это-то только я знать буду.

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

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


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

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

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

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


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

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

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

А теперь еще дома его будет ждать скандал за эту статью, так как упомянул здесь супругу и многих это зацепило

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

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

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

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

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

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

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

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

</диванная психология>
Кстати, а ещё можно заняться теоретической физикой, и использовать свою жизнь на рефакторинг современных знаний. Например, попытаться согласовать четыре фундаментальных взаимодействия или обосновать существование кварков стройной математической системой. И пусть только кто-то попробует вам сказать, что вы ерундой занимаетесь.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
А еще в продуктовой компании, в зависимости от количества средств и финансового выхлопа могли втык сделать за нецелевое расходование «средств»))
Просто работать на аутстафе/аутсорсе таким как автор вредно для ментального здоровья.

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

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

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

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

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

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

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

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

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Ну так рынок же.

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

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

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


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


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

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

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


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

НЛО прилетело и опубликовало эту надпись здесь

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

а где его сейчас взять?

А что, проблема найти человека на обучение? Судя по всему, вчерашний студент будет лучше него, у студента хотя бы перспектива есть и обучаемость.
«Тут все на 80% готово!»
Как правило, это означает 0x80% из 0x100% :)))
Правильное таргетирование. Предыдущий разраб все их поставил правильно. Заработал деньги, рейтинг и опыт. Скорее работающий проект в его цели не входил.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

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

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

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

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

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

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

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

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

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


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


Too many positional arguments for function call (too-many-function-args)
Я не столько про гарантии сколько про процесс. Вот был у меня тип A, я поменял его публичное АПИ, и получил от компилятора все места, где от этого возникли проблемы.

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

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

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

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

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

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

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

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


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

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


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

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

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


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

А кто отказывается от типов? Тайпчекинг — часть статанализа.

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

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

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

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

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

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

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

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

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

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

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

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

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);
  }
}


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

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

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

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

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

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

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

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

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

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

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


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


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

Буду знать, к кому обращаться для разгребания нашего легаси кода :)
НЛО прилетело и опубликовало эту надпись здесь
Победитель получает право разгребать легаси за солидное вознаграждение.
Очень сомнительный приз.
НЛО прилетело и опубликовало эту надпись здесь
Для чистоты эксперимента тесты командам не выдавать.
Жену пришлось брать, потому что я рассказал ей про поездку за три часа до отъезда.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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


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

НЛО прилетело и опубликовало эту надпись здесь
Барабанщики смотрят на вас с недоумением.

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


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

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


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

НЛО прилетело и опубликовало эту надпись здесь
Там либо очень простые не сознательные действия

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


Бывают и сложные.

Ещё обратите внимание, что работают все конечности.



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

НЛО прилетело и опубликовало эту надпись здесь

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

НЛО прилетело и опубликовало эту надпись здесь

Лучше что-нибудь аутистичное вроде альбома Structures — Divided by. Я не представляю, как там гитару играть вообще.

НЛО прилетело и опубликовало эту надпись здесь
мне почему-то кажется, что первыми, кто начнёт использовать 5 и 6 механические руки с управлением от мозга — будут именно барабанщики

Не факт. Может и гитаристы. Ну или очень близко на втором месте.


Спойлер

image

НЛО прилетело и опубликовало эту надпись здесь

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


Но вообще я скорее имел в виду всякую ритмическую ерунду. Не то что Behold… The Arctopus, там совсем трэш, а что-то такое.

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

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

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

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

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

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

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


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


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


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


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


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

О чем вы?!?

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

Оставьте торможение левой ногой автоспорту.
Интересное мнение. Но это только мнение…

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

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

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

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

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

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

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

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

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

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

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

И каждый год, по первому снегу/льду еду в безлюдное/безмашинное место и проверяю/повторяю свои навыки по рулению в торможении и управлению в заносах (минимум). Это очень помогает не терять автоматизма в навыках т.к. лето, с хорошим сцеплением колес на дороге, реально расслабляет.
Оба-на «юристы подтянулись»…
Пунктик ПДД укажите пожалуйста который я нарушил?
Ну ведь сделали, сдюжили и это главное;)

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

И да. Финал почти тот же — существование проекта было признано несовместимым со здравым смыслом и его закрыли. К счастью это был не аутстаф и меня удачно мигрировали в другой проект.
А мне статья не понравилась! Она совсем не про совершенный код и рефакторинг. Это очерк из жизни конкретного разработчика, наполненный чувствами, эмоциями и переживаниями. Человек просто ими поделился, вот и всё.
НЛО прилетело и опубликовало эту надпись здесь
F# только в картинке дла привлечения внимания?

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

А что, есть запрос на статью про F#?
F# есть на картинке и в тегах. Я ожидал, что в статье он тоже будет.
Мне бы было интересно почитать.
На аутстафф жену брать? Детей? В Икею ехать в изменённом состоянии сознания?

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

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

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

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

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

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

Желаю Вам найти нормальную работу на нормальных заказчиков.
Сам такой же, главное начать) сочувствую
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

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


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


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

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

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

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

P.S. Добро пожаловать в профессию кодера разработчика.
Нет, не остановит. Это как поход к гадалке или взгляд в будущее через машину времени. Вроде тебе всё объяснили, всё понимаешь, а сделать с собой ничего не можешь :)
Как-то странно. Огромный проект, огромное легаси, которое не разбиралось, за первые сутки 2% работы по оптимистичным оценкам, ночью с женой в Икею до четырёх утра (дети где в это время были?), а потом в последний день всё волшебным образом доделалось, собралось и заработало.
НЛО прилетело и опубликовало эту надпись здесь

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

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

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

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

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

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

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

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

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

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

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

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

Всему виной продуманная архитектура. Но из статьи ясно видно что автор по архитектуре знатно упоролся и предметную область хорошо понимал, так как работал с кодовой базой уже долгое время.
Нет. Автор просто известен тем что пишет на C# но любит F# в теги добавлять и на КДПВ.
Если одного понимания как должно работать достаточно для того что бы переписать всё и это понимание содержалось всего в одном программисте — не так уж и велик проект и плох код был )

Но автор, безусловно, герой. Думаю, выброшенный код — это лишь исключение, и обычно такие вещи потом очень хорошо используются.
Кул стори.
Мейн фейл — это пуллить вайфу, тем более с юнлингами, в джобовый трип.
Секондари фейл — рефакторить хип олдового буллшита без весомо пейеблового таска.
Энивей, респект топикстартеру за скиллы.
Эх, не ценит народ тонкий юмор…
fillpackart, вы пробовали понять, почему вы выбираете проекты и ситуации в которых нужно страдать? Ваши посты похожи на публичный сеанс психотерапии.
Его посты похожи на грамотно продуманные рассказы/тезисы для обсуждения, а не на истории из жизни (тем более одного человека). Что не отменяет что читать автора мне нравится, и холиварить потом в комментариях.
Если это художественный вымысел, то можно его поместить в хаб «Читальный зал». Но если это действительное состояние человека, то ему нужна помощь. Что-то явно идет не так.
Я думаю так, было что то отдаленно похожее в реальности, но поскольку автору нравится писать он приукрасил это в несколько раз и выложил на наш суд, так что это не совсем для читального зала. В отличие от одного автора с «производственными романами».
О том что автор как минимум любит приукрасить свидетельствует то что он любит набрасывать, но практически никогда не появляется в комментариях.
От таких текстов создается впечатление, что в разработке всё плохо и всем плевать. Короче не верьте в это. Есть хорошие проекты, где и за кодом следят и к людям хорошо относятся и тесты пишут и договариваются. Если проект не такой, то надо поискать другой. Ну а если 5 подряд не такие, то надо искать причину в своём подходе и пытаться получить от людей адекватную обратную связь. От коллег, психологов, врачей и прочих специалистов.
От таких текстов создается впечатление, что в разработке всё плохо и всем плевать

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

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

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

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

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

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

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

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

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

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

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

Логично, зачем вообще нужны работники, которые не приносят деньги, коммерческой-то компании?


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

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

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

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

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

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

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

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

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

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

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

О, я тут живу.
Но не мойщица поддонов
А разработчик на том самом заводе

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


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

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