Советы студентам Computer Science

Advice for Computer Science College Students by Joel Spolsky

Несмотря на то, что всего лишь год или два назад я плакался по поводу богатого Windows GUI [1], который захлестнет всех прочие интерфейсы, студенты колледжей, тем не менее, все-таки иногда по электронной почте спрашивают советов относительно карьеры, тем более, что начался сезон приема на работу. Я подумал, а не написать ли мне свои стандартные советы, которые они смогут прочитать, посмеяться и проигнорировать.

Большинство студентов, к счастью, достаточно дерзки и не стесняются задавать вопросы старейшинам компьютерных наук, и это правильно, несмотря на то, что старики склонны говорить странные допотопные вещи типа: «спрос на операторов перфоратора превысит 100 млн. к 2010 году» или «lisp-карьера — круто именно сейчас».

Я тоже не знаю, что говорить, когда даю советы студентам. Я так безнадежно устарел, что бы понять, что такое AIM [2], и о, ужас, использую эту оригинальную старинную вещь, называемую «электронной почтой», которая была популярна в те дни музыки на плоских круглых пластинках, называемых «компакт-дисками».

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

И тем не менее. Если вам нравится компьютерное программирование — это благословение. Вам повезло, вы в немногочисленной группе людей, которые считают, что работа — это жизнь. Большинство людей лишены такого счастья. Сама идея «любить свою работу»  — это современная концепция. Работа должна быть чем-то неприятным исключительно для денег, на которые можно делать то, что доставляет вам истинное удовольствие. Возможно, это случится только к 65 годам, на пенсии, если вы ещё не слишком стары и немощны и сможете себе что-то позволить, а эти радости жизни не требуют надежных колен, зорких глаз, способностей пройти двадцать метров без одышки и т.д.

О чем я говорил? Ах да, советы. Без лишних слов, вот семь свободных Советов от Джоэла для CS-студентов [3] (они стоят того, что бы за них заплатить [4]):

  1. Научитесь писать;
  2. Изучите «С»;
  3. Выучите микроэкономику и все это до окончания учёбы, а так же
  4. Не пропускайте скучные занятия по некомпьютерным наукам;
  5. Обязательно пройдите интенсивные курсы программирования;
  6. Перестаньте беспокоиться о рабочих местах в Индии;
  7. Независимо от того, что вам нравится, летом пройдите хорошую практику.

Теперь, перед разъяснениями, добавлю — 8. Обратитесь к профессионалу, что бы самоутвердится, если вы не достаточно доверчивы, чтобы просто делать все то, о чем я вам сейчас расскажу.

Научитесь писать до конца учебы

Я Вам пишу, чего же боле ...Состоялся бы Linux, если бы Линус Торвальдс не умел писать? Блестящий хакер, каковым он является, Линус обладает способностью излагать свои мысли на письменном английском и через электронную почту, используя списки рассылок, привлечь к Linux бригады добровольцев со всего мира.

Вы слышали о последней моде — экстремальном программировании? Ну, не вдаваясь в то, что я думаю об XP [5], все, что Вы знаете об XP, только благодаря очень талантливым писателям и ораторам.

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

Разница между хорошим и великим программистом не в том, как много языков программирования они знают и что предпочитают Python или Java, а в том могут ли они рассказывать о своих идеях. Убеждая других, они получают дополнительное влияние. Ясное комментирование и описание технических характеристик позволяет другим понимать таких программистов, и это значит, что все могут использовать и работать с их кодом, а не переписывать его заново. При отсутствии этого, программа ничего не стоит. Понятная техническая документация для конечных пользователей позволяют понять, что программа должна делать и это единственный способ показать пользователям её ценность. На SourceForge એ похоронено много прекрасных и полезных кодов, которые никто не использует, только потому, что их создатели не умеют хорошо писать (и пишут ли вообще). Поэтому никто не знает, что они сделали, а их блестящий код просто пропадает.

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

Большинство университетов проводит курсы типа «Интенсивный письменный», где вы должны много написать для сдачи зачета. Присмотритесь и идите на такие курсы! Ищите занятия в любой области, которые требуют еженедельной или даже ежедневной письменной работы. Заведите дневник или веб-блог. Чем больше вы будете писать, тем писать будет легче и, наоборот, чем легче вам будет писаться, тем писать вы будете больше.

Изучите «С» до конца учебы

;

Совет второй — «C», обратите внимание, не «C++». Хотя «C» становится все более редким, он по-прежнему лингва-франка рабочий язык программистов. Это язык, который они используют для общения друг с другом. И, что более важно, он намного ближе к машине, чем «современные» языки такие, как ML, Java, Python, которым Вас будут учить в университете по не совершенным, но модным теориям педагогики. По крайней мере, в течение одного семестра, Вы должны приблизиться к машине, иначе эффективный код высокого уровня будет Вам недоступен. Вы не сможете работать над компиляторами и операционными системами, т.е. на самых привлекательных рабочих местах в программировании. Вам никогда не доверят создания архитектуры крупномасштабных проектов. Мне все равно, как много вы знаете о продолжениях, закрытии и исключениях, если не можете объяснить, почему while(*s++ = *t++); — это обычное копирование строки, и доказать мне, что это самая естественная вещь в мире. Ну, а если это не так, то Вы программируете, насколько я могу судить, основываясь на суеверии, как врач, не знающий анатомии, раздаёт рецепты по рекомендациям аптекарши.

Выучите микроэкономику до конца учебы

МикроэкономикаСупер- быстрый обзор для тех, кто не знает экономики. Экономика — это одна из тех областей, которая начинается с приятного возбуждения. Она полна полезных теорий и фактов, которые действительно имеют смысл, могут быть доказаны на практике и т.д. Первый полезный толчок дает микроэкономика, которая является основой любой мало-мальски значимой теории в бизнесе. После этого все начинается ухудшаться — вы переходите к макроэкономике (если хотите, её можно пропустить) с ее интересными теориями о том, как процентные ставки влияют на безработицу, которые, похоже, опровергается гораздо чаще, чем подтверждаются. Дальше все становится ещё хуже и поэтому многие студенты, ранее специализировавшиеся в экономике, уходят в физику, что, впрочем, все равно дает им право на теплое местечко Wall Street-а. Но обязательно изучите микроэкономику, потому что вы должны знать о спросе и предложении, вы должны знать о конкурентных преимуществах, вы должны понимать, что такое NPV [6], дисконтирование и предельная полезность, прежде чем получите представление, почему бизнес работает именно так, а не иначе.

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

Не пропускайте скучные занятия по некомпьютерным наукам

Пропуски занятий, не относящихся к Computer Science — отличный способ получить низкий средний балл.

Не стоит недооценивать важность Вашего среднего балла. Большинство агентов по найму и менеджеров по персоналу, включая меня, сразу же ищут средний балл, просматривая резюме, и мы не собираемся за это извиняться. Почему? Потому что средний балл, болше чем любая другая оценка, отражает то, что думают о вашей работе дюжина профессоров за долгий период и в различных ситуациях. Вступительный экзамен (SAT [7])? Ха! Да это только один тест на несколько часов. Средний же балл отражает сотни письменных заданий, промежуточные аттестации и активность на занятиях за четыре года. Да, у этой оценки есть свои недостатки. Он подвержен инфляции [8]. Средний бал ничего не говорит о том, как Вы его получили, посещая легкие лекции по домашней экономике в Podunk Community College, или изучили квантовую механику в Caltech. В конце концов, только после того, как я отсею всех со средним баллом в 2.5 из Podunk Community, я спрошу копии аттестатов и рекомендации. Затем я смотрю на твердые высокие оценки, и не только по вычислительным наукам.

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

В университете я пошел на курс культурной антропологии, потому что понял, а ведь чёрт возьми, я должен что-то знать из антропологии, а этот курс выглядит интересным и исследовательским. Интересно? Ничего подобного! Я должен был читать эти невероятно монотонные книги об индейцах бразильских тропических лесов и с островов Тробриан, которые, при всем моём уважении, не очень-то меня интересуют. В какой-то момент, занятия стали невероятно утомительны, и мне хотелось чего-то более захватывающего, например, понаблюдать, как растет трава. Я совсем потерял интерес к предмету. Навсегда и основательно. Мои глаза закрывались. Я так устал от бесконечных обсуждений сбора ямса. Я не знаю, почему на острове Тробриан так много времени уходит на сбор ямса, ведь это невероятно скучно, но я помнил, что необходимо сдать промежуточную аттестацию, и поэтому пахал. В конце концов, я решил, что культурная антропология — это моя рутина, моя личная полоса препятствий от скуки. Если бы я изучал курс, где зачетные тесты требуют знаний об укрывном материале, то я смогу справиться со всем этим, как бы скучно это не было. В другой раз я случайно застрять в Линкольн-центре, просидев целых 18 часов на Вагнеровском «Кольце Нибелунгов», когда Квакиутль был мне приятен в сравнении с моим обучением. Я получил наивысшую оценку по антропологии. А если я смог это сделать, то и Вы это можете.

Возьмите интенсивные курсы программирования

Я помню тот момент, кода я поклялся не поступать в аспирантуру. Это было на курсе «Динамической логики», который вёл Ленор Зак (Lenore Zuck) в Йельском университете, один из самых ярких представителей очень авторитетного факультета Computer Science. По истечении времени, мои мрачные воспоминания не станут рекламой этому предмету, но позвольте мне довести дело до конца. Идеей формальной логики является то, что вы доказываете истину, потому что исходные посылы содержат истину. Например, истинность высказываний «Каждый, кто получает хорошие оценки, получает работу» и «Джонни получил хорошие оценки» по формальной логике позволит Вам получить новый истинный факт — «Джонни получит работу». Это очень изящно и весело, требует всего десяти секунд для понимания формальной логики и того, насколько это бесполезно.

Теперь, динамическая логика, где то же самое, только с учетом времени. Например, «После включения света, вы видите свои ботинки» и «Свет был включен давно» подразумевает, что «Вы видите свои ботинки».

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

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

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

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

Я бросил курс и поклялся никогда не поступать в аспирантуру в области компьютерных наук.

Мораль этой истории в том, что информатика это не то же самое, что разработка программного обеспечения. Вам действительно очень повезет, если Ваш университет имеет достойную программу курса проектирования программного обеспечения. Хотя, скорее всего, это не так, потому что в элитных школах считается, что получение практических навыков лучше оставить профессионально-техническим училищам и программам тюремной реабилитации. Простое программирование Вы можете изучать в любом месте. В Йельском же университете мы воспитываем будущих мировых лидеров. Вы считаете, что ваша плата за обучение в $160,000 дает Вам право изучать только цикл while? Вы считаете, что пришли на однодневный Java-семинар на Airport Marriott? Тьфу.

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

ИнтенсивЕсли вам повезет, Вы можете найти множество интенсивных курсов программирования на факультете Computer Science, точно так же, как вы можете найти множество курсов на историческом факультете, где вы будете писать достаточно много, чтобы научиться писать. Такие курсы лучше пройти.

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

Перестаньте беспокоиться о рабочих местах в Индии

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

Но я постоянно слышу, что число абитуриентов факультета CS опасно падает, и одна из причин — «студенты боятся рынка труда, где все рабочие места в Индии». Это очень неправильно по многим причинам. Во-первых, пытаться выбрать карьеру, ориентируясь на текущие причуды бизнеса, глупо. Во-вторых, даже если всё программирование переместится в Индию и Китай, оно является невероятно хорошей тренировкой для многих видов сказочно интересных работ, например, анализ и инжениринг бизнес-процессов. В-третьих, поверьте мне, ещё существует невероятный дефицит действительно хороших программистов и здесь, и в Индии. Да, существует масса людей из ИТ, раздувающих шумиху — а, Вы знаете как долго я без работы? Рискую утверждать, что действительно хорошие программисты имеют работу. В-четвертых, у Вас есть идеи лучше? Вы собираетесь окунуться в историю? Тогда у Вас не остаётся выбора и придётся пойти в юридическую школу. Но есть одна вещь, которую я точно знаю — 99% работающих юристов ненавидят свою работу, ненавидят каждую её минуту, работая те-же самые 90 часов в неделю. Как я уже говорил, если вы любите компьютерное программировать, то благословенны, Вам очень повезло находиться в меньшинстве людей, которые могут прожить великую жизнь, делая любимую работу.

Во всяком случае, мне не кажется, что студенты реально об этом думают. Снижение количества учащихся CS — это просто исторически естественное снижение до уровня нормального после большого пузыря, раздутого доткомоманией. Этот пузырь состоял из людей, которым программирование на самом деле не нравится, но думающих о том, что поступив на CS факультет, они найдут сексульно-привлекательную, высокооплачиваемую работу и шансы на IPO в 24 года. К счастью такие люди уже ушли.

Независимо от того, что вы делаете, найдите хорошую практику на лето

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

Если вам нравится программирование, то самая большая ошибка, какую можно совершить, это согласиться на любую летнюю работу с неполный рабочим днём, а не на программистскую работу. Я знаю, что каждый второй 19-летний хочет работать в торговом центре на складе рубашек, но у вас есть навык, который невероятно ценен, даже если вам 19, поэтому глупо тратить его на раскладывание рубашек. При окончании университета у Вас уже должно быть резюме с целым букетом софтовых рабочих мест. Выпускники А&F будут работать в Enterprise Rent-A-Car и «помогать людям с удовлетворением их потребностей». (За исключением Тома Уэллинга, который играет супермена по телевизору).

Чтобы облегчить Вашу жизнь и подчеркнуть, насколько весь этот очерк бескорыстен, моя компания, Fog Creek Software, предоставляет летнюю программистскую практику, которая будет солидно выглядеть в Вашем резюме. «Скорее всего, с Fog Creek Software Вы узнаете о кодировании и разработке бизнес программного обеспечения больше, чем на любой другой стажировке», сказал Бен, один из прошлогодних стажеров, которого совсем недавно выпер из комнаты общежития для разговора, посланный мною вышибала. Для того, что бы попасть на текущую практику заявки принимаются до 1 февраля.

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

ПРИМЕЧАНИЕ:

  1. Windows GUI — Graphical user interface, графический интерфейс пользователя операционной системы;
  2. AOL Instant Messenger — одна из программ мгновенного обмена сообщениями, предлагаемая фирмой AOL;
  3. Студенты компьютерных наук;
  4. «Шаровары» получаются. Shareware — программное обеспечение, распространяемое свободно с добровольной оплатой;
  5. XP — eXtreme Programming, экстремальное программирования, технология разработки с привлечением заказчика во время написания кода для постоянной и непрерывной корректировки постановки задачи и алгоритмов реализации;
  6. NPV — Net Present Value, чистая текущая стоимость;
  7. SAT — Scholastic Assessment Test, Российский аналог ЕГЭ, тест готовности к обучению в высшей школе;
  8. В том смысле, что увеличивается год от года;
  9. Сельскохозяйственная культура, типа батата.

CC BY-NC 4.0 Советы студентам Computer Science, опубликовано waksoft, лицензия — Creative Commons Attribution-NonCommercial 4.0 International.


1 нравится это

Добавить комментарий