Вопрос, который давно, с интересом и без какого-либо заметного результата обсуждается уже не первое десятилетие. Постараюсь избавить вас от повторения всем известной аргументации, и даже не буду пытаться ответить на этот вопрос. Если долгое время люди не могут придти к единому мнение по какому либо вопросу, значит вопрос не корректно поставлен.
Стимулом для написания заметки послужил разговор с другом:
я: … у меня были возможности заниматься работой менеджера, но я сознательно не шел на нее, мне нравиться заниматься разработкой программ
он: … тут что-то не то, … хм а что тебя мотивирует, почему тебе это нравиться
я: … мне нравиться что-то создавать своими руками, когда я занимаюсь разработкой я чувствую себя творцом, который создает какой-то мир…
он: … но ведь есть требования проекта/заказчика, ты ведь делаешь работу для них, а менеджер планирует работу и говорит что тебе делать
я: … ни менеджер ни аналитик на самом деле не определяют идеологию/концепцию системы, её определяют люди занимающиеся проектированием. А ты сам-то от чего получаешь удовольствие в работе, зачем?
он: … мне нравиться когда то, что я делаю приносит людям пользу
Нормальный разговор, который часто случается между давно знакомыми людьми за кружкой пива, но он послужил мне стимулом, еще раз задуматься о сути разработки и поглубже разобраться в предмете.
То что разработку приложений не корректно сравнивать с производством машин или строительством дома, стало понятно уже лет 10-20 назад, ещё раньше была распространена аналогия “написание книги”, но как только разработка стала коллективным занятием, она тоже стала не слишком адекватной. Сейчас популярна аналогия “инновационная разработка коллективом научных работников”, которая тоже выглядит не очень убедительно. С другой стороны было бы наивно думать, что разработка это какой-то настолько уникальный вид человеческой деятельности, что трудно подобрать достаточно хорошую аналогию.
В моем представлении наиболее уместна будет аналогия для проекта по разработке ПО – проект по съемки фильма. И там и там есть заранее известные этапы, и общие рекомендации/шаблоны. И там и там учувствует больше количество людей обладающих различными навыками. И там и там достаточно большие бюджеты, единственно доля зарплаты от общей суммы в разработке, возможно, больше чем при съемки фильма. И там и там проводились и продолжают проводится попытки поставить производство продукта, на поток с хорошо прогнозируемым результатом, и там и там это привело к похожим результатам. И там и там стоит вопрос искусство ли это, только в кино, он чаще ставиться относительно какого то конкретного проекта (фильма). И там и там общий рецепт успеха звучит примерно одинаково: выделите достаточно денежных средств и сделайте так чтобы ничего не мешало работе, пригласите отличного сценариста и режиссера, хороших актеров, хороших гримеров, постановщиков трюков, операторов, музыкантов и скорее всего вы получите отличный фильм, про разработку повторят не буду думаю у вас самих получиться.
Первое не соответствие которое сразу может подметить критик: так при разработке решается конкретная проблема заказчика, заказчик ждет решения своей проблемы, а при съемке фильма об это не идет никакой речи. Что тут сказать, в целом согласны, вот только не согласны, что это что-то меняет, все тоже кино, в кино ведь тоже редко режиссеры а уж тем более актеры свободны в своем выборе. Кстати тут тоже просматривается аналогия, хороший режиссер может не согласиться снимать если ему не нравиться сценарий, и хороший актер может отказаться от роли, актер может даже не спросить о роли, ему может быть достаточно знать кто режиссер чтобы согласиться/отказаться, плохие и начинающие актеры/режиссеры как правило согласны на все.
А чтобы почувствовать аналогию сильнее, попробуйте взять не просто разработку, а разработку игр, если вы в общих чертах представляете, что происходит в этой индустрии, вы поразитесь сходством.
Зачем нужны аналогии и чем они хороши? По аналогии можно придти к вопросам и ответам, значительно быстрее если не иметь ее и лучше почувствовать предмет рассмотрения. Что же теперь самое время ответить на вопрос: Is Programming an Art?