От переводчика: Сицзян Ян, программист из Нью-Йорка, рассказывает о том, как искусство помогает ему практиковаться в кодинге.
Программирование сродни искусству. При этом другие виды искусства, в частности, музыка и рисование, могут многому научить программиста. Я надеюсь, что они помогут вам так же, как помогли в свое время мне.
Skillbox рекомендует: Двухлетний практический курс «Я – веб-разработчик PRO».
Напоминаем: для всех читателей «Хабра» — скидка 10 000 рублей при записи на любой курс Skillbox по промокоду «Хабр».
Фокус на основах
Что мы учим?
Если вам нравятся алгоритмы, я имею в виду, действительно нравится, вроде того, что рано утром вы сразу же начинаете заниматься рекурсией и деревьями отрезков, поздравляю. Вы — чистой воды программист. Но мы, остальные, — обычные люди, иногда задаемся вопросом: зачем разгадывать эти головоломки? Только для того, чтобы успешно проходить собеседования?
В самом деле, когда вы практикуетесь в чем-то, необходимо понимать, зачем вы это делаете. Хотите приобрести определенные навыки? Или укрепить слабые места?
Я считаю, что все эти головоломки для программистов не только позволяют получить конкретные знания, но и лучше понять базовые элементы самого процесса созидания, написания кода. Получить или улучшить базовые скиллы.
Что касается головоломок, то они нужны не для решения проблемы, а для изучения процесса поиска решения. Это разные вещи.
Как вы поступаете с проблемой — разбиваете на небольшие составляющие? Что помогает вам повысить свой уровень? В чем отличия одних структур баз данных от других? Базовые навыки сродни основным гармоникам, на которых строится соната.
Что знают опытные специалисты?
Я бы сказал, что опытный художник не знает, как рисовать Центральный парк Нью-Йорка осенью. Но он хорошо знает основы, которые нужны для создания картины. Используя их, он пишет пейзаж, и в итоге получается изумительной красоты картина.
Опытный художник не знает, как рисовать листья на деревьях. Нет, он хорошо владеет цветами и их комбинациями. Он знает, как цвета себя ведут на полотне.
Так и опытный программист не обязательно должен знать все нюансы React, Vue, Ember или других фреймворков. Опытный программист знает, как работает JavaScript и как работает браузер. Опытный программист понимает преимущества функционального программирования, он знает, почему в конкретном случае стоит поставить React во главу угла.
Изучайте основы, а все, что выше, сложится в четкую картину само по себе.
Зарисовки из жизни
Копипаст vs источник
Мои знакомые художники которые серьезно подходят к своему ремеслу, всегда делают зарисовки из жизни. Что это значит? Они рисуют все, что видят, все, что им интересно.
Они не срисовывают фотографию или модель, а рисуют то, что видят сами.
Когда кто-то срисовывает пейзаж с чьей-то картины, он не изобретает, а копирует. В программировании эквивалент такого поведения — копипаст сниппетов с Stack Overflow.
Копипаст кода никогда не даст возможности получить фундаментальные знания. Копирование чьего-то кода имеет аналогичное значение: вы получите решение, но не опыт. Выиграете сражение, но проиграете войну.
Универсальное знание
Фундаментальное знание можно назвать универсальным. Если вы пробуете решить проблему самостоятельно, ошибаетесь и в конце концов находите решение, то получаете как раз такое знание. Вы изучаете принципы работы, которые можно использовать в будущих проектах.
Редко решения являются общими, когда «один размер подходит всем». Для того, чтобы получить ключи к разным замкам, приходится работать. Иногда полезно выполнить работу без влияния чьего-либо решения, самостоятельно.
Практикуйтесь
Целенаправленное повторение
Когда музыкант изучает произведение, он не просто старается проигрывать его с начала и до конца, снова и снова, тысячи раз. Он ищет слабые места в своей работе и ликвидирует их.
В противном случае исполнение будет далеко не идеальным, содержать неправильные ноты (в случае программирования — баги).
И хотя слепое повторение — не лучший способ изучать что-либо, целенаправленное повторение позволяет получить нужный опыт. Вы работаете над своими слабыми местами и становитесь лучше.
А для новичка и слепое повторение полезно. Это развивает мускульную память, что в случае программирования можно считать когнитивными способностями. После этого можно переходить к сложным произведениям.
Работа высокого уровня
Если вы новичок в использовании какого-либо фреймворка, попрактикуйтесь. Изучите его основные элементы, создайте нечто базовое.
Выберите порт, создайте маршрут, отправьте запрос и ответьте. Затем повторите это.
Когда музыкант заканчивает изучение сложной части произведения, он не отряхивает руки и не говорит для себя: ага, ну, с этим покончено. Нет, он повторяет ее, чтобы исключить саму возможность появления ошибки.
С программистом то же самое: если написать сложную программу, решить проблему, можно пропустить простейшую ошибку в синтаксисе, после чего весь этот механизм откажется работать. Придется искать проблему. Если же отработать синтаксис до автоматизма, вероятность появления проблемы снижается.
Потом волноваться уже не придется. Музыкант, который довел до автоматизма свои навыки, не будет переживать из-за воспроизведения отдельных нот концерта. Он фокусируется на мелодии в целом, а не на отдельных ее элементах.
Обучение и наброски
Пример да Винчи
Если вы когда-либо изучали творчество действительно великих художников, например, Леонардо да Винчи, то, вероятно, знаете, сколько эскизов, набросков, тренировочных полотен они делали. Леонардо славился вниманием к деталям — он делал эскизы частей тела, растений, животных, людей и их групп.
Начинающие художники тоже много практикуются, например, постоянно рисуют натюрморты. Но зачем, ведь они не ботаники? Нет, это все таргетированное обучение. Новички получают опыт и знания по работе с цветом, светом и тенью.
Аналогичным образом работают некоторые программисты, разбивая одну большую проблему на несколько малых и прорабатывая затем их все.
Книга набросков программистов
Как можно запомнить эту функцию, в каком контексте она используется? Нужно ли вызывать super () в каждом компоненте React или стоит немного изучить классы ES6? Как интегрировать асинхронные HTTP-запросы?
Понять все это можно, открыв Repl или JSBin. Небольшие исследования могут углубить понимание более общих вещей, научиться работать с большими проектами.
Когда художник рисует яблоко или дерево, это не означает, что конкретный объект представляет для него интерес. Он просто прорабатывает малое, чтобы использовать опыт на большом.
Посмотрите на руки Джоконды — они идеальны с точки зрения техники.
Портреты и деревья зависимостей
Композиция
Я думаю, что главная задача множества торцов (включая программистов) — композиция. Речь идет о том, как объединить частное в целое таким образом, чтобы получился шедевр.
Есть несколько методов для достижения этой цели. Одна из них — начать со слоя с минимумом зависимостей. И уже от этого базового слоя идти наверх.
Если провести аналогию с художником, то он не начинает с ресниц. Он начинает с грунтовки. Те же ресницы, их расположение зависят от формы и размера века. Веко зависимо от размера и положения глазного яблока, что, в свою очередь, связано с особенностями структуры черепа. Весь портрет, если мы говорим о портрете, — это множество зависимостей.
Если один элемент расположить неправильно, пропадает впечатление гармонии, целостности. То же самое и с программным проектом. Допустив одну ошибку, вы начинаете плодить сущности, которые портят всю работу.
Слой за слоем
Когда вы создаете full-stack приложение, позаботьтесь о слое данных. Проведите тесты. Проверьте все элементы. Только в этом случае можно быть уверенным в надежности всего проекта. Но изначально необходимо понимать его суть и видеть картину целиком. Если понимание есть, можно работать над деталями.
Кодерам — кодить
Каждому свое. Музыкантам — музыка, художникам — картины. Программистам — код. Мы начинали статью со слов, что работа программиста — это тоже искусство. И это действительно так. Стоит помнить только, что мастерство можно и нужно улучшать, практикуясь, изучая и исследуя. При помощи практики начинающие программисты смогут фокусироваться на основах, улучшать свои творения и в итоге создавать классный проект, такой же большой, как и амбиции создателя.
- Онлайн-курс «Профессия frontend-разработчик»
- Практический курс «Мобильный разработчик PRO».
- Практический годовой курс «PHP-разработчик с 0 до PRO».
anonymous
Программирование — это ремесло для решения практических задач, как бы многим не хотелось искусством оно не является. Кто-то продолжает развивать свои навыки, кто-то останавливается. Ну даже и это не важно, потому что хороший ремесленник — это тот у кого получается лучше продавать результат своей работы.
ilammy
Рисование — это ремесло для решения дизайнерских задач. Как бы многим не хотелось, искусством оно не является.
Вода — мокрая.
tvr
Не всегда.
andyudol
Сухая вода? Способ употребления — чайная ложка на стакан кипятка?
tvr
Твёрдая вода вам разве не встречалась ни разу?
andyudol
Ага. Например, вчера — мокрый снег.