Здравствуйте, lpd, Вы писали:
lpd>Я считаю для программиста более важным знание устройства ОС, протоколов, железа, алгоритмов, предметной области, умение проектировать, умение решать задачи вообще.
Проблема с этим утверждением в том, что уровень проектных решений будет ограничиваться, во-первых, имеющимся в вашем распоряжении инструментарием и, во-вторых, уровнем вашего кругозора и опыта использования различных подходов. Так, если вместо языка с нормальной поддержкой ООП у вас будет чистый С, то вы либо не сможете применить ООП вообще, либо ООП в вашем проекте будет стоять на слабанных на коленке костылях. Если у вас нет поддержки обобщенного программирования, то вы можете быть вынуждены использовать контейнеры в силе Java 1.0, когда все контейнеры могут хранить только наследников какого-нибудь Object-а, и только размещенных в динамической памяти. Или вы будете вынуждены использовать виртуальные функции там, где без них можно обойтись посредством CRTP. Если у вас нет опыта работы с функциональными языками и в вашем распоряжении язык уровня чистого С, то вы вряд ли сможете задействовать перстистентные структуры данных даже там, где это было бы полезно (не говоря уже про то, что без подобного опыта вы вряд ли сможете вообще рассматривать персистентные структуры данных как часть проектного решения). И т.д., и т.п.
lpd>Если тебе шаблоны нравятся — изучай, но говорить что код без навороченных шаблонов — устревший, не надо.