Комментарии 3
Метапрограммирование
А в старое время это делалось иначе. Никто никаких паттернов не обсуждал и не придумывал, все делали по простому. А когда замечали что делают одно и то же трижды, смотрели на написанное и устраняли дублирование. Опять же не вдаваясь в паттерны и не обсуждая достоинства, а по простому.
Далее процесс становился итерационным. Если, в современных терминах, обнаруживалось применение трёх разных паттернов, то код модифицировался опять, иногда с изобретением ещё одного паттерна. И ещё было интуитивное понимание - в результате любого изменения сложность понимания кода не должна возрастать, а если она не уменьшилась - в нём ковырялись зря.
Если кто подумал что, обратно в современных терминах, постепенно нарабатывались паттерны, то отнюдь. Нарабатывались методы создания паттернов.
Как этот опыт применить сейчас? Без полного сноса всей системы от HR до Senior - никак. Ибо никто не рвётся рефакторить успешно прошедший всю эту систему код, ибо знает каков он и что будет тогда.
Рекомендую ли я полный снос? Нет - времена изменились. Раньше стая программистов разбиралась с потоком всё усложняющихся новых задач, теперь - с всё нарастающим потоком однотипных запросов.
Подведём итог. Вот опять с мух мух спрашивают как с пчёл. Чего можно пожелать? Успехов в преждевременном инженеринге, конечно. По опыту преждевременной оптимизации - они будут, вне всякого сомнения.
Мне, как человеку потратившему некоторое время на жаву и впрыгнувшему в поезд го с запозданием, эта вся чехарда с дженериками кажется приемлемой. Но всякий раз, когда у меня вырисовывается нечто похожее, возникают опасения, что остальные члены команды будут плеваться от этого всего. Приходится искать другие варианты, иногда даже апишку приходится усложнять ради отказа от засилья дженериков.
Ну а оверхед в рантайме — так и вообще беда. Хорошо, если речь идёт о шаблонной фции — там никакого оверхеда нет. А вот о типах приходится по сто раз думать: а стоит ли оно того?
Generic интерфейсы в Go: просто, но сложно