«Программировать не сложно — сложно не разочароваться в процессе»

Kate

Administrator
Команда форума
В детстве у меня была Mattel Auto Race — портативная игровая консоль со встроенным LED-экраном с красными светодиодами, элементами управления, одной игрой и динамиками. Почему-то я однажды о ней вспомнил и субботним вечером решил создать версию игры, используя p5.js. Сначала дела шли хорошо: я поработал над встречными автомобилями и логикой создания и удаления автомобилей. Затем я решил немного усложнить игру, добавив немного рандома в процесс появления автомобилей.

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

Но оказалось, что так и должно быть.

8d5d932c2c7dbfb5bfe99deb82a3ae58.png

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

Как я не закончил игру​

В детстве у меня была Mattel Auto Race — портативная игровая консоль со встроенным LED-экраном с красными светодиодами, элементами управления, игрой и динамиками. Игровая приставка на одну игру.

a2c6d3a06acbf213a73892a40358a19d.png

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

http://www.warpedfactor.com/2015/09/video-game-firsts-mattel-auto-race.html
Почему-то я однажды вспомнил о ней на выходных, и субботним вечером решил создать его версию, используя p5.js — библиотеку Javascript для создания интерактивных безделушек.

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

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

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

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

Время от времени, когда кто-то узнает, что я писатель и при это программирую, меня спрашивают:

— Программировать трудно?

И я обычно отвечаю тем же.

«Трудно» — неправильное слово. Дело не в том, что программировать трудно. Дело в том, что этот процесс расстраивает.

Программирование — это ежедневное разочарование​

Я осознал это, когда читал эссе «What Does Saying That 'Programming Is Hard' Really Say, and About Whom?», которое ставит под сомнение утверждение о том, что «программирование — это сложно».

Как отмечает автор, Бретт Беккер, вы часто слышите от преподавателей, из технических статей и самих разработчиков, что кодирование невероятно сложно. Но, как отмечает Беккер, нет убедительных доказательств того, что программирование сложнее, чем другие сложные действия. У нас нет достоверных данных, свидетельствующих о том, что быть хорошим программистом сложнее, чем быть хорошей медсестрой, адвокатом или шеф-поваром. Отчасти потому, что слово «тяжело» — двусмысленное слово.

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

Сложно ли программировать? Имеющихся данных не убедительны и недостаточно разнообразны, чтобы явно ответить вопрос. Почему же так часто говорят, что это тяжело? Потому что это утверждение трудно доказать. Может быть, это слишком удобно для мотивации и оправдания работы? Неужели многие хотят, чтобы программирование казалось трудным, сознательно или бессознательно? Зависят ли технологические компании и менеджеры по найму от имиджа программирования как тяжелого и элитного?
Я согласен. Я опросил больше 200 программистов, когда писал свою книгу «Coders» , и часто все они говорили мне одно и то же: программирование не было особенно сложным, но требовало дотошности и внимательности к деталям. Часто более жесткого, чем во многих других дисциплинах.

Больше всего они отметили, что для программирования требуется одна особая психологическая установка:

Очень высокая терпимость к ежедневному разочарованию (фрустрации).

Отчего возникает разочарование?​

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

Например:

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

Программисты боролись с разочарованием с тех пор, как существует программирование. Как я писал в своей книге «Coders»

В июне 1949 года Морис Уилкс собирался подняться по лестнице, когда его внезапно озарило, что «значительная часть оставшейся части моей жизни будет потрачена на поиск ошибок в моих собственных программах»...
ba373473dbee19c81a8f5a4d25b87114.png

Что делает разочарование в коде особенно невыносимым, так это то, что вы не знаете, как долго оно продлится.

  • Может быть вы поймете ошибку через несколько минут.
  • Может быть это займет час или два.
  • А может быть пройдут недели и месяцы, а вы так и не не разберетесь с ошибкой, так что вы просто запишете ее в исключения и забудете.
Поэтому, когда меня спрашивают «Эй, могу я научиться программировать?», то я отвечаю: «Конечно. Почти каждый может».


 
Сверху