Код
#статьи

Есть ли место творчеству в программировании: подборка мнений опытных разработчиков

Здесь должно было быть интервью, но что-то пошло не так.

Кадр: фильм «Теорема Зеро»

Недавно наш автор Мария Даровская опубликовала твит с вопросом: «Писать код — это творчество?»

Изначально мы планировали сделать интервью на эту тему с одним героем. Но неравнодушных оказалось так много, что мы взяли развёрнутые комментарии сразу у нескольких экспертов.

И нет, они не художники, которые создают мультимедийные инсталляции с помощью языка Max. Перед вами четыре крутых и совершенно разных разработчика — и сейчас они будут дебажить миф о том, что в программировании нет места креативу.

Антон Ленев: «Brainfuck — чем не квадрат Малевича?»

Антон Ленев

CTO и разработчик в компании Viewst. Увлекается косплеем, подкастами, работой с кожей, 3D-моделированием и печатью. Ведёт твиттер @m0rg0t.

Всё упирается в вопрос «Что такое творчество?». Если это нечто абстрактное, возвышенное, не заказное, то можно ли назвать творчеством «Джоконду» Леонардо да Винчи или фрески Микеланджело в Сикстинской капелле? Эти творения считают шедеврами живописи — но художники писали их на заказ. Можно ли назвать это творческим порывом или выражением личных эмоций? Если да, то что тогда отличает эти картины от заказной разработки?

На самом деле даже художники, искусствоведы и академические словари дают разные определения творчества. Как мне кажется, творчество, да и вообще искусство — это категории, которые зависят от отношения, эмоций и бэкграунда как самого творца, так и человека, который оценивает творение.

Возьмём, например, фронтенд-разработчика который задумал или получил задание создать лендинг. Он взял навороченный дизайн, который ему нарисовали, применил новые технические решения и реализовал идеи, которые до того блуждали в его голове, и получил отличный лендос, удовлетворяющий всем требованиям и с творческими решениями (которые, к примеру, он впоследствии выложил в Open Source, и это стало новым стандартом лендингостроения, а сам разработчик стал rock star и известен всем).

А если другой разработчик пришёл к такому же результату, но более «ремесленным» методом — через кастдевы — и ориентировался исключительно на продажи? При этом и на сам процесс он смотрел примерно так: «Ну, возьмём 20 грамм реакта, посыпем немного редаксом, завезём серверный рендеринг… ничего сложного, делал это миллион раз!» Вряд ли программист скажет, что занимался творчеством. Но если пользователь восхищается этим лендингом так же, как и первым, то в чём разница? Непонятно.

Или вот более забавная ситуация: в процессе создания лендинга джун покреативил и привнёс новые, как он думает, идеи. С его точки зрения, это был настоящий акт творчества, ведь он оригинально, по-своему подошёл к задаче.

Между тем сеньор может плеваться от написанного кода и самого продукта. А в довесок ещё и заключить, что такой «шедевр» можно было сделать за пару минут — погуглив шаблоны.

Другой вопрос — что такое шаблоны? Вот возьмём литературу. В книге «Тысячеликий герой» Джозеф Кэмпбелл приходит к выводу, что все сюжеты мифов имеют схожую структуру. А Борхес вообще писал, что существует всего четыре сюжета, и авторы на протяжении всей литературной истории просто пересказывают их. Получается, многие произведения после античной литературы были сделаны по шаблонам?

Если возвращаться к тому, что творчество — это всегда некая личная экспрессия, отображение внутреннего «я» и каких-то идей, то любой опенсорс-проект — это объект творчества или даже искусства. Вот, скажем, Brainfuck — чем не квадрат Малевича? Ведь эзотерические языки программирования не несут никакой бизнес-цели, но выражают мысли, идеи или даже протест современному миру программирования.

Возможно, так бы выглядел «Чёрный квадрат», если бы Малевич творил сегодня. Фрагмент кода на Brainfuck. Скриншот: Кирилл Молоков / Skillbox Media

А вообще, термины «творчество» и «искусство» крайне субъективны и, в конечном счёте, всё сводится к тому, как на работу смотрит сам программист и человек, оценивающий продукт.

Аркадий Шварцман: «А каждая ли картина — это результат творчества? Я так не думаю»

Аркадий Шварцман

Фронтенд-разработчик в VK Teams. Пишет на TypeScript и React, а вне основной работы — на Golang, Python 3, React Native, Kotlin, C#, Unity и Java. Увлекается геймдевом, компьютерной техникой, спортом и инвестициями.

В моём вузе был предмет («Основы технического творчества», если мне не изменяет память), который делил работу на рутину и творчество. Всё, по сути, сводилось к пропаганде автоматизации процессов.

В рамках изучения предмета постоянно приходилось думать, могу ли я как-то заменить алгоритмом то, что делаю сейчас вручную. Это считалось главной идеей дисциплины. К творческой работе относилось два вида процессов:

  • делать то, что нельзя автоматизировать;
  • думать, что и как можно автоматизировать.

А вот всё остальное — чистой воды рутина. И из этого можно сделать вывод, что работа, требующая неосознанного, вкусового выбора человека, является творческой — её нельзя заменить алгоритмом.

В случае с программированием задачи могут быть как творческими, так и рутинными. К творческим процессам можно, например, отнести следующее:

  • проставление архитектуры;
  • дизайн пет-проекта;
  • выбор технологий;
  • планирование рисков.

А вот рефакторинг кода, переписывание на другие технологии — во многом скучная рутина. И как на FrontendConf показала команда OZON, это можно запросто автоматизировать через трансляторы AST-дерева.

Вообще, мне кажется, что очень много вещей можно делать как рутинно, так и творчески — будь то рисование картин или программирование. В конечном итоге сам человек выбирает, будет работа творческой или рутинной, когда ставит задачу. И картину, и код можно создавать по-разному.

Я знаю о такой форме рисования картин, как акриловая заливка: мешают краски, выливают на полотно — на этом буквально всё. Творчество заканчивается на выборе красок и полотна. То же самое можно сказать про рисование по эскизу — это легко может делать машина. Так что всё зависит от конкретного процесса и подхода — бездумная рутина есть и в рисовании картин.

Валерий Жила: «Разработка — одно из самых творческих занятий в мире!»

Валерий Жила

Software engineer, разрабатывает системы управления городской инфраструктурой для мегаполисов. Основная деятельность: backend, database engineering. Ведёт твиттер @ValeriiZhyla.

Деятельность можно назвать творческой, только если в задаче или реализации идеи есть вызов, который заставляет думать и искать решения.

В рутинных задачах вроде покраски кнопок творчества практически нет. Но конкретно в моей среде рутина — это крайне редкое явление, с которым, кстати говоря, сталкиваются даже музыканты. Скажем, разминка пальцев на инструменте может быть очень рутинным, но необходимым занятием — это мелкие издержки, которые есть в любой профессии.

Я пишу софт для управления городами. Недавно выяснилось, что наш самый крупный клиент-мегаполис производит столько данных, что их не успевает обрабатывать даже хорошо спроектированная база данных. Мы уткнулись в ограничения железа и столкнулись с несколькими нюансами безопасности, которые нужно было обязательно учитывать.

Стали искать способ ускорить и так хорошо оптимизированную систему ещё хотя бы на 25%. Способ нашли, но это повлекло архитектурные изменения в некоторых узловых программах. Суть в том, что решение такой проблемы не нагуглить и не исправить пятью строчками кода. Это настоящая инженерная задача, над которой нужно пострадать.

Создание приложений с нуля, разработка высоконагруженной архитектуры, интерфейса, настройка и подгонка компонентов — это творчество в самом чистом виде. Зачастую на проектах задействовано несколько человек, и управлять слаженной командой с хорошими навыками или быть частью такой команды — такой же творческий и занимательный процесс.

Даже перерабатывать критически важное легаси на новый лад, с высокими требованиями к безопасности и производительности, — весьма серьёзный аналитический и творческий процесс.

Основные требования для творческой разработки — контроль над сроками и гибкий бюджет. Или их полное отсутствие в случае некоммерческой разработки или собственного проекта. Лично для меня большая часть работы ощущается чем-то между рисованием абстрактных картин и кропотливым созданием совершенного часового механизма. Между этими двумя состояниями — сумасшедший спектр эмоций и ощущений.

К сожалению, творчество пропадает, когда приходится писать тесты и документацию. В такие моменты действительно чувствуешь себя бухгалтером с очень скучными задачами. Но опять же — это лишь небольшие издержки. Творчество есть везде, где нужно по-настоящему думать головой. И, по моему убеждению, разработка — одно из самых творческих занятий в мире!

Сергей Король: «Порой чтение хорошего кода сродни чтению художественной литературы»

Сергей Король

Technical QA Manager в компании Waverley, в IT более 12 лет. Член программного комитета и постоянный спикер конференций по обеспечению качества — QA Fest и Selenium Camp. Пишет на Java, TypeScript, Python и C++. Ведёт твиттер @ss_korol и контрибьютит в Open Source.

Программирование — это искусство. Но чтобы его познать, нужно много читать. И вовсе не обучающую литературу (хоть без неё и не обойтись), а именно код.

По сути, языки программирования закладывают лишь фундамент. А вот что на нём будет построено — типичная и неприметная хрущёвка или завораживающие сингапурские сады, — зависит от многих факторов.

Писатель вряд ли сможет создать бестселлер, не черпая вдохновение во множестве произведений совершенно разных по стилю авторов. Так же и в программировании: разработчик не сможет выделять паттерны, проводить архитектурные параллели, вносить вариативность в свои подходы, проектировать гибкий и читабельный API, не изучая чужой код.

С одной стороны, читать код — довольно простая задача. Наш мозг элементарно выстраивает новые связи между уже знакомыми символами, лишь придавая им новый контекст и следуя заданным правилам и ограничениям. Другой вопрос — насколько хорошо написан код и что может усложнить его восприятие?

И здесь уже вступают в игру ментальные модели, которые представляют собой:

  • идеи, основанные на нашем опыте;
  • стратегии;
  • способы восприятия окружающего мира, которые направляют наши действия.

При помощи ментальных моделей объясняются причины и следствия, а также придаётся смысл нашему жизненному опыту — у каждого он уникален. И вот когда наши ментальные модели расходятся с моделями другого человека, возникают забавные ситуации.

Разработчики со стажем наверняка замечали такую особенность — нам практически никогда не нравится чужой код. Мы его изначально не принимаем, потому что пропускаем через призму собственного опыта. Но как же тогда уживаются инженеры со своим уникальным багажом знаний в командах? За счёт чего им удаётся находить общий язык? А это уже достигается такими полезными штуками, как:

  • стандарты написания кода (например, соблюдать конвенции именования, оставлять комментарии);
  • гайдлайны проекта;
  • единый пул библиотек и фреймворков;
  • понимание паттернов проектирования.

Другой аспект, который определяет сложность чтения кода, — закон Миллера, или правило «7 ± 2». Согласно ему, человек может удержать в кратковременной памяти не больше 7 ± 2 объектов. С одной стороны, это ограничение усложняет восприятие плохо написанного кода. С другой — объясняет поведение современных статических анализаторов, которые выдают предупреждения о превышении количества полей, методов, параметров и тому подобного.

Программирование как искусство постигается лишь тогда, когда вы выходите из зоны комфорта и начинаете экспериментировать. Это неминуемо приводит к смене фокуса с вопроса «Как решить задачу?» на «Как решить задачу оптимально?». Такое отношение к работе не только экономит деньги бизнеса, но и упрощает работу тем, кто будет поддерживать ваш код.

И вот здесь код становится подобен художественной литературе — вы либо восхищаетесь авторской мыслью, либо плюётесь от её убогости. Можно читать между строк и даже взахлёб, наслаждаясь простотой решений, организацией логической структуры и понятными комментариями. Иногда даже улавливается почерк отдельных исполнителей, которым буквально хочется подражать. И в таких случаях программист не просто кодит, а по-настоящему творит.

Интересные комментарии из треда в Twitter

Мы долго думали, ставить их в статью или нет, а если ставить, то куда, чтобы всё выглядело стройно и логично. В итоге решили разместить здесь — уж больно они хороши.

Итак, три лучших твита на вопрос, является ли программирование творчеством :)

Если разработка — это одно из самых творческих занятий, то обучение разработке — ремесло, которым преподаватели Skillbox владеют в совершенстве. Выбирайте курсы в разделе «Программирование» и становитесь Леонардо До Винчи (или Пикассо) XXI века.

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована