Joel Spolsky: Дипломные проекты и тайм-менеджмент

Интереса ради перевёл последнюю статью Джоела Спольски. Сразу предупреждаю, что некоторым перевод местами может показаться достаточно вольным — это сделано сознательно в угоду удобочитаемости по-русски.

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

Дипломные проекты и тайм-менеджмент


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

Откуда студентам узнать о контроле версий, багтрекинге, командной работе, планировании, оценке, дебаггинге, юзабилити-тестировании и документации? Где они научатся писать программы длиннее двадцати строк?

Многим университетам удалось убедить себя, что чем более учебный план расходится с реальным миром, тем они элитнее. Гуманитарный подход. Оставим подготовку настоящих программистов ПТУ, краснокирпичным университетам и мелким школам, наделенным в названии кучей точек с компаса типа «Университета Северной Югозападной Флориды». Мировая Лига Плюща должна давать линейную алгебру, теорию вычислений и Хаскель, и все старающиеся айтишные факультеты пытаются поднять свои стандарты, выбрасывая из учебного плана всё практичное в пользу большего количества теории.

Не поймите меня неправильно, это необязательно плохо. Они как минимум заменяют Java на Scheme, хоть и только потому что «так делают в MIT» (Слишком поздно!). И они учат студентов мыслить определённым образом. И, представляя сколько средний айтишный профессор знает о реальном программировании, я бы предпочёл чтобы дети изучали всё это во время интерншипа в Fog Creek.

Грег Вильсон, старший преподаватель из Университета Торонто, читал лекцию на конференции StackOverflow DevDay в Торонто, которая была увлекательна, информативна и прямо в точку. Мы разговорились и он рассказал мне про своё последнее детище — UCOSP, что значит Все Хорошие Имена Заняты (All The Good Names Are Taken).

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

Блог UCOSP напомнил мне почему студенческие проекты, хоть и похвальны, зачастую не дают ничего полезного. «Одна из целей данного курса — дать вам шанс выяснить каково это — ставить задачи и потом их выполнять», пишет Грег. «Чистый выхлоп на данный момент вполне ясен: во многих случаях студенты за неделю этого курса делают меньше чем могли бы с более упорядоченным курсом того же содержания.»

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

У меня есть в этом некоторый опыт — работал со студентами из Rose-Hulman во время их дипломного проекта. Мы позволили им самим выбирать себе график и, разумеется, они откладывали всё до последней минуты и выдавали нечто незавершенное. Типичное айтишное задание подразумевает что студент напишет «интересную» часть кода (в академическом смысле слова). Остальные 90% работы, которые нужны чтобы довести код до уровня «можно пользоваться в реальной жизни», от старшекурсников никогда не ожидаются, потому что фиксать баги и разбираться с реальными условиями не «интересно», и потому что большинство преподавателей никогда в не работало в реальном мире и понятия не имеет что значит делать программы способные выжить при встрече с пользователем.

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

У студентов нет никакого опыта долгосрочного планирования работы в комманде. Поэтому они почти всегда хреново работают на семестровых проектах, если сами планируют расписание.

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

Возможно, это прекрасная возможность попробовать Scrum. Раз в неделю комманда собирается вместе, лично или виртуально, и разбирает работу за прошедшую неделю. Потом решают какие фичи и задачи делать на неделе следующей. Для слежения за всем этим прекрасно подошёл бы FogBugz. Если вы делаете дипломный проект и нужен доступ к FogBugs — дайте знать и мы будем счастливы предоставить его бесплатно. Мы так же можем организовать вам доступ в klin, наш хостинг для Mercurial, в котором есть возможность code review.

Я тут обвинял студентов в недостатке дисциплины для того чтобы делать семестровый проект в течении семестра вместо того чтобы прокрастинировать, но, разумеется, проблема распространена так же и среди не-студентов. На это ушло какое-то время, но я в конце-концов понял, что длинные дедлайны (или вообще отсутствие дедлайнов) совсем не подходят и для профессиональных программистов: для долгосрочной продуктивности нужен график регулярного и частого выхода компонентов. Единственная причина почему в реальном мире это работает нормально, а чисто студенческие комманды проваливаются, в том, что в реальном мире есть менеджеры, которые могут установить дедлайны. Комманда студентов, где все равны, такого не потянет.
+30
27 октября 2009, 06:01
20
Caesar 9,7

комментарии (26)

–2
Andrey_Rogovsky #
Можно было бы написать кратко — многие студенты есть разгильдяи. Чтож, верно. Сам был такой давным-давно.

+12
Caesar #
ну, на самом деле статья у Джоела сумбурная, там можно выделить аж несколько тезисов (которые довольно-таки общеизвестны, но Джоель всегда славился тем, что обрекал прописные истины в слова):

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

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

3. От студентов можно добиться некоего подобия продуктивной работы путём жёсткого внешнего контроля через промежуточные дедлайны.

4. «невероятно, но факт» — опытные профессионалы качественно от студентов в этом плане не отличается — тоже просрут все сроки, дай только им такую возможность.

Если уж я взялся комментировать статью, то стоит сказать, что при трезвом взгляде, статья ни о чём. Первый тезис «студенты ничего не умеют» избит и общеизвестен, остальные можно объединить в «программисты — разгильдяи». С такой точки зрения непонятно зачем писать «если студентам дать доллгосрочное задание, то они просрут все сроки», ведь в этом нет ничего удивительного, раз состоявшиеся профессионалы ведут себя, в принципе, так же.

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

В результате сей текст напоминает поток сознания в виде размышлений на тему несовершенства мира, в которых родилась истина «программисты — разгильдяи». Я это понял когда перевод был уже почти завершен, поэтому решил всё-же опубликовать, хотя особой ценности статья и не представляет.
0
nzeemin #
Очень неплохой анализ, спасибо.

На самом деле у статьи есть ещё большой рекламный слой — собственно то ради чего она и написана :)
+2
Caesar #
Ну это да. К сожалению, Спольский уже несколько лет, насколько я помню, не писал по настоящему хороших статей. Таких, за которые я на него в своё время подписался. Сейчас всё больше самопиар на фоне слабеньких статей.
+1
Terentich #
Вы полностью отразили мои мысли, возникшие после прочтения статьи.
Сумбурно. Не похоже на того Джоела Спольски, которого я читал в книгах «О программировании» и «И снова о программирование».
–1
aryeh #
Спасибо. Автор известный, переводить стоит! Я, в своя время, очень многое почерпнул из его статей.
Плюсую!
0
indapublic #
Умные вещи от умного дяди, которые и так уже известны
+2
pavellob #
на самом деле статья может и немного размыта, но раскрывает проблемму, которая меня лично волнует — высшее образование в IT сфере крайне мало дает для реальной работы. И сегодня в России есть реальный выбор — идти работать на 3-ем — 4-ом курсе и по окончанию университета быть востребованным специалистом, либо иметь диплом (даже красный) и не иметь работы. Даже не смотря на то, что я из-за выбора первого пути потерял год в академе, я не жалею, так как вижу группу из 14 человек, где программировать умеют двое. И Надеюсь диплом все таки зимой получить.
0
nzeemin #
Такой выбор был всегда — и 10 и 20 лет назад.
Что касается проблемы отрыва образования от реальности — по-идее, она должна решаться тем что называется «производственная практика». Другое дело, что у нас сейчас это чаще всего чисто ради галочки.
0
pavellob #
мне кажется, проблемма не решиться даже производственной практикой — 2-3 раза по месяцу-два — это ничто. У меня есть коллега, он 7 лет прожил в германии и там получил IT образование, (здесь у него неоконченная прикладная математика) у них там JSF, patterns, EJB3 и пр. Говорит времени ни на что, кроме учебы не хватает, так как все время практические задачи. и год перед дипломом они работают в компании над реальными проектами, в команде — типа наша преддипломная практика. но не 2 месяца на заводе оператором ЭВМ. в итоге, имея опыт работы 3-4 года он по уровню где-то как наши после 7-8 лет. т.е. у него есть опыт, пусть и небольшой, практически во всех сферах. это огромное преимущество.
–1
dime #
Да просто в более других областях есть два «слегка» разных направления — чистое и прикладное. В университетах готовят теоретиков, а в институтах (которые сейчас с какого-то хрена тоже все повально «университеты») — инженеров практиков. Вы говорите о таком инженерном образовании. У нас же айти пока что в большинстве читается как «чистая» дисциплина (несмотря на названия типа «прикладной математики» — прикладная-то она прикладная, но всё-таки математика, а не программирование). От этого и различия. Когда я учился и чуть позже у нас в университете появились более прикладные факультеты, чем примат, там прикладного программирования было существенно больше и оно было даже полезным (работал с людьми оттуда — у них программистские скилзы были изначально выше наших приматовских и в среднем намного). А, да, есть ещё те айти факультеты, которые остались со времён СССР в инженерных втузах — когда я учился они ещё жили в прошлом, и мыслили категориями этих самых «операторов ЭВМ на заводах». Не знаю как сейчас. Зданю, что прочие технические факультеты (не явно программистские) в нашем городе всё ещё не вылезли за пределы паскакаля, а некоторые и фортрана…
–1
pavellob #
ну смотрите, я вот заканчиваю ЛЭТИ — не последний университет в городе, выше наверно только бонч и ЛГУ. Специальность была сначала мат обеспечение ЭВМ — самая прикладная специальность в универе, и самовая топовая. сейчас САПР.
т.е. очень инженерный вуз с очень инжинерными специальностями.
но какого хуя, простите, я целый сейместр посвятил изучению проектированию самолетов. исключительно принципам, никак не привязанным к CAD и вообще к компьютерам привязанным исключительно фразой «эти данные вы можете загнать в ЭВМ и используя этот алгоритм, получить результат»? я ж не в ГУАП учусь!!!
да, скажем на МОЭВМ дают интересные вещи, они хотя бы знают, что такое паттерн и UML, но… никто не знает каким местом их применять… на примере того же UML — я на работе выучил его за 3 недели, получил сертификат OMG. т.е. это были не какие-то мертвые знания, а живые. сейчас иногда читаю лекции коллегам, если надо. я — студент — читаю лекции! а знаете что, к нам выписали теточку из москвы за кучу бабла. ей под 50.
она -профессор. она работает в реальной компании. но все равно за три дня нам набили голову хератой… нам это не надо было. название курса очень слабо соотносилось с содержанием. надо было UML, а прочиталти RUP
на самом деле, это не дискуссия, просто накипело, простите.
просто это 20 лет назад было актуально, то что читают на лекциях.
понимаете он — профессор, заслуженный — ему и лекции читать. хорошо, если он понимает, что не сечет, он отдаст практическую часть на откуп молодым аспирантам, которые ведут практику, но большинство уверенно, что они учат нужным вещам, потому что сами сидят в своих нии, где по месяцу обсуждаю каждую гайку.
Никто не дает молодым вести лекции… вот в чем проблема… и это не как не сломать.потому что сверх — тоже заслуженные. у нас деканом факультета компьютерных технологий чуть не стал человек, который с компьютером настолько на вы, насколько моя бабушка, всю жизнь маляром проработавшая. не шучу. он даже вордом не может пользоваться… обошлось. сделали только зав нашей кафедры и замдеканом…
И наш университет выиграл гранд, как инновационный.
А в реалии — не преподаватели учат студентов, а студенты преподавателей. пустыми партами на лекциях.
просто на самом деле, я считаю, что наша вышка находится в глубокой жопе. рыба давно гниет, голова — давно сгнила. ждать когда отвалиться? посмотрите на нашу академию наук. сплошные старики. где молодые? за границей.
Стариков — на пенсию, практиков — на кафедру.
но возвращаться под сгнивших стариков не хотят. я понимаю. чего-то меня понесло. простите еще раз. наболело.
0
dime #
>Никто не дает молодым вести лекции… вот в чем проблема…
Да не в этом проблема. Проблема — в оторванности образования от производства. И это не только наша проблема — слушал такого подкастера — Будама, он несколько раз приглашал гостя — профессора компьютер сайнс из их университета. Может быть не так сильно выражено, но у них ровно то же самое — профессор, хоть и молодой (относительно) не имеет почти никакого представления о производстве ПО. Он занимается выбиванием грантов, двиганьем науки и чтением лекций (как и наши). Откуда ему знать что происходит на производстве (как и нашим)? Иногда он может иметь небольшой опыт работы в пару лет между бакалавратом и магистратурой, иногда нет. Даже если и имел, это еденичный опыт и довольно устаревший к моменту преподавания всё-равно. А с другой стороны, очень мало кто из производственников пойдёт преподавать. Что у нас, что у них. Это всеобщая проблема.
В вашем случае усугублённая тем, что у вас втуз, про что я уже говорил — они просто так и остались на уровне «операторов ЭВМ для завода». «Крутизна» вуза большой рояли не играет — играет скорее специализация. У вас ведь, наверняка, есть факультеты, где готовят юристов и экономистов :). Которые после окончания годятся только чтобы в палатке торговать :(. Непрофиль со всеми вытекающими. У нас «экономисты» из политехнического учат инженерную графику и детали каких-то механизмов :). Ну, вот так… На самом деле и в америках ведь круто в айти — это МИТ, Стенфорд и Беркли, а остальные — может быть и лучше, чем наши технические, но, думаю, не сильно уж намного…
ЗЫ. А УМЛ… Ну, а какой смысл читать УМЛ — это ведь довольно банальный и простой раздел знаний, самостоятельно изучается за три дня (ну, за три недели). Тут всё правильно. Зачем давать сугубо практический кусочек чего-то более общего? Он потребутеся реально одному проценту и вся его ценность в общепринятой нотации, которую вообще можно за пол-лекции прочитать. Пустое это — изучать в вузах конкретные технологии в степени пригодной для промышелнного применения. Распространённых технологий слишком много, чтобы глубоко изучить их все (и кому это нужно), а если не все — то всё-равно найдутся обиженые, для кого вышел промах. Что читать в вузе — яву или сишарп? А может быть сиплюсплюс? А большинство скажет вообще — пхп :). А ведь каждую из технологий студенту нужно будет изучать два-три-четыре года, чтобы освоить её для производственной применимости. Не, тут всё правильно. Конкретные технологии нужно изучать в ПТУ или техникуме, это не задача вуза. Хотя перекосы остались, конечно, вроде ваших самолётов :).
ЗЗЫ. А декану программирование знать тоже не обязательно :) — это ведь чисто административная должность :).
0
pavellob #
ну насчет оторванности у них я пожалуйста соглашусь. в текущем проекте группа товарищей занимается разработкой какого-то языка запросов, который потом будет автоматически конвертиться в Oracle SQL и делать запросы к базе. вопрос зачем? ведь понятно, что автосгенеренный запрос будет не оптимизирован и вообще… ан нет, какой-то немечкий умник с ученой степенью придумал и решил внедрить.
0
Caesar #
Дело в том, что эта проблема — отсутствие у выпускников достаточной практики именно программирования, а не решения задач из серии «занимательная информатика» (нет, они, конечно, тоже нужны, но не они одни) — обсосана по косточкам уже столько раз, что как-то даже странно в очередной раз об этом читать.
0
pavellob #
обсосана-то обсосана, но решения я ее не вижу. сам думаю пойти в аспирантуру, т.к. у нас аспиранты препадают, и дать хоть немного полезной информации. задать вектор. а то как-то грустно. понятно, что те кто хочет, сами найдут способ — пойдут работать. но на самом деле, огромное колличество неглупых людей просто так просиживают 5 лет в универе, они реально думают, что им дают пусть и устревшие, но необходимые знания. А «старая гвардия» их не спешит разубеждать.
+2
Caesar #
В смысле не видите решения? Я считаю для того чтобы у студентов было больше реалистичных практических навыков попки нужно сушить и чистить им нужно давать больше реалистичных практических заданий. Это можно делать через изменение учебного плана и соответствующую подготовку преподавателей (во что мы, пожалуй, не верим) или через internship (что в теории эквивалентно всем привычной производственной практике), а лучше и через то и другое. То, что это не делается либо делается недостаточно активно — это уже совсем другой вопрос.

Со стороны компаний заинтересованных в качестве своих будущих сотрудников я вполне вижу активные действия — те же самые internship-программы. Даже у Джоеля они есть (-:

Если человек хочет стать трудоспособным ИТ-специалистом и при этом считает что в университете ему магическим образом дают всё что ему надо, то я бы не назвал его неглупым.
0
pavellob #
+1
–1
valter #
У меня предзащита через две недели. Я только начинаю писать диплом.
Почему я раньше не увидел эту статью?
0
Caesar #
я не могу ответить на этот вопрос
0
veitmen #
О! Дам студентам своим почитать. Им будет полезно.
0
Caesar #
преподавателям лучше дайте
0
chupvl #
Все Хорошие Имена Заняты (All The Good Names Are Taken) — родилась замечательная идея — создать базу данных дипломных работ студентов над которыми они работают, для того чтобы не дублировать их. Необходимо прежде всего преподавателям, так же для различного обмена информацией как для студентов так и преподавателей, и вероятно для превлечения работодателей. Основные специальности конечно програмирование, естественники, технари, но гуманитариям место думаю будет.

Да, есть программа Антиплагиат — но она анализирует что уже сделано
–1
Caesar #
я не уверен что сейчас хоть сколько-нибудь остро стоит проблема «кто-то прямо сейчас делает диплом на ту же тему что и я». По нескольким причинам:

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

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

Мне кажется надо сначала решить проблему «создание выпускного проекта совсем не похоже на то, чем я буду заниматься в реальной жизни — другие методы, другие требования, я совсем не готов к взрослой работе, господи, что мне делать?»
–1
chupvl #
1. НУ пора уже делать нужное, сам вот вижу дипломные работы студентов, стараюсь направить на что-то полезное.
2. Из кучи ненужного можно сделать нужное.
3. Две работы всегда можно сравнить
4. Ну и самое простое — все же не стоит дублироваться?
5. Сделать мегапроект состоящий из кучи мелких (но здесь конечно нужен мегатерпеливый и мегаумный руководитель)
0
Caesar #
1. Мне кажется главной целью дипломного проекта никогда не должно быть «сделать что-то полезное». Это можно, но если оно не мешает главному — опробовать как мы научились делать нашу работу. Да, часто «полезность» оправдана — есть шанс протестировать на настоящих пользователях, реалистичные требования. Но это не единственный путь, плюс в некоторых областях он редко оказывается доступен.

2. Из кучи ненужного делают нужное когда это оправдано экономически. Т.е. мусор некуда девать. В электронном же мире существует /dev/null, т.е. избавиться от ненужной фигни гораздо проще просто её удалив. Или забыв. Каким бы хорошим не был дипломный проект, это всё-таки студенческая поделка. Этот же студент через какое-то время сделает с нуля гораздо лучше, чем если бы он продолжил лечить инвалида, написанного на последнем курсе.

в дальнейших пунктах ход вашей мысли от меня окончательно ускользнул.

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