Примерно в 1994 году я пытался разобраться в ООП и С ++ одновременно и обнаружил, что разочарован, хотя в принципе я мог понять, какова ценность ООП. Я был настолько привык к тому, что мог связываться с состоянием любой части приложения из других языков (в основном базового, ассемблера и языков семейства Паскаль), что казалось, что я отказался от продуктивности в пользу какой-то академической абстракции. К сожалению, мои первые несколько встреч с OO-фреймворками, такими как MFC, облегчили взлом, но не обязательно обеспечили много просветления.
Только благодаря комбинации настойчивости, альтернативных (не-C ++) способов работы с объектами и тщательного анализа ОО-кода оба: 1) работали и 2) читали более связно и интуитивно, чем эквивалентный процедурный код что я начал действительно понимать это. И 15 лет спустя я регулярно удивляюсь новым (для меня) открытиям умных, но впечатляюще простых ОО-решений, которые я не могу себе представить, делая их аккуратно в процедурном подходе.
За последние пару лет я проходил ту же борьбу, пытаясь разобраться в парадигме функционального программирования. Перефразируя Пола Грэма, когда вы смотрите вниз на континуум силы, вы видите все, чего не хватает. Когда вы смотрите на континуум силы, вы не видите силу, вы просто видите странность.
Я думаю, что для того, чтобы совершить что-то по-другому, вы должны: 1) увидеть кого-то, очевидно, более продуктивного с более мощными конструкциями, и 2) приостановить неверие, когда вы столкнетесь с ударом по стене. Вероятно, это помогает иметь наставника, который, по крайней мере, чуть-чуть дальше в их понимании новой парадигмы.
Если исключить сомнение, необходимое для приостановки неверия, если вы хотите, чтобы кто-то быстро ухватился за ценность модели ОО, я думаю, вы могли бы сделать намного хуже, чем попросить кого-то провести неделю с книгой прагматических программистов на Rails. К сожалению, в нем не раскрываются многие детали того, как работает магия, но это довольно хорошее знакомство с мощью системы абстракций ОО. Если, поработав над этой книгой, ваш коллега по какой-то причине все еще не видит значения ОО, он может оказаться безнадежным. Но если они готовы потратить немного времени на работу с подходом, который имеет сильно выраженный дизайн ОО, который работает и получает их от 0 до 60 гораздо быстрее, чем делает то же самое на процедурном языке, то может быть только надежда. Я думаю, что это правда, даже если ваша работа не связана с веб-разработкой.
Я не уверен, что создание "реального мира" будет таким же коммерческим аргументом, как рабочая среда для написания хороших приложений, потому что оказывается, особенно в статически типизированных языках, таких как C # и Java, моделирование реальный мир часто требует извилистых абстракций. Вы можете увидеть конкретный пример сложности моделирования реального мира, если взглянуть на тысячи людей, пытающихся смоделировать что-то столь же якобы простое, как геометрическая абстракция формы (форма, эллипс, круг).