Проведя некоторое время, играя в Haskell и других функциональных языках, я пришел к пониманию простоты дизайна, который возникает из описания проблем в общих чертах. Хотя многие аспекты программирования шаблонов могут быть далеки от простых, некоторые из них достаточно распространены, и я не думаю, что они препятствуют ясности (особенно шаблоны функций). Я нахожу, что шаблоны могут часто упрощать текущий дизайн, автоматически добавляя немного будущего сопротивления. Почему их функциональность должна быть отнесена к библиотечным писателям?
С другой стороны, некоторые люди, похоже, избегают шаблонов, подобных чуме. Я мог понять это десятилетие назад, когда сама концепция родовых типов была чужда многим сообществам по программированию. Но теперь все популярные статически типизированные языки OO поддерживают дженерики той или иной формы. Предполагаемое знакомство, похоже, требует корректировки консервативных установок.
В последнее время мне очень понравилось такое консервативное отношение:
Вы никогда не должны делать ничего более общего, чем необходимо, - основное правило разработки программного обеспечения.
Я был совершенно искренне удивлен, увидев, что это сказано так пренебрежительно, как будто это должно было быть очевидным. Лично я нахожу это далеко не само собой разумеющимся, что с такими языками, как Haskell, где все является общим, если вы не указали иначе. При этом, я думаю, я понимаю, откуда эта точка зрения.
В глубине души у меня есть что-то вроде этого правила, грохочущего вокруг. Теперь, когда он находится на переднем плане, я понимаю, что я всегда интерпретировал его в свете общей архитектуры. Например, если у вас есть класс, вы не хотите загружать его множеством функций, которые вы могли бы использовать в один прекрасный день. Не беспокойтесь о том, чтобы создавать интерфейсы, если вам нужна только одна конкретная версия (хотя макет может быть контраргументом для этого). Такие вещи...
Однако я не использую этот принцип на микроуровне. Если у меня есть небольшая функция полезности, у которой нет причин зависать от какого-либо конкретного типа, я создам шаблон.
Так что ты думаешь, ТАК? Что вы считаете чрезмерно обобщающим? Имеет ли это правило различную применимость в зависимости от контекста? Вы даже согласны, что это правило?