суббота, 14 января 2012 г.

Что такое искусство программирования?

imageНекоторое время назад я прочитал на хабре статью “Искусство программирования?”. Эта статья спровоцировала большую дискуссию в хабра-сообществе. У меня нет большого желания участвовать в дискуссии, но на определенные мысли эта статья меня натолкнула. Так является ли программирование видом искусства?
Также как и автору статьи, мне посчастливилось какое-то время близко общаться с большим количеством творческих личностей – художников, скульпторов, фотографов. Так что я могу подтвердить краткое описание их образа жизни и характера деятельности. Вспоминается один из старых анекдотов: “Богема – это люди, для которых плата за квартиру относится к непредвиденным расходам”.
Встречал я и таких творческих программистов. Один мой знакомый напоминал мне джинна. Джинны, как известно, могут заниматься преимущественно двумя вещами – создавать или разрушать города и замки. Так вот, этот знакомый мог очень быстро набросать довольно большую и разветвленную, логически сложную программу, сдать её на тестирование, но когда буквально на следующий день приходишь к нему с ошибками и замечаниями, выясняется, что той программы уже давно нет, а на её месте уже совсем другой код, который делает то же самое, но (с его точки зрения) лучше. А с моей точки зрения – содержит неизвестные еще ошибки, и я совершенно зря потратил день на анализ и тестирование его предыдущего результата. К счастью, с возрастом это у него прошло.
Так является профессия программиста творческой? На мой взгляд – безусловно, да. Многие задачи, которые возникают перед программистами невозможно решить без творческого подхода – ведь нет ни одного учебника, в котором было бы описано готовое решение, которое оставалось бы просто воплотить в коде. Профессиональный программист должен знать множество подходов и методик разработки, владеть технологиями, знать их преимущества и недостатки. И когда перед ним ставят задачу – творчески применить все эти знания и создать готовое решение.
Однако если сравнивать программиста с художником, скульптором и т.п., создающими уникальные творения, то это как делать программу, которая должна выполниться только один раз. В этом случае можно и пренебречь какими-то аспектами (например, контролем ошибок), если они не влияют на конечное произведение. Но в мире программирования такого практически не бывает. Единственное исключение, которое мне приходит в голову – одноразовые скрипты командной строки, которые делаются для выполнения какой-то частной задачи и уничтожаются после выполнения :-). Здесь важна не программа – а единичный результат, ради которого она запускается (единожды!).
Когда же речь заходит о программе, как конечном продукте, которые используется многократно, то на ум приходит аналогия с прикладными видами искусства. Например, гончар, делающий посуду, художник, который её расписывает (и создает новые узоры!), оформитель книг и т.п. Есть ли в такой работе место творчеству? Конечно есть! Да, в отличие от "свободных художников” здесь есть определенные рамки. В тарелку должна быть возможность налить суп, а в вазу поставить цветы. Используемая для покрытия чашек глазурь не должна быть ядовитой. А тиражируемая программа должна быть удобной и надежной в использовании, недорогой в поддержке.
Большая часть работы программиста – это рутина, которая требует определенных профессиональных навыков, и совсем немного творчества. Это как работа сапожника, плотника – прошел определенный курс, научился держать молоток – и вперед, можешь работать. Но чтобы стать мастером в любом деле, и программирование не является исключением, нужно достичь определенного уровня мастерства. Это вопрос не только знаний, но и навыков. которые можно получить только с опытом.  Но случается, что и мастерства оказывается недостаточно. Многие задачи требуют нестандартных решений, и тут уже не обойтись без творческого подхода. Мало уметь просто держать молоток. Нужно придумать куда им ударить так, чтобы случилось маленькое чудо. И это уже, без сомнения, область прикладного искусства. Как модельеры создают новые модели одежды, дизайнеры проектируют новые формы для посуды, мебели, автомобилей, программисты создают новые, уникальные, а подчас, и гениальные решения. Просто для программистов пока не придумали такого разделения, как  между портным и модельером. Но, думаю, это просто вопрос будущего.
Так является ли программирование искусством? И да – и нет. Этот вопрос каждый может решить для себя. Чаще всего – программирование это просто ремесло (в котором, заметим, тоже есть место творчеству!), а иногда удается прикоснуться к искусству – и просто творить, используя все свои возможности и способности. Но чтобы творить – нужно, все-таки, сначала достичь определенного уровня мастерства, чтобы творение не получилось одноразовым ;-).

Комментариев нет:

Отправить комментарий