Comments 210
По мере роста собственной квалификации, всегда наступает момент, когда чуешь себя олицетворением мудрости. И через n-ое время это чувство разбивается об суровую реальность.
Помню когда только начинал читать чужой код, ни раз посещали мысли: «Зачем так сложно? Ну накрутили! Можно же легче!». И спустя пару лет читая тот же самый код мысли совершенно другие: «Как изящно! А этот прием надо взять на вооружение!»

СССР, Куба, Венесуэла, Северная Корея, Иран — все они смогли отстоять свое право на лучший путь.
На Японию скинули две ядерные бомбыОт которых погибло, по самым крайним оценкам, 200 тысяч человек. Страшно, конечно, когда от одной бомбы 100 тысяч человек гибнут, но немцы уничтожили миллионы — пусть для этого им и потребовалось куда больше бомб.
в Германии камня на камне не оставилиНо зато оставили людей. Конество погибших солдат сравнимо, а вот количество погибших мирных жителей — нет.
Может быть и стоило «сравнять с землёй» Германию, чтобы «равные условия» создать, но… гуманизьм… а история сослагательного наклонения не имеет.
Многие города пришлось отстраивать заново, но весьма недешёвые автобаны нужно было только чуток подлатать.
в Южной Корее в это время еще матыгой землю обрабатывалиВот это — хороший пример. Вот только непонятно на чью мельницу: основной причиной бурного роста были… пятилетние планы и… градообразующие компании.
а в Израиле еще ветер по пустыне колючки носил.Ну, туда другие страны столько всего привезли, что можно было бы и на Луну слетать. Тот факт, что это произошло не в результате завоеваний, а в результате «идеологической обработки» с точки зрения экономики большой роли не играет.
Мне кажется, что все гораздо сложнее, чем неравноценный старт.На самом деле всё просто: социализм обеспечивает высокую эффективность создания того, что мы знаем как делать — но низкую для того, чего не знаем. Капитализм — наоборот. Потому выигрывают те страны, которые удачно сочетают эти два подхода, а не те, кто ударяется в крайности.
Проблема-то не в капитализме вовсе, а в людях.
Вот почему-то так бывает, что в одной системе — человек один; а система сменилась (система переродилась; или человек перешёл в другую систему) — и человек как будто совсем другой.
Я читал, как англичане, любящие животных у себя дома — при переезде в другую страну становятся жестокими к животным. Пруфа не будет — давно читал.
В Японии с её феодальными традициями — отношения между работниками корпорации долговременные. И работники ведут себя иначе. Неужто там люди другие? А мне кажется — дело в системе отношений.
В СССР отдел, который быстро что-то разработал — не мог быстро разбежаться. И после путёвок на море вкупе с «Волгами» — мог поехать на Колыму (это при И.В.Сталине).
Вот, кстати, хороший пример:
Где-то в 200*-х годах на этапе появления P'II — появились диски ёмкостью более 32 GB, и компьютеры на этих дисках стали виснуть на этапе BIOS, до загрузки OS. Я что-то не слышал, чтобы программисты были как-то наказаны за такое.
А при И.В.Сталине — они бы поехали на Колыму. За вредительство. И это было бы правильно.
А то, как говорил А.Райкин — «за качество никто не отвечает».
И еще: проблема не в тех людях, кто пишет софт — а в тех, кто его принимает.
Естественно, на Колыму надо отправлять не за каждую ошибку — а за самые сильные ошибки. Тогда специалисты, не желающие ехать туда — будут соревноваться в минимизации ошибок. А отдельные плохие специалисты, которые туда всё-таки поедут — своей поездкой вразумят и мотивируют оставшихся.
Кстати, тех, кто принимает софт — за ошибки в софте тоже надо отправлять на Колыму. Для меня — они тоже входят в понятие «специалисты».
Вы так говорите, как будто билет на Колыму — строго в один конецА вы так говорите будто съездить на Колыму — это практически путевка в санаторий. Я бы даже с гарантией возврата не хотел бы туда попасть.
Тогда специалисты, не желающие ехать туда — будут соревноваться в минимизации ошибок.
Чтобы минимизировать ошибки нужно ничего не делать. Все специалисты разбегуться по местам с наименьшей ответственностью и останутся только глупые но жадные (да и то только при условии что оплата будет заметно выше рынка).
А отдельные плохие специалисты, которые туда всё-таки поедут — своей поездкой вразумят и мотивируют оставшихся.Мотивируют сбежать туда, где нет такой ответственности.
А вы так говорите будто съездить на Колыму — это практически путевка в санаторий. Я бы даже с гарантией возврата не хотел бы туда попасть.Ну, тут я должен заметить, что в системе, в которой попасть на Колыму (точнее — под репрессии государства) вообще невозможно — человек подвергается другим опасностям. В частности, чиновники, имеющие иммунитет — разваливают инфраструктуру, в т.ч. здравоохранение; ну и появляется неиллюзорный шанс попасть в эпидемию.
Чтобы минимизировать ошибки нужно ничего не делать.У Вас в логике что-то поломалось. «Ничего не делать» — это тоже ошибка; и зачастую более тяжёлая, чем сделать неоптимально.
Все специалисты разбегуться по местам с наименьшей ответственностьюА на таких местах — зарплата низкая. И социальный статус паршивый. А работа — грязная и вредная для здоровья. Ну, давай, беги, никто не держит — посмотрим, сколько ты там выдержишь (это я не Вам, а абстрактному собеседнику, который испугался ответственности).
Общественно-историческая практика показывает, что люди не боятся риска. Посмотрите, сколько людей в 199*-е пошли в бандиты — при этом отлично понимая, что результатом косяка может оказаться отправка даже не на Колыму, а на пару метров под землю, и возможно, живьём.
«Ничего не делать» — это тоже ошибка; и зачастую более тяжёлая, чем сделать неоптимально.С чего это? Если я учась на инженера-программиста вижу что за баги таких как я ссылают на колыму, то я забираю документы и иду работать продавцом или дворником. Система потеряла специалиста и получила неквалифицированного работника. По квалификации я — ничего не делаю и шансов уехать далеко и надолго у меня практически нет.
А на таких местах — зарплата низкая. И социальный статус паршивый. А работа — грязная и вредная для здоровья. Ну, давай, беги, никто не держит — посмотрим, сколько ты там выдержишь (это я не Вам, а абстрактному собеседнику, который испугался ответственности).Ну у нас же есть исторические примеры, которые показывают что да — убегут. Или по вашему шаражки в которых ученых заставляли трудиться они почему появились?
Если я учась на инженера-программиста вижу что за баги таких как я ссылают на колыму, то я забираю документы и иду работать продавцом или дворником.Оно так не работает. Посмотрите вокруг — сколько человек переходят улицу в неположенном месте, сколько людей совокупляются без предохранительной защиты, сколько людей пускаются в финансовые аферы.
Система потеряла специалиста и получила неквалифицированного работника.Через год работы дворником Вы понимаете, что это не сильно лучше, чем Колыма. И поступаете снова.
По квалификации я — ничего не делаю и шансов уехать далеко и надолго у меня практически нет.Вообще-то, если Вы не ликвидировали вовремя гололёд — то шанс отправиться на Колыму есть и в роли дворника.
Ну у нас же есть исторические примеры, которые показывают что да — убегут.С нетерпением жду имена убежавших.
Или по вашему шаражки в которых ученых заставляли трудиться они почему появились?Я что-то не помню, чтобы работавшие в шарашках люди пытались куда-то бежать. Ни до посадки, ни во время отбывания срока на Колыме, ни во время работы в шарашке.
Оно так не работает. Посмотрите вокруг — сколько человек переходят улицу в неположенном месте, сколько людей совокупляются без предохранительной защиты, сколько людей пускаются в финансовые аферы.
Вот именно эти люди и будут писать глючные программы в промежутках между поездками на Колыму.
А вот тут уже будет действовать искусственный отбор:
- Те, кто по генетическим или образовательным причинам будут писать самые глючные программы — первыми отправятся на Колыму.
- Те, кто какое-то время смогут избежать глюков — останутся на месте, родят детей и воспитают учеников.
Примерно то же самое происходит с теми, кто переходит улицу в неположенном месте. Те, кто переходят удачно (по причине того, что хорошо умеют оценивать риски) — выживают. Те, кто не умеют оценивать ситуацию — либо не переходят дорогу в неположенном месте (по нашей ситуации — "не идут работать программистами"), либо попадают в аварию; некоторые гибнут сразу, некоторые выживают.
Те, кто выжили в аварии — учатся на собственном плачевном опыте. Т.е. либо начинают дотошно соблюдать правила, либо учатся ориентироваться на дороге.
Те, кто не делают ни того, ни другого — на второй… третьей итерации отправляются на тот свет.
И у программистов есть свои правила разработки программ. Те, кто будут соблюдать эти правила — особых успехов не достигнут, но и на Колыму не попадут.
Но в ряде случаев — для достижения хорошего результата правила надо нарушать. Собственно, все новые наборы правил создаются теми, кто не боялся нарушать старые правила. Но тут уже надо смотреть, оценивать свои способности и возможные риски.
Собственно, я тут веду к мысли о том, что и хреновые программисты тоже найдут себе работу — там, где не требуется высокое качество кода. Естественно, там д.б. налажен автоматический контроль за качеством работы — т.е. будут нужны системы тестирования, написанные высококвалифицированными программистами.
А вот к написанию BIOS'а — могут допускаться только высококвалифицированные программисты: на высокую зарплату и с высокой ответственностью.
Собственно, я тут веду к мысли о том, что и хреновые программисты тоже найдут себе работу — там, где не требуется высокое качество кода.
То есть вы признаете, что бывают области где высокое качество кода не требуется? Ну и о чем тогда спор?
Очевидно, спор о том, нужна ли высокая степень ответственности (т.е. уголовные наказания) для программистов, которые работают в областях, где высокое качество кода такИ да — требуется.
Процитирую свои постулаты — чтобы напомнить, о чём спор был изначально:
- "А потом может оказаться, что некоторым людям не по душе мир, в котором критически важные для цивилизации вещи делаются через задницу. И вообще, у этих людей точка зрения — не экономическая. И это люди приходят к выводу, что если капитализм работает именно так, как Вы рассказали — то капитализм надо разрушить."
Это на тему экономической эффективности, которая почему-то ставится некоторыми людьми на роль целевой функции. Причём интересно, что эффективность подразумевается в отношении одного предприятия, а не всего общества в целом — на убытки всего общества в данном случае принято плевать. - "На переходе от СССР к РФ я наблюдал лично многих людей. И наблюдал издали медийных персон. Перерождение было потрясающее."
Это на тему того, что поведение человека определяется не ртолько его внутренними качествами, но и внешней ситуацией. Т.е. качество работы программиста определяется не тотлько его знаниями и трудолюбием — но и тем, какую задачу перед ним ставит менеджер (т.е. — - за что наказывает, за что поощряет). Капитализм умеет прощать ошибки — даже при том, что они нанесли огромный ущерб. А значит — поощряет к безответственности и разгильдяйству.
PS: Забавны местные минусующие. Возразить по теме им явно нечего — они просто не хотят читать неприятную правду.
Если бы они считали, что я говорю неправду — они бы возразили. Но возражений нет. Видимо, они сами понимают, что я прав.
Ну и все, я так понимаю, знают, что здесь от кармы зависит возможность размещать комментарии.
Мысли свои озвучиваешь вслух. Но про дебилов молчишь, конечно, все-таки культурный человек. Но на лице все написано.
Чаще встречал не такое «озвучивание мыслей», а вопросы вроде «Ребят, а чего вы на второй версии сидите? И почему не пользуетесь вот этой клёвой фишкой?»
В результате либо получаешь объяснение и понимание, либо оказывается, что просто некому было взяться за внедрение (нет опыта, нет времени etc) – и вот он, твой звёздный час, ты уже не джун-подмастерье-пятачок-за-пучок, а ценный (и уникальный!) член команды.
конечно же в связке с «синдромом самозванца».
мне лично удобнее просто напоминать себе о них время от времени
Нет. У нормальных людей на dev все работает без сборки и излишних усложнений.
Не подскажите, где найти такой веб, где решаемых этими инструментами проблем не существует? :-)
Несколько раз оказывался в позиции когда видишь что творится форменный неадекват. Спрашиваешь а почему? Узнаёшь: "а потому". По сути нехватка квалификации, легаси, лень, работа наотвали и многое другое. Предлагаешь взвешенное решение. Спорят. Аргументируешь свою позицию. Соглашаются. Всех собак и реализацию вешают на тебя. Реализуешь. Благодарят. Главное всё сделать аккуратно, мягко и без оскорблений. Конфликты совсем ни к чему.
Ну и если по всем пунктам везде дичь, то это хороший повод задуматься: а не пойти ли мне туда, где дичью буду я, а не наоборот. В ту контору, где мои стандарты качества малы. Где дяди и тёти с большими головами научат тебя великому… Ой, что-то меня понесло.
Ну я к тому, что хорошо когда ты в окружении тех, кто умнее. А не наоборот. Хотя сопли пузырями уже пускать не получится. И задачи будут сложными. Но ведь в этом и весь кайф, разве нет?
Если для разработки был выбран Питон, то наверно, в этом есть причины — более высокая скорость и низкая цена разработки, наличие готовых отлаженных библиотек и инструментов.
Вариант «перейти на Go» не выглядит априори хуже, чем вариант «перейти на python3»
Вот только в 2020м он эта… всё, кончится.
Что именно кончится?
К тому же третий подпилили, и переносить проекты уже не так больно как два-три года назад.
Ну и добавлю тоже, переход со второго на третий, несопоставим по издержкам с переходом на Go.
Основная масса перешла уже на третий питон.Основная масса? Откуда статистика? Из проектов, с которыми сталкиваюсь я: Android — In order to use repo, please install Python 2.x, Chromium — You must have Git and Python v2 installed already…
Ну и добавлю тоже, переход со второго на третий, несопоставим по издержкам с переходом на Go.Сопоставим, к сожалению. Беда в том, что если у вас не скриптик на 20 строк, а большой проект, то вы не можете одномоментно переехать сразу со 2го на 3й. Вам нужна версия, которая работает с двумя питонами сразу.
Это, в общем-то возможно сделать — но требует изучение третьего, причём очень специфического диалекта.
Альтернатива — разбить всё на две части (python2 и python3), связать их через RPC и потихоньку перетаскивать функционал. Но если идти этим путём — то уже можно и на любой другой язык перейти.
Из проектов, с которыми сталкиваюсь я
Это скрипты сборки, им тупо лень, а учитывая что замороженную версию Python 2.7 никто стирать не будет из интернетов, все обойдется.
Реально используемые в проектах модули и библиотеки в основном переписали, во всяком случае я не сталкивался с отсутствием поддержки третьего питона в либах уже года два. Сам давно пишу на третьем.
Это, в общем-то возможно сделать — но требует изучение третьего, причём очень специфического диалекта.
Да кто вам сказал такое?) Ситуация давно уже не та, недавно очень большой проект переводил со второго на третий. После отработки конвертирующей утилиты остались только строчек 10 где юникодные строки не совсем принятым образом были описаны, и то все это сразу выпало в ошибки и было быстро исправлено.
Насчет перехода с Python на Go. Прокрутите в голове два сценария (Вы тимлид, или того хуже CTO, владелец):
- Ваши программисты тупо не захотели изучать Go
- Ваши программисты захотели, изучили и пригрозили уволится если не прибавите 30% ЗП, и это не пустые слова учитывая дефицит гошников на рынке.
Ваши действия?
Однако я не очень понимаю откуда возьмутся программисты «тупо хотящие изучать python3» и при этом «тупо не хотящие изучать Go».
Однако я не очень понимаю откуда возьмутся программисты «тупо хотящие изучать python3» и при этом «тупо не хотящие изучать Go».Мы же вроде говорим про тех кто раньше писал на Python 2, нет? Скорее всего они уже знают отличия третьего от второго, и даже что-то писали га третьей версии. А Go — это другой язык, с другой парадигмой, и кучей всяких неоднозначностей в синтаксисе. Я вообще не пойму, все не только мне да и все пишите в том ключе, как будто Python2 и Python3 разные языки программирования.
Скорее всего они уже знают отличия третьего от второго, и даже что-то писали га третьей версии.Непонятно — откуда. Если у них в проекте только Python2, то они вполне могут ничего про Python3 и не знать.
Программисты могут потребовать прибавки просто потому, что гоошники сейчас получает больше чем питонеры. А они же ведь теперь Go знают) Логика проста.Точно так же можно вашу логику обратить и сказать, что переход на Go сделает их более ценными сотрудниками для следующего работодателя — потому можно согласится с тем, что на текущем месте они его изучат бесплатно (в надежде «отбить» затраты своего времени в будущем).
Я вообще не пойму, все не только мне да и все пишите в том ключе, как будто Python2 и Python3 разные языки программирования.Потому что я не могу взять программу на Python2 и просто взять её и перенести на Python3.
Например если это работа с сетевыми протоколами, то это смесь US-ASCII с произвольными байтами. Строки на Python2 это отлично пережёвывают, строки на Python3 — нет. Да, в послдених версиях Python3 стало получше, но ощущение того, что это другой язык — не пропало, увы. Несовместимых изменений слишком много.
А Go — это другой язык, с другой парадигмой, и кучей всяких неоднозначностей в синтаксисе.Да, но он, по крайней мере, этого не скрывает.
Я вот читаю ваш спор, и как человек очень далёкий от питона, недоумеваю. Вы так рассуждаете о разнице между python2 и python3, как будто это словно разница между java и javascript. Или там и правда настолько сильно всё перепахали, что учить учить и не переучить?
Или там и правда настолько сильно всё перепахали, что учить учить и не переучить?Там изменили небольшую часть. Но критически важную — работу со строками. Причём изменили самую суть: если в Python2 вы могли взять случайную последовательность байт — и работать с ней, как если бы это была строка… то в Python3 от вас требуют «правильную строку» из кодпоинтов. А на практике вы это, зачастую узнаёте «по ходу», уже начав работать со строкой (к примеру HTML и meta charset)
При этом, что характерно в Go очень много оличий от питона… но вот как раз принципы работы со строками — там похожи на Python2.
Потому и получается странная дилемма: изучить Python3 для человека, знающего Python2 несложно, а вот переписать готовы код — увы, нет. А с Go — всё ровно наоборот.
Правда тут нужно учитывать, что это всё так пока у вас много своего кода. Сторонние же библиотеки, зачастую, для Python3 похожи на библиотеки от Python2, но непохожи на библиотеки от Go. Если у вас много сторонных библиотек, уже переписанных на Pyehton3, то переход на Python3 будет разумнее.
В итоге: переписывание с Python'а на Go — это действительно не всегда разумно… но точно то же самое можно сказать и про переход с Python2 на Python3.
Несовместимых изменений слишком много.
Что кроме строк?)
print
ы и range
, sort
(потерявший cmp
) и map
(возвращающий итератор, а не список) — и куча всего ещё.Я сейчас не говорю о том сделало ли это язык лучше или хуже — это сделало его несовместимым, из-за чего, собственно, все проблемы.
cmp
, скажем, не конвертируется, ибо это не так-то просто сделать и руками), а во-вторых, что куда хуже, код, обработанный 2to3 больше нельзя запускать под python2!То есть вы получаете неработающий полуфабрикат (смотри пункт 1), который нельзя даже пытаться запускать не отконвертировав вообще всё (смотри пункт 2). Восхитительно!
Вы можете продолжать жить в своём мире розовых поней, но я, пожалуй, останусь в серой реальности.
Т.е. менять окружение нa котором код работает / искать сопоставимые библиотеки / заново настраивать сборку / переписывать всю логику и тесты / фиксить новые баги / тестировать, тестировать, тестировать… По сути написать весь проект с нуля.
Нефиговое такое предложение от «новенького» сотрудника.
И да — как раз это логично делать новому сотруднику: для него это системы не являются «старыми, проверенными», так что ему всё равно в них придётся разбираться… можно и воспроизвести логику на другом языке «для закрепления»
Ну так вам всё равно придётся всё это делать — так не лучше ли начать когда у вас есть выбор — делать сегодня или завтра?
Почему все равно придется это делать? Python2 перестанет работать нa новом железе в 2020? К тому же переход на 3й питон все-таки значительно проще чем переход на абсолютно другой язык с другой парадигмой.
так не лучше ли начать когда у вас есть выбор — делать сегодня или завтра
Зависит. Если бизнесу нужны фичи, a вы тут такой в белом пальто «давайте все перепишем лучше», то вас с этим предложением скорее всего пошлют, и будут правы.
И да — как раз это логично делать новому сотруднику: для него это системы не являются «старыми, проверенными», так что ему всё равно в них придётся разбираться… можно и воспроизвести логику на другом языке «для закрепления»
Вы работали на крупных проектах в которых работает несколько человек? Я пару месяцев назад начал работать на довольно большом проекте и я до сих пор не знаю некоторых моментов в бизнес логике. Проекту 3-4 года, там большe 100к строк кода и он разбит на несколько репозиториев. Физически невозможно все это «с наскока» изучить и знать все детали.
К тому же, раз взяли нового сотрудника, значит проект растет (либо кто-то ушел), значит нужны руки. В проекте скорее всего есть фичи и баги над которыми надо работать прямо сейчас, а не ждать несколько месяцев пока новый сотрудник все перепишет.
а не ждать несколько месяцев пока новый сотрудник все перепишетЕсли бы несколько месяцев да один сотрудник, то еще нормально, такие деньги у взрослого бизнеса обычно есть. Обычно это несколько иные сроки.
Скорее всего у тех, кто знаком с проектом дольше будет другое понятие о том, что нужно чистить в первую очередь.
Но бросать нового человека на «горящие» и «критические» фичи — это феерический бред.
Зависит. Если бизнесу нужны фичи, a вы тут такой в белом пальто «давайте все перепишем лучше», то вас с этим предложением скорее всего пошлют, и будут правы.Если «бизнесу» нужны фичи примо «здесь и сейчас» и он для этого вас нанял — то это значит, что «бизнес» понятия не имеет о том, как разрабатывается софт и для вашего же душевного спокойствия лучше с ним больше не общаться. Да, просто закинуть объявление и начать искать другую задачу.
Вы работали на крупных проектах в которых работает несколько человек? Я пару месяцев назад начал работать на довольно большом проекте и я до сих пор не знаю некоторых моментов в бизнес логике.Об этом и речь — ещё у классиков об этом писали: если вы добавляете на проект человека и ожидаете немедленной отдачи — вас ждёт разочарование.
Новый человек — это работа на перспективу. Всегда.
В проекте скорее всего есть фичи и баги над которыми надо работать прямо сейчас, а не ждать несколько месяцев пока новый сотрудник все перепишет.Худшее, что можно сделать с новым человеком — кинуть его на амбразуру и поручить ему фичи, от которых зависит судьба проекта в ближайшие месяц-другой.
Гораздо лучше — поручить ему что-то от чего в будущем может быть хорошая отдача, но что не развалит проект в случае неудачи. Переход на другую библиотеку/язык/etc (о котором «давно говорили, но не было времени») — как раз сюда относится…
Разумеется не нужно давать новчику «карт-бланш». И на наивный вопрос «а почему тут до сих пор Python2» хороши бы иметь ответ.
Но ответ «бизнесу нужны фичи, нам некогда рефакторить код» — наихудший из возможных.
Никто не ждет от «новеньких» немедленной отдачи и не будет сразу кидать их на жизненно-важные фичи. Но ждать несколько месяцев пока человек там разбирается в отрыве от основной команды тоже никто не будет.
Если «бизнесу» нужны фичи примо «здесь и сейчас» и он для этого вас нанял — то это значит, что «бизнес» понятия не имеет о том, как разрабатывается софт и для вашего же душевного спокойствия лучше с ним больше не общаться.
Может это вы понятия не имеете о том как работает бизнес? Все-таки он вас нанял, а не наоборот.
Но ответ «бизнесу нужны фичи, нам некогда рефакторить код» — наихудший из возможных.
Возможно, но в реальной жизни так бывает довольно часто.
Но ждать несколько месяцев пока человек там разбирается в отрыве от основной команды тоже никто не будет.
Не совсем, когда берут стажеров, по крайней мере у нас, это вполне обычно.
Может это вы понятия не имеете о том как работает бизнес? Все-таки он вас нанял, а не наоборот.Я не знаю как работает бизнес, но я знаю как работает разработка программ. Бизнес же обязан учитывать эти реалии.
Как нельзя нанять людей, которые будут натягивать навесные потолки пока у вас не залит фундамент, так нельзя нанимать новичков в надежде заткнуть ими «горящие» дыры. Это просто физика проуесса и на какое «знание бизнеса» её не изменит.
Я не знаю как работает бизнес, но я знаю как работает разработка программ. Бизнес же обязан учитывать эти реалии.
Наоборот. Разработчики должны учитывать реалии бизнеса. Когда люди будут платить просто за то что вы пишете клевый код — вы будете правы, но пока мы вроде как решаем бизнес задачи.
так нельзя нанимать новичков в надежде заткнуть ими «горящие» дыры
Про «горящие дыры» это вы сами придумали. Я говорил просто про фичи и баги, которые сейчас нужно закрывать. В проекте, который находится в активной разработке, они всегда есть.
Наоборот. Разработчики должны учитывать реалии бизнеса.Нет. Разработчикам точно так же наплевать на «реалии бизнеса», как каменотёсам или уборщице. Они выполняют свою работу — так как умеют, не халтуря — а «бизнес» платит им зарплату. Учитывать реалии бизнеса они будут тогда, когда будут владеть своим бизнесом. Кому-то это нравится, кому-то нет, но не нужно перекладывать свою задачу на других.
Я говорил просто про фичи и баги, которые сейчас нужно закрывать.Чем они отличаются от «горящих»?
В проекте, который находится в активной разработке, они всегда есть.Конечно — но их нельзя поручать новичку. Так же, как вы не поручите только что нанятому иниженеру рассчёт какого-нибудь нестандартного моста, так и только что нанятому разработчику нельзя поручать задачи, от успешного «закрытия» которыз зависит немедленная судьба проекта.
Я не знаю как работает бизнес, но я знаю как работает разработка программ. Бизнес же обязан учитывать эти реалии.
Нет. Разработчикам точно так же наплевать на «реалии бизнеса», как каменотёсам или уборщице.
А как вы решаете проблемы бизнеса не имея понятия о его проблемах? Или вы не решаете проблемы бизнеса?
А как вы решаете проблемы бизнеса не имея понятия о его проблемах? Или вы не решаете проблемы бизнеса?Я не решаю проблемы бизнеса — я решаю (или не решаю) поставленные бизнесом передо мной задачи. И отвечаю только за те обещания, которые я дал кому-то. А не за то, что кто-то кому-то пообещал от моего имени.
Я очень хорошо помню совещание, где наш финансовый директор объяснял «как устроена жизнь». И там был пассаж (обращённый меньше к нам и больше к отделу маркетинга): «для того, чтобы деньги поступили на счёт контрагента на этой неделе заявка должна быть внесена в систему не позднее 8 частов утра в понедельник». И после этого добавление: «если вам нужно, чтобы деньги были перечислены через два дня, а иначе у вас сорвётся важное мероприятие (тут весь отдел маркетинга затаил дыхание), то… ваше мероприятие сорвётся, а мы вам посочуствуем… очень-очень посочувствуем...».
Каждый должен хорошо делать своё дело и не пытаться лезть туда, где он некомпетентен, вот и всё.
Я не решаю проблемы бизнеса — я решаю (или не решаю) поставленные бизнесом передо мной задачи.
А вы вообще зачем бизнесу понадобились? С какой целью он ставит вам задачи? Какого рода он ставит задачи? На каком языке он их описывает? Почему он вам платит деньги? Зачем ему вообще ставить вам задачи? Интересна ваша логика. Люди любых профессий решают проблемы реального мира. Какие проблемы в таком случае решаете вы?
Люди любых профессий решают проблемы реального мира.Что вы подразумеваете под «реальным миром»? Тот, который можно пощупать? Тогда какие вещи, которые можно пощупать, порождает бухгалтер? И на каком языке они описываются?
Почему он вам платит деньги? Зачем ему вообще ставить вам задачи?Очевидно, что это связанные вопросы и ответ — такой же, как в случае с каменотёсам или уборщицей: потому что для бизнеса дешевле нанять меня, чем самому разбираться в том, как пишутся программы (я не говорю, что я уникален, нет, любой бизнесмен сможет научиться писать программы хоть на C++, хоть на PHP… если потратит на это несколько лет).
Какого рода он ставит задачи? На каком языке он их описывает?Очевидно, что задачи ставятся на языке, который должен быть понятен нам обоим. Обычно это некоторый компромисс между тем, как могу сформулировать задачу я и тем, как её видит бизнес. В мелких компаниях — бизнесмену приходится немного изучать язык программистов, а программистам — язык каменнотёсов или токарей (в зависимости от того, чем бизнес занимается), в крупных этому делу может помочь PM.
А вы вообще зачем бизнесу понадобились? С какой целью он ставит вам задачи?А это извините, уже не моё дело.
Вот рассмотрите какую-нибудь реальную задачу. Там будет много про осцилографы, удалённый доступ к самосвалу и прочие интересные штуки — но там ничего не будет про то, как бизнес будет добывать деньги на оплату всех этих покатушек и там не будет обсуждения рентабельности всей затеи в зависимости от сроков исполнения проекта.
Потому что это не моё собачье дело. Моя задача — оценить (по возможности точно) затраты на ту или иною фичу, которую от меня хотят и указать — кто и когда её может сделать. Также немаловажно — оценить как это повлияет на другие фичи (ибо про это бизнес склонен забывать). А уж стоит ли её делать в таком раскладе или нет — вопрос не ко мне.
Тогда какие вещи, которые можно пощупать, порождает бухгалтер? И на каком языке они описываются?
Например он рассчитывает вашу ЗП (руководствуясь законами и мат аппаратом) которую вы потом можете пощупать. Не понимая из чего складывается ваша ЗП он насчитает вам полную фигню. На человеческом: «Рассчитайте пожалуйста ЗП нашему программисту за текущий месяц».
потому что для бизнеса дешевле нанять меня, чем самому разбираться в том, как пишутся программы
А зачем вообще ему понадобились какие то там программы? Что они ему дадут? Ему просто деньги не куда девать? Вы утверждаете что не решаете проблем бизнеса. Но зачем бизнесу программы? Объясните? Зачем мне уборщица, если у меня чисто? Зачем мне камнетес, если я использую дерево? Вопрос не в том, чье это дело, вопрос в том зачем вас бизнес нанял. Отвечая на вопрос «Это не мое дело», вы просто уходите от очевидного ответа.
А очевидный ответ тако: Он вас нанял, чтобы решить с помощью вас какие то свои проблемы. Именно бизнес ставит перед вами задачи (Вы сами это сказали). Отсюда очевидно следует что вы решаете проблемы бизнеса, хотите вы это осознавать или нет. Других причин нанимать вас и платить вам деньги нет. Если бы у него не было этих проблем, не было бы смысла ставить вам задачи и вообще вас нанимать.
Отсюда очевидно следует что вы решаете проблемы бизнеса, хотите вы это осознавать или нет.С таким же успехом можно сказать, что автомеханик, меняя колесо в машине Фон Брауна решал задачу доставки человека на Луну. Ну потому что без машины, которую ему бы починили Фон Браун не смог бы добраться дл работы и сделать свой Сатурн.
И, точно также, как автомеханика не волнует кто и куда поедет на отремонтированной им машине — так же и меня не волнует для чего бизнесу нужно то или иное изменение в программе, которое он попросил меня сделать.
Ну вот простой пример: если мы писали всё программу на Java, а бизнесу вдруг потребовалась версия на C#, то мне неважно — почему вдруг так. Моя задача оценить — сколько человек и времени для этого потребуется. А дальше — бизнес пусть решает, хочет он за это платить или нет.
Отвечая на вопрос «Это не мое дело», вы просто уходите от очевидного ответа.Нет. Я не ухожу от ответа — я его выношу за скобки. Если вот то самое переписывание на C# бизнесу нужно сделать за месяц, а по моим оценкам оно займёт месяца четыре — то я не собираюсь рвать на себе волосы или сидеть по ночам из-за того, что наш продукт нельзя показать важному заказчику.
Я это очень хорошо понял на одной из моих первых работ, когда от меня попросили сделать «простенькую формочку» для забивания каких-то данных. А потом оказалось, что эти данные нужно не просто вбивать, но и искать по ним (а зачем нам данные в базе если искать нельзя?), а также сохранять возможные критерии поиска (но иначе же мы никакой экономии не получим, наша табличка в Excel так умеет, а ваша база почему-то нет), а ещё там будет пользователей несколько (но у нас же несколько подразделений — куда же без этого) и так далее.
Одного раза — хватило. С тех пор я чётко придерживаюсь правила: ни при каких условиях не браться за работу, под которую я не подписывался. И мне пофиг — что там у бизнеса в результате произойдёт. Если бизнес хочет изменить требования — нужно менять оплату и, обязательно, сроки.
Главный критерий все равно один — результат.Вот только критерии разные. Если мы говорим о том самом переписывании на C#.
Если мы запланировали версию на C# через полгода, а я за месяц отконвертировал только базовые классы и юнит-тесты, то с моей точки зрения — всё хорошо, я сделал адеватную часть работы.
А с точки зрения — произошла полная катастрофа: у него через месяц была назначена встреча с потенциальными инвесторами — и там нужно было что-то показать. А показывать-то и нечего.
Я вам про цель, вы мне про (неадекватные) сроки.Это связанные вещи. Сравните с автомехаником. Вы «уграли машину в ноль» и привезли её на грузовике в ремонт. Вам говорят: «двигатель — усё, тут нужно капиталку делать». Так вот если вы на это подписались — то не вина механика в том, что через три дня вы собрались ехать на дачу, а машина разобрана!
Можно было бы договориться о том, чтобы в двигателе заменили бы, по-быстрому, клапана, вы бы съезли на дачу, а уж потом — делали капиталку… но это должен быть ваш выбор, не выбор автомеханика!
То же самое и с программами: я не решаю проблемы бизнеса — я решаю проблемы, которые бизнес передо мною поставил и которые, что важно, я принял.
То же самое и с программами: я не решаю проблемы бизнеса — я решаю проблемы, которые бизнес передо мною поставил и которые, что важно, я принял.
Это тавтология. Проблемы которые бизнес перед вами поставил это и есть проблемы этого самого бизнеса.
1) Бизнес не ставит вам задачу: Хоту разработать приложение на С# состоящее из нескольких модулей, с REST API и интерфейсом на Angular, работающем в облаке Google.
2) Бизнес приходит и говорит: Вы профессионал, я не знаю как и что там делать, но мне нужна от вас CRM система, или приложение для расчета налогов, или приложение для прогнозирования погоды.
Вы меня убеждаете в том, что вы занимаетесь тем что написано в пункте 1), я говорю о том, что вы по факту занимаетесь тем что написано в пункте 2). Хотите вы этого или нет, ваши абстрактные кони в вакууме ни кому не нужны и платят вам не за это.
Бизнесу/заказчику/людям пофигу как там оно устроено внутри и из чего состоит. Это вообще не их головная боль. Они хотят чтобы то что вы для них делаете решало их реальные проблемы.
И мы вообще сейчас не рассматриваем вопрос приняли вы что-то или нет. Как вам будут оплачивать работу Приняли, делаете, не приняли, делает кто-то другой.
Вот только критерии разные. Если мы говорим о том самом переписывании на C#.
К слову бизнес не ставит таких задач. Они не знают что такое C#. Если вам ставят такие задачи, то вам их ставит не бизнес а какая то менеджерская прослойка, которая понятия не имеет о чем она говорит. Выбор технологий вообще дело не бизнеса а технарей исходя из требований этого самого бизнеса.
Это связанные вещи. Сравните с автомехаником. Вы «уграли машину в ноль» и привезли её на грузовике в ремонт. Вам говорят: «двигатель — усё, тут нужно капиталку делать». Так вот если вы на это подписались — то не вина механика в том, что через три дня вы собрались ехать на дачу, а машина разобрана!
Можно было бы договориться о том, чтобы в двигателе заменили бы, по-быстрому, клапана, вы бы съезли на дачу, а уж потом — делали капиталку… но это должен быть ваш выбор, не выбор автомеханика!
Моя проблема здесь как «бизнеса» — Машина не едет, а я хочу чтобы она поехала. И именно эту задачу решает автомеханик. Все остальное детали, которые к нашей дискусси не имеют никакого отношения.
Бизнес часто не может оценить адекватно сроки — да
Бизнес часто не знает что должно получиться в итоге — тоже да.
Бизнес иногда лезет с нравоучениями (типа делай на вот этом) — да такое бывает.
Я с этим с вами не спорю. Это все есть, я с этим согласен но это вообще о другом. Все эти вопросы закрываются экспертным мнением (вашими условиями и мнением как исполнителя).
Но бизнес как правило всегда знает, каких целей он хочет достичь вашими руками. И именно для этого вы ему нужны, чтобы он достиг своих целей и решил свои проблемы, а не те которые вы себе придумали.
2) Бизнес приходит и говорит: Вы профессионал, я не знаю как и что там делать, но мне нужна от вас CRM система, или приложение для расчета налогов, или приложение для прогнозирования погоды.Извините — но мне он этого не говорит. Он либо говорит моему PM'у, либо сам работает PM'ом если компания маленькая.
Они хотят чтобы то что вы для них делаете решало их реальные проблемы.Это их законное желание — но это не то, под чем я подписываюсь.
1) Бизнес не ставит вам задачу: Хоту разработать приложение на С# состоящее из нескольких модулей, с REST API и интерфейсом на Angular, работающем в облаке Google.Вот именно так и только так он её и ставит. Сам или с чьей-то помощью — меня не волнует. В некоторых условиях я могу ему помочь составить задачу в подобных терминах — но и только.
Хотите вы этого или нет, ваши абстрактные кони в вакууме ни кому не нужны и платят вам не за это.Когда-то, много лет назад, я соглашался с подобными доводами. Но те времена — давно прошли. Сейчас я просто не буду подписываться на задачу класса 2). Это — не то, что я умею делать и это — не мои проблемы. Её нужно сначала свести к задаче класса 1), а потом уже заниматься чем-то ещё.
К слову бизнес не ставит таких задач.Ставит. Я этот пример не придумал. Он более, чем жизненный.
Они не знают что такое C#.В моём случае речь шла о CEO и разговоре/демонстрации потенциальным инвесторам. И о том, что такое C# и Java знали как те, так и другие. Да, они знали о них на уровне «наши подрядчики работают с C# и не работают с Java» — но они об этом знали и для них это было важно.
Если вам ставят такие задачи, то вам их ставит не бизнес а какая то менеджерская прослойка, которая понятия не имеет о чем она говорит.Ну… если владельца фирмы отнести к «менеджерской прослойке»…
Выбор технологий вообще дело не бизнеса а технарей исходя из требований этого самого бизнеса.Зависит от бизнеса, извините. Но если бизнес большой и там есть «менеджерская прослойка», способная это делать… этот подход тоже годится.
Моя проблема здесь как «бизнеса» — Машина не едет, а я хочу чтобы она поехала.Возможно — но это бизнес-задача только если вы, как бизнес, предоставляете машины в прокат. В противном же случае бизнес-задача будет другая. Ну, скажем «отвезти руководителя на встречу» или «доставить запчасти в удалённое подразделение». Но механику наплевать на ваши запчасти и ваших руководителей. Ему важно знать — будете вы оплачивать расточку клапанов или полную переборку двигателя. В обоих случаях «машина поедет», вот только в первом случае он встанет через 200 км, а во-втором — сможет ещё несколько тысяч километров отмотать. Однако первое можно сделать за день-два, а на второе потребуется пара недель. И вот механик выкладывает на стол эти варианты — а дальше уже бизнес решает какой ему подходит.
Ровно то же самое происходит с программистами. А попытки сформулировать задачу в бизнес-терминах и этим ограничиться следует пресекать — ничем хорошим это не кончается.
И именно для этого вы ему нужны, чтобы он достиг своих целей и решил свои проблемы, а не те которые вы себе придумали.С этим я не спорю. Я спорю с тем, что меня, с какого-то перепугу, всё это должно волновать.
А если они от вас услышали о существовании Go и вообще, то да, работать возможно и не надо там.
На практике оно означает: попробуй сначала понять, что происходит, а уже потом начинай критиковать и предлагать решения.Общепринятое название этого принципа — Chesterton's fence
Почему вы не хотите раскрывать, как и зачем были приняты те или иные решения
Странный коммент. Разве не понятно? Питон 2, потому что на нем написано сотни тысяч строк кода, а для переписывания нету времени — вечные дедлайны.
Как-то один человек подошел ко мне и сказал за полгода до релиза игры, которую мы писали в течении трех лет большой фирмой: «этот фреймворк уже не модный, давай перейдем на другой фреймворк, может какие плюшки интересные будут». Вот что у такого человека в голове творится? У нас есть игра в бете, в которую уже играют тысячи людей, которая работает и соответствует желанию дизайнеров. И за полгода до релиза он предлагает перейти на другой фреймворк просто так. На совершенно неизвестный команде фреймворк за полгода до релиза.
Почему выбран этот фреймворк, что есть? Да, так исторически сложилось. Как вообще разница, почему? Может потому что другого впринципе не было. А может потому что в тот день лид поленился и использовал первую ссылку. Когда говорят «исторически сложилось» про такие вещи, то говорят: «какая разница почему? давай не вспоминать, почему мы приняли то или иное решение 5 лет назад, давай подумаем, как сделать продукт лучше сейчас».
Если программист готов разламать всю экосистему разработки без шанса на исправление до релиза ради сиюмитной прихоти — есть два варианта:
1. Он крайне тупой и просто не понимает, что предлагает
2. Он саботажник и ему вообще плевать, выйдет ли продукт и в каком качестве
В любом случае такого работника не пожелаю никому заполучить ни в одном предприятии. То есть именно того программиста, о котором вы говорите — который сознательно выбирает решение, которое приведет к невозможности выпуска продукта, потому что хочет за деньги работодателя потренироваться.
Вот на угольной станци кочегар перестал подкидывать уголь в печку, потому что ему слишком жарко. Плевать, что люди по городу мерзнут, он и не обещал, что сделает городу лучше сейчас. А вот то, что жарко кочегару — реальная проблема.
Вот на угольной станци кочегар перестал подкидывать уголь в печку, потому что ему слишком жарко-> потерял работу в тот же день. Поверьте, если такая возможность у него была бы, то с удовольствием пользовались бы. Точно так же, как рабочие на заводах забивают втулки молотом, когда их не проверяют (факт реален, и взят не с потолка).
Программист в этом плане делает работу, у которой нет четких показателей эффективности, решения имеют двойное дно, да и когнитивных способностей большинства программистов хватает, чтобы придавать своим решениям благородный вид.
А мы с Вами спорим о разных вещах. Вот Вы говорите, что забить болт на бизнес, и качать скиллы — плохо. А я ведь и не спорю, что плохо, и тоже так считаю. Я говорю, что это выгодно, и не вижу программисту выгоды делать иначе.
Я говорю, что это выгодно, и не вижу программисту выгоды делать иначе.
Подолью масла, уж не обессудьте. Это выгодно, пока отрасль еще не сформировалась. Это выгодно, не профессионалам, т.к. можно делать из людей идиотов и при этом не напрягаясь зарабатывать неплохие деньги. О чем говорят сейчас все пионеры отрасли, такие как Мартин Фаулер, Дядюшка Боб и другие? О том, что отрасль очень молодая и профессионалов очень мало.
Выгода программисту делать иначе, заключается в том, что делая иначе он становится на путь настоящего профессионализма, который в дальнейшем спасет его карьеру. Вечно так как сейчас все равно продолжаться все равно не будет. И если посмотрите, к примеру всякие «конструкторы сайтов» уже отнимают некоторые рабочие места у низко квалифицированных кадров, которые еще 10 лет назад клепали сайт за сайтом в одиночку рисуя цифры с потолка.
Странный коммент. Разве не понятно?
Нет не понятно.
Я, когда прихожу в новую компанию, хочу конкретно знать почему и при каких условиях и обстоятельствах были приняты те или иные решения во первых. А во вторых хочу понять сам бизнес и его потребности. Из первых рук, от владельцев.
Как раз чтобы не ходить и не предлагать идиотские решения из категории: "- Все гавно, надо переделать.", а для того, чтобы понимать как с тем что уже есть жить и работать, что менять, что оставлять как есть и вообще куда двигаться и какие проблемы нужно решать.
Питон 2, потому что на нем написано сотни тысяч строк кода
Отвечу честно и прямо. По моему мнению, это вообще не аргументы.
Я сразу спрошу: А почему тогда не Java, на ней еще больше кода написано. А почему не JavaScript, на нем вообще тонны кода и куча недорогих спецов. И т. д., и т.п.
Если вы выбрали технологию исключительно из-за популярности, вы решали свои проблемы, а не проблемы бизнеса. А именно следующие:
1) Чтобы было просто найти того кто потом это будет поддерживать
2) Чтобы как можно меньше пришлось писать кода и в принципе думать
Аргументы это:
1) Потому что на момент создания продукта стояли «такие-то» задачи
2) Кол-во разработчиков было «такое», их квалификация была «такая»
3) Бюджет был «такой», выбор был среди «того то» и «того то»
4) Стратегия была «такой-то»
а для переписывания нету времени — вечные дедлайны.
В таком случае надо уходить из профессии. Потому что дэдлайны это нормально, это не повод не переписывать те или иные части системы. «Нет времени» — это про квалификацию и самоорганизацию. У бизнеса никогда нет времени, и ни когда не будет. Надо приспосабливаться к ситуации. Этот процесс итерационный. Пишешь новую фичу, увидел плохой кусок кода, сел и по пути переписал.
Есть несколько более объективных причин не переделывать тот или иной код:
1) Данный код работает и на 100% выполняет свою функцию.
2) Данный код не удорожает дальнейшее развитие продукта и не мешает идти вперед.
3) В данный момент отсутствуют необходимые для этого ресурсы.
Абстрактная фраза «Исторически сложилась», (при отсутствии желания раскрывать подробности) для меня звучит так: "- Отстань, мы тут думаем исключительно с своих личных интересах. Чем сложнее и запутаннее продукт, тем сложнее нас уволить, тем дороже обходится его поддержка, тем больше мы получим ЗП и тем увереннее будем себя чувствовать."
Я кстати тоже пару раз употреблял, эту фразу. Буквально так: «Так исторически сложилось, потому что ресурсы не позволили использовать вот это и то решение. Сейчас это дерьмо работает и выполняет свои задачи. По моим прогнозам оно не принесет проблем еще где то пол года, потом мы будем пилить фичу которая затронет это дерьмо. Если у тебя есть желание, давай сядем, подумаем над тем что с этим можно сделать и зафиксируем на бумаге. Либо отложим этот вопрос до того момента пока это дерьмо не начнет мешать»
Я сразу спрошу: А почему тогда не Java, на ней еще больше кода написано.
Нет, не вообще в мире, а вот прям в этом проекте. Питон 2 до сих пор, ибо на нем написано сотни тысяч строк кода.
Потому что дэдлайны это нормально, это не повод не переписывать те или иные части системы
Серьезно? Для вас рефакторинг — это переход на Гоу, как выше там кто-то говорил?
Вообще я понял. Вы говорите о тактических решениях, а я — о стратегических. Тем не менее даже в пяти строчках кода ответ «так исторически сложилось» иногда вполне достаточен. Это значит, что нету особых причин для именно такого подхода и вы можете предложить подход получше. Что не так?
Серьезно? Для вас рефакторинг — это переход на Гоу, как выше там кто-то говорил?
Для меня рефакторинг, это поменять имена переменных и названия методов на более выразительные. Вынести что-то в отдельный модуль и т.д. Не изменив при этом ни одного теста.
Тем не менее даже в пяти строчках кода ответ «так исторически сложилось» иногда вполне достаточен
Эта фраза без раскрытия подробностей всегда звучит как «От***бись». И это просто не профессионально.
Когда перестанет работать (появятся новые требования, или прекратится поддержка старой технологии, или ещё что-то) — тогда и будем переписывать.
Подобная фраза, с моей точки зрения — это не повод оставить что-то в покое, а руководство к действию: если единственная причина — то, что кто-то поленился в своё время сделать осмысленный выбор, то это значит что выбор не поздно сделать и сейчас!
Другое дело, что нужно адекватно оценивать силы: если вы хотите начать рефакторинг, который даст вам экономию 5 строк и хотите затратить на это полгода, то вас никто умным не назовёт… а вот если можно выкинуть 500 строк кода, потратив на это пару часов работы… почему нет?
то, что кто-то поленился в своё время сделать осмысленный выбор, то это значит что выбор не поздно сделать и сейчас!Совсем необязательно. Если кто-то поленился или не смог сделать выбор 5 лет назад, то это совсем не значит что сейчас это реально поменять с текущими ресурсами компании.
Другой вопрос, что вам может быть невыгодно менять это решение вот прямо сейчас — ну так заведите баг и отслеживайте там соотвествующие решения.
Заодно будет что ответить последующим новичкам вместо пресловутого «тут брать лестницу и доставать бананы не принято».
Если вы не можете этого поменять сейчас, то, стало быть, вы не сможете этого сделать и через 10 лет, то есть ваша компания — ходячий труп и работать там не стоит.Конечно же нет. Во-первых банки с системами на коболе до сих пор существуют и нормально себя чувствуют. Да, естественно когда-нибудь это все-таки умрет, но оно уже прожило больше абсолютного большинства проектов на любом модном языке/технологии. Оно прожило больше большинства проектов даже если считать с того момента как кобол устарел.
С другой стороны через 10 лет необходимость в данном инструменте может отпасть и его просто не придется менять. Или экономическая выгода переделывания в какой-то момент все-таки перевесит и вы таки сможете поменять через 10 лет. Но не сейчас, потому что сейчас это пока что не выгодно.
И это, наверняка, не все варианты когда ваше утверждение неверно.
Другой вопрос, что вам может быть невыгодно менять это решение вот прямо сейчасИменно! Значит сейчас выбор делать — поздно. Вы же сами себе противоречите.
ну так заведите баг и отслеживайте там соотвествующие решенияВы хоть раз сталкивались с багом (а здесь это вообще не баг, в лучшем случае улучшение), которому лет 5? На сколько долей процента информация в нем была актуальна? По моему опыту в живом проекте баги открытые дольше года проще закрыть чем разобраться какую часть из него вообще имеет смысл читать.
Заодно будет что ответить последующим новичкам вместо пресловутого «тут брать лестницу и доставать бананы не принято».Ой да ладно, как будто ответ: «Да, вы правы, я завел баг 5 лет назад и мы ждем когда наконец настанет время его сделать» сильно лучше. «Исторически сложилось» хотя бы прямо в ответе не подразумевает что этого никто делать не будет, ваш же вариант убивает любую надежду.
Сталкивался и не один раз. Как раз в случае, когда что-то нужно кардинально переделать — рефакторинг может и больше занять. А уж 2-3 года, когда процесс идёт — это вообще норма.ну так заведите баг и отслеживайте там соотвествующие решенияВы хоть раз сталкивались с багом (а здесь это вообще не баг, в лучшем случае улучшение), которому лет 5?
Вот, кстати, у нас переход системы сборки с, внезапно, python2, на, внезапно, Go… начали два года назад, к 2020му должны завершить… Вопрос «успеем или нет» — пока открыт.
Понятно, что под тем «зонтичные» бегом сейчас висят десятки других… Но первый год его существенны — там шла только медленно текущая дискуссия на тему «как, когда, что» мы планируем делать…
Ой да ладно, как будто ответ: «Да, вы правы, я завел баг 5 лет назад и мы ждем когда наконец настанет время его сделать» сильно лучше.Да, разумеется.
«Исторически сложилось» хотя бы прямо в ответе не подразумевает что этого никто делать не будет, ваш же вариант убивает любую надежду.Ссылка на баг как раз этого не подразумевает. Она даёт вам возможность посмотреть — насколько на эту тему вообще думали и что решили. И да, если все предложения по изменению чего-либо так и висят годами и «всем пофиг», то ясно, что отсюда нужно уходить: вы так и будете валить лес тупым топором, потому что вам его заточить не дают.
А в нормальной же ситуации люди завезённые баги, вообще-то, стараются закрывать. И вопрос «а почему сделано вот через такую… хмм… странную конструкцию» должен либо получить нормальный ответ («мы не можем перейти на Go с Python 2, пока не будут модули для X, Y и Z» — и дальше, соответственно, ещё три бага), либо вы получите задачу, под которую можно уже пытаться получить ресурсы (успешно или нет — другой вопрос) — если все «исторически сложившиеся» причины пропали, и, соответственно, блокеров больше нет.
P.S. Кстати если все три бага (про X, Y, и Z) закрыты как «infeasible» — то это ещё не конец! Кто-то другой может из за вас сделать — и тогда можно будет заново активизировать и родительский баг! А вот ответ «так исторически сложилось» — ничего подобного делать не позволяет. В чём, собственно, и проблема.
> Но что значит эта фраза?
Она значит:
Люди, народавшие этот хлам до тебя — они теперь твои начальнички. Они свой код любят и лелеят, но предпочитают в него больше не соваться потому что это не барское дело. Они даже стараются не вспоминать о том, что когда-то работали простыми кодерками, принимали от кого-то указания и правили код после ревью. Жри кактус и молча улыбайся. В противном случае сразу после первого вопроса «кто и почему это писал», будет принято кулуарное решение о том, что ты не влился в коллектив (недостаточно софтскиллз, не разделяешь корпоративные ценности, нелоялен, критически настроен по отношению к коллегам — может быть любая причина другая, которую все равно никак не померишь) — это решение доведут до твоего сведения в день окончания испытательного срока.
кто и почему это писалОбычно на этот вопрос отвечает система контроля версий. В идеале, к коммиту должен быть указан таск, чтобы и на «почему» ответить.
С тасками еще проще — в запущенных случаях никаких тасков нет (как нет и джиры, например) и постановки задач приходят к новому сотруднику в виде потока голосовых звонков, цитат из корпоративного чата и цитат из писем заказчика. От новичка при этом требуется проактивная позиция — он должен задавать вопросы по своей задаче случайным людям, вызывая у последних взрывной рост ЧСВ.
Все люди умны и адекватны, если не доказано обратное.
Это ложное утверждение. По сути повествования оно строится как контр-тезис к утверждению «Все люди дебилы». Но строится некорректно.
В свое время, в университете, у нас на зачете по алгебре логики преподаватель любил задавать один вопрос. Сам он был почти лысый. И давал такое задание студентам — сформулируйте отрицание очевидно ложного выражения: «Все люди лысые». Один из самых распостраненных ответов который давали студенты не думая был — «Все люди с волосами».
На что он с театральной паузой и неподдельной болью в глазах переспрашивал — «И даже я?...»
После этого все, кто сдавал эказамен навсегда умудрялись запомнить, в чем суть булевой операции отрицания выражения :)
Не все люди адекватны и умны — это утверждение истинно.
Не все люди дебилы — и это утверждение тоже истинно в то же время.
Исходите из истинности этих двух предположений и вы не только не будете попадать в неловкие ситуации, но и принесете максимальную пользу своим свежим взглядом на новом месте на устоявшиеся практики и процедуры.
«не все» будет гораздо легче воспринимать, если запомнить, что это синоним «некоторые»
Нет, это не синоним. И в таком восприятии часто кроется много заблуждений.
«не все» — это «некоторые» ИЛИ «никто».
Кванторы всеобщности и существования не вляются прямыми антагонистами.
Презу́мпция невино́вности (лат. praesumptio innocentiae) — один из основополагающих принципов уголовного судопроизводства, заключающийся в том, что лицо считается невиновным, пока его вина в совершенном преступлении не будет доказана в порядке, предусмотренном законом, и установлена вступившим в законную силу приговором суда
Если следовать вашей логике, то получается, что презумпция невиновности тоже не имеет смысла, поскольку некоторые люди виновны и сидят в тюрьме, а некоторые нет.
Соответственно аппеляция к «презумции ума» на аналогии с «презумпцией невиновности» (оставляя открытым вопрос насколько вообще такая аналогия уместа) — это не более чем условность в способе упорядочивания рассуждений принятая конкретным индивидом. Да, можно делать и так. Но можно и по другому.
Ваш комментарий вполне себе не более чем условность ;) Только смысл от меня ускользает. Причём здесь логическая ошибка? В чем она заключается?
Причём здесь логическая ошибка? В чем она заключается?
В утверждении, что Все люди умны и адекватны, если не доказано обратное.
И тем более в утверждении Про себя я называю это правило: «презумпция ума». Оно абсолютно универсально, и работает почти во всех ситуациях и для всех людей.
Оба утверждения весьма и весьма спорные.
Причем формулируемое следствие вполне годное:
На практике оно означает: попробуй сначала понять, что происходит, а уже потом начинай критиковать и предлагать решения.
Но оно выглядит как классический пример ложной индукции и это единственная причина, по которой я дал свои комментарии. Вы сделали такой вот вывод, но другой читатель может принять ваши исходняе утверждения а прийти к другим выводам, отличных от ваших. Например, полностью отказаться от поиска ошибок в действиях других, приспосабливая свою позицию вместо указания на ошибочность сложившегося порядка.
Не все люди умны и адекватны по умолчанию. Но они и совсем не дебилы.
На мой взгляд, эта предпосылка больше соответствует реальности и выводы из нее более полезны на практике.
Пусть лучше читатели увидят этот тред и задумаются об этом:)
Это ложное утверждение. По сути повествования оно строится как контр-тезис к утверждению «Все люди дебилы». Но строится некорректно.
Как указали в ветке рядом, презумпция ума не строится как контр-тезис к чему-либо. Кроме того, говорить, что она является ложным утверждением, значит не понимать, что в точности она утверждает.
Во-первых, презумпция это импликация «если ..., то ...»: если не доказано обратное, то человек считается умным. Во-вторых, презумпции всегда верны с точки зрения логики: если не доказано обратное, то X <=> если не «не X», то X
презумпция ума не строится как контр-тезис к чему-либо
Это, вообще говоря, неизвестно. Строится оно так и или нет. Что было на уме у автора только ему известно. Утверждение лишь говорит о том, что эта логическая конструкция эквивалентна другой с точностью до изоморфизма.
презумпции всегда верны с точки зрения логики
Истинность логического высказывания как элемента булевой алгебры и семантическая верность утверждения с точки зрения здравого смысла — это, как говорят в Одессе, «две больших разницы».
если не доказано обратное, то человек считается умным.
Это абсурд. Это видно даже невооружённым глазом. По смыслу это тоже самое, что: «если не доказано обратное, то человек считается ТОРТОМ». И для этого даже не нужно поверхностное знание вводного курса алгебры. Причина кроется в том, что по определению импликация определена однозначно только для результата, который обычно принято записывать буквой «Л» или «0»(ноликом или кружочком, да как угодно). По своему применению импликация лишь приближена к союзам «если…, то…», но напрямую им не эквивалентна. Это просто математический формализм.
если не доказано обратное, то я буду считать, что человек умный
Формально, это утверждение идентично «если не доказано обратное, то я буду считать, что человек глупый»… ключевое здесь — я буду считать, а считать можно что угодно, ктож запретит… Но ни «форма», ни «импликация», ни «булева алгебра» — тут ровным счётом непричём. Эти все фигуры речи лишь «семантические вопросы» и область человеческих фантазий. Их обсуждение имеет такую же ценность, как обсуждение цвета галлюцинаций под воздействием лёгких психотропных веществ.
Все люди умны и адекватны, если не доказано обратное.
Первое правило волшебника гласит: "Люди глупы".
Как мне представляется, это более правильное представление (особенно если рассматривать полную формулировку правила). Только нужно понимать, что ты тоже человек и очень даже подпадаешь под это правило.
Если вспомнить первоисточник, то там исключений нет. Глупы все, ибо все способны поверить в то, что хочется видеть правдой, или в то, что страшно увидеть правдой.
Опять же, в первоисточнике приводится пример, как первое правило использовали против умного (казалось бы), опытного чародея (пример, кстати, жизненный, в реальной жизни встречающийся, и, что характерно, никакой магии, голая психология).
И я бы даже добавил к первому правилу (исключительно ради красного словца, на истину никак не претендую).
Ум — это мера понимания чужой глупости.
Мудрость — это мера понимания собственной глупости.
То что вы называете «презумпция ума» — это обычная наивность и доверчивость. Со временем это обычно проходит. Эмпатия штука сильная в социальных сообществах, но есть и масса других, не менее эффективных, способов поддерживать нормальный контакт с людьми.
В реальной жизни в принципе с любыми людьми, можно и нужно обсуждать проблемы, если в этом есть необходимость, независимо от оценки их умственных способностей. Гораздо практичней принимать реальность такой, какая она есть, а не приписывать ей желаемые свойства. И вместо «презумции ума» просто придерживаться «презумции взаимного уважения», а вот наличие «ума» ещё надо доказать…
Задумайтесь лучше об этом, чтоб, действительно от ваших стараний была польза.
На самом деле — нет. Просто все люди находятся в разных областях познания мира. Так что, в каких-то областях даже умнейшие люди — полные придурки.
В общем, без обид, весь смысл в одной фразе:
Никогда не делайте абсолютных утверждений о реальном мире.
Мир всегда найдёт, чем вас удивить… ой… кажется, я сделал абсолютное утверждение :)
Никогда не делайте абсолютных утверждений о реальном мире.
Очень самоиронично. Квантор "никогда" подразумевает абсолютность утверждения, таким образом это утверждение противоречит самому себе.
Считай что все люди безумные идиоты, если не доказано обратное.
Справедливости ради, разве не таковы по умолчанию все граждане с точки зрения правоохранительных органов, все читатели инструкций с точки зрения их авторов, все ученики с точки зрения учителя и т.д.
Как ни странно, ненавистная всеми Винда делает, как настоящая женщина — ровно наоборот.
Проблема в том, что новички учатся чему-то новому, не изучив старое, потому что то самое старое — унылое г. Но это не всегда так, это унылое г. раньше было самым прорывным что было на планете. Отсюда и вездесущая джава и легаси. И это бесконечный процесс. Завтра python3 станет унылым г. при выхоле Go2, например.
А есть ситуации когда приходишь в компанию, которая делает оборудование, претендующее на надёжность, а там ардуина.
Хочешь переписать? Заэстимируй, посчитай сколько денег для бизнеса уйдет. Как вариант можно сделать отдельный новый проект для новых девелопментов и потихоньку на него переходить.
Докер? Сделай сам для себя, автоматизируй все процессы сборки — внезапно выяснится что ты очень даже перформишь по мнению манагеров, только за счет рестартов.
Вебпак? Если все и так собирается одной командой то смысла нет. Если не собирается то простейший шелл или нпм скрипт может помочь.
Полгода назад для сборки HTML5-игр у меня был 1 маленький JS-скрипт, который работал очень быстро и занимал всего несколько килобайт. Этого было вполне достаточно.
Летом, для совместимости с Jenkins, перешли на Webpack. Добавилась папка node_modules в сотни тысяч файлов и десятки мегабайт. Скорость сборки вебпаком — дольше в несколько раз. Это уже не говоря о зависимости от Интернета, которая требуется для npm install. Так что я могу понять ситуацию в начале статьи.
Но… совместимость с промышленным стандартом (и другими разработчиками) и системами автоматизированной сборки решает. Так что я могу понять и тех, кто использует webpack даже для ситуаций, которые по сути заключается в копировании файлов и замене текстов (скрипт для ноды пишется меньше чем за сутки, ты получаешь полный контроль над процессом и ультимативную скорость, но привыкшие к webpack смотрят на тебя, как на вомбата ))
но легаси. переделать долго и дорого
Все люди умны и адекватны, если не доказано обратное.
Ok. Согласен.
попробуй сначала понять, что происходит, а уже потом начинай критиковать
ИМХО это не следует из первого, т.е. ИМХО критиковать, т.е. задавать критические вопросы можно и нужно с первого шага. Если люди умны и адекватны, то они ответят, да еще порадуются, что взяли нового умного сотрудника. (Сужу по себе: я радуюсь, когда новый сотрудник сразу задает мне вопросы).
И простите — исходя из презумпции ума технический вопрос по статье:
Там уже стоит готовый к работе ноутбук.
Почему ноут, а не десктоп — последний и дешевле, и конфигурировать, и ремонтировать его проще, м.б. я отстал от жизни?
Почему ноут, а не десктопТочного ответа я не знаю, но там где я сейчас работаю это, похоже, сделано как самый простой способ обеспечить работникам мобильность. Как в пределах офиса — сходить пообщаться в переговорке, показать что-то на митинге, так и просто поработать из дома на рабочем инструменте не заморачиваясь обустройством рабочего же пк дома. Плюс компания последние полтора года (а то и больше) активно растет и занимаемый опенспейс каждые несколько месяцев несколько меняется, так что примерно раз в полгода твое рабочее место меняет свое местоположение в офисе и ноутбук вместо ПК здорово упрощает при этом жизнь. К нему правда идут еще мониторы дополнительные, так что все равно есть заморочки. Но я напрямую не спрашивал, это скорее из наблюдений.
Почему ноут, а не десктоп — последний и дешевле, и конфигурировать, и ремонтировать его проще, м.б. я отстал от жизни?
Само как-то вышло. Неосознанно. Люди вокруг меня уже давно все работают за ноутбуками. Ничего не имею против стационарного компьютера.
ИМХО для презентаций и командировок дешевле иметь несколько дополнительных ноутов на несколько десятков сотрудниковНе проще. У разных сотрудников — разные проекты, разное окружение, они привыкли к разному софту. Если мне нужно ехать в командировку, то я совсем не горю желанием тратить день заранее на поднятие нужного окружения и потом еще день на его чистку. Ладно, почистить можно и накатыванием образа, но настраивать и загружать все возможно необходимые данные? Гораздо проще, как раз, когда рабочее место можно взять и увезти с собой.
Хотя ситуации бывают разные и иногда, я уверен, что без именно ПК не обойтись.Да. Для многих работ я меняю «винт», а бывает, что и без «винта».
Еще одно соображение против ноута — это безопасность. Пропажа или кража ноута со всеми исходными кодами создаваемого ПО и БД для многих компаний крайне нежелательна. Системный блок ПК утащить и незаметно вынести гораздо сложнее.
попробуй сначала понять, что происходит, а уже потом начинай критиковать и предлагать решения.
Беда в том, что люди начинают следовать этому простому и понятному правилу только наломав кучу дров! И так по кругу.
Эту же статью я могу сжать в совсем короткий тезис, который был мною увиден в течении последних 10 лет. Берут на проект человека, рассказывая про гениальный новаторский проект и самые современные технологии. Естественно в вакансии требования на знание самых последних версий, подходов/паттернов и т.д. Первые три месяца специалист прозревает от того п*зде… а, что происходит на проекте, лезет со своими вопросами и предложениями. Через этот срок, когда кто-то ему задает вопрос про то, как он видит проект, и что нужно делать, ответ всегда одинаковый у всех без исключений: «Мне пох… й!»
А еще через небольшой промежуток времени такой специалист сваливает, так как его контора жестко обманула и кинула, обещав одно, а на самом деле макнув с головой в легаси. А «талантливым» разработчикам что создали это легаси, вместе с такими же менеджерами, только и остается писать статьи про
С другой стороны, если другими методами добиться кармы и плюсов нельзя, то система будет взломана. У тех ребят по 2к и 4к просмотров, все в плюсе.
Такие ответки на Хабре не редкость. Кажется, Хабру нужен новый инструмент: дерево взаимосвязей «пост-ответ».
Делаю такое крайне редко — на моей памяти вроде второй раз за три года — но тут минусы статье и автору я поставил. Первый раз был — когда в статье на полном серьёзе советовали тухлый китайский планшет на Атоме в качестве рабочей машины под Автокад.
P.S: На этот «вброс» накидали уже 2 шт «статьи-ответа». Их тоже проминусовал. Посты-вбросы, порождающие обсуждения «обо всём и ни о чём», ИМХО ведут к деградации ресурса. Не надо давать им плодиться.
возникает множество вопросов о том, что происходит у него в голове
Так задайте их!=) Так и спросите, мол, о сэнсей, зачем ты пишешь эти 12 строк, если можно написать одну, и ни один тест не сломается*?
с его слов, нечитаемы как раз — литералы
А вот, кстати, и половина ответа на ваши вопросы. Вам удобнее одно, ему другое, кому-то ещё – что-то третье. Объективных метрик удобства, читаемости и прочей феншуйности не существует, так что здесь спасут только code conventions. Возможно, вам стоит направить усилия как раз на их разработку и внедрение?
* — только не забудьте сначала это проверить, а то мало ли…
return formats.map(x => `.${x}`).join(',')
Вот вам контр-вопрос. Зачем писать по-модному, если можно написать по-простому? Зачем использовать шаблонные строки там, где они не нужны?
return formats.map(x => '.' + x).join(',')
Что же до сравнения понятности двух вариантов — я бы сравнивал их следующим образом. Есть данные, а есть разметка. Данные тут — точка и переменная (2 символа), разметка же содержит 3 символа в случае конкатенации и 5 символов в случае интерполяции. Получается, что конкретно в данном случае вариант с интерполяцией почти полностью состоит из разметки, что делает его довольно сложным для понимания.
В то же время, уже две конкатенации дают такую же синтаксическую нагрузку как интерполяция, а три — проигрывают ей. Поэтому лично я предпочитаю использовать простую конкатенацию для добавления префикса или суффикса, и интерполяцию для остальных случаев.
Поэтому возгласы: какой идиот это писал?! — совершенно излишни. Сначала нужно узнать про контекст, в котором решалась данная задача. А для этого нужно подойти к разработчику, который это делал и спросить чем он руководствовался при решении задачи.
Может там спешили к релизу, делали тяп-ляп, потом времени переделать не было — так оно и дожило то тебя. Поэтому автор может обратить внимание еще на пару мест в коде, которые также надо переделать.
Но вообще нужно помнить, что люди ошибаются и не рациональные решения могут быть даже у очень рациональных людей.
А до этого Вы не обсуждали? Я не программист, но на старой работе прекрасно знал, в каком месте наделано нетиповое спорное решение (говно) и по какой причине, поэтому когда мне указывали на это другие сотрудники, мне было, чем спокойно объяснить тот или иной нюанс, либо признать, что это косяк, который не исправлен по причине нехватки времени и более срочных задач.
Людей за идиотов считать конечно не нужно, но я не вижу проблем в том, что новый человек приходит на новое место и задается вопросами «что за фигня?» вслух. Вы же не человека идиотом называете, а решение идиотским. Проблема не в этом человеке, а в человеке по другую сторону, который на такие вопросы отвечает в стиле «ты что, самый умный тут?»
Наш офис (который считается «вспомогательным» и в котором «сидят» почти все «поддерживающие» подразделения, включая айтишников всех мастей) в тот момент как раз только что переехал в новое здание, по случаю чего в него съехалось все большое начальство из Очень Большого Города. Новый сотрудник решил, что лучше шанса ему может и не выпасть, поэтому, не откладывая ничего в долгий ящик, отмаршировал напрямую к Самому Большому Айтишнику, когда тот сидел за обедом с другими Очень Большими Начальниками, и, без предисловий и преамбул (но не забыв представиться!), выдал ему сходу и без прикрас всё (вообще ВСЁ), что думал об инфраструктурных решениях компании.
Удивленные боссы выслушали его, поблагодарили, после чего настоятельно попросили зайти к ним Местного Главного Айтишника, у которого в красках поинтересовались его недавно принятыми кадровыми решениями.
Говорят, что история компании (по крайней мере, нашего департамента) не знала других случаев разрыва трудового договора по инициативе работодателя всего через неделю после начала работы. Но товарисч, видимо, глубоко поразил всех…
Я не думаю, что шиномонтажник Формулы 1, который посреди заезда внезапно подойдет к президенту команды и начнет ему увлеченно рассказывать, какие шины Мишлен — кака, и как надо немедленно купить Бриджстоун, долго проработает в команде :)
Специалист по шинам, возможно оценил погоду, дорожное покрытие, другие факторы и пришел к экспертному выводу, что резину нужно срочно менять. На питстопе это делается за секунды! И плоха та команда, которая не держит ассортимент для заезда. Значит они реально самоуверенные дураки, которые сделали ставку всего на один вариант. Продолжим. Спеца по резине послали нах и избавились от него. Предположим, что команда проиграла. Стали после разбираться в причинах и пришли к выводу, что резина сыграла плохую шутку. Итог истории: команда проиграла дважды. Первый раз — проиграв в заездах, и второй — потеряв высококвалифицированного специалиста, который реально смог бы принести победу.
А вообще, у меня на этот счет статейка написана: cleverman.org/post/problemy-pri-roste-it-kompanii
После ее прочтения становится многое понятно, почему никому не интересен свежий взгляд и перемены. И даже такие серьезные проекты, как Дробокс, Скайп и многие другие, скатились до уровня УГ и помирают в жутких конвульсиях. А все потому, что зациклились на своей важности, исключительности, и своем внутреннем мирке, который оказался в итоге не конкурентоспособен.
Как странно, что никто в комментариях не упомянул Бритву Хэнлона, которая полностью противоречит смыслу статьи.
Презумпция ума