http://glamour-and-discourse.blogspot.c ... ictor.htmlАвтоматический перевод с английского
Будущее программирования Цитата:
Будущее программирования
стенограмма
Брет Виктор
« Будущее программирования »
30 июля 2013 г.
( С конференции DBX )
Добрый день. Я действительно взволнован, чтобы говорить со многими программистами автоматических вычислительных машин. [смех] Как вы знаете, компьютеры становятся все более и более важными в нашем обществе. Сейчас в мире буквально тысячи компьютеров. [смех] И они используются для всего: от бизнеса и бухгалтерского учета до научных экспериментов и, вы знаете, кто знает, для чего они будут использоваться. Итак, все больше и больше компьютеров, и их цена снижается, а их размеры уменьшаются. Раньше компьютер был размером с весь зал, а теперь они сократились до очень маленьких размеров. [смех] Так что это время действительно быстрых изменений в области вычислений. Поэтому я подумал, что было бы интересно немного заглянуть в будущее программирования [смех] и подумать, учитывая то, что мы знаем сейчас,
[1:12]
Итак, о чем я собираюсь поговорить сегодня: было проведено несколько действительно интересных исследований, которые были проведены всего за последние десять лет или около того, и я думаю, что это будет иметь много последствий для того, каким может быть программирование в будущем. , Итак, есть четыре большие идеи - вроде четырех больших тем, - о которых я хочу поговорить, которые возникли из недавних исследований. Но прежде чем перейти к этим четырем большим идеям, я хочу поговорить о природе принятия идей в первую очередь. Итак, в основном мы замечаем, что технологии быстро меняются; умы людей меняются медленно. Таким образом, легко принять новые технологии; может быть трудно принять новые способы мышления. Итак, с технологической точки зрения Гордон Мур, у которого эта компания называется Intel, и [смех] около десяти лет назад заметил, что вычислительные мощности со временем экспоненциально увеличиваются. И он как бы экстраполировал это до настоящего момента, и он был точно в цели, и кто знает, как долго это будет продолжаться, но это кажется довольно разумным. Итак, урок, который следует извлечь из этого, заключается в том, что мы можем принять это как должное. Если мы просто ждем, наши компьютеры становятся быстрее, они становятся более способными. Мы можем просто подождать, и это только случится. То, что не произойдет, если мы будем ждать, это то, что люди меняются, люди принимают новые идеи.
[2:32]
В качестве примера: я уверен, что вы все помните этого парня - старую IBM 650. Это, вы знаете, первый тип массового компьютера общего назначения от IBM. Многие из нас режут зубы, программируя на этого парня. И в начале, верно, мы все запрограммированы в абсолютном двоичном формате. Когда мы кодировали, он буквально записывал числовые коды для каждой инструкции. И это было то, что мы сделали. Это было программирование. А потом, спустя несколько лет, появился Стэн Полли и изобрел то, что он назвал ассемблером. Так что это была Программа Символической Оптимизации Сборки - этот язык, на котором вы могли писать словами. Если вы хотите, чтобы компьютер что-то добавил, вы бы написали слово «добавить». Вы могли бы использовать символические имена переменных вместо жестко кодируемых адресов памяти. Это гораздо более мощный способ мышления о программировании. Вы были намного продуктивнее, сделали гораздо меньше ошибок. Этим ребятам показывали ассемблер - ребятам, которые пишут в двоичном коде - и они просто не интересовались. Они просто не поняли. Они не видели никакой ценности в этом деле. Таким образом, может появиться большое сопротивление новым способам работы, которые требуют от вас, как бы, отучиться от того, что вы уже изучили, и думать по-новому. И может быть даже прямая вражда.
[3:50]
Итак, Джонни фон Нейман - великий ученый, который изобрел компьютерную архитектуру фон Неймана, которую мы используем, и так много всего другого - сказал: «Я не понимаю, почему кому-то понадобится что-то кроме машинного кода». И вот однажды он у него было несколько учеников, и все ученики программировали в двоичном коде, и однажды один из его учеников взял немного времени, чтобы написать своего маленького ассемблера, чтобы он мог писать на ассемблере. И фон Нейман был в ярости на него - в ярости, что он будет тратить драгоценное машинное время на сборку. Это была канцелярская работа; это должно было быть для людей, правильно? Итак, мы увидели, что та же самая история произошла чуть позже, когда Джон Бэкус и его друзья пришли с идеей, которую они назвали Fortran - это так называемый язык высокого уровня, где вы могли бы писать свои формулы, как будто вы пишете математические нотации, и вы могли бы написать циклы. И это было показано программистам на ассемблере, и, опять же, они просто не были заинтересованы. Они не видели в этом никакой ценности. Они просто не поняли.
[4:50]
Поэтому я хочу, чтобы вы помнили об этом, когда я говорю о четырех важных идеях, о которых я собираюсь поговорить сегодня: легко думать, что технологии всегда становятся лучше из-за закона Мура, потому что компьютеры всегда становятся более способными Но идеи, которые требуют от людей отучиться от того, чему они научились, и мыслить по-новому - часто оказывается огромное сопротивление. Люди здесь - они думают, что знают, что делают, они думают, что знают, что такое программирование - это программирование; это не программирование. И поэтому будет большое сопротивление принятию новых идей.
[5:27]
Четыре идеи, о которых я хочу поговорить сегодня. Это все из очень недавнего исследования. Первый: сегодня мы пишем наши программы в коде. Мы пишем в основном список инструкций для компьютера. Было проведено несколько действительно интересных исследований прямого манипулирования данными, в которых вы непосредственно манипулируете структурами данных, и это неявно создает программу, которой должен следовать компьютер.
Второе, о чем я хочу поговорить. Сегодня мы пишем процедуры. В основном, вот процедура для компьютера. Интересные исследования по программированию с использованием целей - рассказывать компьютеру, чего вы хотите, а не как это делать. Сам компьютер вроде как выясняет, как это сделать.
Номер три. Сегодня мы программируем, используя строки текста и текстовых файлов. Люди делают что-то действительно замечательное. Например, за последние пять или десять лет они подключают видео дисплеи к компьютерам. И когда вы это делаете, все меняется. Вы можете начать думать о пространственном представлении информации.
И четвертое, мы программируем в модели последовательного программирования. По сути, вот несколько инструкций; компьютер делает их один за другим. Но оборудование меняется. Вскоре мы увидим массово параллельное аппаратное обеспечение, и нам понадобится разумная модель параллельного программирования для программирования на этом оборудовании.
[6:40]
Итак, первое, о чем я собираюсь поговорить, это прямое манипулирование данными. И я собираюсь показать этот проект, который сделал Иван Сазерленд - это его кандидатская диссертация около десяти лет назад - эта система называется Sketchpad. А Sketchpad была системой, которая позволяла рисовать картинки на видеоэкране. Поэтому он взял свою световую ручку и положил ее на экран. Итак, он нарисовал эту линию, нарисовал эту линию, вроде нарисовал еще несколько линий, нарисовал эту маленькую вершину. Он пытается нарисовать заклепку здесь. И он рисует это действительно небрежно - он немного наклонен в сторону, он деформирован. Так что он делает, он тогда, он удерживает переключатель и указывает пару из этих линий на компьютерную систему, указывая, что он хочет, чтобы эти линии были взаимно перпендикулярны. Таким образом, система запускает итеративный решатель - как бы вращает линии вокруг себя - и выясняет, как превратить их во что-то взаимно перпендикулярное, как превратить их в прямоугольник. Так что, по сути, система ничего не знает о прямоугольниках. Он смог заставить его нарисовать прямоугольник, напрямую применив набор ограничений. И что делает эту программу, а не просто картинку, так это то, что эти ограничения динамически поддерживаются. Таким образом, у него есть заклепка, которую он нарисовал, и он изменяет размеры этого угла и, в некотором смысле, изменяет размеры некоторых других вещей - решатель откатывается назад и превращает его в идеальный прямоугольник. Итак, по сути, он создал программу, которая рисует прямоугольник, но он не сделал это, написав код. Он сделал это, непосредственно манипулируя данными и непосредственно применяя к ним набор ограничений. И так, это своего рода простой пример. А потом он ушел и сделал причудливые вещи. Как здесь симуляция моста. Так что на самом деле имитирует физику моста. Он нарисовал это от руки. Числа здесь представляют напряжение в тех конкретных пролетах моста. И он может варьировать вес - это груз, который свисает с центра моста - и это как-то деформируется. А система Sketchpad ничего не знает о мостах. Он создал эту программу моделирования моста, непосредственно нарисовав ее и применив определенный набор очень общих ограничений. И он может варьировать вес - это груз, который свисает с центра моста - и это как-то деформируется. А система Sketchpad ничего не знает о мостах. Он создал эту программу моделирования моста, непосредственно нарисовав ее и применив определенный набор очень общих ограничений. И он может варьировать вес - это груз, который свисает с центра моста - и это как-то деформируется. А система Sketchpad ничего не знает о мостах. Он создал эту программу моделирования моста, непосредственно нарисовав ее и применив определенный набор очень общих ограничений.
[8:57]
Так что я определенно вижу в этом нечто очень важное через 30-40 лет. Я могу представить программирование, напрямую манипулируя структурами данных и позволяя этому создавать код. Но особенно для вещей, которые визуально или физически, как это. Так что, если, скажем, через несколько десятилетий мы получим какой-то формат документов на некой сети компьютеров, я думаю, [смех] Я уверен, что мы собираемся создавать все эти документы с помощью прямых манипуляций. Не будет никаких языков разметки или языков таблиц стилей, верно? Это не имеет смысла. Иван Сазерленд показал нам, как это сделать здесь, в 1962 году. Так что все это будет прямой манипуляцией в будущем, и это будет фантастическим.
[9:42]
Второе, о чем я хотел поговорить, это программирование с использованием целей. Таким образом, мы увидели немного этого в системе ограничений Sketchpad. Поэтому Иван Сазерленд хотел нарисовать прямоугольник. Он не написал процедуру, чтобы нарисовать каждую сторону прямоугольника. Он применил набор ограничений, и сама система вроде как выяснила, как нарисовать этот прямоугольник. Поэтому он как бы сказал то, что хотел: «Я хочу, чтобы все было взаимно перпендикулярно». Он не сказал, как это сделать. Решатели выяснили, как это сделать. Итак, еще один замечательный пример этого - который только что появился несколько лет назад - Карл Хьюитт делает эту систему под названием Planner, которая действительно великолепна. Это на самом деле идет в обоих направлениях. Так что это может привести к процессуальному рассуждению; это может рассуждать в обратном направлении от целей. Так что, если вы скажете Planner, что яблоки красные; затем, если вы дадите ему яблоко, он знает: «Ага! Оно красное. Но вы также можете сказать: «Я хочу что-то красное», и он скажет: «О, давайте попробуем яблоко». Таким образом, вы можете выразить свою программу в терминах целей - результатов, которые вы хотите получить от программы, - но Вы также можете предоставить процедурные стратегии для достижения определенных типов подцелей. Действительно интересный способ мышления о программировании.
[10:52]
И это привело к появлению другой системы несколько лет спустя, называемой Пролог, которая просто сохранила обратную часть Planner. Таким образом, в Прологе вы можете выразить свою программу как цели, а сама система использует поиск или что-то еще, чтобы попытаться выяснить, как достичь этих целей. Так что это приводит к жанру программирования, который называется логическим программированием, но это не очень важная часть здесь. Важно выразить вашу программу как то, что вы хотите, чтобы она делала, а не набор инструкций о том, как это сделать - позволить самому компьютеру разобраться, как это сделать.
[11:24]
Другим примером такого же понятия является сопоставление с образцом. Так что я уверен, что вы помните - вы все помните - SNOBOL [StriNg Oriented and symBOlic Language]. Это язык манипулирования текстом. Если у вас есть куча чеков, через которые вы хотите пройти, вы запускаете скрипт или программу SNOBOL. А у СНОБОЛа были встроенные функции для сопоставления с образцом. Таким образом, вы можете выразить шаблоны, которые вы хотите сопоставить с текстом. Чуть позже Кен Томпсон - он работает в Bell Labs над этой системой, которую они называют UNIX [смех]. Хм, я знаю, верно, "UNIX"? Но он принял понятие регулярных выражений Клини, чтобы сделать сопоставление с образцом в тексте. Итак, если у вас есть сопоставление с шаблоном, если вы хотите переварить большой кусок текста, вы не пишете синтаксический анализатор, который проходит через него процедурно, вы предоставляете шаблон,
[12:20]
Итак, все эти примеры: ограничения SketchPad, Planner, Prolog, сопоставление с образцом - опять же, все они являются примерами достижения целей компьютера на высоком уровне, говоря: «Вот что я ищу» и позволяя компьютеру сам разберись как это сделать. И мы видим кое-что подобное в оптимизации компиляторов, но я думаю, что это будет действительно распространено через несколько десятилетий. И причина того, что это будет так важно - эта целенаправленная штука - связана с этой идеей, которую Ликлайдер развлекает. Итак, как вы все знаете, Ликлайдер возглавляет ARPA [Агентство перспективных исследовательских проектов], государственное финансирующее агентство, и он продвигает эту идею глобальной сети компьютеров. Просто взяв все компьютеры в мире и подключив их друг к другу. И он называет это межгалактической компьютерной сетью. [смех] Потому что он знает, что инженеры всегда обеспечивают минимум, поэтому, если он попросит сеть, охватывающую галактику, он надеется получить хотя бы сеть, охватывающую весь мир. [смех] И сейчас люди называют это ARPANET; это, вы знаете, превращается в какую-то сеть. Я не знаю, это довольно милая идея. Это может сработать. И когда у вас есть такая глобальная сеть компьютеров, вы сталкиваетесь с тем, что Ликлайдер называет «проблемой общения с инопланетянами». Поэтому он выразил это здесь: «По сути, эта проблема обсуждается писателями-фантастами:« Как вы получаете общение началось между совершенно некоррелированными «разумными» существами? »И я объясню, что он имеет в виду. поэтому, если он попросит сеть, охватывающую галактику, он надеется получить хотя бы сеть, охватывающую весь мир. [смех] И сейчас люди называют это ARPANET; это, вы знаете, превращается в какую-то сеть. Я не знаю, это довольно милая идея. Это может сработать. И когда у вас есть такая глобальная сеть компьютеров, вы сталкиваетесь с тем, что Ликлайдер называет «проблемой общения с инопланетянами». Поэтому он выразил это здесь: «По сути, эта проблема обсуждается писателями-фантастами:« Как вы получаете общение началось между совершенно некоррелированными «разумными» существами? »И я объясню, что он имеет в виду. поэтому, если он попросит сеть, охватывающую галактику, он надеется получить хотя бы сеть, охватывающую весь мир. [смех] И сейчас люди называют это ARPANET; это, вы знаете, превращается в какую-то сеть. Я не знаю, это довольно милая идея. Это может сработать. И когда у вас есть такая глобальная сеть компьютеров, вы сталкиваетесь с тем, что Ликлайдер называет «проблемой общения с инопланетянами». Поэтому он выразил это здесь: «По сути, эта проблема обсуждается писателями-фантастами:« Как вы получаете общение началось между совершенно некоррелированными «разумными» существами? »И я объясню, что он имеет в виду.
[13:54]
Итак, скажем, у вас есть эта сеть компьютеров, и у вас есть какая-то программа, написанная кем-то на каком-то языке; это говорит по какому-то протоколу. У вас есть еще одна программа, написанная кем-то еще в другой раз, говорящая на совершенно другом языке, написанная на совершенно другом языке. Эти две программы ничего не знают друг о друге. Но в какой-то момент эта программа выяснит, что ей нужна служба, которая должна общаться друг с другом. Итак, у вас есть эти две программы, которые ничего не знают друг о друге, написанные в разное время, и теперь они должны иметь возможность общаться. Так как они собираются это сделать? Ну, есть только один реальный ответ, который масштабируется, это на самом деле сработает, - они должны выяснить, как разговаривать друг с другом. Правильно? Им нужно договариваться друг с другом. Они должны исследовать друг друга. Им нужно динамически определять общий язык, чтобы они могли обмениваться информацией и выполнять цели, которые им поставил программист. Вот почему эти целенаправленные вещи будут так важны, когда у нас будет этот интернет, потому что вы не можете написать процедуру, потому что мы не будем знать процедуры для общения с этими удаленными программами. Эти программы сами должны определить процедуры для общения друг с другом и достижения целей более высокого уровня. Так что если у нас есть эта всемирная сеть, я думаю, что это единственная модель, которая будет масштабироваться. То, что не сработает, что будет полной катастрофой, - я собираюсь придумать термин здесь, API [Интерфейс прикладного программирования] - это понятие о том, что у вас есть программист-человек, который пишет на фиксированный интерфейс, предоставляемый какой-либо удаленной программой. Прежде всего, это требует, чтобы программы уже знали друг о друге, верно? И когда вы пишете эту программу на этом языке, теперь они связаны друг с другом, поэтому первая программа не может отправиться на поиски других программ, реализующих тот же сервис. Они связаны друг с другом. Если язык этого меняется, он нарушает этот. Это действительно жестоко, не масштабируется. И, что хуже всего, у вас есть - это в основном проблема машинного кода. У вас есть человек, который делает детали низкого уровня, о которых должен заботиться аппарат. Поэтому я уверен, что этого никогда не произойдет. У нас не будет API в будущем.
[16:25]
Третья важная идея, о которой я хочу поговорить, - это пространственное представление информации. Итак, сегодня наши программы - это в основном много строк текста - большой файл, полный строк текста. И это имеет смысл, когда ваша программа находится в стеке перфокарт, или это бумажная лента или магнитная лента - это очень линейный носитель - имеет смысл иметь вашу программу в виде линейной формы. Если вы используете телетайп, то телетайп создается для того, чтобы выплевывать строки текста - вот что он делает. Поэтому, конечно, ваши программы будут в строках текста. Но, как я уже говорил, люди сейчас делают что-то действительно дикое и сумасшедшее, например, подключают видео к компьютерам. И когда у вас есть видеодисплей, подключенный к компьютеру, вы можете начать думать о своем компьютере как об этом очень динамичном листе бумаги, где вы можете представлять вещи в пространстве.
[17:20]
Таким образом, у Дуга Энгельбарта из SRI [Стэнфордского исследовательского института] есть эта система, которую он называет «онлайн-системой» - NLS. Он дал большое демо пять лет назад. Возможно, вы видели это. И есть много действительно замечательных вещей о системе. Одним из наиболее примечательных является представление информации на экране - на видеоэкране. Таким образом, у него есть это устройство, называемое мышью, когда вы как бы катаете его по столу, и это довольно сложно объяснить, но вы можете использовать это, чтобы указать на разные части экрана и указать, что вам нужна дополнительная информация о чем-то, что вы указываем на. И у этого также есть это понятие различных взглядов на информацию. Здесь вы можете видеть, что у него есть некоторые данные в списке, и они могут перевернуть их и посмотреть на те же данные, что и на двумерную диаграмму такого рода.
[18:16]
Еще одна замечательная система, примерно в то же время, выходящая из корпорации RAND, называлась GRAIL. И это система для программирования с использованием блок-схем на видеоэкране. И устройство ввода здесь - это стилус на планшете. И вы можете составить эти блок-схемы. И позвольте мне показать вам, как это работает. Программист рисует этот блок - и просто отчасти его произвольный - и он рисует блок, и система распознает его как блок и превращает его в блок блок-схемы, поэтому он присваивает смысловые значения этим чертежам, которые он делает. Он хочет дать ему ярлык, поэтому он просто начинает писать письма. Эта система распознает его почерк. Это 1968 год. Система распознает его почерк, превращает его в текст. Здесь он соединяет эту коробку с той линией. И так далее. Так что все это очень прямые манипуляции. Если он хочет избавиться от этой линии, он просто набрасывает ее, и она уходит. И так, действительно подумайте о том, что означает программирование, когда у вас есть видеодисплей, когда вы можете выразить вещи в двух измерениях. Но когда я говорю о пространственном представлении информации, я говорю не только о таких вещах, как блок-схемы.
[19:33]
Так что у Xerox есть небольшой исследовательский центр в Пало-Альто. Там есть дети, которые работают над тем, что они называют Smalltalk. А в Smalltalk исходный код выражается в виде текста, но в нем нет большого длинного текстового файла с целой кучей кода. Это организовано пространственным способом. Итак, вот что они называют браузером. Итак, в этом списке здесь: здесь есть вся коллекция классов, вот все классы в этой коллекции, вот все протоколы в этом классе, вот все методы в этом протоколе и вот исходный код для этого конкретного метода. Таким образом, определения методов - это текст, но это не одна огромная строка текста. Они организованы пространственно, поэтому вы можете очень быстро обойти систему и посмотреть, что происходит.
[20:20]
Таким образом, между NLS и GRAIL от Engelbart, Smalltalk - это очень разные способы пространственного представления информации - поэтому я абсолютно уверен, что через сорок лет мы не будем писать код в текстовых файлах. Правильно? Нам показали путь.
[20:38]
И, как примечание, все эти системы, которые я только что показал вам - система Энгельбарта, GRAIL, Smalltalk, то, что происходит в Университете Иллинойса под названием PLATO [Programmed Logic for Automatic Teaching Operations], также очень интересная система - эти являются частью этой новой волны интерактивных вычислений, когда вы садитесь за компьютер и фактически взаимодействуете с компьютером в режиме реального времени. И эти ребята знают, что они пытаются доказать эту новую концепцию, и поэтому они разработали систему с самого начала, чтобы иметь немедленный ответ. Пользовательский интерфейс всегда мгновенно реагирует - вы взаимодействуете с чем угодно, вы сразу получаете ответ. Так что это своего рода симуляция физического объекта. И поэтому, если интерактивные вычисления вырастут - и я думаю, что так и будет, - то я думаю, что совершенно очевидно, что через сорок лет наши пользовательские интерфейсы, если вы взаимодействуете с ними, вы никогда не будете испытывать никаких задержек или задержек. Правильно? Потому что эти парни доказали, насколько важно иметь мгновенно реагирующий пользовательский интерфейс. И они делали это в 60-х годах, так как наши компьютеры работают в миллион раз быстрее, очевидно, нет никаких причин задержек или задержек в операционной системе в пользовательском интерфейсе. Так что это будет действительно захватывающе.
[21:26]
Четвертое, о чем я хочу поговорить, это параллельное программирование. Итак, сегодня наши программы в основном представляют собой последовательность инструкций: компьютер, сделай это, затем сделай это, затем сделай это, затем сделай это. И одна из причин, по которой мы программируем в последовательной модели, связана с аппаратным обеспечением. Итак, мы использовали эту компьютерную архитектуру, называемую компьютерной архитектурой фон Неймана, где у вас есть процессор, а затем он подключается к большой памяти и извлекает слова из памяти. И поэтому модель последовательного программирования имеет смысл, когда у вас есть только один процессор. Процессор может делать только одну вещь за раз. Вы даете этот список действий для процессора, и он как бы делает каждый из них. Однако одной из особенностей архитектуры фон Неймана является то, что большая часть этой памяти большую часть времени простаивает. Итак, у вас есть этот маленький процессор, и он вроде как обрабатывает так быстро, как может, но только одно слово памяти когда-либо доступно. Остальная часть памяти просто сидит и ждет. И это работает, когда ваш процессор сделан из вакуумных ламп или реле, он довольно большой и дорогой, а ваша память сделана из ядра или вращающегося барабана. Это также большой и дорогой и другой. Тогда вы можете сойти с рук. Но сейчас мы начинаем видеть невероятное изобретение в области вычислений, которое, я думаю, изменит все. И это интегральная схема, полупроводниковая интегральная схема. И это работает, когда ваш процессор сделан из вакуумных ламп или реле, он довольно большой и дорогой, а ваша память сделана из ядра или вращающегося барабана. Это также большой и дорогой и другой. Тогда вы можете сойти с рук. Но сейчас мы начинаем видеть невероятное изобретение в области вычислений, которое, я думаю, изменит все. И это интегральная схема, полупроводниковая интегральная схема. И это работает, когда ваш процессор сделан из вакуумных ламп или реле, он довольно большой и дорогой, а ваша память сделана из ядра или вращающегося барабана. Это также большой и дорогой и другой. Тогда вы можете сойти с рук. Но сейчас мы начинаем видеть невероятное изобретение в области вычислений, которое, я думаю, изменит все. И это интегральная схема, полупроводниковая интегральная схема.
[23:34]
Так что это то, что сделала компания под названием Intel. Это называется микропроцессором. И это целый процессор на одном куске кремния. Таким образом, весь процессор сделан из транзисторов. А транзистор - это просто маленькая картинка, которую вы вытравили в кремний. И вся схема - это просто одна большая сложная картина, которую вы врезали в кремний. Так что наши процессоры просто сделаны из транзисторов и кремния. Наши воспоминания также будут сделаны из транзисторов на кремнии. Это все то же самое. Поэтому, когда вы смотрите на архитектуру фон Неймана с этой точки зрения, у вас есть эти транзисторы, которые работают очень усердно - они обрабатывают вещи - и у вас есть огромный массив транзисторов, большинство из которых являются просто сидеть и ждать. Они не обрабатывают. Они ничего не делают. И поэтому, если вы хотите, чтобы эти транзисторы работали, если вы действительно хотите максимизировать объем обработки, которую вы собираетесь извлечь из куска кремния, вам нужно начать смотреть на вещи, которые больше похожи на это. Правильно? Так что компьютеры хотят быть на кремнии, они хотят быть множеством маленьких компьютеров, таких как огромный массив маленьких компьютеров с собственными процессорами, своим маленьким состоянием, своего рода делами, связанными друг с другом. Таким образом, вы максимизируете количество вычислений на одну площадь кремния, и оно масштабируется, поэтому, когда транзистор становится меньше - когда площадь кристалла кремния становится больше - у вас есть все это дополнительное пространство, вы просто заполняете его большим количеством процессоров. Правильно? Готово. Действительно легко. Так что это та архитектура, над которой мы будем программировать в будущем. Если вы не знаете, если Intel каким-то образом не станет мертвой хваткой на рынке обработки [слова неразборчиво] и не продвинет эту архитектуру на тридцать лет вперед. Но этого не произойдет. Мы собираемся программировать на эти вещи.
[25:28]
И когда у вас есть это оборудование, вы должны задуматься: как мы будем программировать на этом? Какова наша модель программирования для такого рода аппаратного обеспечения? И способ, которым мы сегодня занимаемся программированием, заключается в использовании потоков и блокировок, верно? У вас есть несколько последовательных потоков управления, и вы как бы притворяетесь, что они идут параллельно, мультиплексируя их на процессор, и они пытаются заблокировать друг друга из общих ресурсов, и, как, это никогда не сработает , правильно? Это не масштабируется. Вы не можете рассуждать о сотнях потоков, все стучащих в одну и ту же общую память одновременно. Потоки и замки - они вроде тупик, верно? Так что я думаю, что если через сорок лет мы все еще будем использовать нити и блокировки, мы должны просто собрать вещи и пойти домой, потому что мы явно потерпели неудачу как инженерная область. [смех]
[26:13]
Так что, если это не потоки и блокировки, то что будет работать? И Карл Хьюитт - это тот самый Карл Хьюитт, что и Планнер - придумал идею, которую он назвал актерской моделью. Таким образом, модель актера - это модель вычислений, вдохновленная физикой. Итак, в физике у вас есть все эти частицы, и все частицы просто независимо делают свое дело, и у них есть свое собственное маленькое состояние, и они взаимодействуют с теми, которые вокруг них. И Карл Хьюитт думал о компьютерных процессах точно так же. У вас есть целая куча процессов, и все они как бы асинхронно выполняют свою собственную мелочь, у них есть свое собственное маленькое состояние, и они отправляют сообщения друг другу. Итак - действительно интересный, действительно новый и захватывающий способ мышления о программировании. Так что это как бы нагревается прямо сейчас. У Жиля Хана во Франции есть некоторые идеи. Я думаю, что Тони Хоар занимается этим с чем-то, что он собирается называть передачей последовательных процессов, и, возможно, даже Робин Милнер собирается присоединиться к вечеринке. Здесь происходят действительно захватывающие вещи.
[27:11]
Теперь для этого разговора детали этих конкретных моделей не имеют большого значения. Я думаю, было бы здорово, если бы модель актера была выбрана шведской телефонной компанией или что-то в этом роде. Это было бы странно. [смех] Но здесь важно то, что у нас будет массивно параллельное оборудование. Нам нужна разумная модель параллельного программирования, которая соответствует аппаратному обеспечению, и что-то вроде этого будет тем, что мы собираемся использовать.
[27:48]
Вот о четырех вещах, о которых я хотел поговорить.
Прямое манипулирование данными: что-то вроде Sketchpad, где вы рисуете картинки, динамически добавляете ограничения к этим картинкам, напрямую манипулируете структурами данных вместо написания инструкций для программы.
Программирование с использованием целей и ограничений: такие вещи, как ограничения Sketchpad, Planner и Prolog, регулярные выражения, другие типы сопоставления с образцом, когда вы сообщаете компьютеру, что вы хотите сделать, и сам компьютер имеет решатели, которые выясняют, как это сделать.
Пространственное представление информации. У нас больше нет текстовых файлов. Мы собираемся представлять информацию в пространстве, потому что у нас есть видео-дисплеи.
И принципиально параллельное мышление: параллельное аппаратное обеспечение, модели параллельного программирования. Нет больше потоков и замков. Нет больше последовательного мышления.
[28:39]
Вот о четырех вещах, о которых я хотел поговорить. И вы знаете, я пытался сделать некоторые прогнозы о будущем, и вы не можете предсказать будущее, верно? Так что это хорошие идеи. Я не знаю, что с ними будет. Идеи как бы разделяются, сливаются и выходят из моды, так что, знаете ли, может произойти все что угодно. Но я думаю, что было бы стыдно, если бы через сорок лет мы все еще кодировали процедуры и текстовые файлы в модели последовательного программирования. Я думаю, это говорит о том, что мы ничего не узнали из этого действительно плодотворного периода в информатике. Так что это вроде бы трагедия. Но даже больше трагедии, чем неиспользование этих идей, было бы, если бы эти идеи были забыты. Правильно? Если кому-нибудь когда-нибудь и будут показаны эти вещи, и они будут удивлены. Правильно? Но даже это не самая большая трагедия. Это не настоящая трагедия. Настоящая трагедия была бы, если бы люди забыли, что у вас могут появиться новые идеи о моделях программирования. Итак, позвольте мне объяснить, что я имею в виду под этим.
[29:50]
Вот, что я думаю, что наихудший сценарий был бы таким: если новое поколение программистов вырастет, никогда не подвергаясь этим идеям. Следующее поколение программистов вырастает только тогда, когда ему показывают один способ мышления о программировании. Таким образом, они работают над этим способом программирования - они конкретизируют все детали, они, как вы знаете, как бы решают эту конкретную модель программирования. Они все поняли. И затем они учат этому следующему поколению. Так что второе поколение вырастает, думая: «О, это все выяснили. Мы знаем, что такое программирование. Мы знаем, что делаем ». Они растут с догмой. И как только ты вырастешь с догмой, из нее очень трудно вырваться. Знаете ли вы причину, почему все эти идеи и так много других хороших идей возникли в этот конкретный период времени - в 60-х годах, в начале 70-х? Почему все это произошло тогда? Это было потому, что было уже достаточно поздно, что технология как бы достигла точки, когда вы действительно могли что-то делать с компьютерами, но было еще достаточно рано, чтобы никто не знал, что такое программирование. Никто не знал, каким должно быть программирование. И они знали, что не знают, поэтому они просто попробовали все. Их разум был абсолютно свободен, и они просто сказали: «Может быть, мы могли бы программировать так. Может быть, мы могли бы так программировать ». Они просто пробовали все, что могли придумать. вроде, все перепробовал. Их разум был абсолютно свободен, и они просто сказали: «Может быть, мы могли бы программировать так. Может быть, мы могли бы так программировать ». Они просто пробовали все, что могли придумать. вроде, все перепробовал. Их разум был абсолютно свободен, и они просто сказали: «Может быть, мы могли бы программировать так. Может быть, мы могли бы так программировать ». Они просто пробовали все, что могли придумать.
[31:33]
Поэтому самая опасная мысль, которую вы можете иметь как творческий человек, - думать, что вы знаете, что делаете. Потому что, как только вы думаете, что знаете, что делаете, вы перестаете искать другие способы ведения дел. И вы перестаете видеть другие способы ведения дел. Вы становитесь слепым. Вы становитесь такими, как эти парни здесь, вроде как пишете в двоичном коде. Кто-то показывает им язык ассемблера, кто-то показывает им фортран, и они даже не видят его. Это просто идет прямо над их головой. Потому что они знают, что делают. Они знают, что такое программирование. Это программирование; это не программирование. И поэтому они полностью упускают этот гораздо более мощный способ мышления.
[32:04]
Итак, сообщение этого разговора, вы знаете, это не совсем такие вещи, верно? Суть этого выступления такова: если вы не хотите быть этим парнем, если вы хотите быть открытым или восприимчивым к новым способам мышления, изобретать новые способы мышления, я думаю, что первым шагом вы должны сказать себя: «Я не знаю, что я делаю. Мы, как поле, не знаем, что делаем ». Я думаю, вы должны сказать:« Мы не знаем, что такое программирование. Мы не знаем, что такое вычисления. Мы даже не знаем, что такое компьютер ». И как только вы действительно понимаете это - и как только вы действительно в это верите - тогда вы свободны. И ты можешь думать что угодно. Спасибо.
2 комментария:
Ниазиакмал хан
7 июля 2016 года в 13:21
Этот блог потрясающий, и я многое узнаю о программировании отсюда. Самое лучшее в этом блоге - то, что вы делаете от начала до уровня экспертов.
Любовь из Ппрограммирования
Ответить
Mayur Kohli
6 февраля 2018 года в 21:58
прочитайте это в digg. И это кажется, что мы находимся в одном конце программирования. Я согласен с вышеупомянутой статьей, но вопрос в том, насколько это практично, когда больше программистов связывают свои руки в традиционном программировании. Будущее программирования выглядит хорошо.