Является ли программирование формой искусства? В хорошем коде определенно есть что-то эстетически приятное — хорошо организованный код с лаконичными и связными классами и функциями. Многим инженерам-программистам было бы полезно больше знаний об искусстве. Разработка веб-сайтов и дизайн UI/UX — очевидные варианты использования, но я думаю, что многие концепции абстрактного искусства также могут быть полезны. Например, рефакторинг кода и реализация шаблонов проектирования требуют внимания к симметрии и пространственному пониманию, чтобы обеспечить согласованное использование в кодовой базе.
Художникам, я думаю, тоже было бы полезно изучить код. Существуют явные приложения компьютерных наук к анимации и дизайну игр, но кодирование также может открыть новые возможности для создания скульптур и интерактивного искусства. Забавный факт: на самом деле я посещал уроки рисования в колледже и использовал программирование в большинстве своих проектов, включая приложение для Android для уличной фотографии и роботизированную скульптуру, которой можно было управлять удаленно с помощью Arduino.
Несколько лет назад я начал проект под названием Блочные уроки, чтобы помочь студентам изучать программирование с помощью практических занятий. Программирование с пуантилизмом — это лабораторная работа в формате Block Lessons, которая демонстрирует захватывающее пересечение искусства и программирования. Для художников, изучающих код, программистов, изучающих искусство, или просто учителей, пытающихся заинтересовать своих учеников информатикой, в этой лаборатории каждый найдет что-то для себя. Вот несколько упражнений, которые вы можете попробовать.
Упражнение 1. Случайные точки
Посмотрите на эти два списка чисел — как вы думаете, какой из них с большей вероятностью будет сгенерирован, если вытащить из шляпы числа от первого до пятого: 12345 или 41325?
Правильный ответ заключается в том, что оба этих исхода равновероятны, в частности, вероятность их возникновения составляет 1 к 120. Люди изо всех сил пытаются сами генерировать случайность и, вероятно, подсознательно следуют шаблону или избегают крайностей. Вот почему, когда людей просят выбрать случайное число, люди с большей вероятностью выберут 3 или 7, чем 1 или 9.
Хотя люди не очень хороши в генерации случайных чисел, компьютеры в этом преуспели. Случайность имеет довольно очевидное применение в компьютерных науках, например, когда разработчики видеоигр добавляют случайность, чтобы сделать свою игру более захватывающей. Чаще всего генераторы случайных чисел в программах используются для присвоения уникальных идентификаторов элементам в базе данных, чтобы их можно было найти, даже если другие их атрибуты изменяются.
В лаборатории Программирование с помощью пуантилизма мы можем использовать блок draw_random_dot для создания случайной точки. Нажатие запустить симуляцию запустит наш код. Попробуйте сложить пять блоков draw_random_dot, чтобы создать программу, которая будет генерировать пять случайных точек на холсте в правой части экрана. Сохраните изображение, щелкнув правой кнопкой мыши и выбрав сохранить изображение. Затем нажмите кнопку очистить точки и попробуйте повторно запустить симуляцию. Сохраните несколько изображений, используя генерацию случайных точек.
Далее, давайте попробуем сгенерировать наше собственное случайное изображение вручную. Удалите блок draw_random_dot и потяните вниз следующие блоки:
- установить цвет: установите цвет точки (выберите цвет в раскрывающемся списке).
- установить размер: установите размер точки от 1 до 100 (введите значение).
Теперь нажмите «запустить симуляцию». Вы должны иметь возможность щелкнуть по холсту, чтобы нарисовать точку указателем мыши. Попробуйте изменить установить размер и установить цвет и перезапустить симуляцию, чтобы добавить дополнительные точки. После создания изображения с пятью точками сохраните изображение.
Найдите друга и попросите его угадать, какие изображения были созданы случайным образом, а какие созданы вами. Смогут ли они это понять? Какие аспекты вашего изображения кажутся более или менее «случайными», чем действительно рандомизированные изображения?
Упражнение 2: Сетка
Вместо того, чтобы рисовать точки с помощью мыши, мы можем попросить компьютер нарисовать точки для нас. Большинство систем двухмерной компьютерной графики используют систему координат для представления местоположения элементов, рисуемых на холсте. В отличие от декартовой системы координат, система координат нашего холста начинается с (0, 0) в верхнем левом углу и увеличивается положительно по мере продвижения к нижнему правому углу. Хороший способ изобразить это так, как если бы холст был сеткой со строками и столбцами. Точка в 1-й строке и 1-м столбце появится в левом верхнем углу, а точка в 400-й строке и 400-м столбце появится в правом нижнем углу.
Мы можем использовать блоки set row и set column, чтобы выбрать точку на сетке, затем использовать блок draw_dot и «запустить симуляцию», чтобы нарисуйте точку на холсте. Попробуйте нарисовать точки в каждом углу сетки. Затем попробуйте нарисовать точку в центре. Вы даже можете попробовать нарисовать простые картинки, например смайлик, с помощью точек.
Этот способ рисования точек может показаться более утомительным, чем использование мыши, но он имеет массу преимуществ. Во-первых, код позволяет нам «очистить точки» и «запустить симуляцию» столько раз, сколько мы хотим — нам не нужно каждый раз перерисовывать наши точки, пока у нас есть код. Во-вторых, компьютеры очень точны. Если мы хотим нарисовать точку точно в центре холста, щелчок мыши может быть близким, но, вероятно, не точным. Когда мы говорим компьютеру, где нарисовать точку, он не просто угадывает, а ставит точку именно туда, куда мы хотим. Вот почему компьютеры так важны для действий, требующих предельной точности, таких как управление большими самолетами или работа с медицинским оборудованием.
Упражнение 3: Циклы
Рисование точек с помощью установить строку и установить столбец хорошо работает для одиночных точек, но что, если мы хотим нарисовать линию точек или квадрат точек? Есть ли более простой способ? Некоторые программы могут рисовать эти фигуры автоматически, но наша лаборатория более ограничена. К счастью, мы можем использовать циклы для рисования множества точек без необходимости задавать строку и столбец для каждой точки отдельно.
Есть две петли, которые мы можем использовать для нашей лаборатории. Блок «повторять для каждого столбца» позволяет нам делать что-то повторно для каждого столбца в диапазоне столбцов. Например, если бы мы хотели провести линию посередине нашей сетки, мы могли бы сделать что-то вроде этого:
Блок «повторять для каждой строки» позволяет нам делать что-то повторно для каждой строки в диапазоне строк:
Мы можем комбинировать обе петли, чтобы рисовать целые квадраты. Это требует «вложения» наших блоков так, чтобы один цикл зацикливался на другом.
Попробуйте поэкспериментировать с этими разными петлями. Вы можете изменить «шаг», который определяет, сколько столбцов/строк нужно пропустить после каждой итерации цикла (т. е. каждой «i-й» итерации). Вы также можете изменить начальную строку/столбец и конечную строку/столбец.
Упражнение 4: Пуантилизм
Пуантилизм — это больше, чем просто рисование точек одного цвета на экране. Чтобы сделать наши точки более интересными, мы можем получить цвет из фонового изображения, а не задавать его напрямую.
Для начала выберите фон с помощью кнопки «выбрать фон». Это добавит изображение на наш компьютерный холст, который мы будем использовать для установки цветов точек.
Далее, давайте используем наши повторяющиеся циклы, вложенные друг в друга, для создания нашей сетки точек. На этот раз вместо того, чтобы устанавливать цвет в начале, давайте установим цвет «текущий цвет в строке и столбце» прямо перед тем, как мы нарисуем каждую точку. Таким образом, наша точка будет представлять цвет из той же точки на нашем фоновом изображении.
Наконец, чтобы показать свой шедевр пуантилизма, нажмите кнопку «Очистить фон». Если ваши точки перекрываются друг с другом, вам может не понадобиться делать этот последний шаг, так как ваш фон будет полностью покрыт.
Попробуйте изменить шаги, размер точек и другие атрибуты, чтобы увидеть, какие типы пуантилистского искусства вы можете создавать!
Спасибо моей прекрасной невесте Монике за вычитку и всем, кто опробовал Block Lessons с друзьями или учениками!