Компания Apple Computer провела первичное размещение акций (IPO) в 1980 году. При этом было привлечено рекордное количество средств со времен проведения IPO компанией Ford в 1956 году. В результате учредители Apple в одночасье стали миллионерами.
   Компьютер Apple II был первым ПК, появившимся на столах обычных пользователей. Причиной его популярности стал удачный набор комплектующих. Встретившись со Стивеном Возняком лично, вы убедитесь, что это удивительный человек, обладающий как для профессионального программиста достаточно глубокими знаниями и в аппаратных средствах.
   Ливингстон. Расскажите о своей жизни до момента создания компании Apple Computer.
   Возняк. Еще учась в школе, я знал, что могу собрать компьютер, в котором будет в два раза меньше микросхем, чем в тех, которые в то время уже продавались. Я – самоучка и благодаря самообразованию выучил все тонкости компьютеров. Когда в чем-то хорошо разбираешься, то хочешь извлечь из этого пользу. Мне удавалось создавать устройства из небольшого количества деталей благодаря знанию этих самых тонкостей. Я всегда ценил устройства, состоящие из небольшого числа элементов.
   Это пригодилось мне неоднократно. Во-первых, когда вы основываете стартап или становитесь частным предпринимателем, у вас всегда мало денег. Поэтому чем меньше комплектующих приходится покупать, тем лучше. А во-вторых, когда вы проектируете устройство, состоящее из небольшого числа элементов, у вас складывается более четкая картина его работы. В результате значительно уменьшается количество ошибок и просчетов проектирования. Даже разбуженный среди ночи вы сможете рассказать о каждой детали простого устройства.
   До создания компании Apple я несколько лет работал в Hewlett-Packard, где проектировал научные калькуляторы. То есть имел дело с самыми современными вычислительными устройствами того времени. Однако в результате я основал стартап на стороне. Возвращаясь с работы, я продолжал возиться с электроникой. Но это не были калькуляторы. Вместе с другими энтузиастами я приложил руку к созданию первых компьютерных игр типа пинбол и устройств для воспроизведения фильмов в номерах отелей… На самом деле еще до появления на рынке компании Betamax первые видеомагнитофоны выпустил американский производитель Cartravision. Они встраивались в телевизоры, продаваемые через торговую сеть Sears. И я принимал в этом участие. Мне очень понравилась идея аркадных игр. (Первая аркада Pong для домашних компьютеров стала родоначальницей целого направления игровой индустрии.) Поэтому я самостоятельно разработал один из таких проектов. Затем компания Atari захотела, взяв его за основу, выпустить первую версию Pong для домашних компьютеров. Они попросили реализовать игру на заказном чипе, чтобы продать как можно больше ее копий. Ко мне с этой идеей пришел Стив Майер. Но я уже был связан с компанией Atari, руководители которой признали мои таланты и пожелали взять на работу.
   Ливингстон. Как они о вас узнали?
   Возняк. В Atari на неполный рабочий день устроился Стив Джобс. Ему предстояло завершить создание игровых автоматов для новой версии игры Pong. Джобс привел меня в компанию, все показал, а Нолан Бушнелл сразу же предложил мне место. Я был ошарашен: «Нет. Я никогда не уйду из Hewlett-Packard. Это дело всей моей жизни. Для меня честь в ней работать, поскольку там очень хорошо относятся к инженерам». Это была правда. Инженеры, работавшие в Hewlett-Packard на низшей ступеньке организационной пирамиды, могли свободно предлагать идеи, и они немедленно внедрялись в производство. В компании царила полная демократия, поощрялось проведение дискуссий и внедрение инноваций. Поэтому я не собирался никуда уходить. Я планировал проработать в ней инженером всю жизнь.
   Затем я создал для Atari игру Breakout, ставшую невероятно популярной. Мне было очень приятно, что мое имя ассоциируется с одним из лучших на рынке видеоигр программным продуктом. Ведь они положили начало целой индустрии компьютерных развлечений, и я был причастен к этому. Мне хотелось оставаться дизайнером игр.
   Затем я принял участие еще в одном проекте. В сеть под названием ARPANET было объединено чуть более десятка компьютеров. В ней разрешалось выбрать, к какому ПК вы хотите подключиться с правами гостя, а при наличии пароля – с более широкими привилегиями пользователя. Когда я в реальном времени увидел, как кто-то набирает текст на телетайпе, и пообщался с пользователем из Бостона на тему игры в шахматы, то сказал себе: «Я должен это сделать. Я должен это сделать своими руками».
   Я не мог себе позволить приобрести необходимое оборудование, а тем более купить телетайп. Поэтому предстояло спроектировать собственный терминал для подключения к сети. Единственным бесплатным устройством для отображения символов был домашний телевизор. Я купил клавиатуру за 60 долларов, что в то время было очень дешево. Она оказалась самым дорогим компонентом моего терминала. После этого осталось разработать логическую схему, чтобы отображать на телевизионном экране точки, соответствующие буквам алфавита, и выводить данные, получаемые с удаленного компьютера. Для их передачи использовалась клавиатура и созданный для этого модем. Таким образом, у меня получился телевизионный терминал. Параллельно я продолжал работать в Hewlett-Packard. Сторонние компьютерные проекты были для меня просто развлечением, которому я предавался по вечерам и в выходные в своей квартире в Купертино.
   Еще во время обучения в колледже я смастерил «синюю коробку». Это устройство позволяло выполнять бесплатные телефонные звонки в другие города и страны. Стив Джобс, услышав об этом, предложил делать их на продажу. Теперь, когда я собрал видеотерминал, он снова сказал: «Есть один местный магазинчик, который покупает такие вещицы. Почему бы нам не сходить туда?» В результате мы продали несколько собранных терминалов, получивших название Apple I.
   Я всегда мечтал о собственном компьютере. Еще учась в старших классах школы, я сказал отцу: «Когда-нибудь у меня будет компьютер». Отец мне ответил, что он стоит как первоначальный взнос за дом. «Тогда я согласен жить в квартире», – заявил я. Я был твердо намерен реализовать свою мечту. У каждого человека есть определенные мотивы и ценности, определяющие то, чем он хочет заниматься в жизни. Они появляются еще в раннем возрасте. Например, в младших классах школы я решил стать школьным учителем и долгое время мечтал об этом. Но некоторые желания бывают настолько сильными, что вы готовы пожертвовать всем ради их исполнения.
   До того момента я собирал все устройства бесплатно. А затем вдруг узнал о появлении микропроцессоров. Какое-то время я не следил за миром электроники и компьютеров, поскольку занимался калькуляторами в компании Hewlett-Packard. И внезапно открыл для себя микропроцессоры. Что это такое? Я принялся изучать их технические данные.
   В то же время был основан клуб любителей собирать разные технические устройства у себя дома. По моему мнению, каждый из его членов мог бы стать предпринимателем. Однако, как выяснилось, лишь некоторые из ребят оказались настоящими инженерами-проектировщиками, способными создавать новые устройства. То есть многим его членам нравилась электроника, но они не были истинными разработчиками.
   Ливингстон. Этот клуб назывался Homebrew?
   Возняк. Полное название клуба было Homebrew Computer Club. В нем состояло много программистов, не имеющих понятия об аппаратных средствах, но тем не менее занимающихся сборкой компьютеров. Я был сбит с толку. Они обошли меня, собирая небольшие дешевые компьютеры на основе микропроцессоров, а я об этом никогда не слышал и не принимал в этом участия. А ведь именно этим я хотел заниматься в жизни. За одну ночь я проанализировал, что представляет собой микропроцессор, и обнаружил, что он очень похож на мини-компьютеры, которые я собирал еще в старших классах школы.
   А затем я исследовал Altair – первый микрокомпьютер, который, по сути, нельзя было считать полноценным. Для меня компьютер – это нечто цельное, т. е. одно устройство. Еще в старшей школе я сказал отцу, что хочу ПК модели 4K Data General Nova. Что значит 4K? Это указывает на то, что в Data General Nova установлено 4 Кбайт оперативной памяти, то есть минимально необходимый ее объем для выполнения программ на языке программирования. Иными словами, компьютер гарантировал пользователю возможность писать приложения на Fortran или Basic, или любом другом языке и выполнять их. Компьютеры Altair, которые продавались по смехотворно низкой цене, по сути, представляли собой разрекламированный микропроцессор компании Intel и несколько чипов для преобразования напряжения. То есть в Altair объединили пару отдельных комплектующих, назвали их компьютером и заявили: «Теперь вы можете сами добавить все элементы, для совместной работы с которыми спроектирован микропроцессор». Вы можете добавить оперативную память, карты расширения для взаимодействия с телетайпом, длинный кабель для подключения к нему или просто купить телетайп за несколько тысяч долларов. К тому моменту, когда вы приобретете достаточный объем ОЗУ и все остальное, чтобы собрать компьютер, способный выполнять программы, ваши затраты окажутся совершенно неподъемными. Суммарная стоимость такого ПК составляла около 5 тыс. долл. А мы были простыми технарями, мечтающими обзавестись собственным компьютером, которым едва хватало денег на насущные нужды.
   Кроме того, за пять лет до этого, в 1970 году я сам собрал компьютер аналогичного с Altair типа. Однако у меня не было микропроцессора. Вместо него я использовал набор микросхем. То есть я создал собственный небольшой процессор, который разместил на компактной плате размером 3×5 дюймов. На ней я установил переключатели, лампочки, и она выглядела как приборная панель в самолете. Я мог использовать эти переключатели, нажимать кнопки, передавать в память комбинации нулей и единиц и выполнять программы. Мой компьютер был практически аналогом компьютера Altair. Он имел такой же объем оперативной памяти (начальный объем составлял 256 байт). Кроме того, я мог проверить его работоспособность. И его я собрал на пять лет раньше появления Altair. Теперь же я увидел ПК на основе микропроцессора и понял, что его недостаточно. Нужно единое устройство, способное выполнять программы на языке программирования. Хотя модель Altair была очень близка к реализации этой задачи.
   Я решил собрать собственный компьютер. Я всегда был убежден, что стоимость подобных устройств должна быть разумной. Однако мне требовалось как минимум 4 Кбайт ОЗУ. В 1975 году появилась динамическая оперативная память (DRAM) в виде модулей по 4 Кбайта. Впервые они стали стоить дешевле, чем память на магнитных сердечниках, которая до этого использовалась во всех компьютерах. Мир внезапно перешел на кремниевую оперативную память.
   Все компьютеры того времени, а это Altair, Sphere, Polymorphic и Insight, проектировались недостаточно квалифицированными инженерами, вернее, не самыми лучшими представителями этой профессии. В процессе участвовали технические специалисты, которые могли посмотреть спецификацию конкретной оперативной памяти и сравнить ее с техническими данными микропроцессора. В последнем были каналы, именуемые «адрес», и в ОЗУ имелись такие каналы. Они просто соединяли их. Это было несложно, когда дело касалось статической оперативной памяти.
   Динамическая оперативная память была дешевле статической в 2–4 раза. Она позволила вместо 32 микросхем статической памяти, необходимых для обработки компьютером команд, ограничиться только 8 микросхемами. Но для ее работы требовались схемы, обеспечивающие процессору доступ к каждой ячейке памяти каждую 1/2000 долю секунды, чтобы он мог считывать данные этой ячейки и либо записывать новые, либо стирать старые (т. е. нужно было постоянное обновление памяти). В динамической оперативной памяти (этот тип используется во всех современных ПК) каждый бит данных стирался за 1/2000 секунды, в случае если он не был прочитан и перезаписан. Это напоминает «стекание» электронов с анода каждую 1/2000 долю секунды.
   Мне пришлось создать несколько дополнительных микросхем и немного поразмыслить, чтобы собрать компьютер. Но когда я это сделал, хвала Господу, у меня уже были элементы, читающие последовательность битов, кодирующих изображения для телевизионного экрана на моем терминале. Поэтому я сказал себе: «Я просто использую эти элементы для регулярного обновления данных в оперативной памяти (RAM)». В результате у микропроцессора был бы постоянный доступ к RAM, и адреса видеоданных хранились бы в ней, хотя и не для чтения видеоданных (тогда я еще использовал созданный ранее терминал, в котором была собственная память для хранения данных, отображаемых на экране). Однако эти элементы позволяли просто записывать данные в правильной последовательности, чтобы обновлять содержимое ячеек RAM. Мне пришлось немного потрудиться над компоновкой комплектующих, но в результате удалось собрать компьютер с использованием значительно меньшего количества микросхем. К тому же он был и меньших размеров, что впечатляло всех, кто его видел. Он обошелся дешевле и работал быстрее конкурирующих моделей. При правильном подходе к делу можно добиться сразу нескольких целей.
   В конце 1960-х выпускалось огромное количество разных мини-компьютеров, но на всех устанавливались одинаковые микросхемы: 7400 микросхем с четырьмя вентилями на каждой (на ней находился сумматор, полусумматор или мультиплексор). Все поставщики рассуждали таким образом: «Давайте соберем компьютер. Как и во всех предыдущих моделях в нем будут использоваться машинные команды, которые позволяют добавить единицу в регистр, и будут применяться многочисленные регистры, данные из них можно будет передавать в память и по отношению к ним выполнять операции И, ИЛИ, а также исключающее ИЛИ». Производители составляли набор инструкций, обеспечивающий работу компьютера: «Если мы добавим в компьютер достаточно команд, то со временем они превратятся в операционную систему и языки программирования».
   А затем появилась компания Data General со своим мини-компьютером Nova, в котором вместо использования 50 команд для выполнения различных математических операций применялась всего одна из 16 битов: шесть единиц и шесть нулей. Пара этих единиц и нулей указывала, данные каких четырех регистров будут использоваться. Вторая пара битов относилась к применению других четырех регистров. Следующая пара указывала, требуется ли смещение или сдвиг результата (что эквивалентно умножению или делению на два в двоичной системе). Также существовали биты для определения необходимости переноса. То есть все 16 битов несли какую-то смысловую нагрузку. Я все это внимательно изучил, самостоятельно воссоздавая на бумаге принципы работы компьютера Nova. При этом я выяснил, что два бита кодируют один из четырех регистров, поэтому отправил их на вход микросхемы 4-входового мультиплексора. Мне не пришлось придумывать последовательность выполнения тех или иных операций. Я просто реализовал все с точки зрения логики. Три бита подавались на вход логической микросхемы, чтобы определить тип битовой операции (И, ИЛИ, исключающее ИЛИ), и еще один бит – в сумматор в качестве флага переноса. В результате этого усовершенствования в Nova осталось в два раза меньше микросхем, чем в других мини-компьютерах, созданных компаниями Varian, Digital Equipment Corp. и Hewlett-Packard (я сконструировал на бумаге их все). Я понял, что это только ему на пользу, поскольку лишь в этом случае возникает настоящая архитектура ПК.
   Всю жизнь я старался оптимизировать устройства. Вы не просто экономите детали, но уменьшаете сложность и повышаете надежность устройства. Кроме того, более простой проект легче понять, что позволяет избежать ошибок и недостатков.
   Ливингстон. Вы воссоздали схему работы всех компьютеров того времени еще когда учились в школе? У себя дома, просто ради развлечения?
   Возняк. Да, поскольку физически я не мог собрать настоящий ПК. И не только поэтому. Я снова и снова менял проект каждого компьютера в связи с появлением новых микросхем, я «брал» их и вносил в схему коррективы, так как у меня возникали идеи, как сэкономить пару-тройку микросхем.
   Я всем этим занимался из-за отсутствия денег на приобретение настоящих деталей. Я не мог собрать ни одного компьютера. В те времена микросхемы стоили столько… Короче говоря, цена компьютера примерно равнялась стоимости дома. Так что мне ничего не оставалось, как конструировать их на бумаге, пытаясь сделать все лучше и лучше. Я соревновался сам с собой. Я просто объясняю, откуда у меня навыки в создании устройств.
   Я знал, что используемые при этом методы никогда не будут применены на практике. Их не станут изучать в школьной программе. Я многое придумывал сам. Я – настоящий самоучка. В нашей школе вообще не было компьютеров. Но я их проектировал. Как-то мне попались журналы, в которых я нашел руководство по эксплуатации компьютеров, а отец дал мне несколько пособий по микросхемам. Оставалось лишь изучить их.
   В чем заключался мой талант? Если я знаю свою конечную цель (а в то время ею был компьютер), то найду способ, как эффективно объединить микросхемы, чтобы ее добиться. И у меня получится, даже если раньше я никогда не проектировал ничего подобного. Я не знал, как создать гибкий диск, интерфейсы принтера и модема, но когда мне это понадобилось, я разработал собственные решения, не имея понятия, как это делали другие. Этот врожденный талант помог мне стать хорошим специалистом. Все мои лучшие достижения в Apple стали результатом того, что: во-первых, у меня не было денег, а во-вторых, я никогда не делал этого раньше. Каждое маленькое устройство, которое мы выпускали, было настоящим открытием.
   Ливингстон. Можно ли считать, что ваш совет тем, кто хочет стать мастером своего дела, звучит так: делайте что-то, чего раньше никогда не делали, и попытайтесь сделать это дешево.
   Возняк. Да! Но должны быть соответствующие способности. У нас работал парень, который спроектировал Macintosh, так он никогда не посещал колледж, но изучил интегральные микросхемы и стал мастером-самоучкой.
   Ливингстон. Вы поступили в колледж, а затем его бросили, верно?
   Возняк. Не совсем. Но в колледже я не изучал проектирование компьютеров. Например, я не посетил ни одного занятия по программированию, поэтому когда я собрал компьютер, мне пришлось написать собственную версию языка программирования – Basic. У меня просто не было другого выхода, ведь иначе компьютер бы не работал. Кроме того, я знал, как использовать низкоуровневое программирование для создания приложений широкого применения. Мой друг учился в Массачусетском технологическом институте и отксерил мне несколько страничек из книг по созданию компиляторов. Так что у меня было некоторое представление о том, какие методы применяются при синтаксическом анализе языка программирования.
   Поэтому, собирая Apple I, я просто воспользовался уже имеющимся у меня терминалом, состоящим из телевизора и клавиатуры. Это был простейший способ, и модель Apple I нельзя назвать эффективной (ею стал Apple II). А затем я подумал: «У всех выпускающихся компьютеров много переключателей и лампочек, и выглядят они, как приборная панель в самолете. И уж очень напоминают тот, который я собрал пять лет тому назад». Это был компьютер Cream Soda Computer («Компьютер крем-сода»). Он работал слишком медленно, да и собран был кое-как. Увы, он не делал того, что мне было нужно. Я хотел писать программы на Basic, создавать игры и написать такую программу, которая бы позволила установить мои компьютеры в Hewlett-Packard. (На работе я и еще 40 инженеров компании пользовались большим суперкомпьютером, и приходилось резервировать время, чтобы к нему подступиться.)
   Я хотел создать производительный компьютер, а это означало, что в нем должны присутствовать микропроцессор и динамическая оперативная память (для экономии денег и деталей). Терминал у меня уже был. Дело оставалось за языком программирования. Да, у меня был компьютер с 4 Кбайтами ОЗУ. Он мог выполнять программы, но у меня не было языка программирования для микропроцессора. Поэтому, с одной стороны, я был немного разочарован, а с другой, пребывал в радостном возбуждении, поскольку собирался стать его творцом. Я надеялся, что это принесет мне определенную известность. Однако прославиться я мог лишь при условии, что сделаю все на высочайшем уровне.
   Вот так получилось, что я был вынужден написать язык программирования для микропроцессора, но не забывайте, что раньше я этого не делал, не слушал лекций и не ходил на занятия по данному предмету. Поэтому я просто открыл руководство для сотрудников Hewlett-Packard и прочел в нем описание языка Basic. Там я вычитал все команды Basic и приступил к созданию синтаксической таблицы, определяющей правила этого языка: какие команды в нем существуют, какие их последовательности допускаются, как заносить имена в переменные, как работать с числами, какого размера и формата они могут быть. Затем возникла идея (не знаю, откуда она ко мне пришла), сводившаяся к следующему: когда пользователь введет оператор, я буду просто сканировать его символ за символом, слева направо, и проверять на соответствие синтаксической таблице. Последнюю я занес в память. Я решил так: «Буду просматривать память, и, если оператор пользователя совпадет с записью в синтаксической таблице, то при переводе строки я буду знать все введенные символы». В этом и заключалась идея. Я не был знаком с правилами программирования микропроцессоров. И по сегодняшний день не знаю, как пишутся компиляторы.
   Кроме того, мне было известно о существовании цифр и переменных, а также арифметических действиях. Цифры представляли собой субъекты, а арифметические действия – предикаты. Даже в операторе PRINT слово «print» становилось предикатом. Таким образом, я получил списки предикатов и теперь у меня были стек субъектов и стек предикатов. Оставалось только определить правила их взаимодействия и последовательность записи, например, с помощью обратной нотации.
   Я был хорошо знаком с правилами обратной нотации из книг, которые прочел в колледже (а также из распечаток, сделанных для меня другом). Кроме того, в калькуляторах Hewlett-Packard тоже применялась обратная польская нотация. Согласно этой форме записи уравнение «5 + 4» превращается в «5 ENTER 4 +», т. е. оператор записывается после операндов. Но как преобразовать эти данные? Для меня это оказалось посильной задачей, поскольку в данной области я имел некоторые знания.
   Итак, я создал свою версию языка Basic, и она работала. Это был самый трудный проект в моей жизни. Как правило, вы просто устанавливаете программу в компьютер. Это единственный способ заставить его функционировать. Ввод программы осуществляется с помощью клавиатуры или карт. Но мне пришлось вручную записать свою программу на левой половине страницы, а затем преобразовать команды на понятный компьютеру язык – в машинный код, состоящий из последовательности нулей и единиц. Если в программе требовалось выполнить смещение на 19 байт, то приходилось записывать число 19 в двоичном коде (в виде нулей и единиц). Я делал это вручную, поскольку у меня не было программы-компилятора, которая выполнила бы данную задачу за меня. То есть я программировал на самом низком из существующих уровней. Что касается самого компьютера, то я не только начертил его на бумаге (я любил чертить все свои устройства на чертежной доске), но и соединил все его детали, определил, когда их можно реализовать в виде плат, а также смонтировал их на платах.
   Оставаясь верным минималистскому подходу, я сделал соединения на платах как можно короче и тоньше, а не такими спутанными, как на стандартных платах того времени. Кроме того, я был хорошим техническим специалистом, поэтому тестировал каждое свое действие, проверял напряжение и наличие сигналов, анализировал ошибки. У меня возникали новые идеи, и я добавлял новые микросхемы. Я был технарем и создал компьютер Apple своими руками.
   Ливингстон. Когда вы впервые осознали, что способны собрать компьютер Apple I?
   Возняк. Всю жизнь я стремился к этому. И на первой же встрече участников клуба Homebrew Computer Club понял, что близок к своей мечте. Я осознал это в тот вечер, когда разобрался в устройстве микропроцессора. Я пришел домой, изучил его и воскликнул: «Я могу накопить денег и купить процессор!» Сделать это было непросто, поскольку ЦПУ компании Intel стоил 400 долл., а такую сумму быстро не соберешь. Следует пояснить, что те 400 долл. примерно соответствуют нынешним 2000 долл. Для меня это была дорогая покупка. Затем я нашел процессор компании Motorola, который в Hewlett-Packard я мог приобрести за 40 долл. А вскоре компания MOS Technology представила микропроцессор 6502 за 20 долл., его я и купил. Он был не только дешевым, но и одним из лучших в то время.
   Затем мне предстояло заняться аппаратной частью компьютера. Я изучил все модели, представленные на рынке. Все они собирались по старинке: переключатели и лампы, разъемы для подключения плат и соединения с телетайпом. И я сказал себе: «Нет, я хочу настоящий компьютер, поскольку теперь могу его себе позволить». У меня уже был терминал, в состав которого входила клавиатура для ввода данных. Ее кнопки напоминали кнопки на калькуляторах Hewlett-Packard, и, пользуясь ими, люди понимали, какие операции выполняют (никакого машинного кода, единиц и нулей). Однако проблема состояла в том, как передать данные программы в память компьютера. Для моего микропроцессора не существовало языка программирования, то есть нужно было передавать эти самые единицы и нули в память. И я подумал, что могу написать простое небольшое приложение. Данные этой 256-байтовой утилиты могли сохранить две микросхемы. Она считывала вводимые с клавиатуры символы и отображала на телевизионном экране терминала информацию, которая находилась в памяти. То есть она позволяла добавить данные в память и могла запускать программу, сохраненную по определенному адресу. Эта утилита дала мне возможность продолжить разработку и вводить нули с единицами, которые до этого я вводил вручную. Иногда требовалось 40 минут, чтобы ввести всю программу в память. Конечно, я бы хотел вводить данные в шестнадцатеричной системе, транслировать их в память и проверять программу. Но это не был обычный проект с программными инструментами. У меня их не было. Я использовал только собственные знания и чувствовал, что так будет лучше.