Здравствуйте, Ikemefula, Вы писали:
I>Как обучать людей посмотри на МИТ и Стенфорд. Они отказались от функциональщины для обучения. Одни перешли на Питон, другие — на Си.
Насчёт Си не скажу, а вот питон, как высокоуровневый язык, как раз-таки позволяет рассмотреть разные подходы и парадигмы. Так что говорить "отказались от ФП" неправильно.
Здравствуйте, Undying, Вы писали:
U>С каких это пор while стал удобным способом поиска?
Со времен Кнута и Вирта. Читайте классиков. U>Всю жизнь поиск производил так:
Нет. U>
U>string[] items;
U>foreach (string item in items)
U>{ if (item == condition)
U> return item;
U>}
U>
U>Если foreach в языке нет, тогда через for, что похуже, конечно, но понятно как делать: U>
U>for (int i = 0; i < items.Length; ++i)
U>{ if (items[i] == condition)
U> return items[i];
U>}
U>
Это не структурные конструкции — выход из середины цикла... U>А while для поиска как можно использовать?
Еще раз: классику почитайте. U>ps U>Я согласен с тем, что технику программирования нужно ставить, но использование while для поиска это антитехника.
Это утверждение слишком категорично...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Аноним, Вы писали:
I>>>>т.е. буквально везде, где есть хоть какие то ограничения связаные с ресурсами. А>>>Этот момент вторичен в контексте поставленного вопроса. I>>Программирование вне индустрии вобщем то не существует. А то бы я с тобой согласился.
А>Хе-хе. Значит в контексте поставленного вопроса возражений нет?
Если взять и выбросить 90% индустрии, то да, ты прав.
А>А по поводу индустрии скажу так: я нигде не утверждал, что следует применять только ФП. Я ЗА использование разных подходов для увеличения эффективности. Только ты зачем-то прицепился отдельно к ФП и затеял холивар на пустом месте.
Я не цеплялся к ФП. Я говорю, что парадигму и языке неверно рассматривать в отрыве от индустрии.
А>>>А прокачивается оно математикой, а не императивным программированием. I>>И математикой, и программированием.
А>И что же такого серьезного в программировании есть, от чего можно сильно прокачать абстрактное мышление?
Давай на примере — я покажу тебе два кусочка кода, а ты мне скажешь, у кого из авторов более сильный матбекграунд ? Идёт ?
Здравствуйте, Аноним, Вы писали:
I>>Как обучать людей посмотри на МИТ и Стенфорд. Они отказались от функциональщины для обучения. Одни перешли на Питон, другие — на Си.
А>Насчёт Си не скажу, а вот питон, как высокоуровневый язык, как раз-таки позволяет рассмотреть разные подходы и парадигмы. Так что говорить "отказались от ФП" неправильно.
Отказались от обучения на основе ФП. Само ФП в программе есть, только его изучают чуть позже.
Re[25]: Как обучать технике программирования?
От:
Аноним
Дата:
28.04.10 15:41
Оценка:
Здравствуйте, Ikemefula, Вы писали:
А>>А по поводу индустрии скажу так: я нигде не утверждал, что следует применять только ФП. Я ЗА использование разных подходов для увеличения эффективности. Только ты зачем-то прицепился отдельно к ФП и затеял холивар на пустом месте. I>Я не цеплялся к ФП. Я говорю, что парадигму и языке неверно рассматривать в отрыве от индустрии.
А я где-то утверждал обратное?
А>>И что же такого серьезного в программировании есть, от чего можно сильно прокачать абстрактное мышление? I>Давай на примере — я покажу тебе два кусочка кода, а ты мне скажешь, у кого из авторов более сильный матбекграунд ? Идёт ?
Нет, ты лучше покажи примеры абстракций в программировании, которые не поймёт средний математик. А то ты в сторону уходишь куда-то.
Здравствуйте, Аноним, Вы писали:
А>>>А по поводу индустрии скажу так: я нигде не утверждал, что следует применять только ФП. Я ЗА использование разных подходов для увеличения эффективности. Только ты зачем-то прицепился отдельно к ФП и затеял холивар на пустом месте. I>>Я не цеплялся к ФП. Я говорю, что парадигму и языке неверно рассматривать в отрыве от индустрии.
А>А я где-то утверждал обратное?
Может не ты а другой аноним
А>>>И что же такого серьезного в программировании есть, от чего можно сильно прокачать абстрактное мышление? I>>Давай на примере — я покажу тебе два кусочка кода, а ты мне скажешь, у кого из авторов более сильный матбекграунд ? Идёт ?
А>Нет, ты лучше покажи примеры абстракций в программировании, которые не поймёт средний математик. А то ты в сторону уходишь куда-то.
Ты сам куда то уходишь.
Код многих математиков настолько императивный, что хочется буквально смеяться.
Могу показать на отличном примере и объяснить на нём же
Re[27]: Как обучать технике программирования?
От:
Аноним
Дата:
28.04.10 15:57
Оценка:
Здравствуйте, Ikemefula, Вы писали:
I> Может не ты а другой аноним
Надо будет как-нибудь зарегаться что ли
А>>Нет, ты лучше покажи примеры абстракций в программировании, которые не поймёт средний математик. А то ты в сторону уходишь куда-то. I>Ты сам куда то уходишь. I>Код многих математиков настолько императивный, что хочется буквально смеяться. I>Могу показать на отличном примере и объяснить на нём же
Ну покажи-расскажи
Только речь про код изначально не идёт ведь. Умение красиво кодировать можно относительно быстро натренировать при наличии соответствующего матбэкграунда. Проверено.
Здравствуйте, Аноним, Вы писали:
А>Мы же не говорим про 90%. Вопрос стоит в том, как обучать людей. А обучать их надо так, чтобы задействовать возможности оставшихся 10% по максимуму. Ибо если ориентироваться на 90% (то есть в том случае, когда синтаксис ставится важнее семантики, когда отчёт о решении важнее самого решения и т.д.), то толку не будет ни от тех, ни от других.
Вы, наверное, не обратили внимание, что речь как раз идет о семантике. Цикл для перебора — это одна семантика, цикли для поиска — совсем другая семантика. При чем здесь синтаксис?
Это очень хорошо, что семантика задачи (поиск или перебор) явным образом отражается в синтаксисе. Проще запомнить паттерн.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Undying, Вы писали:
U>>>С каких это пор while стал удобным способом поиска? LVV>>Со времен Кнута и Вирта. Читайте классиков. U>Ссылки на авторитетов, без приведения аргументов не стоят ничего. U>>>
U>>>string[] items;
U>>>foreach (string item in items)
U>>>{ if (item == condition)
U>>> return item;
U>>>}
U>>>
LVV>>Это не структурные конструкции — выход из середины цикла... U>Вы альтернативный код с while приведите. Чтобы было что сравнивать как по понятности, так и по лаконичности.
Блин!
Пересказывать классиков — неблагодарная задача — лучше, чем у них, у меня вряд ли получится...
Откройте Кнута — том 3 или Вирта "Алгоритмы и структуры данных",
и посмотрите линейный поиск с барьером.
Если вы до сих пор этого еще не сделали, то сделайте это сейчас.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
U>>Ссылки на авторитетов, без приведения аргументов не стоят ничего. U>>>>
U>>>>string[] items;
U>>>>foreach (string item in items)
U>>>>{ if (item == condition)
U>>>> return item;
U>>>>}
U>>>>
LVV>>>Это не структурные конструкции — выход из середины цикла... U>>Вы альтернативный код с while приведите. Чтобы было что сравнивать как по понятности, так и по лаконичности.
LVV>Откройте Кнута — том 3 или Вирта "Алгоритмы и структуры данных", LVV>и посмотрите линейный поиск с барьером. LVV>Если вы до сих пор этого еще не сделали, то сделайте это сейчас.
Т.е. поиск с помощью while настолько сложен, что Вы его даже написать в посте не в состоянии? На написание поиска с помощью foreach у меня ушло секунд 15.
LVV>Пересказывать классиков — неблагодарная задача — лучше, чем у них, у меня вряд ли получится...
Я от Вас и не требую лучше, чем у них, мне интересно Ваше объяснение, чем код с while (который Вы до сих пор не привели) для поиска, лучше кода с foreach.
ps
Вы, кстати, с учеников что требуете, цитирования Кнута или собственного понимания?
Здравствуйте, LaptevVV, Вы писали:
LVV>Это не структурные конструкции — выход из середины цикла...
Кстати, понятно, откуда брались такие ограничения у классиков. При обилии в тогдашних языках ресурсов требующих явного освобождения и отсутствии finally действительно требовалось чтобы точка выхода у блока кода была всего одна. Однако в современных языках (том же шарпе) ресурсов требующих явного освобождения очень немного, а для случаев когда явное освобождение все же требуется есть using/finally. Соответственно появилась возможность прерывать алгоритм именно в том месте, где это требуется по условию задачи, что резко увеличило читабельность кода. Очень плохо, что Вы этого не понимаете и до сих пор догматически учите студентов подходам, которые были меньшим злом раньше, но устарели для современных языков.
Здравствуйте, LaptevVV, Вы писали:
LVV>Пересказывать классиков — неблагодарная задача — лучше, чем у них, у меня вряд ли получится...
Кстати, когда к Вам студент подходит и просит объяснить то, что ему непонятно, Вы его также почитать Кнута отправляете?
Re[16]: Как обучать технике программирования?
От:
Аноним
Дата:
29.04.10 05:41
Оценка:
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, Аноним, Вы писали:
А>>Мы же не говорим про 90%. Вопрос стоит в том, как обучать людей. А обучать их надо так, чтобы задействовать возможности оставшихся 10% по максимуму. Ибо если ориентироваться на 90% (то есть в том случае, когда синтаксис ставится важнее семантики, когда отчёт о решении важнее самого решения и т.д.), то толку не будет ни от тех, ни от других. LVV>Вы, наверное, не обратили внимание, что речь как раз идет о семантике.
Не только. Выше ведь были какие-то примеры с запретом на большую вложенность циклов и т.д. К семантике подобные запреты не имеют отношения.
LVV>Цикл для перебора — это одна семантика, цикли для поиска — совсем другая семантика.
Это правильно. Вот только от вас так и не последовало внятного объяснения, почему видов циклов у вас два.
LVV>Это очень хорошо, что семантика задачи (поиск или перебор) явным образом отражается в синтаксисе.
Да как же она отражается, когда не отражается? Маловато ваших двух операторов для передачи семантического смысла задачи.
PS. Кстати, что там с кванторами-то? Во что выльется высказывание "для любого Х существует Y, такой, что выполняется Z"?
А если я захочу над кванторами проделать операцию отрицания? В математической записи мне достаточно будет поставить знак отрицания над выражением. А как это будет отражено в вонючих тупых циклах for и while? И сейчас будете утверждать, что эти циклы связаны с кванторами и отражают семантически перебор и поиск?
Здравствуйте, alpha21264, Вы писали:
IT>>Это потому что в боевых искусствах количество приёмов можно пересчитать на пальцах. Приёмы в программировании исчисляются совсем другими порядками.
A>Кха... Цикл, условие и подпрограмма. A>Этого хватит на любую (кроме совсем уж экзотики) программу.
Ага. В одном только switch/case можно десяток приёмов насчитать. А по поводу выхода из двух циклов сразу у нас тут помнится на пол года баталия была.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, LaptevVV, Вы писали:
IT>>Зачем учиться писать циклы — не понятно Какая цель? Циклы ради циклов? LVV>Затем же, зачем учатся наносить удар — чтобы применять.
Цикл без остальной части программы не имеет самостоятельного смысла, в отличии от удара. Поэтому я и спрашиваю, какой ответ будет давать преподаватель на вопрос студентов "зачем это надо?".
Если нам не помогут, то мы тоже никого не пощадим.
LVV>Например:
LVV>- запрет иметь больше одного цикла в процедуре — речь о независимых циклах; вложенные... часто тоже надо в процедуру, а при обучении — всегда; но в ряде случаев, конечно, они необходимы по эффективности;
LVV>- запрет организовывать циклы на уровне вложенности глубже, чем 1 (т.е. IF WHILE ... END ELSE .. END — можно, а вот в более глубокие IF-ы фигачить уже нельзя; разрешение на 1-м уровне — из опыта, опять же, что часто какая-то охрана перед циклом бывает нужна; а вот если глубже — то уже явно надо делить логику);
LVV>Мне кажется — это очень хорошие правила при постановке техники программирования.
Это абсолютно бессмысленные правила. Вот попробуй обосновать почему нельзя иметь более одного цикла в процедуре? Только используя логику, а не предпочтения типа общих фраз на подобии "это плохая практика" или "мне так кажется".
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, LaptevVV, Вы писали:
LVV>>Пересказывать классиков — неблагодарная задача — лучше, чем у них, у меня вряд ли получится...
U>Кстати, когда к Вам студент подходит и просит объяснить то, что ему непонятно, Вы его также почитать Кнута отправляете?
1. Вы — не студент, а позиционируете себя профи.
2. Смотря какой студент и какой вопрос. Если я восемь раз рассказывал и 10 раз показывал, все уже все поняли, и я сам уже все понял И вдруг вылезает чудо, которое на лекции не ходило, лабы не делало, и заявляет, что ничего не понимает — таких однозначно посылаю. Если чел хоть чуть чуть приложился к теме, то и вопросы у него конкретные и точные — таким и нужно объяснять...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Аноним, Вы писали:
LVV>>Вы, наверное, не обратили внимание, что речь как раз идет о семантике. А>Не только. Выше ведь были какие-то примеры с запретом на большую вложенность циклов и т.д. К семантике подобные запреты не имеют отношения.
Имеют. Если в проце много вложенных циклов и проца — сложная, значит надо подумать, порефакторить и упростит. "Выделение метода" у Мартина Фаулера называется. Практически первый прием рефакторинга. LVV>>Цикл для перебора — это одна семантика, цикли для поиска — совсем другая семантика. А>Это правильно. Вот только от вас так и не последовало внятного объяснения, почему видов циклов у вас два.
Предложите больше. Если найдете... LVV>>Это очень хорошо, что семантика задачи (поиск или перебор) явным образом отражается в синтаксисе. А>Да как же она отражается, когда не отражается? Маловато ваших двух операторов для передачи семантического смысла задачи.
Две задачи — два цикла
1. Задача перебора — цикл for$
2. Задача поиска — цикл while
А>PS. Кстати, что там с кванторами-то? Во что выльется высказывание "для любого Х существует Y, такой, что выполняется Z"?
Для любого — это перебор... :
Псевдокод:
for x in set do
if predicate(y)=true do somthing(z);
Перебираем ВСЕ элементы х. В цикле выполняем действия только для тех х, для которых существует y (то есть предикат принимает значение истина) выполняем действие Z.
Что неясно? А>А если я захочу над кванторами проделать операцию отрицания? В математической записи мне достаточно будет поставить знак отрицания над выражением. А как это будет отражено в вонючих тупых циклах for и while? И сейчас будете утверждать, что эти циклы связаны с кванторами и отражают семантически перебор и поиск?
Посмотрите выше и увидите...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!