Цели и применение курсов "Компиляторы" и "ОС"
От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
Дата: 09.05.11 13:52
Оценка:
Коллеги, очень хотелось бы услышать ваши мнения по двум вопросам:

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

Однако, такое понимание меня (как преподавателя/разработчика соответствующих курсов) устраивает мало. И вот почему:

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

Ну вот исходя из написанного и хочется понять: что было бы полезно знать, а главное уметь (т.к. очень часто из-за нехватки времени курсы превращаются в чисто теоретические), студентам в среднем в областях "трансляторы/инструментальные средства" (все-таки не хочется ограничиваться только трансляторами) и "операционные системы"?

P.S. Прошу простить за некоторую скомканность и сумбурность изложения. Надеюсь, что смог донести весь спектр своих сомнений и смогу увидеть полезные для меня мысли и соображения.
Re: Цели и применение курсов "Компиляторы" и "ОС"
От: LaptevVV Россия  
Дата: 09.05.11 14:16
Оценка: 2 (2) +2
Здравствуйте, Романов Михаил, Вы писали:

РМ>Коллеги, очень хотелось бы услышать ваши мнения по двум вопросам:

РМ>[list]
РМ>
  • считаете ли вы необходимым включать в образовательную программу инженеров-программистов такие курсы как "Конструирование компиляторов" и "Операционные системы"?
    Да.
    Только второй курс "Конструирование компиляторов" — слишком узкая постановка.
    РМ>Понимаю, что в таком общем виде трактовать эти вопросы можно весьма вольно, поэтому дам небольшое пояснение...
    РМ>В классическом понимании (т.е. в том виде как они встречаются чаще всего) данные курсы обычно преследуют целью "познакомить студентов с принципами построения, методами и алгоритмами, на базе которых строятся и функционируют компиляторы (ну и все родственные им продукты) и операционные системы" (ну или как-то так).
    Давайте отделим мух от котлет.
    Цель курса по ОС — познакомить. По крайней мере, как пишет Таненбаум, любой грамотный ИТ-инженер должен знать первые 6 глав его книги.
    В курсе ОС становятся понятны многие вещи, которые вроде изучали, но не понимали, зачем. Например, наглядно показывается применение очередей. Управление памятью, обработка прерываний. Или системы массового обслуживания — прямое моделирование ОС.
    С практической точки зрения курс по ОС абсолютно необходим. В лабах пишутся проги с использованием API. Причем, желательно писать для Windows и для Linux одни и те же проги — весьма полезно. Весьма полезные лабы — драйверы писать...
    РМ>в том виде как сформулированы цели курсов и как они довольно часто читаются (собственно как они представлены практически в любом академическом учебнике со словами "компиляторы" или "операционные системы" в заголовке), они больше ориентируются на проектировщиков и разработчиков компиляторов (или смежных инструментов) и ОС. Однако, какой процент программистов реально работает в этих областях? По моим представлениям — не очень большой. РМ>Впрочем, к тому же предмету ОС есть вполне неплохой подход: рассматривать не устройство ОС, а разработку с использованием базовых механизмов (управление памятью, процессами, файлами, ...), предоставляемых ОС — т.е. по большому счету опираться на API ОС.[/i]
    Не... Теорию все равно знать надо. Например, основы управления параллельными процессами, механизмы взаимодействия процессов — это же именно в курсе ОС нужно изучать. И тоже лабы — применение API.
    А вместо компиляторов я читаю курс Системное ПО.
    Начинаю с классификации ПО. Потом виртуальные машины и интерпретаторы. Потом ассемблеры, загрузчики, линкеры, мейкеры, библиотекари. Отладчики и профайлеры. И только потом компиляторы. В ассемблерах они уже с конечными автоматами и грамматиками знакомятся — интерпретатор выражений же надо писать. И лабы — соответствующие. Виртуальная машина и ее интерпретатор, ассемблер, отладчик для нее же. А потом уже и компилятор в коды виртуальной машины. Все это — на С++ с использованием ООП, шаблонов и паттернов — на полную катушку. Очень хорошая практика для освоения нетривиальных вещей в программировании.
    Насчет отсутствия практической направленности. ВУЗ — это не ПТУ, где учат конкретной профессии. Никогда не знаешь, где может пригодиться вроде бы бесполезное на первый взгляд знание.
  • Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re: Цели и применение курсов "Компиляторы" и "ОС"
    От: Michael7 Россия  
    Дата: 09.05.11 15:21
    Оценка: +1
    Здравствуйте, Романов Михаил, Вы писали:


    РМ>Я не утверждаю, что эти предметы бесполезны и их следует удалить из программы, однако и подход "знания не бывают лишними, никто не знает, что в жизни пригодится" в данном случае не вполне разделяю: если есть возможность использовать учебное время более эффективно, то это стоит сделать (особенно это актуально для студентов, обучающихся на заочной или вечерней форме — а я больше всего работаю именно с такими).


    Вопрос тогда стоит поставить так: а что вы предполагаете ваши студенты, хотя бы их часть, будут во "взрослой" жизни писать? Без этих курсов или самообразования в этих вопросах (ОС и компиляторы) я сразу скажу чего они не напишут, во всяком случае грамотно: свою технологию, любую более-менее серьёзную информационную систему. Например, браузер (что-то аналогичное) они не напишут. Оптимизатор запросов к СУБД не напишут. Тем более саму СУБД. Свой графический фреймворк они не напишут. Для написания драйверов их вряд ли можно будет использовать. Что-нибудь вроде биллинговой системы для сотового оператора от них тоже нельзя будет спрашивать.

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

    РМ>Ну вот исходя из написанного и хочется понять: что было бы полезно знать, а главное уметь (т.к. очень часто из-за нехватки времени курсы превращаются в чисто теоретические), студентам в среднем в областях "трансляторы/инструментальные средства" (все-таки не хочется ограничиваться только трансляторами) и "операционные системы"?


    Нехватка времени, вещь конечно серьезная.

    РМ>P.S. Прошу простить за некоторую скомканность и сумбурность изложения. Надеюсь, что смог донести весь спектр своих сомнений и смогу увидеть полезные для меня мысли и соображения.


    Просто, на мой взгляд, без навыков в теории ОС и компиляторов, программист вообще не совсем программист.

    Между прочим, я тут недавно читал книгу Кодеры за работой. Размышления о ремесле программиста в которой автор проинтервьюировал человек 15 более-менее известных людей в программистком мире. Можно сказать, что все они умеют писать компиляторы и ОС.
    Re[2]: Цели и применение курсов "Компиляторы" и "ОС"
    От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
    Дата: 10.05.11 08:01
    Оценка:
    Возможно, это мой личный пунктик, но мне реально сложно читать курс, если я сам себе не готов на конкретных примерах показать, как именно можно использовать те или иные полученные знания и навыки (причем, не в каких-то сугубо частных задачах, а на достаточно распространенных).

    LVV>Цель курса по ОС — познакомить. По крайней мере, как пишет Таненбаум, любой грамотный ИТ-инженер должен знать первые 6 глав его книги.

    LVV>В курсе ОС становятся понятны многие вещи, которые вроде изучали, но не понимали, зачем. Например, наглядно показывается применение очередей. Управление памятью, обработка прерываний. Или системы массового обслуживания — прямое моделирование ОС.
    Все равно остается вопрос — сможет ли среднестатический студент распорядиться этими знаниями?
    И если в реальности это пригодится только проценту, то может стоит заменить программу курса (или весь курс) на что-то более полезное большинству?

    LVV>Насчет отсутствия практической направленности. ВУЗ — это не ПТУ, где учат конкретной профессии. Никогда не знаешь, где может пригодиться вроде бы бесполезное на первый взгляд знание.

    Все равно нужно делать какой-то выбор: что-то оставлять, а что-то выбрасывать. А чтобы сделать такой выбор, нужно (по крайней мере мне) четко понимать — как будут использоваться результаты моего труда.
    Re: Цели и применение курсов "Компиляторы" и "ОС"
    От: denisko http://sdeniskos.blogspot.com/
    Дата: 10.05.11 08:04
    Оценка:
    Здравствуйте, Романов Михаил, Вы писали:

    А почему две очень здоровые и не связанные друг с другом темы объединены в один курс?
    <Подпись удалена модератором>
    Re[2]: Цели и применение курсов "Компиляторы" и "ОС"
    От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
    Дата: 10.05.11 08:11
    Оценка:
    Здравствуйте, Michael7, Вы писали:

    M>Вопрос тогда стоит поставить так: а что вы предполагаете ваши студенты, хотя бы их часть, будут во "взрослой" жизни писать?

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

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

    M>Без этих курсов или самообразования в этих вопросах (ОС и компиляторы) я сразу скажу чего они не напишут, во всяком случае грамотно: ...

    А можно немного раскрыть по каждому перечисленному пункту: какие уникальные (т.е. не встречающиеся в других курсах) знания требуются для каждого.

    M>Просто, на мой взгляд, без навыков в теории ОС и компиляторов, программист вообще не совсем программист.

    Не отрицаю.
    Вопрос в том, что именно и в каком объеме он должен знать и уметь.

    Поэтому и вопрос — какой вам видится цель и практика применения.
    Re[2]: Цели и применение курсов "Компиляторы" и "ОС"
    От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
    Дата: 10.05.11 08:12
    Оценка:
    Здравствуйте, denisko, Вы писали:

    D>А почему две очень здоровые и не связанные друг с другом темы объединены в один курс?

    Какие именно?
    Re[3]: Цели и применение курсов "Компиляторы" и "ОС"
    От: denisko http://sdeniskos.blogspot.com/
    Дата: 10.05.11 08:14
    Оценка:
    Здравствуйте, Романов Михаил, Вы писали:

    РМ>Здравствуйте, denisko, Вы писали:


    D>>А почему две очень здоровые и не связанные друг с другом темы объединены в один курс?

    РМ>Какие именно?\
    Компиляторы и ОС. И про компиляторы и про устройство ОС (если это только не большой палисатый мух) можно свой курс сделать, и то получится только введение.
    <Подпись удалена модератором>
    Re[3]: Цели и применение курсов "Компиляторы" и "ОС"
    От: Ник Россия  
    Дата: 10.05.11 08:14
    Оценка:
    Здравствуйте, Романов Михаил, Вы писали:

    РМ>Здравствуйте, denisko, Вы писали:


    D>>А почему две очень здоровые и не связанные друг с другом темы объединены в один курс?

    РМ>Какие именно?
    Первая — компиляторы. Вторая — ОС.
    Re[3]: Цели и применение курсов "Компиляторы" и "ОС"
    От: Michael7 Россия  
    Дата: 10.05.11 08:51
    Оценка:
    Здравствуйте, Романов Михаил, Вы писали:

    РМ>Наиболее востребованные задачи в моем ближайшем окружении — всевозможные бизнес-системы (учетные, логистические, документооборотные), плюс web-программирование разных стилей и направлений.

    РМ>Остальные задачи достаточно редки. Скорее всего сказывается статус региона: Ижевск — далко не ИТ-столица.

    Ижевск — крупный промышленный город, по крайней мере был таким, а где промышленность, там по идее и ИТ, но у нас много чего по идее... это такой оффтопик.

    РМ>А можно немного раскрыть по каждому перечисленному пункту: какие уникальные (т.е. не встречающиеся в других курсах) знания требуются для каждого.


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

    M>>Просто, на мой взгляд, без навыков в теории ОС и компиляторов, программист вообще не совсем программист.

    РМ>Не отрицаю.
    РМ>Вопрос в том, что именно и в каком объеме он должен знать и уметь.

    Мне кажется, должен хотя бы иметь понятие о том зачем нужна ОС и какие задачи и как именно она решает. То есть, как сказал Лаптев, чтобы все эти семафоры, параллельные процессы и прочее не были бы пустым звуком. Но опять же, по хорошему, студент должен бы вживую пощупать потроха ОС, хотя бы minix Таненбаума.

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

    РМ>Поэтому и вопрос — какой вам видится цель и практика применения.


    Боюсь этот вопрос от местных условий очень сильно зависит. В идеале неплохо бы ориентироваться на курс Computer Science в MIT или хотя бы курсы ВМК и мехмата МГУ, но не всегда это возможно. Тем более, что сейчас стандарты по обучению сильно зарегламентированы, особенно тут не разгуляешься ни в плюс ни в минус.
    Re[4]: Цели и применение курсов "Компиляторы" и "ОС"
    От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
    Дата: 10.05.11 08:58
    Оценка:
    Здравствуйте, denisko, Вы писали:

    D>Компиляторы и ОС. И про компиляторы и про устройство ОС (если это только не большой палисатый мух) можно свой курс сделать, и то получится только введение.

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

    Их объединяет в рамках поста только то, что мне не понятна практическая направленность курсов. Т.е. каким образом сделать курсы более практичными.
    Re[3]: Цели и применение курсов "Компиляторы" и "ОС"
    От: LaptevVV Россия  
    Дата: 10.05.11 10:00
    Оценка:
    Здравствуйте, Романов Михаил, Вы писали:

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

    Ну, это естественно. Надо хоть немного самому уметь, о чем рассказываешь.
    LVV>>Цель курса по ОС — познакомить. По крайней мере, как пишет Таненбаум, любой грамотный ИТ-инженер должен знать первые 6 глав его книги.
    LVV>>В курсе ОС становятся понятны многие вещи, которые вроде изучали, но не понимали, зачем. Например, наглядно показывается применение очередей. Управление памятью, обработка прерываний. Или системы массового обслуживания — прямое моделирование ОС.
    РМ>Все равно остается вопрос — сможет ли среднестатический студент распорядиться этими знаниями?
    РМ>И если в реальности это пригодится только проценту, то может стоит заменить программу курса (или весь курс) на что-то более полезное большинству?
    "Полезность" — понятие относительное. Никто почему-то не спорит о "полезности" матанализа для программистов или алгебры с геометрией. Хотя процент выпускников, использующих эти знания непосредственно — микроскопический!
    Вот в курсе по ОС большая часть, например, изучение параллельных процессов — уж куда более практичные знания. Особенно в свете многоядерности.
    LVV>>Насчет отсутствия практической направленности. ВУЗ — это не ПТУ, где учат конкретной профессии. Никогда не знаешь, где может пригодиться вроде бы бесполезное на первый взгляд знание.
    РМ>Все равно нужно делать какой-то выбор: что-то оставлять, а что-то выбрасывать. А чтобы сделать такой выбор, нужно (по крайней мере мне) четко понимать — как будут использоваться результаты моего труда.
    Нет. Ваше дело — показать направления, обозначить ориентиры. В конце-концов, мы в вузе изучали фортран и пл-1, которые в настоящее время мне совсем не нужны. Но это же не означает, что эти знания бесполезны! Например, сравнение механизмов пл-1 и С++ бывает весьма полезно...
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re[3]: Цели и применение курсов "Компиляторы" и "ОС"
    От: зиг Украина  
    Дата: 10.05.11 12:58
    Оценка:
    Здравствуйте, Романов Михаил, Вы писали:

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


    LVV>>Цель курса по ОС — познакомить. По крайней мере, как пишет Таненбаум, любой грамотный ИТ-инженер должен знать первые 6 глав его книги.

    LVV>>В курсе ОС становятся понятны многие вещи, которые вроде изучали, но не понимали, зачем. Например, наглядно показывается применение очередей. Управление памятью, обработка прерываний. Или системы массового обслуживания — прямое моделирование ОС.
    РМ>Все равно остается вопрос — сможет ли среднестатический студент распорядиться этими знаниями?
    РМ>И если в реальности это пригодится только проценту, то может стоит заменить программу курса (или весь курс) на что-то более полезное большинству?
    даже если использовать в реальной жизни будет только процент, это все равно читат ьнужно — как говорится для общего развития

    (мы писали на соответствующем курсе транслятор примитивного языка — многим студентам это было как минимум интересно, представить и понять как оно все работает изнутри)
    Re[3]: Цели и применение курсов "Компиляторы" и "ОС"
    От: LaptevVV Россия  
    Дата: 10.05.11 14:08
    Оценка:
    Здравствуйте, Романов Михаил, Вы писали:

    РМ>Остальные задачи достаточно редки. Скорее всего сказывается статус региона: Ижевск — далко не ИТ-столица.

    РМ>Конечно, это не говорит, что все, что не связано с этими областями нужно выбросить. Отнюдь.
    Вы ошибаетесь и очень сильно!

    Также золотые медали получили: занявшая второе место и ставшая чемпионом Северной Америки команда Массачусетского технологического института (США), занявшая третье место команда Ижевского государственного технического университета и занявшая четвёртое место команда Львовского Национального Университета им. Ивана Франка.

    Это 2008 год. Чемпионат мира по программированию
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re: Курс — Введение в системное программирование
    От: SergeCpp Россия http://zoozahita.ru
    Дата: 10.05.11 19:10
    Оценка: +1
    Отличная книга: Бек. Введение в системное программирование
    Предисловие — ответ на ваши вопросы
    Извин., длин. сообщ. не отпр.
    http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
    Re: Цели и применение курсов "Компиляторы" и "ОС"
    От: мыщъх США http://nezumi-lab.org
    Дата: 10.05.11 20:03
    Оценка:
    Здравствуйте, Романов Михаил, Вы писали:

    РМ>Понимаю, что в таком общем виде трактовать эти вопросы можно весьма вольно, поэтому дам небольшое пояснение...

    РМ>В классическом понимании (т.е. в том виде как они встречаются чаще всего) данные курсы обычно преследуют целью "познакомить студентов с принципами построения, методами и алгоритмами, на базе которых строятся и функционируют компиляторы (ну и все родственные им продукты) и операционные системы" (ну или как-то так).

    тут все зависит от ваших споосбностей объяснять сложные вещи простым языком. вот тут мужик здорово задвигает, жалко что у меня таких преподавателей не было: http://youtu.be/HyUK5RAJg1c
    americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
    Re[2]: Курс — Введение в системное программирование
    От: LaptevVV Россия  
    Дата: 10.05.11 20:05
    Оценка:
    Здравствуйте, SergeCpp, Вы писали:

    SC>Отличная книга: Бек. Введение в системное программирование

    SC>Предисловие — ответ на ваши вопросы
    Совершенно верно — отличная книга. Последняя из изданных в СССР именно по системному программированию.
    Хочешь быть счастливым — будь им!
    Без булдырабыз!!!
    Re: Цели и применение курсов "Компиляторы" и "ОС"
    От: ry Россия  
    Дата: 11.05.11 11:01
    Оценка:
    Здравствуйте, Романов Михаил, Вы писали:

    РМ>Коллеги, очень хотелось бы услышать ваши мнения по двум вопросам:

    РМ>
    Да.

    А вот в чём "цель и практический смысл"?
    Так как я нисколько не преподаватель, то напишу с точки зрения получателя (студента). Конечно, это только моё личное желание.
    Мне нисколько неинтересны пересказы написанных книжек хоть Танненбаума, хоть Бека, хоть кого бы то ни было ещё. И также неинтересно мне устройство ни Миникс, ни Линукс, ни Виндоус.
    А что интересно?
    Взять какое-либо устройство на АРМе, х86, БлэкФине (что-то ещё) — существующее или разработанное на кафедре — и провести разработку ОС для него силами группы во главе с преподавателем, конечно же, опираясь на теорию, изложенную в вышеупомянутых книжках.

    РМ>Ну вот исходя из написанного и хочется понять: что было бы полезно знать, а главное уметь


    Тут вам и теория с практикой по ОС, и коллективная разработка с применением систем управления версиями и багтрэкинга.
    Re: Цели и применение курсов "Компиляторы" и "ОС"
    От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
    Дата: 13.05.11 12:21
    Оценка:
    Коллеги, спасибо за ваши отклики.
    К сожалению, я так и не смог для себя определиться с целями упомянутых курсов, хотя и услышал ряд интересных мнений по их наполнению.
    Еще раз спасибо всем, кто принял участие в обсуждении.
    Re[2]: Цели и применение курсов "Компиляторы" и "ОС"
    От: Аноним  
    Дата: 14.05.11 08:11
    Оценка:
    Здравствуйте, Романов Михаил, Вы писали:

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


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