Проведя некоторое время, играя в Haskell и других функциональных языках, я пришел к пониманию простоты дизайна, который возникает из описания проблем в общих чертах. Хотя многие аспекты программирования шаблонов могут быть далеки от простых, некоторые из них достаточно распространены, и я не думаю, что они препятствуют ясности (особенно шаблоны функций). Я нахожу, что шаблоны могут часто упрощать текущий дизайн, автоматически добавляя немного будущего сопротивления. Почему их функциональность должна быть отнесена к библиотечным писателям?Что вы чувствуете, чрезмерное обобщение?
С другой стороны, некоторые люди, похоже, избегают шаблонов, подобных чуме. Я мог понять это десятилетие назад, когда сама концепция родовых типов была чужда многим сообществам по программированию. Но теперь все популярные статически типизированные языки OO поддерживают дженерики той или иной формы. Предполагаемое знакомство, похоже, требует корректировки консервативных установок.
Одним из таких консервативное отношение было выражено мне недавно:
Вы никогда не должны ничего более общего, чем необходимо сделать - основное правило разработки программного обеспечения.
Я был совершенно искренне удивлен, увидев, что это сказано так пренебрежительно, как будто это должно было быть очевидным. Лично я нахожу это далеко не само собой разумеющимся, что с такими языками, как Haskell, где все является общим, если вы не указали иначе. Сказанное, я думаю, я понимаю, откуда эта точка зрения.
В глубине души у меня есть что-то вроде этого правила, грохочущего вокруг. Теперь, когда он находится на переднем крае, я понимаю, что всегда интерпретировал его в свете общей архитектуры. Например, если у вас есть класс, вы не хотите загружать его множеством функций, которые вы могли бы использовать в один прекрасный день. Не беспокойтесь о том, чтобы создавать интерфейсы, если вам нужна только одна конкретная версия (хотя макет может быть контраргументом для этого). Такие вещи ...
Однако я не применяю этот принцип на микроуровне. Если у меня есть небольшая функция полезности, которая не имеет причин быть зависимой от какого-либо конкретного типа, я создам шаблон.
Итак, что вы думаете, ТАК? Что вы считаете чрезмерно обобщающим? Имеет ли это правило различную применимость в зависимости от контекста? Вы даже согласны, что это правило?
Вы код для жизни? Как работает этот веб-сервер на базе Haskell? Помните: «умный И ПОЛУЧИТЕ ВЕЩИ». http://www.joelonsoftware.com/items/2007/06/05.html –
@ Джеймс Макнеллис: спасибо. Я не хотел указывать пальцами или казаться, будто я просто пытался выкопать старые аргументы. Мне действительно интересно. – Cogwheel
Вот сделка - вы больше не студент колледжа. Я надеюсь, что вы всегда можете превратить определенную функцию в общую, если возникнет настоящая необходимость. Теперь вы занятый взрослый с работой, которая платит вам 50 долларов за час. Разве не имеет смысла обобщать только тогда, когда вам нужно? Время - деньги. –