Наш ответ Чемберлену

Наш ответ Чемберлену

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

Итак, по пунктам. Рассмотрим определение "Компьютерная технология", введенное Юрием Красковым в N№17 КВ-2000. "Технология вообще - это точные знания (информация) о каком-либо процессе производства или деятельности, обеспечивающем определенный конечный результат с заданными параметрами" - с этим согласен. "Для КТ эти знания реализуются в виде ПО" - а вот при такой постановке вопроса задача не решается. Взглянуть хотя бы на цепочку принятия решения чертежника за автокадом (или геймера за кваком):

1) Человек воспринял информацию из внешней среды. В окне увидел, услышал, с монитора прочитал. Неважно, откуда.

2) Принял решение: "Заставлю-ка я комп нарисовать мне вот этакую ломаную линию..." ("Проломаю-ка башку этому козлу...")

3) Попытался объяснить компу, чего от него хотят.

4) Сел и ждет результата, а ПО (софт) работает.

5) Получил результат и пытается его осознать.

6) Возможно, переход к началу [1].

Если считать, что знания о К(омпьютерных) Т(ехнологиях) реализуются в виде П(рограммного) О(беспечения), то сразу видна неполнота данного определения. Ибо софт - это всего лишь пункт [4], то есть, едва ли 17% от того самого процесса, который только в целости имеет право называться технологией. Юрий Красков вполне разумно замечает по этому поводу: "...разработчики КТ слишком часто увлекаются производительностью, не замечая при этом, что их старания не дают нужного эффекта". То есть, современное понятие КТ почему-то в самой своей формулировке содержит только [4] и кусочки [3] и [5] пунктов. Пункт [4] уже и впрямь заоптимизирован до беспредела. Но ведь на самой быстрой и мощной машине ничего никуда не увезешь, если дверь в ее грузовое пространство, мягко говоря, узковата.

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

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

Но мы отклоняемся. Пардон. Как переварить информацию, компы давно знают. Узкое место - как заставить съесть. Устройство ввода (в нашем примере пункт [3]). С выводом проще (особенно, если учесть, что RADEON 256 содержит транзисторов больше, чем PIII).

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

Человека мы переделать можем? Покамест нет. Тогда следует переделать структуру компа, чтобы ввод информации в комп:

I) Допускал поглощение машиной данных с такой же скоростью, с какой человек принимает решения (согласовать пункты [2] и [3] по времени).

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

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

Но сам язык человеческий разве не достаточно универсальное средство? Переформулировав задачу и сместив акцент на "как объяснить", мы обращаемся к лингвистам, как к специалистам в области контактов между разумами, и они в момент находят решение. Одно из возможных - сделать минимальной единицей представления информации объект, который может обладать или не обладать некими свойствами, иметь или не иметь ссылки (связи) на другие объекты и их свойства. Если реализовать подобную структуру на уровне системы, оставив байт как атомарную единицу (а бит как глюонный аналог;-)), то:

а) Система получает возможность общаться с человеком на его понятийном уровне (решена задача о согласовании [2]-[3], а так же [5]-[1]).

б) Система расширяет свою универсальность до уровня универсальности человеческой речи. Все, что можно описать словами, система сможет сделать.

в) Между человеком и системой исчезнет программист как переводчик. Останется программист как создатель и учитель систем. (Братья Стругацкие предсказали что-то похожее в "Полдень. XXI век").

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

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

Линейное развитие архитектуры исчерпало себя. Эти строки я пишу на AMD-K5-PR133, 32MB RAM, videoS3V64 1(один)MB. На этой машине я просматриваю видеокомпакты (в цвете и с музыкой, и ничего что-то не тормозит. Подозрительно, правда?), слушаю mp3 и музыкальные компакты. Система? Wfw3.11rus. У меня не было W'95/98, и теперь, надеюсь, уже никогда не будет. Этой машины и этой системы мне достаточно для решения определенного уровня задач. Объясните мне, глупому ламеру, зачем процессору 1 ГГц частоты? Я охотнее заплачу за хороший графический планшет (где бы достать?), за аккордную клавиатуру - мне лениво набирать на обычной. За голографический дисплей, за трехмерный принтер по пластику. Просто за надежный бесшумный принтер.

Предвижу возражения: вот был бы ты геймер! Вот QuakeIII! Вот NFS! StarCraft! HM&M! HeroesIII! Разве это плохо?

Нет, не плохо. Красиво. Очень. Видел, восхищался. Но скучно!!! Почему это во всякой игре самое интересное - мультиплеейрный режим?

А потому, что любое противостояние разумов за ресурсы (будь-то кристаллы и газ в "Старом", рудники и набираловки в Heroes III, или патроны и аптечка в шутере) решается, в общем, набором нескольких стандартнейших приемов, которые еще древними китайцами были сформулированы в виде ограниченного количества стратагем. При правильном приложении этих стратагем играть с компом скушновато - знаешь все наперед. Да и мысли у изготовителей игр какие-то на удивление однобокие. Хоть бы догадались предоставить возможность - в тех же "Аллодах" - покупать карту локейшена заранее! Или - возможность задавать поведение юнитов на основе простого набора принципов и условий в RTS-играх. (Только в Eatrth2150, кажется, это реализовали). А то уровень от уровня отличается только степенью повторяемости. После того, как выводится алгоритм прохождения любой ресурсной игрушки типа RTS или вообще Strategy, можно уже не играть. Про игры, которые можно пройти только единственным способом, вообще говорить нечего. Сама идея единственности концовки дискредитирует интерактивность так, как десять тысяч американских убийц-думеров не сумеют. Отсюда и получается, что комп превратился в вариант шахматной доски и является всего лишь игровым полем. Не дороговато ли?

Если сменить железную архитектуру, вполне возможно получить технологическую передышку лет на 50, а если профессионалы прикинут развитие системы и заложат нужные возможности для расширения, то и на 100. (Тут еще вопрос - как определить, что именно понадобится через Х лет, но он решается просто: требования к компу и возможности оного однозначно определяются исполняемой им функцией в надсистеме обработки информации будущего человечества. Задачка, понятно, не детская, то есть, как раз для настоящих мастеров).

Можно будет наконец-то перестать покупать компы, а начать их применять, как это давно и делается в организациях, по роду занятий деньгами не ограниченных (типа военных). Приведем злоехидный пример: представим себе начальника САПРа на сегодняшем предприятии. Он что, делает выбор на основании пресс-релизов? Или все-таки он подбирает машину под решаемую в его организации задачу? (Мы же помним, что в нашей технологической цепочке 6 пунктов, а не один пункт [4]). А теперь представим себе, что явился к директору - то есть, именно к директору, а не к его представителю по покупке техники - некто и сказал: "Вот машина, решающая Вашу задачу настолько полно, насколько это вообще для данной задачи возможно. Если Вы полагаете, что это не так, или же через две-три тысячи лет Вы захотите изменить задачу, Вы расскажете это машине на Вашем родном языке. Вам никогда не понадобится апгрейд или специальный человек, который будет объяснять Вашей машине, что от нее требуется, и переводить Вам ее ответы." И что, найдется директор, который не заплатит за такую машину? (Особенно, если он, т.е. директор, сразу после покупки, сможет, мстительно ухмыляясь, разогнать САПР, низводивший и курощавший его, директора страшными заклятиями типа "апгрейд", "рухнулся", "база умерла").

Натурально, такой подход убьет сразу два рынка: программеров-эксплуатационников в этом самом САПРе, и производителей харда, которым нужно, чтобы их машины покупали ежегодно. Тут я слышу гневные вопли: "И он с этим печатается в компьютерном издании!" Конечно же, я понимаю, что при господствующем в нашей цивилизации идеале быстрого и легкого (обязательно!) обогащения, все нетривиальные решения чреваты боком. Но!

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

Того же следует ожидать и в отношении компьютеров.

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

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

Но что мешает нам написать программу, которая сама перепишет под себя старый софт, да еще и оптимизирует его при этом? Смотри пункт б): "все, что можно описать словами, система сможет сделать". Если машина уже сейчас способна перевести с С++ на Assembler, то для более развитого компилятора обработка С++ исходников труда не составит.

У проблемы обратной совместимости есть и второе решение, гораздо более эффективное, вытекающее именно из того, что базовая единица у нас - объект, а не байт. Всякое имеющееся ПО тем или иным способом решало какую-то из задач, то есть служило пунктом [4] в нашей исходной цепочке. Для чего нужно было новое ПО? Для случая, когда задача изменялась. Это и только это нужно было объяснить машине. Теперь, когда задача трансляции в общем виде решена, то есть мы договорились, что объекты и свойства (любые объекты и любые свойства) человек вводит хоть с голоса, то зачем для этого горы текста на С++. Машина будет решать всегда только одну задачу, а именно ту же самую, что и живой мозг решает на протяжении всей своей жизни: создание системы понятий и установка связей между ними. Как понимать полученный результат - дело человека; это для него "яблоко", "упасть с", "облако" имеет значение в детском возрасте одно, в зрелом - другое, на пороге старости - третье.

Компьютеры в их сегодняшней форме исчерпали себя. Человечество не удовлетворено тем, как решаются основные задачи обработки информации. Главная причина неудовлетворительного решения этих задач - то, что человечество до сих пор пользуется компьютерами экспериментальной архитектуры. Эта архитектура решала одну-единственную задачу: доказательство возможности коммерческого (рентабельного) использования цифровой машины для обработки информации. Но, во-первых, обработка информации не замыкается на компьютерах. Компьютер на уроке информатики - есть излишество. Правильным уроком информатики мне представляется урок принятия решения на уровне: "Нужен ли в данной задаче компьютер вообще, либо ее проще и красивее решить с помощью, скажем, виолончели?" Во-вторых, экспериментальная архитектура неизбежно сменится промышленной (как это произошло со всеми прочими отраслями техники). Просто сейчас подошел срок, и именно эта смена явится рубежом поколений для компьютера.

Новая архитектура (несомненно, куда более изящная, эффективная, мощная, то есть более профессиональная, чем очерченная в данной статье "объект-свойство-связь"), неизбежно появится. Большое количество новых распространенных операционок свидетельствует о том, что народ существующими недоволен. При этом значительная часть старых архитектур и понятий, конечно же, сохранится. (Так что далеко не все программеры непременно окажутся ненужными. В конце концов, от них самих ведь это зависит). Можно отказаться от байта, взять вместо него слово или вообще n-битную последовательность. Можно поменять носители, перейти на фотоны, сменить хардверную архитектуру (каждому объекту - отдельный нейрон к ХХХХ году!) - это все будут уже частности, в которые опытные техники нашей цивилизации с удовольствием запустят зубы. Но всякая техническая система вообще развивается не абы-куда, а в четко определенном генеральном направлении. Направление же это практически однозначно определяется требуемыми от системы функциями. Функции общемировой информационной системы:

1-1. Моделировка окружающего мира для его познания. Если невозможно изучить объект - он кусается, ядовит, уже не существует или еще не создан, - сделай копию, модель, и изучай ее. В компьютерном мире этому соответствует моделирование ядерных взрывов, химреакций, социальных систем. Игры типа сложных RPG с нелинейными сюжетами, стратегические, интерактивные романы и фильмы. (Что и может объяснять пристрастие программеров к пласту ролевой культуры и наоборот - глубинное единство решаемой задачи). Тут же все CAD'ы, расчетные системы биомов, конечно-элементный анализ, игры класса стратегических и прочее. Главный вопрос пункта 1-1: "Что произойдет, ЕСЛИ...?"

1-2. Создание новых объектов, не существующих в реальном мире: проекты построек и механизмов, утопии, картины. Применяются звуковые и графические редакторы. Ожидаемое изобретение - редакторы судеб. Что-то - для последующего воплощения в металл и камень, что-то - так и останется на холсте.

1-3. Хранение и распространение среди людей накопленных знаний. Рецепты, ответы на стандартные ситуации. Принятие стереотипных решений. Здесь - управление производством на уровне автоматики. Системы реального времени. Когда-то эту функцию выполняли технологические карточки, архивы, хранилища, а еще раньше и на более общем уровне - книги, устная традиция.

Если неторопливо и вдумчиво попытаться пристроить комп к решению каких-то моментов из вышеприведенного списка, а равно и оценить, насколько хорош/плох он сейчас в своих многочисленных ролях, то очевиден ответ на статьи, подобные "Открытие сезона на С/С++! Наполеон отдыхает" Павла Горбунова в КГ №18 2000 года, где на полном серьезе выбор компилятора служит основанием государственной программы выхода из кризиса. Дескать, вот мы научимся С/С++ (да упаси бог, не на Borland'e, а на легендарном Watcom'e) и всех буржуев этак по советски-пионерски - на сниженной цене за работу - переиграем. Станем искусными латальщиками дыр в решете. Тут очевидна и многочисленность софта, и то, что его - все еще! - не перестают писать. Носите, наконец, воду ведром! Воистину, Юрий Красков в одной из своих статей (N№N№17-19 КВ 2000 год) сказал весьма глубоко и метко: "Богатые страны когда-то ввозили негров. Теперь они ввозят программистов".

Проблема беспрерывного апгрейда железа и софта - искусственно порожденная; маркетинговая проблема, созданная производителями для обеспечения за счет потребителя, совершенно аналогичная лозунгу: "В каждой американской семье должно быть три машины, два компьютера". (На язык так и просится: "... пылесос и бабушка").

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

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

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

Теперь скажу пару слов и о себе, любимом. Главным образом для того, чтобы Вы могли решить, стоит ли вообще придавать значение данному тексту, и на чем базируется его автор. Специальность и диплом - инженер-строитель. Мне 23 года, а зовут меня Максим, живу в Гомеле. В компьютерной области чистый ламер, далее многократной переинсталляции Wfw3.11rus, а также нескольких релизов Linux'a не заходил. Компилятором пользуюсь - увы! - ни Borland'ом, ни Microsoft'ом, ни даже Watcom'ом, а вовсе даже egcc-линуховым, впрочем, нам, ламерам, все равно, мы тонкостей не разумеем.

Язык, на котором мне хотелось бы программировать

Настоящий текст есть реакция на статью в "КГ" Владимира Волосенкова "С# - перекресток больших дорог, или Третьим будешь?".

Далее для краткости набор железо+софт, с которым человек общается на предложенном языке, именуется "система".

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

Тут мне натурально возражают: "Да что ты, ламер, видел!"

Видел Pascal (вплотную), Delphi, Java (очень издали), C++(и сейчас вижу), простой C не видел, только читал, наблюдал VB, Tc/Tcl, Perl, SQL.

Читал примеры на языках: PL\1, Lisp, AUTOLisp. Удовлетворения не испытал и углублять информацию об этих языках не стал.

Из языков описания данных видел маловато, но С# тоже к ним не относится, он также из класса императивных языков, так что о XML, UML и прочих речи не веду.

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

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

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

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

На это я отвечу словами Страуструпа из его же учебника по С++: "...язык был создан для того, чтобы избавить автора и его друзей от программирования на ассемблере...". На мой, конечно же, ламерский взгляд, именно в этом - и ни в чем ином! - секрет эффективности С/С++.

Следующим хитом станет, сдается мне, язык, который будет написан "для того, чтобы избавить автора и его друзей от программирования на...". (На чем-то уровня С/С++, Pascal, Delphi). При этом, как хорошие среды разработки содержат возможность ассемблерных вставок, так и новая среда будет содержать возможность вставок на заменяемом языке, да еще и про ASM не забудет.

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

Что же может быть ближе к человеку, чем Delphi с его блочно-компонентным монтажом? Какие понятия, отношения и прочее этот язык должен описать? Вот вопрос следующего уровня. Хотелось бы, чтобы и железо, наконец, мутировало в данном направлении. Если зашить, скажем, интерпретатор С++ в железо - в порядке эксперимента - да и проверить, не окажется ли оный процессор в Х раз шустрее на той же тактовой и на той же сложности? Не любите С++, зашейте Delphi, CLARION, еще что-нибудь. Пора бы уже атом информации расширить. Ради подобного выигрыша не грех и новое понятие типа изобрести, если старые, проверенные полувековым использованием int, string и иже с ними не годятся.

А то знаете ли, господа, скучно-с. Такое впечатление, что на планете осталась лишь Неймановская архитектура и одни только непараллельные компиляторы. И вся оптимизация нелегкого ламерского труда сводится к развешиванию бантиков на давно известное. Небось, предложить что-то, удобнее Delphi, мощнее С/С++, лучше приспособленное к сети, чем Perl, и обратно совместимое вплоть до ассемблера Z80 - слабо?

Тут вновь раздается возглас: "А зачем изобретать? Вон сколько уже изобретено. Пользуйтесь! На то вы и юзеры".

Если б этими ужасами можно было бы безболезненно пользоваться, не являлись бы письма, подобные данному. Павел Горбунов в статье "Тестирование видеокарт на дому. Горе от амбиций" с восхитительной меткостью замечает: "Сделай сам? Когда же работать или играть? А где стандарты, которые являются хранилищем наших знаний?" Хотя говорит он о системе Linux, а не о языке, его слова справедливы и в нашем случае. Причем именно низкоуровневость основного языка системы (a Linux и C/C++, как известно, братья навек) и определяет, в конечном итоге, многообразие и лохматость Linuxa, за который его и не полюбила наша ламерская братия. Ну, некогда нам умиляться возможностью настроить все-все-все! Да и не хочется. Мы же не ради бесконечной настройки добывали систему. Знаменитый индийский товарищ Р. Тагор c пролетарской прямотой заявляет: "Разве силен и велик тот, кто силен и велик, если он слабых не может поднять до вершин своих?" Конечно, Linux вовсе не про нас, ламеров, писан, а своими для своих, для понимающих. Но тогда зачем позиционировать его как конкурента W95/98 или даже NT?

С другой стороны, после того, как я год поковырялся в Linuxе у себя на домашней машине (на работе W95), на "Мелкомягкие" меня танком не загонишь. Подорвана репутация фирмы. На работе если я две копии акада-14 открою, то уже Exсel открывать боязно. Бывает, что не рухнет, а бывает, что и три-четыре раза на день. Да потом safe-mode, scandisk, уф...

А с Linux'oм чего я только не делал своими кривыми ламерскими ручками (последний хит - тестирование рекурсивного создания-удаления на списке из 2000000 16-байтовых элементов), ему - как с Гейтса миллион. Стоит и посейчас.

Вообще, данные строки я пишу вовсе в Wfw3.11rus, Word6.0, поскольку это любимый мой текстовый процессор. Вот такая иллюстрация к лохматости. Кто бы сделал язык, реализующий все основные направления обработки информации! На это и поработать не жаль.

А C#? Просто очередная рюшечка. Довольно красивая и пахнет приятно. Но... Я все-таки оч-чень глупый ламер. Никак не пойму - зачем?

Благодарю за внимание. Удачи Вам в борьбе с вирусами. Для поминания незлым тихим словом: MaximLe@gproject.org.by Для поминания злым не тихим словом: /dev/null (c) компьютерная газета


Компьютерная газета. Статья была опубликована в номере 37 за 2000 год в рубрике разное :: мелочи жизни

©1997-2024 Компьютерная газета