Я думаю, что это смесь всего сразу. Представляю себе технологию любой разработки из трех разноуровневых плоскостей: на высшей — мы рождаем концепцию программы, формируем ее индивидуальность, это чистой воды креативность и искусство. На следующем уровне — разработка программы, ее написание, проработка алгоритмов и деталей ее работы, здесь уже задействована смесь из рабочих навыков и креативности. Низший уровень — отладка и шлифовка программы, и для меня это рутина, монотонная техническая работа, лишенная творческой искры.
Поэтому, как и в обычной жизни, при разработке мы последовательно проходим все эти уровни, но секрет успеха всего цикла, по моему мнению, сокрыт именно в первом уровне — концепции.
Суммируя, можно сказать, что без креативности ты посредственный программист?
В каком-то смысле да. Ты обречен постоянно работать лишь на низшей плоскости в этой модели. И это всегда наемная позиция, обратите внимание. Поэтому в нашем сложном мире программист программисту рознь.
Джастин, извините, я и в самом деле не понимаю, вас очень многие знают в индустрии, и вы сами говорили о больших возможностях и предложениях, то есть вы могли устроиться во многие крупные корпорации и работать там наемным программистом и ни о чем не париться — так к чему все эти нервы и риски с собственными проектами?
Потому что это дает совсем другие ощущения. Я работал однажды в America Online (смеется), и вы сами знаете, чем это закончилось. Я понял для себя, что мне очень важно оставаться самим собой и делать в этой жизни то, что я считаю правильным. Работая на корпорацию весь день напролет, ты осуществляешь чьи-то чужие планы, не живешь своей мечтой, неизбежно подавляешь свою креативную составляющую. Очень сожалею, что мне не дано выразить словами, насколько это большая разница.
(Пауза.)
Ну, примерно как если бы вы работали в садике няней и ухаживали за чужими детьми. Или, например, если бы вы выступали в качестве родителя и у вас был бы свой собственный и долгожданный ребенок. В принципе, в обоих случаях будет очень много общего чисто внешне, но все же… черт побери, но это же совершенные разные вещи, не так ли?
Давайте коснемся и другой актуальной проблемы, через которую вы прошли лично: могут ли одиночки вроде вас противостоять корпорациям с большим коллективом разработчиков? Иначе говоря, возможно ли в наше время одиночкам-программистам написать что-то по-настоящему известное вроде вашего WinAmp?
Я понимаю, что вы имеете в виду, но я думаю, что не так все просто. Я работал в очень большом коллективе разработчиков в свое время и думаю, что часто «больше» — не значит «лучше». Конечно, я могу сейчас рассуждать об этом лишь теоретически, но думаю, что у одиночек шансы все еще есть. Если вы посмотрите на Facebook, Microsoft, Google, Apple и т. д., вы увидите, что, несмотря на их гигантский штат, за ними стоят по-прежнему одиночки, которых вы знаете поименно. Кстати, я уже говорил раньше о своей трехуровневой модели разработки — по-прежнему, я повторюсь, но все решает удачная концепция. А для этого хватит и одного по-настоящему талантливого человека.
Вот поэтому я уже давно не работаю в корпорациях! (Смеется.)
Интересно, с учетом вашего перфекционизма в отношении программирования как вы лично считаете, нужно ли специализированное высшее математическое образование (или по компьютерным наукам), для того чтобы создавать высококлассные современные программы?
Скажу вам прямо, я не считаю, что сегодня обязательно нужно иметь высшее образование по математике или в CS для разработки успешной программы. Я считаю, что любой может добиться очень многого, самостоятельно учась и пробуя. Тем более сейчас, когда есть такие большие возможности для получения любой информации, а также возможности для удаленной работы в команде с профессионалами очень высокого уровня (например, в многочисленных сетевых проектах Open Source).
Поэтому для какого-то профессионального базиса достаточно упорства и аккуратности, я считаю. И наоборот, вижу, что у многих дипломированных выпускников часто не хватает элементарного упорства, чтобы добиться чего-то более-менее заметного.
Поэтому не это главное сегодня.
Вы уверены?
К примеру, я могу нанять очень хороших и дорогих программистов в качестве послушных исполнителей прямо завтра, которые закончили самые престижные вузы и полностью готовы к осуществлению сложных проектов. И что, факт этого сам по себе хотя бы что-то гарантирует?
Эти времена уже прошли. Сегодня важно… (после паузы шепотом) давайте закругляться с этим вопросом, потому что я снова начну повторяться про первый уровень своей модели.
Ладно, о’кей, как вполне состоявшийся в сфере программирования человек поделитесь секретом своего успеха. Это некая индивидуальная удача или результат стахановского труда и личных, очень ярких и нестандартных способностей?
Ответ зависит только от того, что вы подразумеваете под понятием «успех».
Например, для меня, и я хорошо знаю это, важным условием для будущего успеха программы является возможность самому ежедневно очень плотно пользоваться этой программой. Если ты пишешь софт для других пользователей, а сам им не пользуешься, то, естественно, не знаешь его со всевозможных сторон в реальной жизни — тогда успех будет сложной задачей, в этом случае сложно добиться понастоящему глубокого уровня резонанса с потребностями твоего потенциального покупателя. Поэтому это очень важно, в конечном счете все стоящие программы мы пишем прежде всего для самих себя. Разве нет?
Интересно, сегодня вы как-то принимаете участие в разработке WinAmp? Общаетесь ли вы с текущим лидером проекта WinAmp Беном «Benski» Эллисоном?
Нет, вообще не в курсе, чем они там занимаются. С Беном как-то пару раз пересекались, кроме обмена обычным «привет», никак не общались. Уже пару лет как я полностью с головой ушел в свой новый проект REAPER.
О’кей, перевернули страницу истории, WinAmp остался позади. Что можете сказать о вашей сегодняшней ведущей разработке REAPER? Чем она особенна среди подобных? И вообще, почему люди пишут новые программы, когда изначально существуют уже подобные аналоги?
Проект REAPER начинался с того, что мне нужно было что-то, что позволяло бы достаточно эффективно и удобно записывать живое аудио, а затем иметь возможность сразу же подредактировать его хотя бы на каком-то базовом уровне возможностей. На тот момент у меня не было никакого подобного и по-настоящему удобного лично мне инструмента под рукой, и, как это часто случается (произносит по слогам): мне было проще написать это самому.
Знакомая для любого программиста фраза, не правда ли? Именно так все и начинается.
Но конечно, с тех пор программа очень сильно выросла и разрослась, возможно, это во многом субъективно, но я вижу ее основные отличия от многочисленных конкурентов в следующем:
• очень продвинутый уровень пользовательской кастомизации программы (возможность создания своих тем, меню, шаблонов, значений по умолчанию и т. д.);
• отсутствие защиты от копирования и взлома, полностью функциональная демоверсия, что для меня очень важно;
• очень гибкая и продуманная открытая архитектура для сторонних плагинов — любой желающий может расширить любую подсистему программы, добавив в нее новую функциональность, новый формат или сферу приложения;
• я также стараюсь очень часто обновлять программу, непрерывно работая над ней.
По всему тому обилию программ, которые мне приходилось видеть и писать за свою жизнь, я берусь судить, что REAPER — понастоящему качественно спроектированная и реализованная программа.
Насколько она коммерчески успешна?
Конечно, у нее пока нет той миллионной армии пользователей, которая была у других моих разработок, но даже тех нескольких тысяч клиентов, что у меня есть сейчас, вполне хватает, чтобы этот проект был окупаем. Вместе со мной над программой работает еще пару человек, и мы пока вполне хорошо держимся на плаву.
Джастин Франкель вспоминает, как, будучи 16-летним подростком, как-то участвовал в летней олимпиаде по программированию в родном университете Северной Аризоны. Было так скучно, что просто для веселья Джастин решил прямо там, не теряя времени, написать программу типа Fork bomb, которая, будучи запущенной, сразу создавала свой клон, который также мгновенно запускался, повторяя все это снова в цикле: конечно, уже через минуту ее работы компьютер намертво зависал, никак не реагируя на клавиатуру. Тогда он пересаживался вверх по аудитории, запуская эту программу на новых компьютерах, пока группа администраторов пыталась понять, постепенно следуя за ним, что же происходит с компьютерами в лаборатории…
На следующий год, когда Джастин участвовал в точно такой же компьютерной университетской олимпиаде, главный администратор университета сразу подошел к Джастину и, сурово глядя прямо в глаза, зло процедил: «Джастин, можешь заниматься сегодня за компьютером чем угодно, только не заваливай систему». Джастин вспоминает с улыбкой, что эту просьбу, словно далекое эхо, он слышит до сих пор сквозь все эти годы…
Журнал Rolling Stones назвал вас самым опасным гиком в мире, журнал Times выдал интервью с вами под заголовком «Человек, который обворовал весь мир», и т. д. Итак, переходим ко второй известной вашей разработке — первой в мире децентрализованной пиринговой сети Gnutella. Судя по заголовкам мировых изданий того времени, музыкальный бизнес был единогласно уверен, что вы в очередной раз «завалили систему».Что вы сами думаете об этом?
Рассказать о пиринге и Gnutella? Только факты? Ну, во-первых, Nu tella — это моя любимая ореховая паста, во-вторых, я люблю открытое ПО, как это делает фонд GNU, в-третьих, я люблю и достаточно серьезно занимаюсь музыкой, в-четвертых, я программирую в среднем по восемь часов в день. И вас удивляет, что в результате пересечения всего этого в рамках одного человека случаются вещи типа Gnutella? Но несмотря на всю мою страсть к ореховой пасте, система на этот раз устояла. (Смеется.)