Comments 98
девелоперу надо понимать как можно «похачить» чтобы и система не «взорвалась» и пользователь остался доволен.
1. Любой работник на любом месте ДОЛЖЕН делать то, что сказано вышестоящим начальником. Либо должен уходить.
2. Думать о целесообразности, причинах, последствиях и т.п. не его собачье дело.
3. Считать, что где-то (т.е. в принципе где-то) есть что-либо ЕГО, к чему он может относиться, как к драгоценности (даже просто ЦЕННОСТИ), — большая ошибка. На рабочем месте ЕГО — только грязь под ногтями, остальное — ХОЗЯЙСКОЕ. Соответственно, пусть у хозяина и болит голова об этом.
Поясню капельку. Если начальник сойдет с ума и прикажет вместо перфоратора пробивать стену головой, то до приезда санитаров следует безоговорочно биться головой о стену — это будет единственный ПРАВИЛЬНЫЙ поступок любого работника. Если не повезет и санитары не приедут, то следует либо уходить, либо запасаться стальным шлемом под парик.
Если начальник считает, что надо вместо смазки в коробку передач тойоты, которой вы управляете по службе, насыпать кулек алмазной пыли, следует именно так и поступить. Упаси бог спорить!
Если хрустальный замок, который вы надфилем вытачивали на протяжении 25 лет своей работы начальство прикажет вам разбить, это следует немедля сделать. И не спрашивать, зачем вы тогда 25 лет его создавали.
Никакой рефлексии на рабочем месте. Подставить нужные термины из IT-индустрии в вышенаписанное, наверняка, вы сможете самостоятельно.
Я буду безмерно счастлив, если эти 3 тезиса неприменимы к вашей индустрии. Но в этом случае просто обращаю ваше внимание, что 80 или даже более процентов машиностроительной индустрии зиждется на этом. Просто к сведению.
> Биться головой об стену
Кажется, голова не хозяйская, а своя. Если только тебя не продали в рабство
> начальство прикажет вам разбить, это следует немедля сделать
Дело в том, что ИТ — вещь очень специфичная. Далеко не каждый начальник вообще понимает, чем вы заняты. И если он скажет убрать не нужный сервер, и вы удалите по слепому приказу сервак менеджеров(продавцов. Ведь сервак вам не нужен?), то выкручиваться в стиле «мне приказали, я сделал» не получится. Начальник покрутит у виска, спросит зачем тебе голова и попросит увольняться, и будет прав в целом.
На заводах люди совсем по-другому работают, чем в бизнесе. Одно ваше слово «ХОЗЯЙСКОЕ» о многом говорит. И к воровству там относятся проще, мол хозяин жадничает, вот я и утащил. Возможно, приказы на заводе и дело вынужденное, но не могу говорить за другие места.
1. про то что надо выполнять приказ, а потом оспаривать
2. если приказ унижает личное достоинство подчинённого, его можно НЕ ВЫПОЛНЯТЬ.
Так что там тоже не всё так плохо и головой биться об стены не обязательно.
А когда речь идет о производстве, то служебная (докладная) записка с перечнем возможных проблем и Ваша совесть чиста и через месяц на вопрос начальника «А Вы не предупреждали, что так нельзя» чпокойно демонстрируете копию с его подписью.
Я не знаю, как в армии вашей страны, но у нас приказ можно (и нужно) не выполнять только если от солдата требуется совершить уголовное преступление.
То есть если с головой об стену случай можно сказать пограничный, но в общем случае унижающий личное достоинство приказ надо именно выполнять, а потом оспаривать
Как они врага должны побеждать? Подушками закидывать, надеясь, что враг помрёт от смеха? Так ведь тоже — уголовное преступление. Причинение смерти по неосторожности.
А насчёт унижения: есть такой артхаусный фильм «Цельнометаллическая оболочка» — там доходчиво показывается, что случается с командирами, которые слишком уж увлекаются унижением подчинённых. И командиры боевых частей об этом знают — встречались в различных армиях мира ситуации, когда при первом же боевом столкновении человек чересчур увлекающийся унижениями погибал с дырками в спине, хотя спиной к врагу не поворачивался.
Что это за страна такая
Израиль
потому что могут совершить уголовное преступление — убийство?
Убийство противника — это не уголовное преступление. А вот например кража или изнасилование — преступление.
что случается с командирами, которые слишком уж увлекаются унижением подчинённых.
Сразу после выполнение приказа солдат может и должен обжаловать приказ, и скорее всего такой командир покинет армию довольно быстро.
Но это уже реальный оффтоп и словоблудие.
Вообще же, если отбросить изящные словеса, любой армии вместо уголовного кодекса у солдата есть Устав. Под трибунал, а не гражданский суд, солдата отдают именно за его нарушение, а не за нарушение уголовного кодекса. Там ясно расписано — что, кому и в какое время он должен. Если в этом уставе написано, что солдат может воровать и насиловать — ну это проблема явно не солдата. И не его командира. Привлечь же солдата к гражданской уголовной ответственности минуя трибунал — невозможно.
>Дело в том, что ИТ — вещь очень специфичная. Далеко не каждый начальник вообще понимает, чем вы заняты.
Согласен с предыдущим ораторам. Я при возникновении проблем прихожу к начальнику с несколькими решениями, объясняю о плюсах и минусах, и просто, предлагаю ему выбор
Если начальник сойдет с ума и прикажет вместо перфоратора пробивать стену головой, то до приезда санитаров следует безоговорочно биться головой о стену — это будет единственный ПРАВИЛЬНЫЙ поступок любого работника.
Вы описали обычное армейское слепое повиновение.
Правильный поступок — это ПОЛОЖИТЬ БОЛТ на неадекватный приказ.
Процитирую военного гения Сунь-Цзы, написавшего «Искусство войны»:
Бывают дороги, по которым не идут; бывают армии, на которые не нападают; бывают крепости, из-за которых не борются; бывают местности, из-за которых не сражаются; бывают повеления государя, которых не выполняют.
Одно ваше слово «ХОЗЯЙСКОЕ» о многом говорит.
Всё понятно. Это слово сказно поколением, родившимся и выросшим при капитализме. У которого просто в принципе отсутствует советское воспитание — "работу надо любить, и делать её хорошо".
Если пришёл начальник и просто стал требовать новую фишку, целесообразность которой вам не очевидна от слова «Галоперидольчику, шеф?», — вы не правы. Важно, чтобы вы, как специалист, обозначили перед своим начальником все «за» и «против» введения желаемой фичи. Желательно, в понятных цифрах «у нас будет загрузка серверов не 33%, а 28%, то есть мы сэкономим 1000 рублей за свет в месяц, мы потратим на выполнение 4 месяца работы бригады из 25 программистов, что выливается в 10млн рублей, всё это время фиксить баги не будем». И пусть он дальше живёт с новыми знаниями. А дальше вы правы, если он захочет, либо выполняйте, либо уходите.
В свое время я работал в металлургии и помню как инженеры и директора матом друг друга крыли на планерках обсуждая какую то проблему, при этом ни кто тупым приказам сверху почему то слепо не следовал. После конечно, приходили к какому то консенсусу, и производство не вставало, или возвращалось в нормальный режим работы. От части только потому, что есть ИТР работники которые думают головой.
Для начала при наличии сомнений в целесообразности действий работник должен сообщить о своих сомнениях и пояснить, почему он сомневается в успехе.
У его руководства может по тем или иным причинам отсутствовать ключевая информация. В этом случае решение может не учитывать тех данных, что есть у работника.
Если, конечно, руководство, не прервет его потуги высказать свое мнение.
И хорошо бы распоряжения получать в фиксируемом виде. Для предъявления в случае наступления негативных последствий.
Любой работник в первую очередь квалифицированный профессионал. Если к разработчику приходит какой-то левый менеджер и начинает распоряжаться как сделать то, в чём не разбирается в принципе — горе тому разработчику, который не скажет «Нет!»
> 2. Думать о целесообразности, причинах, последствиях и т.п. не его собачье дело.
Именно разработчика потом обвинят в причинах и последствиях если из-за изменений кода по приказу некомпетентного менеджера какой-то важный функционал отвалится.
> 3. Считать, что где-то (т.е. в принципе где-то) есть что-либо ЕГО, к чему он может относиться, как к драгоценности (даже просто ЦЕННОСТИ), — большая ошибка. На рабочем месте ЕГО — только грязь под ногтями, остальное — ХОЗЯЙСКОЕ. Соответственно, пусть у хозяина и болит голова об этом.
Обычно есть пункты в контракте, котоыре требуют ЗАБОТЫ о хозяйском. Хозяин для того и нанимал разработчика, чтобы сделать то, в чём он не разбирается сам. Задача хозяина — продать решение, задача разработчика — помочь в создании решения.
Ну и пример про битьё головой об стену — вообще не выдерживает никакой критики. Человека нанимали «решать проблему», а не «выполнять капризы начальства». Для того, чтобы «выполнять капризы» — есть эскорт сервисы ;).
ИТ спецы часто меняют место работы,(кстати зачастую из за вот таких вот задвигов менеджеров)
А когда на собеседовании тебя просят показать примеры твоей работы — эти самые примеры показывают чаще всего другому спецу. А что он скажет когда увидит костыль в критичном месте системы?? он скажет что это костыль потому что менеджер был идиотом? неет, он скажет что прогер гавно, потому что влепил костыль!
И даже если не брать перемену места, один хрен, если ты ставишь в системе костыль не по своей инициативе, а потом вся компания об этот костыль спотыкается — никто не вспомнит менеджера, все шишки а они иногда чугунные посыпяться на тебя!!! Никто не даст программисту уйти от ответственности за чужие решения!
Нет смысла нанимать толковых людей, а затем указывать, что им делать. Мы нанимаем людей, чтобы они говорили, что делать нам. (с) Стив Джобс
Эволюция теории управления прошла этап от слепых указаний через учения Форда, Тейлора к Демингу.
В наше время, когда более менее формально определены степени зрелости сиcтемы управления по модели CMMI, можно сказать что вопрос «Кто главнее?» — из эпохи мамонтов.
Зрелая система управления на предприятии просто не допустит самодуров-царьков к руководству.
Я бы и хотел поверить, но не могу, что в ИТ-индустрии все белые и пушистые, начальники сплошь прислушиваются к подчиненным и продвигают особо умных…
Но даже если это и так, ИТ-сообществу совсем не помешает знать, как на самом деле «там, за стеклами офиса»… Просто имейте ввиду, что есть и такие, как я — нас 90% от всех.
Если какой-то начальник будет дурить — от него специалисты уйдут в другое место, останутся только те, кого в других местах не очень-то ждут. Соответственно, в нормальной организации такому начальнику скорее всего покажут на дверь ещё до того, как он совсем задуреет.
Ну а если в какой-то организации и самое высшее руководство поощряет самодурство, то такая организация просто будет неконкурентноспособной и долго на рынке не продержится.
Например, мой начальник любит рассказывать, как в его «прошлой жизни» у него был один подчиненный, который пошел жаловаться на него генеральному директору… И потом (вот совпадение!) вечером упал и сломал обе ключицы… Понимаете ли?
В мире есть много стран, в которых такое — не норма
sumanai, во-первых, когда начальник выполняет указание своего начальника, он является подчиненным, т.е. по сути становится на ваше место. Соответственно, как вы или я, осознает идиотичность ситуации и может (подчеркиваю — МОЖЕТ, но не обязан) не реагировать на ершистость подчиненного, т.к. в некотором смысле «понимает» его. А вот если бы ваш главврач лично вам дал бы указание приходить на работу ТОЛЬКО В РЕЗИНОВЫХ САПОГАХ, то посмотрел бы я на вас, если бы вы заявились в кедах. Т.е. когда «идея» идет от него лично, это совсем не то же самое, что «испорченный телефон» сверху (особенно всяких «разнарядок» на выборы/субботники).
fireSparrow, система РЖД, к которой я косвенно имею отношение, стоит именно на том, что я описал — армия плачет, когда речь идет о беспрекословности выполнения приказов вышестоящих. И, как вы можете заметить, данная «компания» не только держится на рынке, но и неплохо развивается и процветает. А теперь самостоятельно приплюсуйте к ней всю инфраструктуру, благодаря которой это происходит — принципы там те же самые, даже если это прачечные, стирающие вагонные занавески. И все шикарно работает. И подобных примеров МАССА. Это мелочь всякая с числом работников 10-100, может 200-500, конкурирует между собой, а если в компании работает более десятка тысяч людей — нифига там нет связи между снятием начальника и его самодурством. Наоборот: если снимают, то, как правило, с повышением… Кстати, по слухам, мелкие предприятия, которые производят «низкоинтеллектуальную» продукцию (например, что-то типа гаражных ворот и т.п.) испытывают все вышеописанное мною плюс описанное вами: там дикая текучка кадров по этим причинам. Умные и гордые постоянно бегут от придурка-директора, а им на смену полно «здоровых конкурентов», что еще больше убеждает директора, что он ведет себя правильно, и позволяет держать «шибко умных» на минимально возможной зарплате. Исключения, разумеется, есть, все он них знают, все туда стремятся, но… на всех не хватает.
Am0ralist, никаких наездов с моей стороны нет. Просто я удивлен, как умные люди могут не видеть (не замечать) очевидного ВНЕ круга их постоянного обитания, только и всего. Я рассматриваю любую проблему философски, обобщая факты, разделяя и классифицируя их и потом делаю универсальные выводы. Ну, скажем честнее — я стараюсь так делать. Возможно, распространяя опыт «всех» на «конкретно ИТ» я ошибся — это не исключено… Но если существуют ситуации, описанные вами (столкнулся с наездом — повернулся и ушел), а компания продолжает «успешно» существовать и без вас, то есть далеко не нулевая вероятность, что я все-таки прав и в отношении «ИТ-индустрии», просто эти проблемы могут быть более завуалированы или отделены от большинства рядовых сотрудников… Ну а сами ИТ-шники слишком погружены в работу и слишком довольны зарплатой, чтобы обращать внимание на это — вот и создается впечатление… Может такое быть или я снова пальцем в небо ткнул?
Что в нашей стране вообще самодурство есть и его немало? Ну так с этим фактом никто и не спорит, мы все прекрасно об этом знаем.
Но зачем эту тему детально разбирать здесь? Это IT-ресурс, нам здесь интересно общаться про то, как оно всё в IT, а не про то, как оно всё в РЖД. Если кто-то захочет про РЖД почитать, то он может просто параллельно с хабром читать и какой-нибудь сайт железнодорожников (я сейчас погуглил — такие сайты есть, и их немало).
В IT, конечно, тоже бывают и конфликты внутри коллектива, и попытки начальников давить своей властью. Но это всё в гораздо-гораздо меньших масштабах, на уровне отдельных напряжных эпизодов, а не на уровне каждодневного ада.
Просто в IT-сфере очень большой процент высококвалифицированных специалистов, которых ещё нужно искать. И если такой специалист увольняется, то не получится на следующий день взять троих таких же.
И, как вы можете заметить, данная «компания» не только держится на рынке, но и неплохо развивается и процветает.
Ну, компания, может, и развивается, но мне крайне странно было получать от их специалистов ряд вопросов.
Я занимался поддержкой ряда ИТ-систем РЖД, и меня удивляли приходящие от них вопросы, ответом на которые было «откройте инструкцию на странице 2 и начинайте читать». То есть нет — ответом на которые была простая перепечатка инструкции, мы ж вежливые.
Нет, по одному-два человека на систему в РЖД (из тех, которые были в поле моего зрения) были прекрасные специалисты. Но там разведена целая прорва простых проксирующих исполнителей, не обладающих нужными компетенциями.
Меня крайне удивляло, что при выпущенном их безопасниками распоряжении о порядке работы с внешними подрядчиками я объяснял спецам РЖД, как и что они должны делать в своей бюрократии, чтобы моих ребят пустили к боевым серверам.
Меня крайне удивляло, что у ряда монолитных систем в РЖД нет ответственного за систему в целом. На Октябрьской дороге за софт отвечает Имярек1, на Свердловской — Имярек2, на Приволжской — Имярек3… За работоспособность самого железа — Имяреки4-120 по местам размещения. А вот чтобы за всю систему целиком — никого. Может, правда, все резко изменилось за последние пару месяцев. Кто знает.
Право слово, между «монополист на господдержке еще не навернулся» и «компания эффективно работает» есть очень солидная разница.
это не норма и в нашей стране. Но существует, к сожалению.
Перефразирую, есть много стран в которых не надо рассматривать возможность такого события
Если такие вещи не выпиливать то да, потом юзеры будут «подрываться».
Вы обновили библиотеку HTTP запросов до самой последней версии в последнем релизе.Нда? А к «элегантной программе», «с точно требуемым количеством абстракций», «безупречны модулям» — тестирования не прилагалось?
И «самый почтенный по годам специалист компании» не станет произносить эту мудрую, но бессмысленную в данной ситуации фразу выделенную курсивом (ради которой, очевидно, и писался рассказ). А бросит коротко — «ну, что ж откатывайся, а потом действуй по своему плану». Еще может быть, для одобрения, пошутит вроде: «в этим мире нельзя никому доверять,… мне можно».
Это ведь выдуманный рассказ как-никак. Ошибочки или нестыковки возможны. Да даже если это специально так придумано, подумайте — неужели вы считаете, что ваш код говно? Напротив, большинство из разработчиков считают свой код весьма продуманным, и менять его лишний раз не захотят.
> не станет произносить эту фразу
Ну, снова вы всё портите) это же рассказ, не стоит придераться, имхо. Это как щас Толкиену предъявлять, что Гендальф что-то там неправильно сказал, а должен был «вот-так» сказать. Это ведь авторская работа, а не тру-лайф.
Если время отклика критично — еще как проверяют.
Восхитительный, ласкающий душу кофе — безо всяких ограничений
Прямо бальзам на душу, как и статья! Спасибо!
Вы были здесь прежде.
Пусть меня поправят знатоки английского, но, по-моему, фраза «You've been here before» переводится скорее как «С вами уже было/случалось такое». Похоже на какую-то идиому, но найти её значение не смог.
И внезапно получается что клиент покупает что-то зелёное и круглое, а оно уже базах компании отмечено как красное и квадратное. Вот крику-то будет…
И посыл правильный!
Вы опять погружаетесь в источник.
Magic Goody?
1. fork библиотеки, правка, коммит в свой репозиторий, указание своего репозитория в зависимостях проекта;
2. pull request в trunc;
3. hotfix release у себя;
4. кофе;
5. получение письма о том, что мой pull request принят, переключение обратно.
Тут проблема в п.5 — PR могут мурыжить месяцами, а то и вообще отклонить. И придется либо самому поддерживать свой форк, либо как-то возвращаться на официальную версию.
Я предпочитаю решать проблемы по мере их поступления, и — о, чудо! — они решаются. В описанном в статье случае PR принимают фактически мгновенно, транк легко вливается обратно в мой форк, пока это происходит (потому что я умею писать код так, чтобы он мерджился без бубна), и через месяц все возвращается на круги своя.
И каждый раз где-то вокруг находится теоретик «правильного как надо» и выдумывает тысячу мифических причин того, почему все пойдет не так. И пока он с хмурым лицом ходит и рассказывает, что PR могут и не принять, а если и да, то через год, и так далее — все работает, код принимают и все довольны.
Привет.
В этом случае в форке не будет много merge origin/master и всегда актуальная версия библиотеки, даже если твой патч проходит месяцами.
iqiaqqivik прав — обычно PR принимают очень быстро, но не всегда, патч в проекте обычно более управляем и требует меньше телодвижений чем форк библиотеки.
Это очень спорное утверждение, особенно, если вспомнить, что из форка патч — сделать можно, а наоборот — не всегда (имеется в виду, что в форке больше данных, диффеоморфизма нет). Кроме того, если вы не фиксируете версии сторонних библиотек, у меня для вас плохие новости. А если фиксируете — проще и дешевле при следующем апдейте, если надо обновиться, работать всеми инструментами, которые предоставляет для слияний git, чем ковыряться в текстовом файле невнятного формата.
Чтобы не быть голословным: мной был найден баг в библиотеке backbone.js (если в коллекцию попадала модель с id 'undefined', то коллекция начинала вести себя очень весело). Авторы не сочли это за баг, мол нечего сувать всякую гадость в id, хотя в документации писали, что id может быть любым string.
Да, это некрасиво (но не баг, строго говоря!). Печально, что не удалось убедить разработчиков. Я покопался в коде (не особенно глубоко), там логика, похоже, вросла корнями в core и тянется очень издревле, поэтому тут ситуация другая: новая версия этой библиотеки поломать в существующем коде в этом месте ничего не сможет. Ну да, вы вскрыли недочет третьесторонней библиотеки: так бывает.
Если же поломалось все с апдейтом — то это недавно внесенная проблема, как правило — легко изолируемая, и с вероятностью около 100% ваш PR примут.
Подумал, что вводная и дальнейший сюжет никак не соответствуют друг другу.
Потом понял, что большая часть достоинств системы существует только в воображении разработчика, который руководствуется абсолютно непрофессиональной логикой "если ошибка в зависимости, то это не моя проблема".
Менеджер тоже ведет себя абсолютно контрпродуктивно — вместо того, чтобы спокойно объяснить, какие деньги теряются на этом баге, выплескивает эмоции, хотя в выпуске сырой версии он наверняка виноват побольше разработчика.
Хороший пост о фреймворках. Современное, хорошое спроектированное приложение позволило бы оставить всё как есть, а для конкретно этого запроса с корзиной прикрутить другую библиотеку.
Когда программист изначально пишет код, он закладывает в него некий запас гибкости. Эта гибкость — это ресурс, который можно использовать в критичных ситуациях, подобных этой. При этом, не надо тратить его попусту, иначе потом придётся делать долгий и дорогой рефакторинг.
Я раньше поражался тому, как уродливы изнутри «взлетевшие» проекты. Сейчас я знаю: красивые проекты не взлетают, потому что они не успевают взлететь. Пока инженеры в белых халатах прикручивают красивый двигатель к идеальному крылу, бригада взлохмаченных придурков во главе с безумным авантюристом пролетает над ними на конструкции из микроавтобуса, забора и двух промышленных фенов, навстречу второму туру инвестиций. Авантюрист любезно раздаёт восторженным пассажирам талоны и бумажные пакетики.
К сожалению, приходится встречаться с ситуацией, когда все верят, что разработчик допустить ошибку не может, а если что, сам все проверит и все недочеты увидит.
Вы также выводите в отдельную ветвь библиотеку, устраняете баг и посылаете её расположенному иерархически выше менеджеру по продукции.
Код уходит в релиз. А через несколько дней сервер магазина падает/вместо 1 пылесоса клиентам в корзину приходит 10/не проходит оплата и т.д.
Пользователи уходят, попутно расписывая вконтактиках какой плохой магазин. Манагер в ярости, программист лишается премии. Доводы «я же предупреждал» никого не волнуют. Компания несёт убытки. Сокращается штат. Опытный гуру сруливает первым в контрору-конкурент. Падает метеорит. FIN.
Вкратце: после того, как создаешь собственную ветку репозитария (fork repo — неудачно переведено как «Отсоединить библиотеку») и в ней производишь некоторые манипуляции, в то же самое время в оригинальном репозитарии могут происходить какие-то другие изменения. Ну и чтобы эти изменения из оригинального репозитория скопировать в свою ветку, т.е. синхронизировать свой репозитарий и оригинальный — нужно как раз выполнить merge upstream. См. https://help.github.com/articles/syncing-a-fork/
Время шло, добавлялись новые компоненты, логика парсинга все усложнялась и однажды настал момент, когда я просто не смог поправить regexp так, чтобы не ломались старые тесты. Бился несколько дней — без толку. Тогда от отчаяния я взял свой старый кусок говнокода на циклах и ветвлениях и привинтил новый функционал туда, прогнал все тесты — все работало. Так оно и ушло в прод и, боюсь, так и работает до сих пор :)
That’s just the kind of stand-up employee you are.
Это — часть работы своего рода «кризисного» сотрудника, которым вы и являетесь.
Вот поэтому лучше сразу прыгать на оригинал.
А это вообще что-то:
“Our job is not to drink coffee and crap out code. Our job is to make software that works.”
«Ваша работа состоит не в том, чтобы пить кофе и уклоняться от написания кода. Ваша работа в том, чтобы делать программы, которые работают.»
Итак, менеджер попросил пофиксить баг…