Хабрахабр

Принцип Брета Виктора: «Творцам нужна мгновенная связь с тем, что они создают»

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

image

Брет Виктор: Я просто хочу рассказать вам о том, как прожить свою жизнь.

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

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

Эта презентация разбита на три части.

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

Есть русские субтитры, спасибо vels

Идеи очень важны для меня. Итак, начнем с меня.

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

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

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

Творцам нужна непосредственная связь с тем, что они создают.

Это и есть мой принцип.

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

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

Программирование

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

image

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

image

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

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

image

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

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

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

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

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

Многое в искусстве, в творении — это открытия, и Вы не сможете ничего открыть, если не видите того, что делаете.

Итак, я показал вам как можно менять код, теперь давайте добавим немного нового кода.

И, когда я двигаюсь вверх и вниз по этому списку автозаполнения, я сразу же вижу, что делает каждый из этих методов. Я хочу разместить солнышко вот тут, на небе, поэтому я перехожу в функцию drawSky, и я хочу нарисовать круг и заполнить его каким-нибудь цветом, для этого я набираю: context.fillCircle, и как только я начал набирать код, выпадает список автозаполнения различных методов заливки.
Я могу выбрать в нем: fillCircle, FillRect, fillText. Мне не нужно смотреть в документацию, я просто вижу результат, немедленно. Т.е., мне не нужно предполагать, что делает метод, основываясь на его имени.

Вероятно, солнце должно быть желтым, поэтому я задам стиль заполнения.
Context.fillStyle, автозаполнение, как и ранее, выбираю стиль заливки по умолчанию, предлагает мне белый, и я могу изменить код этого цвета так же, как я меняю любое число, я удерживаю клавишу Control, и получаю цветовую палитру. Итак, я хочу круг, настраиваем координату X и Y немного изменяем радиус… Вот, вроде, выглядит неплохо. Хотя, мне показалось, что белый был довольно интересен. Тут я могу выбрать красивый желтый цвет для моего солнышка. Но с белым цветом, солнце выглядит как луна, не так ли? Я, честно говоря даже не ожидал этого. О, смотрите, наступила ночь.

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

Но, мне кажется, у нас все еще есть проблема.

У меня есть множество строчек кода, и просто глядя на эту строчку, я не могу сразу же понять, что она делает. И вот какая: тут у меня есть картинка, а тут у меня есть код, и я должен поддерживать синхронизацию между ними в своей голове. Но, вот как я могу поступить.
Я удерживаю клавишу Option, мой курсор превращается в лупу, и теперь, когда я перемещаюсь по строчкам кода, редактор подсвечивает на картинке ту ее часть, которая рисуется этой строчкой.

Тут у меня есть два вызова функции drawMountain, но я не знаю, какая из них рисует какую гору. И, если я хочу узнать, что происходит в этой функции, я просто двигаюсь по ней вниз и смотрю, что подсвечивается на картинке. И это должно работать и в обратную сторону. Ок, вот первая гора, а вот вторая. И поступаю таким же образом — удерживаю клавишу Option, и теперь, когда я двигаюсь по каждому пикселю изображения, вы можете видеть в правой части редактора, он переходит к той строке кода, которая отрисовала этот пиксель, эта нарисовала небо, а эта — дерево, эта нарисовала цветочки. Если я вижу, часть картины, я должен знать, какой код был ответственен за ее прорисовку.

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

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

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

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

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

Игры

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

А вот его код.

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

Может быть быстрой, может быть медленной. Итак, в каждый момент времени, к позиции X прибавляется направление черепашки, умноженное на временной интервал, который равен 1/16 секунды, умноженный на некоторую скорость, которая, хм, не знаю? Если скорость отрицательная, она идет в обратном направлении.

Теперь, вот тут, наверху, у меня есть некоторый код, который говорит: «Когда мой парень, сталкивается с черепахой, он получает некоторую скорость Y». И все это — идеи, которые я могу использовать и для других врагов, но я думаю, что черепахи должны быть медленными, поэтому, давайте дадим ей правильную скорость. И выглядит это так. Он отскакивает в воздух, а черепашка останавливается.

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

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

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

Это недостаточно круто. Но меня это не устраивает.

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

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

И когда я меняю код, я меняю его будущее. Это его будущее.

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

Творцы должны иметь возможность видеть, что они делают.

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

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

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

Это может выглядеть глупо, но Терри Кавана, на самом деле, сделал потрясающую игру используя эту концепцию, которую он назвал «Не Смотри Назад». Даже если я просто закомментирую первую строчку в коде, теперь мой парень не может перемещаться влево — он может двигаться только вправо.

Она называется "VVVVVV" и пишется как буква V шесть раз. Терри Кавана, сделал еще одну, действительно чудесную игру, которую Вы, возможно, видели.

image

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

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

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

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

Бинарный поиск

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

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

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

Давайте напишем бинарный поиск. Итак. А с этой стороны, мы видим: «Ок, принимаем ключ и массив, например, какие? Функция binarySearch, принимает ключ и массив. И, допустим, мы ищем 'd'. Дайте мне пример, чтобы мне было с чем работать.» Так, например, мой массив может быть 'a', 'b', 'c', 'd', 'e', 'f'.

Теперь приступим к написанию кода.

Здесь мы видим 'low = 0', пока ничего удивительного. Нижняя граница начинается с нуля. 'high = array.length — 1'. Верхняя граница начинается с конца массива, т.е. Т.е. и тут мы видим: 'high = 5'. А тут я получаю конкретные значения, соответствующие аргументам, которые мы задали для примера. у меня есть абстрактная формула в коде. Теперь мне нужен индекс в середине массива, поэтому я беру среднее из этих двух. Таким образом, я не должен держать эту картинку в своей голове, редактор просто мне ее показывает. 2. 'mid = (low + high) / 2', и… ну, очевидно, что тут ошибка. Я думаю, мне нужно его округлить. 5 не является допустимым индексом массива. Я добавляю функцию floor и она округляет наш результат до 2.

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

Мы разделили массив и мы должны продолжать делить его до тех пор, пока мы не сузим наш поиск до значения, которое мы ищем. Теперь нам нужно сделать цикл. while 1, делать все это. Итак, нам нужен цикл, и я просто добавляю цикл. Таким образом, первая колонка — это именно то, что вы уже видели ранее: low и high охватывают весь массив, мы нашли 'c', и это значение было слишком мало, поэтому мы скорректировали нашу нижнюю границу, и перешли по циклу, вот сюда. Tеперь мы видим три столбца, которые соответствуют трем итерациям нашего цикла.

Корректируем верхнюю границу. Вторая итерация, границы стали теснее, мы обнаружили 'E'. Мы сузили наш поиск до одного кандидата — и это, действительно, ключ, который мы искали, поэтому мы возвращаем его индекс. Третья итерация, проходим цикл до сюда, low и high равны. от нас ничего не скрыто. Т.е. И я могу перейти сюда и попробовать различные ключи, таким образом, я могу видеть, как ведет себя алгоритм при различных входных аргументах. В каждый момент времени, Вы видите именно то, что делает алгоритм. И, глядя на эти данные, я могу развить интуитивное ощущение того, как работает этот алгоритм.

Теперь все выглядит несколько иначе. Ок, я подставляю сюда разные ключи, и, допустим, я хочу найти 'g'. И причина в том, что я ищу ключ, которого, на самом деле, нет в массиве. Теперь алгоритм не возвращает значение. А сейчас мы застряли в этом цикле навсегда. И единственный способ вырваться из этого цикла — найти ключ.

Первые несколько итераций выглядят прекрасно, но вот эта итерация выглядит странно, потому что low больше high. Давайте попробуем понять, что пошло не так, где наш алгоритм пошел под откос. Т.е., если мы доходим до этой точки, мы знаем, что ключ не может быть найден. Наш диапазон поиска совершенно некорректен. Ок, хорошо, я просто добавлю это условие к моему оператору while. И я вижу это место в алгоритме, и говорю: «Ох, это же неверно, low должен быть меньше или равен high». 'low <= high', и теперь мы можем выйти из цикла, и я верну некий сигнал, который покажет, что ключ не может быть найден.

Итак, у нас есть 3 итерации цикла for, ключ не может быть найден, мы возвращаем «невалидное» значение и, таким образом, можно писать алгоритмы без повязки на глазах.

Итак, еще раз, у меня есть принцип:

Творцы должны иметь возможность видеть, что они делают.

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

Схемотехника

image

Тут вы можете видеть электронную схему, которую я нарисовал. Итак, для начала, давайте посмотрим на различные отрасли инженерии. Здесь мы поставим 1. Я пока не закончил ее рисовать, поэтому позвольте мне закончить ее сейчас. И теперь у нас есть рабочая схема. 2к. На самом деле, я не вижу тут ничего работающего. Т.е., я предполагаю, что это рабочая схема. Но то, что нас, на самом деле интересует — это данные. И здесь, точно так же, как и с написанием кода, мы имеем дело со статической репрезентацией некоторого процесса. В электрической цепи, переменные — это напряжения на различных проводах. Значения переменных, а их мы тут не видим. Каждый из этих проводов имеет напряжение, которое меняется с течением времени, и мы должны быть в состоянии это видеть.

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

Если бы я построил эту схему в реальности, я бы также имел возможность видеть что она делает. Очевидная осцилляция. Эти светодиоды, маленькие лампочки, предположительно находятся там по какой-то причине. В данном случае, у меня есть два светодиода вот тут. Если я нажимаю Play:

то вижу имитацию работы схемы в реальном времени И теперь вы можете видеть, что, на самом деле, делает эта схема.

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

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

Я хочу изменить его значение и я просто нажимаю и перетаскиваю его, и я вижу как мгновенно изменяются сигналы. Так, вот тут у меня есть резистор на 70k. Я могу сразу видеть результаты своих изменений. И обратите внимание, что, когда я нажимаю и перетаскиваю, он оставляет за собой себя тень сигнала, который был ДО перетаскивания, таким образом, я могу сравнить одно с другим. И это все, что я тут делаю. Два золотых правила информационного дизайна: Показать Данные, Показать Сравнения. Мы видим здесь только напряжения, но в электронике, на самом деле, существует два типа данных. Но и это недостаточно хорошо. И мы не видим ток, который течет через каждый из этих компонентов. Есть напряжение и есть ток. Вы должны понимать взаимосвязь между ними. А для того, чтобы разработать схему, вы должны знать как напряжение, так и ток. Это и есть аналоговый дизайн.

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

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

Эти языки были разработаны для перфокарт. Это пошло от Фортрана и Алгола в конце 50-х годов.

image

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

Это Кен Томпсон и Деннис Ричи на фото. Язык C был разработан для телетайпов. И Вы не найдете ни одного дисплея на этом фото. Ричи создал язык C.

image

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

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

Анимация

image

И обычный способ это сделать — используя типовой набор программ для создания анимации, например Flash, выставлять ключевые кадры. Вот вы видите эту картинку, дерево и на нем один листик и я хочу сделать небольшое видео с этим листиком, в котором он как-бы плавно падает вниз, вдоль дерева. Итак, я говорю: на 20-ом кадре, у меня будет ключевой кадр и листочек должен быть тут. Т.е., вы в просто говорите, где вы хотите видеть свой листик в разные моменты времени, и потом нажимаете Play и смотрите на что это похоже. Я не вижу самого движения. В кадре номер 40 мы создаем ключевой кадр и листочек должен быть тут, и, на самом деле, я просто пытаюсь угадать куда и когда поместить свой листик. Я не чувствую течение времени, я просто наугад разбрасываю все по времени и пространству.

Теперь я нажимаю Play и смотрю, как это выглядит. Ок, я теперь у меня есть мой листик в разные моменты времени, я добавляю анимацию движения, которая указывает Flash соединить все ключевые кадры. Но, на самом деле, я как бы знаю, что я хочу получить на самом деле, не так ли? А выглядит это совершенно нелепо, похоже на бильярдные шары, которые скачут туда-сюда. Я хочу чтобы лист дрейфовал вниз с дерева. Это лист. Но Flash не умеет следить за моей рукой. И я даже могу показать это движение рукой: лист дрейфует вниз с дерева. И я покажу вам вот это небольшое приложение, которое я сам написал, для создания анимации. Но, может быть, существует какая-то новая среда, которая умеет следить за моей рукой.

image

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

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

Пробую еще раз. Параллакс мне не очень нравится, поэтому я немного меняю чувствительность. Перематываю ее к началу, чтобы иметь возможность войти в ее ритм. Так мне больше нравится, Ок, мы готовы запустить анимацию. Я не знаю сколько времени прошло, Я просто запустил ее, когда почувствовал нужный момент. Лист падает на землю, я немного жду, и начинаю панорамирование И я не знаю, сколько кадров я ждал. И потом я снова перематываю назад, потому что я хочу сделать кое-что со своим зайчиком. Итак, я двигаю панораму по этой зимней сценке и замедляю ее до полной остановки. И жду, когда, по моим ощущениям, зайчик должен начать движение и он упрыгивает за пределы сценки. Выбрасываю все эти инструменты, потому я закончил работать с ними. Вытаскиваю их. И у меня есть несколько разных поз для зайчика. Вот он. Нахожу тот момент, когда зайчик должен оторваться от земли. Теперь я снова перематываю назад, т.к. Переключаю его позу и, как бы, меняю его позы туда-сюда, пока он прыгает. И вот она целиком. хочу проверить, как это выглядит сейчас я разверну анимацию на весь экран, чтобы вам было видно. Абсолютно непосредственная связь между мной и тем, что я хотел создать. Я создал ее за 2 минуты, играя своими руками как на музыкальном инструменте.

[Аплодисменты]

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

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

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

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

Обычно, мы слышим их в связи с какими-то социальными событиями. Это не те слова, которые мы обычно слышим в мире технологий. Мы все признаем, что эти эти вещи являются моральными проблемами. И такие вещи, как цензура, дискриминация по половому признаку, разрушение окружающей среды. Надеюсь, что это не так. Большинство из нас, наблюдая нарушения гражданских прав не сказали бы: «О, круто, возможность». И, конечно, есть такой образ жизни, в котором активист, некий человек, посвящает себя борьбе за дело, в которое он верит. Но, нам очень повезло, что на протяжении всей истории, существовали люди которые осознали эти моральные проблемы и ощутили в себе ответственность за их устранение.

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

Теперь, я хотел бы рассказать вам о нескольких людях, которые жили подобным образом, начиная с Ларри Теслера.

image

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

Так, например, в текстовом редакторе, вы не могли просто набрать текст и увидеть слова на экране, как на печатной машинке. Но, в то время программные интерфейсы разрабатывались с концепцией режимов. Если вы хотели вставить текст, вам нужно было нажать 'I', чтобы перейти в режим вставки затем клавишу Escape, чтобы выйти обратно в командный режим или, может быть, вы нажимали 'A', чтобы перейти в режим добавления текста. Вы изначально находились в командном режиме. И Ларри наблюдал за людьми, использовавшими компьютер. Или, если вы хотели переместить текст в другое место, вам нужно было нажать 'M', чтобы перейти в режим перемещения и тогда вы могли выбрать текст и переместить его. Вот, и он наблюдал за людьми, использовавшими программное обеспечение, и обнаружил, что многие, даже после процесса обучения и многих недель использования ПО, многие продолжали ощущать дискомфорт в использовании компьютера. На самом деле, они были пионерами концепции исследования пользователей программного обеспечения, это еще одно его достижение.

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

Он сформировал принцип: «Никто не должен быть заложником режима».

И этот принцип руководил всем, что он делал. Его лозунгом, который он использовал постоянно, было «Не держите меня в режиме» и он даже напечатал этот лозунг у себя на футболке. И, в конце концов, он изобрел текстовый редактор, который назывался Gypsy, который, по сути, ввел в обиход способ редактирования текста, который мы используем сегодня. Он использовал этот принцип во всех делах, которыми он занимался.

И когда вы набирали текст, слова сразу же появлялись на экране. Там появилась точка вставки. Таким образом, вы просто нажимали клавишу и перетаскивали курсор по тексту, который вы хотели выделить, как маркером, Одно из первых применений перетаскивания текста. Чтобы выделить текст, он изобрел немодальное выделение: нажатие и передвижение. Вы никогда не застревали в режиме, вам не приходилось переключаться между этими режимами. Чтобы перемещать текст в редакторе, он изобрел специальные команды, которые назвал Вырезать, Скопировать, Вставить (Cut, Copy, Paste) Т.е., вы выбирали текст, Вырезали его, и потом Вставляли, когда появлялась необходимость. И он наблюдал за людьми, использующими его программное обеспечение и обнаружил, что даже человек, который никогда в жизни не видел компьютера, — а тогда, это было большинство людей, — мог начать работать с ним, в течение получаса. Когда вы нажимали «W» на клавиатуре, вы получали «W» на экране, всегда. Очевидно, что это был очень большой шаг, который позволил людям начать использовать компьютеры.

И сегодня, эта идея настолько укоренилась в компьютерном мире, что мы уже принимаем ее как должное. И его идея об отсутствии режимов, распространилась на все части интерфейса рабочего стола пользователя, который был изобретен в то же время, в лаборатории Xeroc PARC. Это, на самом деле, его собственные слова, и если вам кажется, что он преувеличивает, вот номерной знак Ларри, с которым он ездит последние 30 лет: Я уже сказал, что Ларри принял на себя миссию по ликвидации режимов.

image

Сегодня, конечно же, у Ларри есть свой веб-сайт: nomodes.com и Twitter: @nomodes

image

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

Эдисон, на самом деле, просто наткнулся на технологию для записи звука и создал фонограф как некий новый продукт. Его типичная биография могла бы содержать такие строчки: «Ларри Теслер изобрел „Cut“ „Copy“ „Paste.“ И это верно, но, на самом деле, такая фраза вводит нас в заблуждение, потому что это изобретение очень отличается от, скажем изобретения фонографа Томасом Эдисоном. Но то, что сделал Ларри, было именно реакцией на определенный культурный контекст. Он также придумал целый список возможных применений своей технологии, но он не имел никаких культурно-ориентированных намерений.

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

И дело в том, что, именно таким образом начинались многие великие социальные перемены. Итак, первое, что сделал Ларри, он признал существование проблемы, которую не признавала культура того времени.

image

И все вокруг сказали: „Это безумие, что ты такое говоришь?“ Сегодня мы осознаем, что нельзя дискриминировать людей по половому признаку. Так, например, 150 лет назад, Элизабет Кэди Стэнтон должна была подняться и сказать: „Женщины должны голосовать“. Она должна была осознать эту проблему и начать с ней борьбу. Но, в то время, это было частью общества, никто не видел в этом проблемы. И, что важно заметить, я не пытаюсь никого оценивать, или определять относительную важность или воздействие этих двух людей на мир, я просто говорю об их мотивации и их подходе. И для меня, такая модель поведения, гораздо ближе к тому, что сделал Ларри, чем модель поведения Томаса Эдисона, которая заключалась в изобретении кучи разнообразных технологий, чтобы потом их запатентовать.

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

Например, Дуглас Энгельбарт. И многие другие ключевые личности в области компьютерных наук имели подобные мотивации.

image

Концепцию размещения информации на экране компьютера. Дуглас Энгельбарт, на самом деле, изобрел интерактивное программирование. Отображение информации различными способами. Перемещения по ней. Все это было придумано им в то время, когда о взаимодействии с компьютером в реальном времени практически никто и не слышал. Выбор различных элементов на экране и манипулирование ими. Его единственной целью с самого начала было дать человечеству возможности решения актуальных мировых проблем. Сегодня, мы знаем его как изобретателя мыши, но, на самом деле, он изобрел совершенно новый способ работы со информацией. И это была его мечта, то, что он называл работники умственного труда — использовать комплекс мощных средств обработки информации, для создания коллективного интеллекта.

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

Это Алан Кей.

image

Он также изобрел объектно-ориентированное программирование и множество других вещей. Алан Кей руководил лабораторией в Xerox PARC, откуда мы получили сегодняшний интерфейс рабочего стола, и такие вещи, как окна и иконки, команды меню. Его целью было, и я цитирую: «Усилить человеческий потенциал и создать новые способы мышления в нашей разрозненной цивилизации, которая в этом отчаянно нуждается.»

Разве это не здорово?

Он считал, что если дать детям возможность свободно мыслить в компьютерной среде, то есть, если сделать программирование частью элементарной грамотности, каким является чтение и письмо, то, когда они повзрослеют, у них появятся новые формы критического мышления, и новые способы понимания мира. Его подход был — начать с детей. И все, что он сделал, все, что он изобретал, было следствием осуществления этой мечты, его цели, связанной с детским образованием. И у нас появится более просвещенное общество, тут можно провести аналогию с тем, что дала обществу грамотность. И следующие принципы, которые он перенял от Пиаже и Монтессори, Джерома Брунера, которые, изучали детское мышление.

И личность, которая, вероятно, наиболее известна как активист программного обеспечения — Ричард Столлман.

image

Он также основал фонд Свободного Программного Обеспечения, написал GCC, GPL, и много, много других вещей. Столлман начал проект GNU, который сегодня является интегральной частью любой системы Linux. Его принцип состоял в том, что программное обеспечение должно быть свободным, от слова Свобода (freedom), и за этим утверждением стоит очень четкий смысл.

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

Они всегда борются. И даже сегодня, мир все еще очень далеко от любого из их идеалов, и они продолжают видеть мир в состоянии кризиса, и продолжают борьбу. Я не говорю, что вы должны жить таким образом. И я не говорю, что вы обязаны жить таким же образом. Что, подобный образ жизни — это возможность, которая вам доступна. Но, я хочу сказать, что вы можете так жить. Ваш консультант по поиску работы не будет говорить вам: «Вы должны начать свой крестовый поход.» И вы вряд ли часто слышите о такой возможности.

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

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

image

Я бы не сказал, что он внес свой вклад в область дизайна пользовательских интерфейсов, потому что, в его время, ничего подобного не существовало. Но я не вижу Ларри Тесслера на каком-либо из этих путей. И, конечно же, он не определил себя своим ремеслом, он определил себя своей целью. Он не выбрал себе одну из существующих проблем, требующих решения, он сам придумал проблему, которая существовала только в его собственной голове, и которую никто кроме него не смог распознать. И я уверен, что если вы посмотрите на статью в Википедии, она вам расскажет, что он ученый или что-то про пользовательские интерфейсы, но для меня это все равно что сказать, что Элизабет Кэди Стэнтон был организатором сообщества. Принципом, за который он боролся, который защищал. Вот кто она такая. Нет, Элизабет Кэди Стэнтон создала принцип избирательного права для женщин. У него была мечта, и он привел окружающий мир к этой мечте. Это была ее самоидентификация, а Ларри Тесслер создал принцип внемодальности.

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

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

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

Что это за секретный ингредиент, на который я так сильно реагирую?

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

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

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

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

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

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

Если нет, я должен что-то сделать по этому поводу.

image

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

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

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

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

Спасибо.

[Аплодисменты]

Источники

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть