Хочу поблагодарить Сергея, одного из своих читателей, задавших интересный вопрос. Я решил ответить на него в блоге, так как тема может быть интересна еще кому-нибудь.
Вопрос был о том, насколько актуальна сегодня парадигма ООП, и что ждет программирование дальше. Сергей ссылался на интересное обсуждение здесь. Из комментариев этого обсуждения можно видеть, насколько тема неоднозначна и противоречива. Я, ни в коем случае не считаю себя большим экспертом в этой области, но есть некоторые мысли, которыми хочу поделиться, надеюсь это будет интересно, ведь недаром, спору «нужен ли C++» уже почти пол века.
Первое, о чем хочется упомянуть, это ни функциональные языки программирования, ни DSL, не являются чем-либо новым, равно как и многие другие «новые подходы», вновь ставшие популярными последние годы. Многие из них берут начало в 60х годах, когда программистов было мало, и пришли они, в основном, из среды математиков и физиков. Тогда было легко изобретать новое, и это быстро подхватывалось пытливыми умами, развивалось и применялось. Сейчас количество программистов значительно выросло, и как следствие, уровень среднего программиста стал значительно ниже. Программирование проделало длинный путь от искусства и науки к ремеслу. Программистская среда стала более инертной, с трудом принимая новые подходы, и чем сложнее подход, тем менее он популярен. Именно поэтому, уже завоевавшая популярность, несложная концепция объектного проектирования по-прежнему остается такой востребованной. Несколько слов в защиту ООП, — во-первых, это работает. Так или иначе, программисты научились понимать друг-друга, строить сложные системы и создавать абстракции при помощи паттернов. Множество программистов начало думать в терминах ООП, множество кода написано и протестировано. Это то, что делает ООП актуальным еще долгое время, особенно для решения классических задач. Но для задач нетривиальных, всегда необходимо пробовать и применять новые подходы. «Серебряной пули» не существует. Более того, понимание подходов функционального программирования, макроязыков, алгоритмов, устройства компиляторов-интерпретаторов дают программисту неоспоримые преимущества для написание качественного и гибкого кода. Поэтому изучайте, пробуйте, и эти знания изменят ваш код и подходы к работе.
Несколько слов о том, как я вижу развитие программирования:
- Я думаю что постепенно программирование будет смещаться от императивных языков к декларативным. Я имею ввиду, что человек не будет фокусироваться на пути реализации, не будет описывать «как делать», а лишь, «что должно получиться». Профессия программиста трансформируется, — будут своего рода аналитики, описывающие требования к системе, на основании которых система будет работать, без всякого дополнительного кодирования.
- В связи с тем, что развитие современных процессоров вступило в фазу экстенсивного развития (от гонки частот мы переходим к гонке количества ядер), скоро мы должны увидеть взлет популярности простого функционального языка, к сожалению это не будет ни haskel и erlang, а вероятнее всего javascript. Хотя тут, очень легко ошибиться.
- Еще раньше, я думаю, мы увидим то, как средства визуального проектирования вновь войдут в моду. С одной стороны, это немного противоречит «декларативной природе», с другой — я думаю нам еще долго не удастся настолько специфицировать интерфейсы, чтобы стало возможным генерировать их.
- Интерфейсы взаимодействия пользователя с системой будут стандартизироваться все больше и больше. Роль дизайна будет решающей, и попытки специфицировать UI будут способствовать как обучению пользователей взаимодействовать с системами, так и проектировщиков, строить их максимально предсказуемо.