pg.gimran.org

Студенческие годы

Март 2005 · Все эссе

Перевод эссе Пола Грэма «Студенческие годы». Оригинал: https://paulgraham.com/college.html. Машинный перевод (Gemini).

Translation of Paul Graham's essay 'Undergraduation'. Original: https://paulgraham.com/college.html. Machine translation (Gemini).

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

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

Хакерство

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

Способ хорошо научиться программировать — это работать (а) много (б) над трудными задачами. А способ заставить себя работать над трудными задачами — это взяться за какой-нибудь крайне увлекательный проект.

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

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

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

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

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

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

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

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

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

Математика

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

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

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

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

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

Обо всем на свете

Томас Гексли сказал: «Попытайтесь узнать что-то обо всем и все о чем-то». Большинство университетов стремится к этому идеалу.

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

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

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

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

Вы можете пропустить общественные науки, философию и различные факультеты, созданные в последнее время в угоду политическим веяниям. Многие из этих дисциплин, безусловно, рассуждают о важных вопросах. Но то, как они о них говорят, бесполезно. Например, философия говорит, помимо прочего, о наших обязательствах друг перед другом; но об этом можно больше узнать от мудрой бабушки или из книг Э. Б. Уайта, чем от академического философа.

Я говорю это по собственному опыту. Наверное, мне следовало обидеться, когда все смеялись над Клинтоном за фразу: «Все зависит от того, что понимать под словом „is“». В колледже я прослушал около пяти курсов о том, что понимать под словом «is».

Еще один способ понять, какие области стоит изучать, — построить граф отчислений. К примеру, я знаю кучу людей, которые перешли с математики на CS, потому что математика показалась им слишком трудной, и ни одного, кто поступил бы наоборот. Люди не делают сложных вещей беспричинно; никто не станет браться за более сложную задачу, если она не вознаграждается пропорционально (или хотя бы в масштабе log(n)). Значит, математику, вероятно, стоит изучать больше, чем информатику. Подобными сравнениями можно составить карту всех факультетов университета. В самом низу окажутся предметы с наименьшим интеллектуальным содержанием.

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

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

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

Работа

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

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

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

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

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

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

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

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

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

Аспирантура

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

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

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

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

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

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

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

Коварство аспирантуры в том, что самое страшное открывается не сразу. Программы PhD начинаются как колледж-2, с нескольких лет семинаров и лекций. Так что к тому моменту, когда перед вами встает кошмар написания диссертации, вы уже отучились несколько лет. Бросить сейчас — значит стать недоучившимся аспирантом, а такая перспектива вам вряд ли понравится. Когда Роберта выставили из аспирантуры за создание интернет-червя 1988 года, я дико завидовал тому, что он нашел способ вырваться без клейма неудачника.

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

Самый большой плюс докторской степени (помимо того, что она служит пропуском в академию) заключается, возможно, в базовой уверенности в себе. К примеру, у термостатов Honeywell в моем доме чудовищный интерфейс. Моя мама, у которой установлена та же модель, добросовестно потратила целый день на чтение инструкции, чтобы научиться им пользоваться. Она решила, что проблема в ней. Я же могу спокойно подумать: «Если человек со степенью PhD по CS не может разобраться в этом термостате, значит, он точно спроектирован через пень-колоду».

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

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

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

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

Примечания

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

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

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

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

Тревор Блэквелл напоминает, что стоит брать курсы математики, предназначенные для будущих математиков. «Курсы „математики для инженеров“ были невероятным отстоем. На самом деле любой предмет вида „x для инженеров“ — отстой, где под x можно понимать математику, право, писательское мастерство или визуальный дизайн».

[4] Другие книги, которые я настоятельно рекомендую: «Что такое математика?» Куранта и Роббинса; «Наглядная геометрия» Гильберта и Кон-Фоссена. А для тех, кто интересуется графическим дизайном, — Евклид в издании Оливера Бирна.

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

[6] Один мой знакомый профессор говорит, что 15–20% аспирантов, которых они зачисляют каждый год, принимаются наобум (в статусе «темных лошадок»). Но под «темными лошадками» он имеет в виду людей, чьи документы безупречны во всех отношениях, за исключением одного: никто в приемной комиссии лично не знает профессоров, написавших рекомендации.

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

Из этого вытекает неожиданный, но, судя по всему, неизбежный вывод: маленькие гуманитарные колледжи (liberal arts colleges) обречены. Большинство толковых старшеклассников по крайней мере задумываются о научной карьере, даже если в итоге выберут другое. Зачем же идти в колледж, который сужает твои перспективы?

Спасибо Тревору Блэквеллу, Алексу Левину, Джессике Ливингстон, Роберту Моррису, Эрику Рэймонду и нескольким анонимным профессорам CS за чтение черновиков этого текста, а также студентам, чьи вопросы положили ему начало.