О ярлыках в программировании
Есть в современном программировании такое расхожее мнение: "нельзя изобретать велосипед". Имеется в виду, что не надо писать с нуля какой-то код, если кто-то что-то подобное уже написал.
Я считаю, что это - стереотип, ярлык, действующий подобно ярлыку "красно-коричневых". Как и любой ярлык он провоцирует бездумное применение, отчего может быть достаточно вредным.
На деле фраза про велосипед - бред чистой воды. Вообще многие пословицы и поговорки - есть не "народная мудрость", а "народная глупость", стереотипы, передаваемые из поколения в поколения. Эти стереотипы вовсе не проходят естественный отбор: среди них выживают не самые правильные, а самые часто применяемые для тех или иных целей, в том числе и неблаговидных. Иногда стереотип раскритиковывается (как раскритикована поговорка "цель оправдывает средства"), но чаще они так и остаются властвовать умами в виде фантомов (так я называю привычную, но труднообнаружимую ложь).
Когда человек пишет функцию X, которая уже есть в какой-то библиотеке - он "изобретает велосипед"? Допустим. Тогда, если он _использует_ эту функцию в функции Y - он "изобретает велосипед"? Вообще-то да: ведь это до него уже делали многие другие. Не надо ли поискать библиотеку, которая реализовала функцию Y или что-то подобное дабы не "впасть в грех" изобретения велосипеда?
А как называется ситуация, когда человек подключает к своей программе 3-мегабайтную DLL только потому, что ему понадобилась ровно одна функция из нее, реализуемая десятком строк? Нежелание "изобретать велосипед" - достойное оправдание таким действиям?
А как называется ситуация, когда человек требует у начальства, чтобы его контора купила стороннюю библиотеку за $1000, в которой есть некоторая функциональность под предлогом нежелания "изобретать велосипед"? В то время как эта функциональность реализуется за человеко-неделю программистом с зарплатой в $1000, а использование других возможностей библиотеки не видится project manager-у даже в страшных снах (нах)?
А когда вы в очередной раз следуете некоему паттерну, вы разве не изобретаете велосипед в очередной раз, если уж на то пошло? Да, вы его изобретаете, просто вы не привыкли вешать клеймо "изобретать велосипед" именно на этот вид дейтельности.
Вред ярлыка состоит не в том, что он неверен, а в том, что он применяется бездумно. Таково свойство ярлыка: навесил, и кажется, будто что-то этим доказал. Избегание повторного написания кода рационально, но рационально оно при соблюдении ряда условий. А эти условия не обязаны соблюдаться всегда. Они часто и не соблюдаются, но привычка пугаться ярлыков даже не позволяет задуматься: а как в данном случае - принцип работает или нет?
Когда есть ярлык, то даже умные люди поддаются его власти, потому что боятся быть высмеянными толпой, той самой тупой толпой, которая реагирует на ярлыки заранее запрограммированным образом как собака Павлова: смехом, ненавистью, пренебрежением и так далее.
Я считаю, что это - стереотип, ярлык, действующий подобно ярлыку "красно-коричневых". Как и любой ярлык он провоцирует бездумное применение, отчего может быть достаточно вредным.
На деле фраза про велосипед - бред чистой воды. Вообще многие пословицы и поговорки - есть не "народная мудрость", а "народная глупость", стереотипы, передаваемые из поколения в поколения. Эти стереотипы вовсе не проходят естественный отбор: среди них выживают не самые правильные, а самые часто применяемые для тех или иных целей, в том числе и неблаговидных. Иногда стереотип раскритиковывается (как раскритикована поговорка "цель оправдывает средства"), но чаще они так и остаются властвовать умами в виде фантомов (так я называю привычную, но труднообнаружимую ложь).
Когда человек пишет функцию X, которая уже есть в какой-то библиотеке - он "изобретает велосипед"? Допустим. Тогда, если он _использует_ эту функцию в функции Y - он "изобретает велосипед"? Вообще-то да: ведь это до него уже делали многие другие. Не надо ли поискать библиотеку, которая реализовала функцию Y или что-то подобное дабы не "впасть в грех" изобретения велосипеда?
А как называется ситуация, когда человек подключает к своей программе 3-мегабайтную DLL только потому, что ему понадобилась ровно одна функция из нее, реализуемая десятком строк? Нежелание "изобретать велосипед" - достойное оправдание таким действиям?
А как называется ситуация, когда человек требует у начальства, чтобы его контора купила стороннюю библиотеку за $1000, в которой есть некоторая функциональность под предлогом нежелания "изобретать велосипед"? В то время как эта функциональность реализуется за человеко-неделю программистом с зарплатой в $1000, а использование других возможностей библиотеки не видится project manager-у даже в страшных снах (нах)?
А когда вы в очередной раз следуете некоему паттерну, вы разве не изобретаете велосипед в очередной раз, если уж на то пошло? Да, вы его изобретаете, просто вы не привыкли вешать клеймо "изобретать велосипед" именно на этот вид дейтельности.
Вред ярлыка состоит не в том, что он неверен, а в том, что он применяется бездумно. Таково свойство ярлыка: навесил, и кажется, будто что-то этим доказал. Избегание повторного написания кода рационально, но рационально оно при соблюдении ряда условий. А эти условия не обязаны соблюдаться всегда. Они часто и не соблюдаются, но привычка пугаться ярлыков даже не позволяет задуматься: а как в данном случае - принцип работает или нет?
Когда есть ярлык, то даже умные люди поддаются его власти, потому что боятся быть высмеянными толпой, той самой тупой толпой, которая реагирует на ярлыки заранее запрограммированным образом как собака Павлова: смехом, ненавистью, пренебрежением и так далее.
no subject
1. Оно уже протестировано, зачастую -- многими годами работы и миллионами людей.
2. Оно может быть куда сложнее, чем кажется. Так, многие криптографические алгоритмы выглядят весьма заманчиво в смысле "а сяду и щаз налабаю"; но потом выясняется, что в деле этом столько тонкостей, что задача оказывается незарешимой. В Mictosoft-е даже термин такой придумали для домашних криптобиблиотек: craptograpy. И он, увы, оправдан :(
3. Когда вдруг найдётся проблема в алгоритме написанного, куда проще обновить одну используемую всеми библиотеку, нежели выискивать клонов "блох", разбросанных по всему коду :)
Но, повторюсь, я не призываю к переиспользованию любого array::sort только потому, что кто-то уже его налабал. С умом к этому вопросу надо подходить; так что высказанное выше -- не возражения, а скорее аргументы, которые надо учитывать.
no subject
Кстати, заметил характерную фишку. Те же самые люди, которые призывают к повторному использованию:
a) не знают о том, что на том же предприятии кто-то уже решил подобную задачу (либо если речь идет о руководителе то не заботятся о том, чтобы довести до сведения работников информацию о том, у кого что сделано такое, что может пригодиться другим)
б) очень любят использовать copy/paste метод в кодировании, что есть фактически нарушение принципа :)
no subject
no subject
no subject