
От переводчика: Сицзян Ян, программист из Нью-Йорка, рассказывает о том, как искусство помогает ему практиковаться в кодинге.
Программирование сродни искусству. При этом другие виды искусства, в частности, музыка и рисование, могут многому научить программиста. Я надеюсь, что они помогут вам так же, как помогли в свое время мне.
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».