Вместо этого узнайте, как программировать.

Мне нужно прояснить этот заголовок: это не тирада против Blender, вам определенно следует изучить Blender API, если вы так склонны или нуждаетесь в нем для развития навыков или работы.

Так почему же тогда я начал с этого названия? Ну, потому что мне нужно ваше внимание, особенно внимание новичков в программировании.

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

Немного предыстории.

Меня зовут Джонатан Акоста, я веб-разработчик самоучка. Я был разработчиком Blend Swap последние 5 лет.

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

Я написал свою первую программу «Hello world!» на Javascript еще в 2006 году, следуя простому руководству W3C по основному программированию веб-сайтов. В то время мне приходилось заставлять себя учиться читать документацию по коду и ссылки на API, это была постоянная борьба, и у меня действительно не было большой цели, кроме как научиться программировать. в следующем году я попробовал некоторую обработку и даже написал несколько инструментов для нее, которые, к сожалению, сейчас вымерли из-за нехватки времени на обслуживание.

Время, проведенное в Processing, привело меня к программированию других вещей в более позднем возрасте и, в конечном итоге, привело меня к тому, что я начал свой личный бизнес в качестве внештатного веб-разработчика. Это работа, которая мне очень нравится, и я надеюсь, что буду ею заниматься еще долгие годы. Интернет постоянно меняется, ставит новые задачи на вашем пути и избавляет от скуки. Плюс к тому, что я говорю компьютеру, что делать, - это здорово. ;)

Теперь я должен внести ясность: я НЕ эксперт во всем, что нужно знать о написании кода, но у меня есть некоторые идеи о разработке программного обеспечения, и я хотел бы дать несколько советов для новичков.

Итак, вы хотите создать сценарий дерьма из Blender?

Многие из нас достигнут точки, когда Blender не сможет делать именно то, что мы хотим. Многие уже прошли через это, и теперь эти моменты являются вехами для рождения новых невероятных аддонов Blender, таких как эпические Retopo Flow и Muscle Tools. Эти плагины выделяются среди остальных, потому что они реализуют функциональность, которой полностью не хватает Blender, а также из-за очень профессионального пользовательского опыта, который вы получаете при их использовании.

Эти инструменты возникли не просто из-за того, что разработчики проснулись одним субботним утром и просто сказали: «Я собираюсь написать сценарий этой потрясающей новой функции для Blender, хотя я ничего не знаю о кодировании».

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

Им требовалось хорошее практическое знание основ принципов программирования, языка, над которым они работают, и API, на котором основано их программное обеспечение, в данном случае API Blender.

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

Итак, вот несколько рекомендаций для новичков о том, как писать отличный код, от вашей первой программы «Hello world!» до вашего потрясающего нового дополнения.

1 - Забудьте о Blender (пока), сначала научитесь программировать.

Вы знаете, что такое структура управления? Класс? Экземпляр? Объект? Массив? Нет? Тогда вам НЕ следует учиться писать скрипты для Blender прямо сейчас. Вместо этого вам следует изучить самые основы программирования, что это такое и чего с его помощью можно достичь.

Программирование - это одновременно и очень легко, и очень сложно.

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

Этот последний абзац звучал для вас как непонятное колдовское заклинание? Тогда вы должны научиться программировать прямо сейчас. Поверьте, я не сказал там ничего непонятного.

Почему я советую вам сначала изучить программирование?

Ну, просто как риторическое преувеличение, я потерял счет, сколько раз я видел, как пользователи задавали это в разделе Blend Swap Questions:

Как научиться писать скрипты в Blender? »

Я также получал личные сообщения на ту же тему.

Мой ответ на вопросы о том, как писать скрипты для Blender, всегда был одним и тем же:

Сначала изучите программирование. ЗАТЕМ изучите Blender API.

Почему? Потому что вы не сможете адаптировать свой код к изменяющимся условиям, если не знаете, как использовать логические операции с операторами if-else; если вы не знаете, как использовать цикл for или while, вы не сможете выполнить пакетную обработку нескольких объектов сетки; ваши сценарии могут стать огромными, неуправляемыми, похожими на спагетти мешанинами кода, если вы ничего не знаете об инкапсуляции, модульности и коде единственной ответственности.

Что произойдет, если код, который вы скопировали из старого руководства по созданию сценариев, больше не работает? Можете ли вы эффективно прочитать документацию по Blender API, чтобы исправить это самостоятельно? Можете ли вы улучшить, исправить и расширить чужой код? Можете ли вы добавить к нему новые функции?

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

Это довольно распространенная дыра в знаниях в сообществе Blender, но особенно для разработчиков игр на основе BGE они хотят сделать следующий игровой большой успех, но в большинстве случаев у них нет базовых знаний программирования для достижения этой цели, и если они есть поле в 3D, которое требует знания программирования, то есть разработки игр.

Конечно, в наших знаниях как сообщества нет виновников этой дыры; никто не виноват. Большинству людей никогда не приходилось знать, как программировать, потому что многие задачи можно выполнить в Blender с помощью действий мыши и нажатия клавиш. Других, я уверен, пугает сама мысль о том, что им нужно научиться программировать.

Кроме того, насколько мне известно - и по сравнению со всеми другими темами обучения Blender, - образовательных курсов и курсов по API Blender очень мало; контент о программировании для Blender почти нулевого качества [*], в то время как остальная часть программы была широко освещена на замечательных образовательных сайтах, таких как Blender Guru и CG Cookie.

Я связываю это с тем, что 3D-художники именно такие, художники. До недавнего времени программирование не было действительно необходимым для создания произведений искусства, но в настоящее время 3D-отрасли, такие как визуальные эффекты, игры и визуализация данных, растут экспоненциально, и все они требуют хорошего понимания программирования от тех, кто заинтересован. Помимо этого, есть очень четкая тенденция на будущее: программирование станет неотъемлемой частью каждой части жизни, обучение программированию не только поможет вам достичь ваших текущих целей, но и откроет для вас лучшие возможности. в будущем.

2 - Вы должны хорошо выучить язык программирования.

Итак, теперь вы хотите научиться программированию. Потрясающий!

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

Несколько лет назад я начал изучать C ++. Для меня это было почти невозможно, потому что, хотя он чрезвычайно мощный, он также сложен, полон странного синтаксиса и противоречивых интуитивных функций. Я, конечно же, НЕ рекомендую вам пытаться выучить C ++ как свой первый язык; хотя, если вы его действительно выучите, писать на любом другом языке будет намного проще, чем на нем.

Нам очень повезло с выбором разработчиками Blender языка сценариев, который он поддерживает: Python 3. Он мощный и простой в освоении, он входит в состав каждой установки Blender, и у вас есть доступ к нему прямо в консоли и текстовом редакторе Blender. .

Логический вывод состоит в том, что если вы собираетесь писать скрипт для Blender, но не умеете программировать, то вы должны изучать Python.

Начало работы с Python может быть немного странным, если вы еще не написали ни строчки кода. Я свяжу вас с этим замечательным онлайн-курсом в браузере Python на Codecademy. Вам не нужно ничего устанавливать на свой компьютер, чтобы продолжить, просто откройте страницу, зарегистрируйтесь и пройдите курс; он познакомит вас с основами программирования на Python, он научит вас самым основам: от примитивных типов данных и структур управления; к спискам и более сложным видам; в циклы, функции, классы и методы.

Этот совет также применим, если вы начинаете с веб-разработки и хотите разрабатывать свой сайт, скажем, на CakePHP или Laravel, вы должны знать, как программировать, а также немного PHP, прежде чем погрузиться в фреймворки, то же самое для браузеров, Node. js и Javascript; Unity и C #, Django и Python, Rails и Ruby.

3 - Какой бы курс вы ни начали, убедитесь, что вы его закончили.

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

Для меня частью, которую мне приходилось повторять снова и снова, было объектно-ориентированное программирование (ООП), написание классов было для меня очень трудным в начале, потому что я не понимал, как классы связаны с моим кодом и как я должен использовать их; для меня это была просто сложная и загадочная вещь, которую я никогда не смогу понять. К счастью, я удерживал себя от игнорирования этого, я все время повторял себе, что, может быть, если я прочитаю это достаточно много раз, я, в конце концов, пойму это.

В конце концов, этот подход сработал, мне просто нужно было познакомиться с концепцией до тех пор, пока я не услышал «ага!» момент пришел ко мне. Я до сих пор не являюсь абсолютным экспертом в области ООП, но я хорошо понимаю, как писать и использовать хорошо структурированный класс, чтобы сделать мой код модульным, легким для чтения и поддержки.

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

4 - Наконец, вы должны изучить API, который вам нужно изучить.

Для наших целей вы, конечно же, захотите изучить API Blender.

Когда вы научитесь писать код на Python, пора применить свои новые знания к Blender и изучить его обширный API (интерфейс прикладного программирования). API, как следует из названия, представляют собой интерфейсы пользовательских функций и классов со средой, с которой вы имеете дело (в данном случае, Blender). API содержит настраиваемые классы, функции, объекты и данные, к которым вы можете получить доступ, чтобы указать среде делать что-то за вас. У веб-браузеров тоже есть API, поэтому, когда вы пишете Javascript для браузеров, вы даете браузеру команду делать что-то за вас и пользователя вашего сайта.

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

Итак, изучите API Blender, изучите его хорошо, но только после того, как вы научитесь программировать. Это уменьшит ваши страдания и необходимость публиковать сообщения на форумах и не получать ответов, потому что никто другой не знает, как программа. Ознакомьтесь с чтением документации, вы будете продолжать это делать до тех пор, пока вам придется заложить некоторый код.

Теперь я должен прояснить еще одну вещь: я почти не тратил времени на программирование для / в Blender, я видел много примеров кода и даже смог улучшить чужой код [**] .

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

Вот и все! Это может (и должно) привести к большему количеству обсуждений кодирования и советов для новичков; обязательно оставляйте комментарии с рекомендациями и критическими замечаниями.

Я слишком резко высказал свои мысли? Хорошо.

Считаете ли вы меня лицемером из-за того, что я действительно не знаю API Blender? Возможно, это верно, но меня это не волнует: основная цель этой статьи - вывести всех новичков в области программирования на более высокий уровень, чтобы они меньше страдали при столкновении с неполной документацией, сломанным кодом, отсутствующими функциями и т. Д. устаревшие API, сторонний код, который требует исправления, отладка кошмаров и так далее.

Спасибо за чтение, до встречи на небесах Python.

Примечания:

  • [*] Я уверен, что есть отличный курс по Blender API, если да, дайте мне знать.
  • [**] См. Зеленую область справа специально в blendswap-admin-tools.py, строки с 79 по 89. Мое улучшение добавляет поддержку буфера обмена Linux, Windows и Mac OS X уже были реализованы.