Джоэл о программном обеспечении

       

Совет студентам изучающим вычислительную технику


Joel on Software - Совет студентам изучающим вычислительную технику

Совет студентам изучающим вычислительную технику

Автор: Джоэл Сполски

Переводчик: Анар Мустафаев

2 января 2005

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

К счастью, большинство студентов достаточно смелы, чтобы никогда не стесняться спрашивать советов у старших, что в области вычислительной техники (Computer Science) весьма уместно, потому что старшие склонны говорить устаревшие глупости, подобные этим: “спрос на операторов превысит 100 000 000 к 2010 году” или “lisp программисты сейчас очень востребованы”.

Я тоже понятия не имею о чем говорю, когда даю советы студентам. Я так безнадежно отстал, что не могу постичь AIM (AOL Instant Messenger)  и продолжаю использовать (о ужас!) старомодную вещь, называемую “email”, которая была популярна в те дни, когда музыка выходила на плоских круглых пластинках, называемых “CD”.

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

И все таки.



Если программирование компьютеров вам в удовольствие - молитесь: вы в числе той немногочисленной группы людей, которая может зарабатывать неплохие деньги делая то, что нравится. Большинство людей лишены такого счастья. Идея, что вы можете “любить свою работу” – это современная концепция. Раньше предполагалось, что работа – это некая неприятная вещь, которую вам приходиться делать, для того чтобы заработать денег на то, чем вы будете заниматься, когда вам стукнет 65 и вы сможете уйти в отставку, и только если вы сможете себе позволить это занятие, и если вы не очень стары, и дряхлы для этих дел, и если эти дела не требуют крепких коленей, хороших глаз, и не требуют способности проходить 20 футов без отдышки, и т.д.

Так, о чем я говорил? Ах да, совет.

Без дальнейших отступлений, вот Семь Частей Бесплатного совета Джоэла для студентов изучающих вычислительную технику (будет все же лучше если вы за них заплатите):

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

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

     

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

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

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

    Разница между хорошим программистом и великим  программистом не в том сколько языков программирования они знают и не в том, что они предпочитают Python или Java. А в том могут ли они говорить о своих идеях. Убеждая других людей они получают больше рычагов для достижения своих целей. Они пишут понятные комментарии и технические спецификации, это позволяет другим программистам понимать их код, что, в свою очередь, означает, что другие программисты могут использовать их наработки вместе с их кодом, а не переписывать его. Даже несмотря на то, что их код бесполезный. Написав понятную техническую документацию для конечных пользователей, они позволяют людям понять, что этот код, предполагалось, должен был делать. И это единственный путь, как пользователи могут увидеть ценность этого кода. Множество великолепного, полезного кода скрыто где-то на sourceforge, который никто не использует, потому что его создали программисты, которые не могут хорошо писать (или не пишут вообще), и никто не знает, что же они такого сделали и их замечательный код чахнет где-то там.

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

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

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

    Выучите С до окончания учебы.

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

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

    Вот краткий обзор для тех кто не изучает экономические предметы: экономика – это одна из тех областей, которая сразу же начинается с приятного возбуждения, она полна полезных теорий и фактов, которые действительно имеют смысл, которые могут быть доказаны на практике и т.д., и все это начинается прямо здесь. Вначале полезный импульс дает микроэкономика, которая является основой любой мало-мальски значимой теории в бизнесе. После этого все начинается ухудшаться: вы вступаете в область макроэкономики (вы можете пропустить ее если хотите) с ее интересными теориями о таких вещах как, например, зависимость между коэффицентом заинтересованности и безработицей, которая, похоже, гораздо чаще опровергается чем подтверждается. И чем дальше, тем все становится все хуже и хуже и многие студенты ранее специализировавшиеся на экономике переключаются на физику, что, впрочем, все равно дает им возможность получить теплое местечко на Wall Street. Но обязательно возьмите курс микроэкономики, потому что вам необходимо знать о предложении и спросе, о конкурентном преймуществе, вы должны понимать NPV1, предоставление скидок и предельную полезность прежде чем вы поймете почему бизнес работает именно так, а не иначе.

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

    Не пропускайте лекции не относящиеся к вычислительной технике, только потому что они скучны.

    Пропускать лекции не относящиеся к вычислительной технике – это отличный способ получить низкую среднюю оценку (GPA2).

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

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

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

    Интересный курс? Да ничего подобного! Я должен был читать невероятно монотонные книги об индейцах живущих в бразильских влажных лесах и тробрианских островитянах, которые, при всем моем уважении, не представляют для меня никакого интереса. В какой то момент, курс стал настолько невероятно скучным, что я затосковал по чему то более захватывающему, такому как, например, наблюдение за тем как растет трава. Я полность потерял интерес к теме предмета. Совершенно и основательно. Мои глаза слезились, я так устал от бесконечных дисскусий о собирании в кучу батанов. Я не знаю почему тробрианские островитяне проводят так много времени собирая в кучу батаны, это невероятно скучно. Но Нужно Было Сдавать Экзамены В Середине Семестра, поэтому я перепахивал все это. В конце концов я решил, что культурная антропология будет моим Вызовом Тоски: моей личной полосой препятствий скуки. Если я смогу получить высшую оценку по предмету, в котором требуется от меня знать все о куклах для заварных чайников, я смогу справиться со всем, неважно насколько это может быть скучным. В следующий раз я застрял в Lincoln Center просиживая все 18 часов на Вагнере “Кольцо нибелунга” (Wagner’s Ring Cycle), я могу поблагодарить мою учебу Квакиютль, которая сделала вещи более приятными в сравнении.

    Я получил высшую оценку. И если я смог это сделать, то и вы сможете.

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

    Я точно помню момент когда я поклялся никогда не заканчивать институт.

    Это был курс динамической логики, преподаваемый динамичным Ленором Зуком (Lenore Zuck) в Йеле (Yale), одним из ярчайших представителей очень яркого факультета вычислительной техники.

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

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

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

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

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

    Моим домашним заданием было доказать утверждение: если свет был выключен и сейчас он включен докажите, что вы переключили выключатель.

    Я попытался. Я действительно попытался.

    Я провел часы в библиотеке пытаясь.

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

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

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

    Мораль истории такова: вычислительная техника – это не тоже самое, что разработка программного обеспечения. Если вам повезет,  институт может иметь достойный курс разработки программ, хотя, скорее всего этого не будет, потому что элитные школы думают, что обучение практическим навыкам лучше оставить професионально-техническим училищам и тюремным реабилитационным программам. Вы можете изучить море программирования везде. Мы Йельский Университет, мы Формируем Будущих Лидеров Мира. Вы думаете, что ваша $160000 плата за обучение дает вам право изучать циклы while? Вы думаете, что мы здесь, безответственный Java-семинар в гостинице Marriott в аэропорту? Фи!

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

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

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

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

    Но я продолжаю слышать о том, что число абитурьентов поступающих на факультеты вычислительной техники опасно снижается. Я слышал, что один человек сказал по этому поводу, что “студенты опасаются вступать в ту область в которой вся работа переносится в Индию”. Это так ошибочно по многим причинам. Первое – выбирать карьеру основываясь на сегодняшних причудах бизнеса глупо. Второе – программирование это невероятно хороший трейнинг для всех типов поразительно интересных рабочих мест, таких как инжиниринг бизнес процессов, даже если единичное рабочее место по программированию и переносится в Индию или Китай. Третье – поверьте мне, еще остается невероятно много места для действительно хороших программистов, и здесь, и в Индии. Конечно, полно безработных ИТ специалистов, которые сильно шумят о том, как долго они были без работы, но знаете что? Рискуя послать их, скажу, что у действительно хороших программистов есть работа. Четвертое – у вас есть идеи получше? Чем вы будете заниматься если ваш профилирующий предмет история? У вас просто нет выбора, кроме как пойти в юридическую школу. И здесь имеется одна вещь, на которую я хочу обратить ваше внимание: 99% юристов ненавидят свою работу, ненавидят каждую ее минуту, а они тоже работают по 90 часов в неделю. Как я уже говорил: если программирование компьютеров вам в удовольствие - молитесь: вы в числе той немногочисленной группы людей, которая может заработать неплохие деньги делая то, что нравится.

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

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

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

    Если вы любите программирование, самую большую ошибку которую вы можете сделать, это поступить на какую-нибудь летнюю работу, на частичную занятость, или наоборот на работу не связанную с программированием. Я знаю, что всем кому сейчас по 19 хотят работать в торговых пассажах, складывать одежду4, но ваше умение невероятно ценно, даже если вам 19 лет, чтобы растрачивать его на раскладывание одежды. К тому времени, как вы окончите институт, у вас в резюме должен быть целый набор работ по программированию. Выпускники А&F5 идут работать в Enterprise Rent-a-Car “помогать людям в их арендных нуждах”. (Кроме Тома Веллинга (Tom Welling). Он играет Супермена на ТВ.)

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

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

    1. NPV (Net Present Value) - Чистый дисконтированный доход (в некоторых источниках чистая приведенная стоимость) показывает, превышает ли текущая стоимость ожидаемых доходов/расходов по проекту (дисконтированный доход) инвестиционные затраты в начальный момент времени.

    2. GPA (Grade Point Average) – средняя оценка по четырех бальной шкале.

    3. SAT (Scholastic Assessment Test) – в США тест готовности к обучению в высших учебных заведениях, подобный единому государственному экзамену.

    4. В оригинале mall folding shirts. В сети магазинов The Gap, Banana Republic и др., которые продают одежду, одежда складывается в большие кипы, которые аккуратно разложены на столах. Покупатели берут одежду из этих кип, чтобы рассмотреть и перемешивают ее. Поэтому эти магазины нанимают студентов для складывания и раскладывания одежды.

    5. A&F (Abercrombie and Fitch) – один из таких магазинов одежды в которых студенты раскладывают одежду. Enterprise Rent a Car – компания по сдаче автомобилей в аренду, имеет репутацию места работы для веселых молодых работников. Они выполняют весьма лакейскую работу, но им надо что-то написать в своем резюме, поэтому они пишут “помогал людям в их арендных нуждах”, что звучит гораздо лучше чем “мыл машины сдаваемые в аренду, когда они приходили грязными”.



    В английском оригинале статья называется Advice for Computer Science College Students  


    Джоель Спольски - основатель Fog Creek Software, небольшой компании по
    разработке программного обеспечения, расположенной в Нью-Йорке.
    Окончил Йельский Университет, работал программистом и управляющим в
    Microsoft, Viacom и Juno.

    Содержимое этих страниц представляет собой мнение одного человека.
    Всё содержимое Copyright ©1999-2005  by Joel Spolsky. All Rights Reserved.

    FogBUGZ | CityDesk | Fog Creek Software | Joel Spolsky



    Содержание раздела