Задачи для курсовых

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

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

Как можно уже было догадаться, я предлагаю поучаствовать в разработке языка Nemerle. Это достаточно уникальный проект, так как он стоит в одним ряду с таким языком как scala, он поддерживается людьми из России, и он еще не такой популярный, что бы избегать всеми силами ломающих изменений.

Ниже я перечислил некоторые задачи, которые еще не реализованы, но которые есть в плане развития
  • Поддержка Coroutine через трансформацию исходного кода, как это сделано в scala с версии 2.8. Эту задачу можно реализовать целиком через макросы, не изменяя сам компилятор (подробности)
  • Добавить парсер C# файлов, чтобы можно было использовать Nemerle на существующих C# проектах и использовать уже существующие дизайнеры и автогенераторы


Я не разработчик Nemerle, но использую его в своей дипломной работе и заинтересован в его развитии. За всеми подробностями можно обращаться на форум, посвященный Nemerle на rsdn. Репозиторий Nemerle открыт на чтение, поэтому изучать его можно уже сейчас. Сам язык является простым, и человек, знающий C#, может быстро (несколько дней) разобраться в его основах.
+3
16 декабря 2009, 12:17
2
shai_xylyd 38,0

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

0
Sone #
На самом деле не думаю что найдется много людей кто захочет этим заняться, но сам считаю что подобный вариант один из лучших в плане самообразования. Сам щас пишу эмулятор i8086 вместе с компилятором, по началу казалось что убьешь много времени и никогда не пригодится, но на самом деле чем глубже углубляешься в это — тем лучше становишься как специалист.
+2
shai_xylyd #
Отчасти не пригодиться, хотя с другой стороны после такого опыта можно пытаться в JetBrains устроиться.

Если бы мне предложили поучаствовать в open source проекте, когда попал в универ, я бы с радостью бы присоединился к разработке, но тогда я думал, что языки пишут и участвуют в open source проектах только боги :)
0
Sone #
да уж, думаю стоит у нас в универах ввести подобную практику участия в опенсорс для студентов да еще и совместить с курсовиками и лабами по некоторым предметам, в любом случае больше пользы.
0
VlK #
Действительно, участие в open-source проекте — всегда очень интересно. Чужой код, аккуратный или не очень, необходимость сотрудничать с незнакомым человека…

Как мне кажется, подобная инициатива должна исходить от преподов. Например курсовая или расчетная работа, в рамках которой студент должен внести определенные изменения в OSS-проект, скажем, университета или общественный. Либо запустить собственный, начиная от общественного репозитория, заканчивая практическим применением.
0
rg_software #
В принципе, всё верно, но есть и проблемы.
В теории, дипломная работа должна решать некоторую научную задачу. В этом смысле чисто технический проект («запрограммировать») не катит, даже если требуются нетривиальные навыки программирования и разработки архитектуры.

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

Хотя, конечно, о пользе участия в реальных проектах спорить нечего, всё тут ясно.

ЗЫ: «достаточно уникальный» режет слух — это из стиля «немножко беременна».
0
Zibx #
Да какая к чёрту научная новизна. Обычно научные руководители изобретают какую то жесть, которую сами страшно нахваливают, но которая уже или устарела морально и во всём мире на неё уже забили (а они думают, что это таки новое слово и ни у кого этого нет), или же что-то страшно узкое и потому этого нет, ибо никому нахуй не нужен Неуловимый Джо. (Во всяком случае в моём вузе, который далеко не самый хреновый).
+2
CheatEx #
Это чистая теория. На практике адекватные люди понимают какой научной новизны можно добиться от студента. А неадекватным не так сложно и вынушить её наличие.
0
sse #
Ох, сколько я видел программ автоматизированного составления расписания! Каждая — такая научно-новая, што писец :) А CMS на PHP уж сколько — каждый год десяток пишут, чтобы забыть. Так что в этом плане тот же Nemerle сто очков вперед даст любому упомянутому проекту, особенно если там будет какой-никакой матан.
0
Denom #
И тем не менее на выводе типов, использованном в nemerle один из авторов защитил диссер.
0
Denom #
На самом деле продолжения (continuations) на nemerle уже есть ввиде монады (в тестах).
Только выглядит не очень. Мне очень понравилось как это сделано в F# через computation expressions. Намного привлекательней выглядит сначал реализовать возможность удобно создавать монады. А потом уже на них сделать continuations.
К сожалению scala не знаю. С реализацией cps разобраться не смог.
Есть continuations и в mono только там они реализованы как unmanaged патч к компилятору.
А вообще если делать как предлагает Влад, получится интерпретатор (т.к в nemerle доступа к стеку нет). Еще варинт конвертить все в Expression tree — его можно сериализовать.
–1
AlpenColt #
… когда студент выполняет работу, но не видит в ней смысл.
Тут либо студент бездырь, либо преподаватель плохо объяснил (чаще бывает первое).

Без обид, но идея бредовая по целому ряду причин:
1) Не смотря на то, что задачи преподавателей кажутся надуманными, они решают конкретную фундаментальную задачу, решив которую, студент получит важные для него в будущем навыки. Именно на таких «сферических в вакууме» задачах нужно учиться.
2) В реальных проектах куча тонкостей и заморочек, которые студенту до поры, до времени знать не надо.
3) Некоторая часть студентов не сможет разобраться в проекте, в котором уже есть солидные наработки. Поэтому будет довольно большой процент проваленных курсовых и дипломных работ.
4) Руководство опенсорс-проекта не доверит студенту что-то толковое… (Я бы не доверил^^)
5) Преподавателю сложно проконтролировать вовлечённость студента в проект.
6) Проблемы с языком.
7) Опенср-проектов на всех не хватит;)

+1
shai_xylyd #
Не смотря на то, что задачи преподавателей кажутся надуманными, они решают конкретную фундаментальную задачу, решив которую, студент получит важные для него в будущем навыки. Именно на таких «сферических в вакууме» задачах нужно учиться.

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

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

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

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

Логи системы контроля версий + переписка студента с разработчиками + результат работы.
Проблемы с языком.

Хороший способ подтянуть язык=)

P.S. Я сам придумал тему своего диплома, нашел преподавателя, который занимается максимально близкой темой в моем универе. Переписывался с людьми из Германии и Италии, которые работают в той же области и чувствую себя отлично, потому что понимаю, что мой проект нужен по-крайней мере мне. Что не могу сказать про своих однокурсников, которые не понимают чем они занимаются.
0
AlpenColt #
Какие-то не правильные у вас преподаватели были — когда я учился, на студентов не возлагали какую-то «черновую работу» из диссертации. Максимум такое задание могло достаться сотрудникам кафедры и то по обоюдному согласию.

Даже если с разработкой ничего не получиться, всегда можно проанализировать корреляцию между интенсивностью разработки на основе коммитов системы контроля версий и метрик проекта, а на этой основе написать курсовую по управлению рисками, например. Нужно помнить, что из любого провала можно выйти победителем.
Только я сомневаюсь, что курсовая по управлению рисками (хоть и в проекте по разработке компилятора) подойдёт под курс «Системное программное обеспечение». Да и в случае с дипломом: результат должен соответствовать теме, утверждённой за пол-года до сдачи.

0
bobic #
Можно глупый вопрос.
Какой процент студентов способен за семестр проанализировать структуру, вникнуть в код проекта, осознать как реализовать новую функциональность и начать вносить свой вклад в проект?
Как тема дипломного проекта возможно, но только не курсового, ИМХО времени маловато.
0
shai_xylyd #
Если рассматривать эту активность только для сдачи курсовой то времени мало, а если эта тема интересна человеку, что он её заниматься, а параллельно делать курсовые и диплом на основе этой активности.

Например, я занимаюсь разработкой uniquation.ru, потому что мне интересна эта тема, а алгоритм работы системы я защищу как свою дипломную работу. Если бы мне предложили вариант участвовать в open source проекте, и на основе этой работы делать курсовые и диплом, или я сам бы догадался до этого, то занимался бы сейчас, например, nemerle.
0
bobic #
Ну если в таком разрезе, тогда, да, нормальный вариант.
Просто название топика немного смутило.

Хотя когда я учился если человек занимался каким-то серьезным проектом, то преподаватели всегда (ну, за редким исключением) шли на встречу даже если тема не совсем соответствовала дисциплине.

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