Ленивый программист — хороший программист?
Они вам не 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