Программирование
Я идиот: стратегия успешного идиотизма в разработке
Разработчик Ричард Тертон выступил на конференции RWDevCon и рассказал, почему нам всем нужно понять, что мы идиоты, чтобы успешно работать вместе.
Разработчик Ричард Тертон выступил на конференции RWDevCon и рассказал, почему нам всем нужно понять, что мы идиоты (подсказка — чтобы успешно работать вместе).
Привет. Меня зовут Рич и я идиот. Сегодня я хочу рассказать вам три вещи: что я идиот, что вы, возможно, идиот и как быть идиотом.
Вы можете не верить первому пункту. Но, вероятно, что-то из того, что я скажу, заинтересует вас и вы начнете думать: “Может быть, я хочу быть в этом клубе идиотов, потому что в нем состоят крутые и успешные люди”. Если так, вам будет интересен третий пункт, потому что я расскажу вам, как освободить свой идиотизм, чтобы достигать если не великолепного, то неплохого результата.
Шаг 1: Я идиот
Как доказать вам, что я идиот? Я стою в комнате, полной потенциальных коллег, клиентов и работодателей, в этой футболке.
Не самый умный ход, да? Я выступаю на публике, что заставляет меня ужасно нервничать. Я мог этого не делать. Я мог прийти сюда бесплатно, или купить билет, или остаться дома. Но я пришел сюда выступить. Зачем?
Я постоянно путаюсь в самых базовых и простых вещах в жизни. Вот вам пример: у меня две маленьких дочери и у них есть по два ящика для одежды. Я работаю из дома, поэтому я занимаюсь стиркой, пока Xcode восстанавливается после сбоя или делает что-то ещё. Итак, после стирки я раскладываю вещи по двум ящикам. Один ящик — для верха, другой — для низа. Футболка — это верх. Леггинсы — это низ.
А платье? Платье — это верх или низ? Я не знаю. Наука не знает. Каждый раз я даю разный ответ на этот вопрос, поэтому мои дети каждый раз так долго переодеваются.
С таким же уровнем непонимания я занимаюсь работой, что значит, что иногда я чувствую страх. Страх того, что это не мое место. Страх того, что я занимаюсь этим, пока просто не пойму, чего хочу по-настоящему.
У меня нет образования программиста. Я был биохимиком, затем я был поваром, затем я снова стал биохимиком. Я пытался излечить рак. Это было сложно. Затем я работал над реестром костного мозга в банке крови и подумал: “Я вроде бы хочу быть программистом”. Но я не мог получить работу, потому что никогда не программировал. Единственной возможностью для меня было получить работу в компании, которая разработала собственный язык программирования — все кандидаты на должность не знали, как на нем писать.
Пока я работал там и учился программировать, я научился Objective-C, я узнал, как создавать iOS-приложения и ухитрился получить работу, на которой мне платили за то, чтобы я делал это.
Но у меня никогда не было одного из этих собеседований. Если бы вы попросили меня написать двоичную сортировку на доске, у меня возникло бы две проблемы:
- Я не знаю, что такое двоичная сортировка.
- Я левша, поэтому когда я пишу на доске, всё стирается.
- На самом деле, три проблемы, потому что мой почерк нечитаем.
Когда я работаю над кодом, я постоянно совершаю одни и те же ошибки. Например, операторы greater-than и less-than. Я постоянно их путаю, хотя знаю правило про голодного крокодила. Оно просто не появляется у меня в мозге в нужный момент. То же самое с минимумом и максимумом.
Сейчас я работаю с суперумными людьми в агентстве MartianCraft. Я не знаю, слышали ли вы о нем, но люди, основавшие MartianCraft, пишут книги о создании iOS-приложений. Вы легко можете представить, как иногда я чувствую, что мне там не место, ведь эти люди могут использовать операторы greater-than и less-than правильно с первого раза.
Но это нормально. Если вы думаете, что вы лучший человек в комнате, вы либо неправы, либо вы в неправильной комнате. Если я работаю или общаюсь на конференции/в Twitter/в Slack и думаю: “О, этот человек намного умнее и лучше меня” — это отлично! Это мой шанс узнать что-то новое.
Но вполне возможно, что эти люди думают так же. Вполне возможно, что все мы идиоты, а успешные люди просто хороши в этом деле.
Шаг 2: мы все идиоты
Надеюсь, я донес свою первую мысль. Теперь более сложная часть: мне нужно убедить вас, что вы идиот. Я сделаю это, показав вам некоторые цитаты от людей, которых я называю “высокоэффективными идиотами”. Я надеюсь, что некоторые цитаты заставят вас подумать: “Да, я был в такой ситуации”. И может быть, вы начнете думать, что и вы идиот.
У всех нас было так, что целый день вы пытаетесь что-то сделать, но оно не работает и не работает. Затем вы резко понимаете, что происходит, и чувствуете себя гением! Этот переход и это чувство… Это главная причина, по которой я люблю свою работу. Переход от состояния гения к состоянию идиота не так приятен; но я думаю, что однажды Уильям Шекспир сказал: “Жизнь — это американские горки, вы просто должны на ней ехать”.
Следующий твит принадлежит Алексису, который выступал до меня. “Никто на самом деле не знает, как кодить, мы все просто бродим, бесплодно молясь об освобождении”. Очень поэтично, не так ли? У вас, скорее всего, были дни, когда вы просто перебирали случайные вещи, чтобы решить проблему. Затем, внезапно, вы всё исправляете. Вы просто делаете это и движетесь дальше.
Как все это действительно работает? Я думаю, многие люди разбираются в технологии, над которой работают, и, может быть, немного ещё, но человеческий мозг не может охватить весь объем знаний, необходимых для того, чтобы быть экспертом в чем-то вроде SpriteKit и быть экспертом во всем остальном вплоть до субатомной физики, которая заставляет электрон танцевать внутри чипа. В этой области слишком много знаний, чтобы кто-то мог все это знать. Вы не можете этого сделать. Не ожидайте, что будете знать всё.
Отличная цитата. “Самый важный навык для программистов — чувствовать себя комфортно, не зная, что вы делаете”. Почти каждый раз, когда я что-то начинаю, я очень комфортно чувствую себя в этой ситуации.
Когда Swift только появился, я начинал новый проект на работе и подумал: “Я сделаю его на Swift! Какая отличная возможность.” Итак, я создаю новый проект, выбираю язык и появляется Swift. Но…как с ним работать? Я не знаю! Это нормально, так вы учитесь чему-то новому.
Xcode не очень нравится, когда символы находятся не там, где они должны быть, поэтому при работе со Swift в Xcode проблема в коде вызывает сообщение об ошибке в самом верху окна, и бывает очень сложно понять, что произошло.
Готовы вступить в клуб?
Надеюсь, что вам знакомы такие ситуации, и вы готовы вступить в мой клуб идиотов. Если вы все ещё не убеждены, вот недавний поиск по сообщениям на GitHub. Это большой клуб. У нас очень открытая политика членства.
Если вы все ещё не верите мне, вы, возможно, находитесь в фазе риска на этом графике.
Это график, следовательно, это наука. Давайте предположим, что я убедил вас, что вы идиоты. Теперь мы можем перейти к третьей части: как быть идиотом.
Шаг 3: как быть идиотом
Первый шаг к успеху — всегда помнить о том, что вы идиот. Не давайте своему идиотскому мозгу много задач. Не пытайтесь запомнить всё. Делайте записи. Используйте список задач. Используйте диспетчер сниппетов.
Как только вы поняли, как что-то работает, запишите, потому что завтра вы это не вспомните. Не держите всё в своей голове, она с этим не справится. Так работает наш мозг.
И когда вы работаете, помните, что вы идиот. Тот коллега, на чей код я смотрю дольше всего, скорее всего, я, а я идиот. Но мне вроде бы нравится мой код, и другим людям он нравится. Он работает, и я делаю всё вовремя.
Как я справляюсь с этим? Я использую свой идиотизм, чтобы кодить лучше. Я пишу код для идиота.
Пишите для идиотов
Я много работал над “проектами спасения”, когда вам дают кучку того, что должно быть приложением, и клиент говорит: “Мы не можем заставить его работать, а у нас релиз на следующей неделе”.
Эти проекты всегда слишком сложны. Вы не можете просто посмотреть на код и понять, что он делает. Вы должны действительно над ним подумать и разобрать его на части, а код не должен быть таким.
Если я не понимаю, что делает какая-то часть кода или зачем она это делает, тогда она не должна такой оставаться. Может быть, нужно просто добавить комментарии, или переименовать пару вещей, или же переписать всё полностью, но оставлять всё так нельзя.
Я не знаю, кто будет следующим идиотом, посмотревшим на этот код. Это могу быть я. Поэтому я всегда пишу для следующего идиота, который должен будет суметь прочитать и понять код.
Это значит, что вы должны писать свой код для чтения. Вы проводите гораздо больше времени за чтением кода, чем за его написанием. Я верю, что написание кода должно быть похоже на написание прозы, потому что всегда хотел видеть себя писателем. Я пытаюсь писать код, который рассказывает историю и доносит идеи до человека, который его читает.
Важное замечание: я говорю о прозе, которую вы можете прочитать в книге, которую взяли в аэропорт. Джеймс Джойс был бы плохим программистом, он бы, возможно, использовал Perl.
Возможно, вы делаете всё неправильно
Другая вещь, о которой нужно помнить, если вы относитесь к коду как к прозе: я, возможно, делаю все неправильно.
Как и в литературе, существует бесконечное число способов написать что-либо. Если способов бесконечно много, то с точки зрения статистики, вы выбрали неправильный. Если он не совсем ошибочный, тот он не идеален. Но это не так важно. Главное, что всё работает и ваш код легко можно изменить. Помните: он никогда не будет идеальным.
Я научился чувствовать себя комфортно с этой идеей. Неважно, если то, что я пишу — это не самый лучший, умный или элегантный способ. Если ваш код может понять кто угодно, вам он нравится и он проходит тесты — всё отлично. Ваши клиенты и пользователи не будут знать, как выглядит код. Им просто нужно работающее приложение.
Если вам кажется, что вы делаете все неправильно, задавайте себе вопросы. Эта часть слишком большая? Насколько сложно будет отбросить эту часть и сделать вместо неё что-то другое? Продолжайте спрашивать себя, пока пишете, и вы получите очень разумную структуру в итоге.
Не будьте умным
Есть и другой вопрос, который вы должны постоянно задавать себе: “Становлюсь ли я слишком умным?” У меня есть цитаты об этом:
Умный код нельзя исправить.
Умный код — это как съесть целый луковый цветок из Outback. Вы будете гордиться собой, но позже вы за это заплатите.
Умный код — это не добродетель. Прошлым летом я работал над образовательными материалами для людей, которые хотят изучать Swift с нулевым знанием о программировании. Было интересно вернуться к основам со всеми знаниями, которые я накопил в своей голове. Что такое переменная, что такое константа? Как сказать компьютеру, что нужно сделать? И Swift позволяет вам выразить эти идеи очень-очень просто.
К сожалению, он также позволяет вам написать абсолютный нонсенс. И написание нонсенса сейчас считается в нашем сообществе чем-то вроде нового платья короля.
Целые блоги заполнены такими вещами. Можете ли вы сказать, что делает этот код? Сможете ли вы сделать это снова через три месяца? Даже этот код в замешательстве — посмотрите на это лицо в середине.
Не будьте таким блогером. Не пишите такой код. Идиоты не понимают такой код. Да, вы можете так делать. Вы можете использовать пользовательские операторы, вы можете обернуть вещи в вещи, которые обрабатывают другие вещи и дают вам все в одной строке кода. Но действительно ли вы помогаете кому-то или просто публично мастурбируете на то, какой вы умный? Сколько хипстерских функций языка вы можете засунуть в один маленький фрагмент? Кому вы поможете таким кодом?
Краткость — это не ясность. Пишите для чтения. Пишите для идиотов. Теперь перейдем к более позитивным вещам, которые делают идиоты: вы можете попросить о помощи.
Просите о помощи
Люди боятся попросить помощи. Они не хотят выглядеть глупо. Они не хотят показывать, что не являются экспертами. Это нелепо, люди не должны так делать.
Если вы боитесь задавать вопросы, как думаете, как все люди узнали то, что они знают? Нужно просто попросить помощи. Это не такая ситуация, где вы не знаете ничего, а все остальные знают все. У вас просто есть перекрывающиеся области знаний.
На этих двух диаграммах вы стоите в центре синего круга и окружены желтым. Но правда ближе к правой диаграмме, чем к левой. Если частью культуры вашей команды является задавать вопросы и отвечать на них, вы будете счастливее и продуктивнее.
Если вы работаете в одиночку или ваши коллеги не помогают вам, вы можете задать вопросы на Stack Overflow. Чтобы задавать вопросы на таком сайте, вы должны использовать свой идиотизм. Вам нужно понятно всё объяснить и не использовать ненужных деталей. Представьте, что этот вопрос прочитают идиоты. И много идиотов попытаются ответить на ваш вопрос.
Помогайте другим
Как идиоту успешно ответить на вопрос? Используйте свой идиотизм.
Задавайте дополнительные вопросы. “Что делает эта часть?” И так человек понимает, что в этой части и находится его проблема, и они чувствуют себя отлично, потому что её решили. А вы чувствуете себя отлично, потому что помогли им решить проблему, не зная ничего. Помните, как тяжело не знать ничего и просить о помощи. Не удивляйтесь, когда кто-то не знает того, что знаете вы. Вы это тоже когда-то не знали. Давайте простые, но обоснованные ответы.
И, конечно, вы можете не знать ответ на вопрос. Это нормально. Вы можете провести небольшое исследование и попытаться найти ответ самостоятельно. Я узнал так много разных вещей на Stack Overflow таким образом! И это гораздо эффективнее, чем просто создание проекта, потому что проект обычно задействует меньше областей знания.
Будьте идиотом
Мы можем видеть, что стратегия успешного идиотизма заключается в двух вещах:
- Общайтесь понятно
- Помогайте друг другу
Мы должны понятно общаться с самим собой и с другими идиотами. Гораздо важнее быть понятным, чем быть умным. Вы должны понять, что ваш идиотизм перекрывается идиотизмом других и что мы можем создавать удивительные вещи, если помогаем друг другу и работаем вместе.
В мире существует слишком много знаний, чтобы один идиот мог удержать всё в своей голове, поэтому нам просто необходимо делиться ими; другого пути нет.