Интересное наблюдение обнаружилось среди студентов начальных курсов.
Обсуждали мы тут с одной преподавательницей, как лучше объяснять алгоритмы. Я считал, что на псевдокоде, а она считала — с помощью блок-схем.
Решили спросить студентов 2-3 курсов. Выяснился интересный феномен. Студентки все как одна предпочитали блок-схемы (как и сама преподавательница!), а студенты в большинстве своем — псевдокод. Некоторым из студентов было пофигу — хоть так, хоть эдак. Но ни одной девочке пофигу не было — они явно предпочитали блок-схемы.
Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
Меня однажды вынудили делать блок-схемы. Ощущение человека, которого ни за что ни про что заставили делать бессмысленную работу. Если бы эти блок-схемы сами собой в код переводились или их компилятор брал и транслировал — это еще бы имело смысл, хотя я против и такого. А тут двойную работу изволь делать — рисовать эти прямоугольники и стрелки, а потом все равно писать код, потому что мыслить на языке блок-схем я не умею.
Здравствуйте, LaptevVV, Вы писали:
LVV>Интересное наблюдение обнаружилось среди студентов начальных курсов. LVV>Обсуждали мы тут с одной преподавательницей, как лучше объяснять алгоритмы. Я считал, что на псевдокоде, а она считала — с помощью блок-схем. LVV>Решили спросить студентов 2-3 курсов. Выяснился интересный феномен. Студентки все как одна предпочитали блок-схемы (как и сама преподавательница!), а студенты в большинстве своем — псевдокод. Некоторым из студентов было пофигу — хоть так, хоть эдак. Но ни одной девочке пофигу не было — они явно предпочитали блок-схемы. LVV>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
Я мужчина, но для меня гораздо проще запомнить лицо человека, чем текст, его описывающий. Гораздо проще запомнить дорогу домой, нежели выучить адреса промежуточных точек на маршруте. Т.е. все красивое, яркое, интересное — хорошо запоминается для меня. Шарики, стрелочки там всякие Высокоуровневый дизайн вообще только графически и удобно описывать на мой взгляд. Когда я читаю спецификации — я иногда просто выпадаю в осадок. Прочитал 5 страниц текста — ВООБЩЕ НИЧЕГО не понял А на 6-ой странице приведена картиночка, иллюстрирующая пример тест-кейса. И сразу все становится ясно. И можно нормально с пониманием перечитывать предыдущие 5 страниц ...
С другой стороны, когда алгоритм сложный и картинки его только запутывают. Например какие-то "циклы в циклах в циклах" описывать диаграммами на мой взгляд — полная ересь, это только запутает мне кажется. Смотришь на всю эту гору стрелочек и квадратиков и вообще ничего не понимаешь О_о. А когда смотришь на псевдокод с правильным выравниванием — то по отступам сразу видишь, что есть 3 каких-то вложенных блока, потом присматриваешься — видишь что это циклы, ну и т.п... Гораздо быстрее все становится понятно.
С третьей же стороны, например если алгоритм представляет собой некоторое дерево принятия решений, т.е. в псевдокоде будут просто одни вложенные кучи "if"-ов, и псевдокод становится просто трудночитаемым (начинает рябить в глазах от кучи условий), то я бы предпочел дерево решений именно в виде дерева. Притом не в виде блок схемы, а именно в виде связанных узлов, условия перехода по которым были бы записаны напротив ветвей (т.е. не делать елементы условия просто).
Ну в общем если обобщить сказанное, то мне удобнее, когда:
1) информация визуально более понятна для меня. А для меня она более понятна, когда она просто и красиво выглядит, чтобы были видны основные обобщающие блоки (как раз почему хорош код иногда, ибо по выравниванию и отступам зачастую сразу понятно структурное деление), чтобы не рябило в глазах, чтобы цветом или чем-то были выделены основные важные моменты, которые стоит запомнить, ибо они например появятся в дальнейшем в конце этого же алгоритма или еще где, ну и так далее.
2) информация лучше запоминается. т.е. она яркая, красивая, формирует в моей голове визуальный образ. А просто текст черными буквами на белом фоне я даже мысленно не могу сфотографировать, ни то, что запомнить ) Т.е. когда учу конспекты, то очень полезными опорными точками для фотографической памяти являются как раз картинки и прочее.
Поэтому мой выбор скорее за картинки, графы, диаграммы связей, потоки данных и т.п.... Но я делаю такой выбор просто в большинстве случаев. При этом есть меньшее количество ситуаций (но оно есть), где рисовать на мой взгляд неудобно. Поэтому я бы давал и то и то. Ибо мне вот полезны оба пункта (Ну точнее, похожие на них. Бесспорно мои рисунки, которые я для себя рисую имеют формат, понятный только лишь мне .
Здравствуйте, LaptevVV, Вы писали:
LVV>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
Исторически, я начинал с блок-схем алгоритмов. Потому что в книгах, объясняющих как правильно программировать калькулятор БЗ-34 ни слова не было о псевдокоде. Но потом, сталкиваясь с задачами все большей сложности, я постепенно забросил блок-схемы и перешел к псевдокоду. А в некоторых более сложных случаях и просто к русскому языку. Таким образом, получается такая ецепочка: русский язык => псевдокод => код. Примеры будут даны ниже. Русский язык описывают проблему и ее решение, при этом обладает всем необходимым богатством изложения. Псевдокод это первая попытка формализации и анализ полученой модели. В кодом и так все ясно. Блок схема алгоритм в этом заниамет среднее боковое положение между русским языком и псевдокодом. Почему? Выразительсность блок-схем уступает русскому языку. Блок-схема как и любой рисунок, тяжелее редактируется, занимает больший объем. При ее построении надо решать дополнительные зачачи вроде как грамотно скомпоновать все элементы. В настоящее время блок-схема мало соответствует будущему коду. Потому что (1) стрелки можно провести откуда угодно куда угодно, что нарушает структурный стиль (2) часто используемые конструкции Break, Continue, Exit превращаются в малопонятные стрелки, проследить которые требует дополнительных усилий (3) также важно выполнить на этапе псевдокода развиение на функции, важным атрибутом которых являются параметры. Блок-схема обычно не разделяет глобальные/локальные переменные, аргументы и т. п. (4) плохо подходит для событийно-ориентированой системы (5) исключения.
С моей точки зрения, блок схемы хорошо подходят для ассемблеров и дизассемблеров. Но дальше они становятся все более и более расходятся с кодом. В случае несложных задач это малозаметно. Но в случае более сложных задач это чувствуется. Кстати, интересно также проследить связь между опытом в программировании и способом мышления. Может это просто констатация того, что юноши больше увлекаются процессом программирования, а девушки не выходят за рамки программы?
Здравствуйте, LaptevVV, Вы писали:
LVV>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
И то и другое.
Можете дать своим студентам в качестве упражения
описать алгоритм быстрой сортировки псевдокодом и блок-схемой и потом сравнить.
С другой стороны, какой нибудь конечный гораздо нагляднее описать именно картинкой.
Здравствуйте, LaptevVV, Вы писали:
LVV>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
Для алгоритмов чаще псевдокод. Для data flows чаще картинки.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Если на картинке есть что показать, что тогда картинка.
Если картинка от "псевдокода" (примеры бы, о чём разговор вообще) мало чем отличается, то псевдокод.
"Есть что показать" -- это стрелочек существенно больше, чем квадратиков (сложный "поток управления")
Ну и квадратики в таких случаях должны быть достаточно высокоуровневые.
А реализацию квадратиков -- в псевдокоде И овцы сыты, и волки тоже.
Имхо, так.
Re: Псевдокод или блок-схемы?
От:
Аноним
Дата:
27.11.08 12:51
Оценка:
Здравствуйте, LaptevVV, Вы писали:
LVV>Некоторым из студентов было пофигу — хоть так, хоть эдак.
Здравствуйте, LaptevVV, Вы писали:
LVV>Интересное наблюдение обнаружилось среди студентов начальных курсов. LVV>Обсуждали мы тут с одной преподавательницей, как лучше объяснять алгоритмы. Я считал, что на псевдокоде, а она считала — с помощью блок-схем. LVV>Решили спросить студентов 2-3 курсов. Выяснился интересный феномен. Студентки все как одна предпочитали блок-схемы (как и сама преподавательница!), а студенты в большинстве своем — псевдокод. Некоторым из студентов было пофигу — хоть так, хоть эдак. Но ни одной девочке пофигу не было — они явно предпочитали блок-схемы. LVV>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
Стою перед тем же вопросом (преподаю информатику в 11 классе). Хочу попробовать в этой роли ("алгоритмо-объяснительной") Scratch: с одной стороны, наглядно вроде бы; с другой — можно запустить.
Здравствуйте, LaptevVV, Вы писали:
LVV>Интересное наблюдение обнаружилось среди студентов начальных курсов. LVV>Обсуждали мы тут с одной преподавательницей, как лучше объяснять алгоритмы. Я считал, что на псевдокоде, а она считала — с помощью блок-схем. LVV>Решили спросить студентов 2-3 курсов. Выяснился интересный феномен. Студентки все как одна предпочитали блок-схемы (как и сама преподавательница!), а студенты в большинстве своем — псевдокод. Некоторым из студентов было пофигу — хоть так, хоть эдак. Но ни одной девочке пофигу не было — они явно предпочитали блок-схемы. LVV>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
голосовалку надо с 6 выборами:
— я мальчик, выбираю ...
— ...
— ...
— я девочка, выбираю ...
— ...
— ...
Любопытно . Возьму на вооружение.
LVV>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
Ни то, ни другое. Нет, скорее и то, и другое . Т.е. картинки с кодом на целевом языке вперемешку. Это сейчас, как было когда я только учился помню смутно, но есть ощущение, что примерно так же.
Здравствуйте, LaptevVV, Вы писали:
LVV>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
Не использую ни того, ни друго подхода. Просто сажусь и пытаюсь сам проделать нужную вещь, и в процессе понимаю, что я делаю, пытаюсь это формализовать. Если всё сильно запущено и формализовать в голове не получается, беру в руки Haskell или Python и делаю прототип. Что-то писать на бумаге неудобно. Потому что если псевдокод слишком "асбтрактный", то это ничего не даёт. А т.к. всё равно приходится формализовать задачу точно, то лучше это сделать не на велосипедном языке (ибо нефиг) и не на бумаге (ибо на бумаге тяжело править).
Если блок-схемы просто дублируют псевдокод, то лучше псевдокод. От квадратиков и стрелочек толку нет, а места занимает больше. Для меня, например, фраза for (int i = 0; i < 10; i++) понятнее, чем последовательность квадратиков "i := 0" -> "если i < 10 стрелка дальше, иначе стрелка на выход" -> "i := i + 1".
Если блок-схемы объясняют не алгоритм, а моделируемую задачу (как UML), то опять лучше псевдокод. Студентам не нужны абстракции с ролями и зависимостями.
Re[2]: Псевдокод или блок-схемы?
От:
Аноним
Дата:
29.10.08 22:45
Оценка:
Здравствуйте, Аноним, Вы писали:
А>С другой стороны, какой нибудь конечный гораздо нагляднее описать именно картинкой.
Здравствуйте, konsoletyper, Вы писали:
K>Не использую ни того, ни друго подхода. Просто сажусь и пытаюсь сам проделать нужную вещь, и в процессе понимаю, что я делаю, пытаюсь это формализовать. Если всё сильно запущено и формализовать в голове не получается, беру в руки Haskell или Python и делаю прототип. Что-то писать на бумаге неудобно. Потому что если псевдокод слишком "асбтрактный", то это ничего не даёт. А т.к. всё равно приходится формализовать задачу точно, то лучше это сделать не на велосипедном языке (ибо нефиг) и не на бумаге (ибо на бумаге тяжело править).
Ну, первый или второй курс еще желторотики, поэтому ни питона, ни хаскела не знают. Кроме того, преподы тоже не знают.
Речь идет о начальных предпочтениях.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, abibok, Вы писали:
A>Если блок-схемы просто дублируют псевдокод, то лучше псевдокод. От квадратиков и стрелочек толку нет, а места занимает больше. Для меня, например, фраза for (int i = 0; i < 10; i++) понятнее, чем последовательность квадратиков "i := 0" -> "если i < 10 стрелка дальше, иначе стрелка на выход" -> "i := i + 1".
A>Если блок-схемы объясняют не алгоритм, а моделируемую задачу (как UML), то опять лучше псевдокод. Студентам не нужны абстракции с ролями и зависимостями.
Мужская точка зрения.
У наших женщин-преподавательниц — другое мнение.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, denaturat, Вы писали:
D>Быстро на двоих сооружаете статью, пока никто не опередил.
Спасибо за идею!
Подумаем. В статье главное выводы сделать из наблюдения. Тут надо грамотно сформулировать.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Pavel Dvorkin, Вы писали:
LVV>>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
PD>Меня однажды вынудили делать блок-схемы. Ощущение человека, которого ни за что ни про что заставили делать бессмысленную работу. Если бы эти блок-схемы сами собой в код переводились или их компилятор брал и транслировал — это еще бы имело смысл, хотя я против и такого. А тут двойную работу изволь делать — рисовать эти прямоугольники и стрелки, а потом все равно писать код, потому что мыслить на языке блок-схем я не умею.
Я использовал блок-схемы только при подготовке диплома (как давно это было )
Если говорить о сегодняшнем дне, то можно использовать некоторые диаграммы UML^ диаграммы состояний, диаграммы действий. Блок-схемы действительно устарели.
Кстати, в сети есть редакторы блок-схем, заточенные под турбо-паскаль...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали: LVV>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
Я хоть и не программистка, а программист, но предпочитаю изображать при проектировании алгоритмы в виде блок-схем( так наглядней). Если задача достаточно хорошо понятно, и проектирование осуществляется в уме, то могу писать программу без промежуточных звеньев в виде псевдокода или блок-схем.
Алгоритмы описываю словами на русском/англ (в комментах) и затем сразу пишу код. Все в редакторе. Описание потом остается как описание ф-ции/класса и т.д.
Взаимодействие между классами/модулями удобнее на бумажке в виде схемки.
Но все это только в сложных случаях. Обычно просто код с мин. комметариев. Если алгоритм известный, просто название.
Здравствуйте, LaptevVV, Вы писали:
LVV>Интересное наблюдение обнаружилось среди студентов начальных курсов. LVV>Обсуждали мы тут с одной преподавательницей, как лучше объяснять алгоритмы. Я считал, что на псевдокоде, а она считала — с помощью блок-схем. LVV>Решили спросить студентов 2-3 курсов. Выяснился интересный феномен. Студентки все как одна предпочитали блок-схемы (как и сама преподавательница!), а студенты в большинстве своем — псевдокод. Некоторым из студентов было пофигу — хоть так, хоть эдак. Но ни одной девочке пофигу не было — они явно предпочитали блок-схемы. LVV>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
После прочтения "Алгоритмы. Построение и анализ" я за такой псевдокод, как там.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Меня однажды вынудили делать блок-схемы. Ощущение человека, которого ни за что ни про что заставили делать бессмысленную работу. Если бы эти блок-схемы сами собой в код переводились или их компилятор брал и транслировал — это еще бы имело смысл, хотя я против и такого.
Dia может генерить cpp-шный код.. ну, не сама dia, а тулза к ней..
Лично я для себя никогда псевдокод не пишу. Если алгоритм сложный — обычно от руки рисую диаграмму или диаграммы, иллюстрирующие основную идею алгоритма или какие-то детали, в которых можно запутаться — либо потоки данных, либо связи между объектами/агентами/и т.п. Потом — по ходу дела сверяюсь со своими зарисовками — чтобы ничего не упустить.
Здравствуйте, LaptevVV, Вы писали:
LVV>Интересное наблюдение обнаружилось среди студентов начальных курсов. LVV>Обсуждали мы тут с одной преподавательницей, как лучше объяснять алгоритмы. Я считал, что на псевдокоде, а она считала — с помощью блок-схем. LVV>Решили спросить студентов 2-3 курсов. Выяснился интересный феномен. Студентки все как одна предпочитали блок-схемы (как и сама преподавательница!), а студенты в большинстве своем — псевдокод. Некоторым из студентов было пофигу — хоть так, хоть эдак. Но ни одной девочке пофигу не было — они явно предпочитали блок-схемы. LVV>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
Здравствуйте, _Jane_, Вы писали:
_J_>Здравствуйте, LaptevVV, Вы писали:
LVV>>Интересное наблюдение обнаружилось среди студентов начальных курсов. LVV>>Обсуждали мы тут с одной преподавательницей, как лучше объяснять алгоритмы. Я считал, что на псевдокоде, а она считала — с помощью блок-схем. LVV>>Решили спросить студентов 2-3 курсов. Выяснился интересный феномен. Студентки все как одна предпочитали блок-схемы (как и сама преподавательница!), а студенты в большинстве своем — псевдокод. Некоторым из студентов было пофигу — хоть так, хоть эдак. Но ни одной девочке пофигу не было — они явно предпочитали блок-схемы. LVV>>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
_J_>Картинки рисую. так нагляднее выходит.
Вот!
Видимо, действительно, значительная разница в восприятии у мужчин и женщин. А учим-то всех одинаково — непорядок...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>>>Интересное наблюдение обнаружилось среди студентов начальных курсов. LVV>>>Обсуждали мы тут с одной преподавательницей, как лучше объяснять алгоритмы. Я считал, что на псевдокоде, а она считала — с помощью блок-схем. LVV>>>Решили спросить студентов 2-3 курсов. Выяснился интересный феномен. Студентки все как одна предпочитали блок-схемы (как и сама преподавательница!), а студенты в большинстве своем — псевдокод. Некоторым из студентов было пофигу — хоть так, хоть эдак. Но ни одной девочке пофигу не было — они явно предпочитали блок-схемы. LVV>>>Вопрос всем и особенно программисткам: а вы каким образом проектируете алгоритмы? картинки рисуете или слова пишете?
_J_>>Картинки рисую. так нагляднее выходит. LVV>Вот! LVV>Видимо, действительно, значительная разница в восприятии у мужчин и женщин. А учим-то всех одинаково — непорядок...
У меня другая мысль, возможно, случайно ваши все студентки — визуалы. здесь
Здравствуйте, _Jane_, Вы писали:
_J_>>>Картинки рисую. так нагляднее выходит. LVV>>Вот! LVV>>Видимо, действительно, значительная разница в восприятии у мужчин и женщин. А учим-то всех одинаково — непорядок...
_J_>У меня другая мысль, возможно, случайно ваши все студентки — визуалы. _J_>здесь
Я сам визуал! Но алгоритмы мне писать удобнее на псевдокоде.
Все же думаю, что разница именно в способе восприятия информации.
При общении с преподавательницей выяснилось, что ей (как женщине) более понятно, если стрелка показывает, куда идти, а вот написанные слова "иди туда" она воспринимает значительно менее естественно Приходится включать мозги
Примерно так же отвечали и студентки.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!