Они вам не string-и!
Они вам не string-и!

У Билла Гейтса (или не у него) есть высказывание:

«Я всегда буду искать ленивого человека — он найдёт лёгкий путь решить задачу».

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

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

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

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

Да, хороший ленивый программист очень желает не работать много здесь и сейчас, однако он обладает и «навыком расчёта будущих трудозатрат». Что я имею ввиду? – Допустим, он [программист] сделал фичу, сделал видеопроигрыватель, – значит всё, можно пушить в мастер, как говорится? М-м, не всегда! Он сначала, вероятно, напишет документацию в нужных местах. А зачем? – он ведь ленивый и вряд ли захочет сейчас утруждать себя такой муторной работой. Однако, как я и сказал – «навык расчёта будущих трудозатрат». Если сейчас он не напишет документацию, то потом его коллеги будут спрашивать, как оно вообще работает, на что ему сначала надо будет залезть в свой код (спустя несколько месяцев-то), разобраться с ним, объяснить всё это своим коллегам (возможно не один раз). Он это понимает заранее и потому сразу пишет доки, т.к. это по трудозатрам значит, что ему надо всего лишь один раз объяснить это в своей голове, выписать, и всё – больше его не потревожат. Не хорошо ли, не умно ли, не лениво ли?

Ну, то есть теперь вы понимаете? – Лениться тоже надо тактически и с расчётом на будущее.

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

Хороший программист создан автоматизировать, а нужда в автоматизации подстёгивает в человеке лень...

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

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

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

В остальном же мысли я выкапывал из-за рубежа:

https://betterprogramming.pub/the-lazy-mindset-of-an-effective-programmer-68f4b70e3aac

https://exceptionnotfound.net/be-the-laziest-programmer-you-can-be/

https://levelup.gitconnected.com/a-good-programmer-is-a-lazy-programmer-8982b2d971bb

https://www.quora.com/Are-good-programmers-lazy

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


  1. lookid
    01.01.2022 23:18
    -4

    «Я всегда буду искать ленивого человека — он найдёт лёгкий путь решить задачу».

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


    1. Wesha
      01.01.2022 23:22
      +19

      А чем ленивее программист, тем он меньше знает

      Не путайте ленивого и невежду.


      1. Keyten
        02.01.2022 14:50

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

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


        1. mayorovp
          02.01.2022 15:55
          +7

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


        1. Wesha
          02.01.2022 22:24
          +1

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


        1. vvbob
          02.01.2022 22:32
          +4

          Велосипеды писать стоит в двух случаях

          1. для обучения написания велосипедов, но это не в прод, просто для себя

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

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


    1. tsurugi-no_ken
      02.01.2022 08:58
      +3

      Образец трудолюбия - это индусы пишущие тысячи строк кода в день.

      А результат трудолюбия - это рухнувший Боинг https://habr.com/ru/post/458224/


      1. telpos
        02.01.2022 22:14

        А где в html-фрагменте число статей в месяце?


  1. Dekmabot
    02.01.2022 00:09
    +6

    Это же просто красивое выражение, в котором, как и в каждой шутке, есть некая доля шутки, и некая доля правды.

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


    1. Rinkton_H Автор
      02.01.2022 02:20
      +1

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


    1. sim31r
      02.01.2022 19:13

      Ну софт они обычно покупают вместе с компаниями, начиная с MS DOS. Менеджеры как-раз не ленивые )


  1. GospodinKolhoznik
    02.01.2022 00:44
    +10

    У слова день есть определенное значение, которое за ним закреплено уже много веков. Согласно словарю Ожегова лень это отсутствие желания трудится. Сейчас часто можно услышать, когда словом лень называют что то совсем другое - желание сделать работу наиболее эффективным путем. Какая же это лень? Это высшая форма трудолюбия - не просто сделать дело, но и сделать его в кратчайшие сроки, с опережением графика, чтобы поскорее взяться за новую работу. Лень же это другое: когда человек либо вообще не делает работу, либо делает ее по принципу "и так сойдёт".


    1. tsurugi-no_ken
      02.01.2022 09:14

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

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

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


      1. GospodinKolhoznik
        02.01.2022 09:49
        +3

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


        1. F0iL
          02.01.2022 12:07
          +3

          Так это, как метко сказано в статье, "лень тактическая и с расчетом на будущее" - сначала напрячься, чтобы потом долгое время ничего не делать можно было делать меньше :)


    1. byman
      02.01.2022 10:29
      +4

      Статья напомнила мне одну очень древнюю цитату. Не ручаюсь за точность, но что-то вроде

      такого: "одно и тоже высказывание из уст цезаря звучит как что-то гениальное, а из уст плебея как глупость". Наверное, чтобы проверить гениальность идеи использования ленивого (по Ожегову ) программиста, нужно было привести эту мысль без упоминания Гейтса ;)


  1. kubrack
    02.01.2022 02:04
    +3

    Larry Wall обосновал и сделал хорошо известной эту мысль в Programming Perl (1st edition, 1991, Oreilly.).


    "We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris."


  1. PEACE_dez
    02.01.2022 03:02
    -1

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

    И, немного (?) не в тему, но Ваш КПДВ напомнил:

    god is Real;
    unless it declared Integer;


  1. voxy2
    02.01.2022 09:27

    Лень и эффективность - близнецы братья ?!

    Разве эффективно не значит - дорого ? Не значит.

    ( Сам сейчас решаю задачу недорого светильника для теплиц с эффективностью более 200 Лм\Вт )


  1. TimeCoder
    02.01.2022 10:54
    +3

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

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


  1. vvbob
    02.01.2022 11:46
    +1

    Тут уже написали, как впрочем и в статье это раскрыто, что речь скорее об эффективности, а не о лени.

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


  1. apachik
    02.01.2022 12:15
    +2

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


    1. vvbob
      02.01.2022 12:22
      +2

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


  1. b237
    02.01.2022 13:08
    +2

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


    1. Rinkton_H Автор
      02.01.2022 13:29

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


  1. svr_91
    02.01.2022 13:28

    Он сначала, вероятно, напишет документацию в нужных местах

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

    Хороший программист создан автоматизировать,

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


    1. Rinkton_H Автор
      02.01.2022 13:40

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

      Соглашусь, это звучит ещё ленивее. Нет предела совершенства для лени.

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

      Угу, когда я видел в других статьях фразу аля "Если вам приходится делать это дважды, то это необходимо автоматизировать.", то тоже недоумевал. Я всё же предполагаю, что автоматизация нужна, когда ожидается что это действие будет проделываться много и много раз. Например каждый день... на протяжении многих лет. Тут уже банальная математика. Что лучше? - 10 ч * 1раз против 0,5 ч * 999раз.


      1. tsurugi-no_ken
        02.01.2022 19:57
        +1

        По моему опыту "дважды", часто превращалось в многократно.


  1. shuhray
    02.01.2022 16:20

    Ленивый программист - жадный программист!


    1. Rinkton_H Автор
      02.01.2022 17:38

      Можете пояснить, как это связано?



  1. arthuriantech
    02.01.2022 18:59
    +1

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


  1. third112
    03.01.2022 06:19

    ИМХО статья с приветом капитану Очевидность. Много софта не пишут с нуля и, даже, статьи на Хабр подкрепляют цитатами (как обсуждаемая). Игра со значением слова "лень" и не больше.


    1. Rinkton_H Автор
      03.01.2022 12:21

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

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

      Я думаю(и надеюсь), что я всё же не один такой, так что для тех, кто ещё вообще не знаком с этой цитаткой Гейтса и статьям по теме, это будет также полезно.


      1. third112
        03.01.2022 19:02

        постоянно делаю всё сам, что забирает уйму времени.

        Какая от этого польза?


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


        PS Очевидно, что можно придумать много способов, как бесполезно тратить время. — С приветом капитану Очевидность.


        1. Rinkton_H Автор
          03.01.2022 22:21

          Конечно, если настолько всё преувеличивать, то оно выглядит очевидно. Однако, вопрос в том, насколько много надо лениться?

          До уровня использования высокоуровневых языков для создания сайтиков, вместо того, чтобы юзать Ассемблер. Или до уровня использования готовых устоявшихся БД аля SQL, вместо того, чтобы делать с нуля свою?

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

          Какая от этого польза?

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


  1. Mohave
    03.01.2022 11:49
    +5

    Добавлю пару ленивых практик от себя.

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

    2. Я настолько ленив, что перед тем что б что-то пушить я делаю базовое регрессионное тестирование и гоняю тесты, добиваю покрытие. Заодно мне позже сломают функционал с меньшим шансом ибо я покрыл тестами.

    3. Я ленив и не верю ни себе не окружаюшим на 100%. Мои IDE начинены различными средствами подсветки синтаксиса, проверки грамматики, SAST, сниппетами и т.п. Одна из первых вещей которые я делаю приходя в новую компанию - конфигурирую мои настройки автоформатирования кода под код стайл новой компании. И само собой я не говорю о чём то столь примитивном как функционал автоформатирования visual studio, который, как по мне, до неловкого примитивен. Мне лень иметь не консистентное форматирование кода которое замедлит его чтение, а тем более руками форматировать код.

    4. Когда я верстаю - я стараюсь не использовать margin и border, предпочитая им padding и outline. Это вызвано большим количеством responsive багов которые мне приходилось подчищать за другими разработчиками.

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

    6. Я люблю DAST решения в пайплайне ведь это фактически тестирование API набором дефолтных тестов, в том числе на некорректные значения, пускай и результаты таких тестов требуют некоторой квалификации, что б знать, что ложное срабатывание, а что нет.

    7. Я трачу время на изучение хороших практик, держу руку на пульсе state of art, ведь мне лень писать неэффективно.

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

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

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


  1. Mikluho
    03.01.2022 14:03
    +3

    Лень - она разная бывает :)
    Я в первый раз дзен ленивости программиста осознал ещё в школе, в 91-м. У нас тогда уже второй поток осваивал программирование в рамках информатики (я был в первом потоке). И вот, как-то раз, зайдя между делом в компьютерный класс, я наблюдал как десятиклассники пишут лабораторку, в которой надо было на бейсике нарисовать шахматную доску с шашками (схематично, квадратики, кружочки, не более). Мимоходом глянув в мониторы я узрел очень неленивого программиста - весь его экран был заполнен командами вида "draw_rect(12,24,24,36)". А ещё у него на столе лежала тетрадка, где на одной половине были расчёты, а на второй - выписаны цифры... Я бы так никогда не смог :)
    Собственно, моя программа годовалой давности состояла примерно из трёх циклов.

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

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


    1. Wesha
      03.01.2022 20:36
      -1

      Мимоходом глянув в мониторы я узрел очень неленивого программиста - весь его экран был заполнен командами вида "draw_rect(12,24,24,36)"

      Дайте угадаю. Парниша был по обмену из страны далёкой Ындии?


      1. Mikluho
        04.01.2022 15:49

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


  1. souls_arch
    04.01.2022 00:24

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


    1. Rinkton_H Автор
      04.01.2022 12:27

      Да, такой пунктик тоже был в статейках:

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

      (откуда цитата я уже указал ссылку в посте: https://eax.me/lazy/)

      Однако, он мне показался немного очевидным, так что я не стал его включать.