Даже если это займет больше времени

Около года назад я получил умеренно обескураживающий комментарий к одному из моих видео на YouTube.

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

Вот что он сказал:

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

Теперь я не хочу на него набрасываться. Я вообще-то думаю, что он пришел из довольно обычного места. Большинство из нас не поощряются к тому, чтобы идти по более сложному пути, поэтому для многих вполне нормально предположить, что что-то слишком сложно, прежде чем пытаться это сделать.

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

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

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

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

На самом деле не имеет значения, если вы только начинаете или занимаетесь программным обеспечением уже долгое время и считаете себя «старшим» инженером. Те из нас, кто в игре достаточно долго, знают, какими нечеткими могут быть подобные названия.

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

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

Зачем изобретать велосипед? Что не так с тем, как сейчас создается программное обеспечение?

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

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

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

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

Я хочу сформулировать этот вопрос несколько иначе.

Представьте, что вы задаете похожий вопрос профессиональному бойцу ММА: зачем это делать? Как вы думаете, почему тренироваться бить других голыми руками лучше, чем стрелять из винтовки или нанести удар дрону, пока вы сидите в удобном кресле где-нибудь в Техасе?

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

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

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

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

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

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

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

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

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

Форма обучения новому навыку

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

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

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

На этой неделе я застрял в работе над аудиомикшером на базе двухсекундного кольцевого аудиобуфера на платформе Mac.

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

Это определенно случилось со мной недавно.

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

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

Трудный путь труден только в самом начале. Как только вы преодолеете эти первоначальные препятствия, вы будете удивлены, насколько продуктивным вы сможете стать.

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

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

Предикторы финансового успеха

В этот момент вы, вероятно, следите за происходящим и думаете: «Ладно, Тед, это здорово и все такое, но у меня никогда не бывает времени заниматься такими вещами в моей работе. Почему это будет для меня ценным в моей карьере, где мы никогда не касаемся ничего из этого более низкого уровня? »

У меня есть для вас одно слово: уверенность.

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

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

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

А потом в течение нескольких лет я только катался на сноуборде и намеренно попадал в довольно непростые ситуации.

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

Могу без колебаний сказать, что катание на сноуборде сделало меня более уверенным в себе человеком. Это изменило меня глубоко и необратимо.

Благодаря сноуборду я лучше осведомлен о ситуации. У меня есть более четкое представление о том, как все работает физически. Я ношу себя по-другому.

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

Вы не можете так подделать уверенность. Единственный способ добиться этого - решить самую сложную проблему, о которой вы только можете подумать.

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

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

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

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

Вы меня убедили. С чего мне начать? Как я могу делать то, что ты делаешь?

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

Возможно, вы уже довольно давно делаете приложения для iPhone и полагались на такие фреймворки, как UIKit или AVFoundation. Возможно, вы создали игру с помощью SpriteKit, но хотите погрузиться глубже и понять, как SpriteKit выполняет рендеринг с использованием Metal.

Возьмите все, над чем вы работали раньше, и попробуйте сделать что-то подобное, но без использования библиотеки или очень экономно.

В качестве примера возьмем мой игровой движок. Раньше я пытался создавать игры с помощью Apple SpriteKit. Меня это довольно расстраивало из-за того, что у вас недостаточно контроля, и я хотел сделать что-то лучше.

Так я познакомился с Handmade Hero, сериалом видеороликов на YouTube, в котором Кейси Муратори занимается амбициозным проектом по созданию игры и игрового движка с нуля.

Кейси научил меня основам разработки игрового движка нижнего уровня, и в конце концов я узнал, как работает Metal. Теперь у меня есть игра, которая использует Metal в качестве средства визуализации на платформе Mac, и игровой движок, который мог бы стать основой чего-то вроде SpriteKit, если бы я когда-нибудь захотел сделать что-то подобное.

Я взялся за довольно амбициозный проект, но вы могли бы начать с небольших целей, если захотите.

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

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

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

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

Вы не знаете, какие мышцы можно нарастить, пока не попытаетесь их накачать

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

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

Мышцы слабеют, если ими не пользоваться. То же самое и с навыками программирования.

Жесткий образ жизни приводит ваш разум в форму и готовит вас к полезной и сложной глубокой работе. Вы не делаете этого, потому что это окупается в краткосрочной перспективе. Вы делаете это, потому что это дает долгосрочные преимущества.

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

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

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