Undergraduation

Оригинал Перевод

Март 2005

(Часть этого эссе была написана в качестве ответов студентам, которые писали мне с вопросами).

В последнее время до меня по e-mail внезапно начали домогаться младшекурсники: немного отступила, видимо, эйфория от поступления и вдруг появился вопрос: а что тут делать-то? Я, возможно, не лучший источник советов по поводу формального IT-образования, учитывая, что основным моим направлением была философия; впрочем, я посещал так много занятий по Computer Science, что тамошний народ считал меня своим. Уж хакером-то я точно был.

Хакинг

Что надо делать в вузе, чтобы стать хорошим хакером? Есть две такие вещи: научиться хорошо программировать, и узнать побольше о специфических интересных задачах. Оказывается, что эти процессы эквивалентны: одно заставляет вас делать и второе.

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

Скорее всего, это будет не домашнее задание. Мой друг Роберт многому научился, пока писал сетевое программное обеспечение, будучи студентом. Одним из его проектов стало подключение Гарварда к Arpanet; это был один из первых хостов, но к 1984 году соединение разорвалось. [1] Что характерно, это был внеклассный проект; более того, поскольку он тратил на него все свое время, игнорируя образование, его выкинули из вуза на год. [2] В результате все выровнялось, и сейчас он — профессор MIT. Но вам скорее всего будет лучше, если до такого не дойдёт; тогда он очень беспокоился из-за этого.

Другой способ научиться хорошо программировать — учиться у других хороших программистов. Программисты собираются в племена по типу их работы и используемым инструментам, и некоторые племена умнее других. Оглянитесь и определите, над чем работают умные люди; скорее всего, у них есть причины делать именно то, что они делают.

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

Не переживайте, если скажут нет. Отказы почти всегда менее личностные, чем считает тот, кому отказали. Просто переходите дальше. (Это применимо и к свиданиям.)

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

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

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

В собственных проектах не надо задумываться об оригинальности (как приходится профессорам) и о рентабельности (как приходится компаниям). Важна лишь техническая сложность, а она никак не связана с природой применения. «Серьезные» программы, к примеру, базы данных, часто тривиальны и технически скучны (если страдаете от бессоницы, почитайте техническую литературу про базы данных), а «фривольные» программы, как игры, часто очень сложные. Уверен, что существуют игровые компании, работающие над проектами с большей частью интеллектуального содержимого, чем в 9/10 исследований университетских факультетов информатики.

Будь я сейчас в университете, я бы работал над графикой: к примеру, над сетевой игрой, или программой 3D-анимации. Когда я был студентом, не было достаточного количества вычислительных мощностей, чтобы графика была интересной, но сейчас сложно найти что-либо более увлекательное.

Математика

Когда я учился в вузе, многие профессора верили (или, по крайней мере, надеялись), что компьютерные науки — это ветвь математики. Сильнее всего эта идея была в Гарварде, где не было компьютерных наук до 1980-х; до этого он специализировался на прикладной математике. В Корнельском всё было почти так же плохо. Когда я сказал грозному профессору Conway, что интересуюсь искусственным интеллектом (тогда эта тема была очень популярна), он сказал, что я должен специализироваться на математике. Я до сих пор не уверен, думал ли он, что ИИ потребует математических знаний, или же что ИИ это ерунда и что участие в чём-то серьёзном избавит меня от таких глупых идей.

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

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

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

Одна из наиболее ценных вещей, которые вы будете делать в университете — изучение того, чем является математика на самом деле. Это будет нелегко, так как многие хорошие математики плохие учителя. И хотя есть много популярных книг по математике, немногие мне я могу назвать хорошими. Лучшие, по моему мнению — В.В. Сойера. И, конечно, Евклид. [4]

Всё

Томас Хаксли сказал: «Попробуй выучить немного обо всем и все о немногом.» Именно такую задачу ставят перед собой почти все университеты.

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

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

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

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

Я бы сделал ставку на математику, «жёсткие» науки (experiment-driven, так сказать — противопоставляется, например, классической философии), историю (в частности, экономическую, общества и науки), архитектуру и классику. Могут пригодиться и поверхностные знания об искусстве. Современная литература тоже немаловажна, но её не надо учить, её надо просто читать. А о музыке я знаю недостаточно, чтобы судить.

Все, что здесь написано и будет написано взято из личного опыта. Например, я никогда не понимал людей, смеющимися над высказыванием Клинтона: «It depends on what the meaning of the word 'is' is», потому что сам потратил около пяти занятий в университете, изучая это высказывание.

По другому понять, какие науки наименее популярны, нам поможет простой график изучаемости различных наук. К примеру, достоверно известно, что многие, изучая математику, перешли в IT, потому что нашли её слишком сложной. А вот количество случаев, когда люди, наоборот, из IT шли в математику, крайне мало. Люди не станут заниматься более сложным делом, имея под рукой легкое, если это сложное плюшками вроде более высокой зарплаты и т.п. не привлекательнее пропорционально своей сложности (хотя бы как log(n)). Итак математика менее популярна, нежели IT. С помощью таких же действий можно построить графики и для других наук.

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

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

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

Работа

Конечно, учащимся вузов приходится думать не только об обучении. Есть две основные проблемы, которые надо учесть: профессия и аттестация.

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

То, что вам нужно для получения работы напрямую зависит от того, что вы хотите. Если вам по душе работа в крупной компании, научитесь веселиться с Blub на Windows. Если в небольшой компании или научной лаборатории, то лучше освойте Ruby на Linux. А если же вы хотите основать свою собственную компанию, что становится все более популярным, покорите все возможные и мощные инструменты, которые сможете найти, тогда в соревновании с конкурентами вы окажетесь на коне (на коне своих инструментов, так сказать).

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

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

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

Вам не нужно ждать окончания (или даже начала) бакалавриата, чтобы получить эти навыки. Если вы хотите научиться работать с уже существующим кодом, то вы можете помогать в open-source проектах. Вам работодатель будет впечатлен этим не меньше, чем хорошими оценками.

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

Но какие же проблемы стоит решать? Можно подумать, что вам нужно как пользователю. Например, я нашёл / придумал хороший алгоритм, фильтрующий спам, т.к. я не хотел его получать. Я бы хотел, чтобы тогда у меня было почтовый клиент, который каким-то образом предотвращал бы переполнение моих входящих; я использую их как список дел. Но это все равно, что использовать отвертку для открывания бутылок; тут больше подходит открывашка.

Аспирантура

А как насчет аспирантуры? Стоит ли поступать? И как поступить в хорошую?

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

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

Есть фундаментальная проблема в «Computer Science», проявляющаяся в таких случаях. Никто не знает, что считается за «исследование». Большинство исследований — хакинг, запихнутый в формат научной статьи для того, чтобы создать еще один квант публикации.

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

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

Но тысячи людей до вас пережили её написание. А помимо этого, аспирантура близка к раю. Многие помнят её как самое счастливое время своей жизни. А почти все остальные, включая меня, согласились бы, если бы не были обязаны таки написать диссертацию. [5]

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

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

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

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

Очевидно, что только рекомендации работают в лучших школах. Стандартизированные тесты ничего не значат, оценки — мало, а эссе — шанс дисквалифицировать себя, написав что-то глупое. Профессора доверяют лишь рекомендациям, в особенности от знакомых. [6]

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

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


Примечания

[1] Никому до этого не было дела, что показывает, насколько Arpanet (ставший Интернетом) был маловажным в 1984 году.

[2] Поэтому, когда я стал работодателем, мне не были важны оценки. Мы даже активно искали людей, проваливших школу. Мы однажды повесили по Гарварду плакаты, на которых было написано: «Вас выкинули за плохую успеваемость из-за того, что были слишком заняты своим проектом? Приходите к нам на работу!» Один человек, пришедший по такому объявлению, оказался отличным хакером.

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

[3] Eric Raymond говорит, что лучшие метафоры для хакеров живут где-то в районе теории множеств, комбинаторики, и теории графов.

Trevor Blackwell напоминает, что следует ходить на курсы по математике для математиков. "'Матан для программистов (за 3 семестра)' просто эпически уныл. В общем-то, произвольный 'x для программистов' уныл, x in {математика, право, журнализм, дизайн}."

[4] Ещё несколько очень полезных книг: What is Mathematics?, Courant and Robbins; Geometry and the Imagination, Hilbert and Cohn-Vossen. Для заинтересованных же в дизайне, Euclid Byrne.

[5] А если хотите, чтобы была идеальная жизнь, то стоит поступить в аспирантуру, тайно написать диссертацию в первые два года, а затем развлекаться следующие 3 года, записывая по главе за раз. Аспиранты позавидовали бы идее, но ни у кого из тех, кого я знаю, не хватило на это дисциплины.

[6] Один друг-профессор сказал, что 15-20% аспирантов имеют «низкую вероятность.» Под этим он имел в виду, что это люди с анкетами, идеальными во всем, за исключением того, что никто из профессоров не знает тех, кто написал рекомендации.

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

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