Re[16]: Как обучать технике программирования?
От: Аноним  
Дата: 28.04.10 13:04
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Как обучать людей посмотри на МИТ и Стенфорд. Они отказались от функциональщины для обучения. Одни перешли на Питон, другие — на Си.


Насчёт Си не скажу, а вот питон, как высокоуровневый язык, как раз-таки позволяет рассмотреть разные подходы и парадигмы. Так что говорить "отказались от ФП" неправильно.
Re[4]: Как обучать технике программирования?
От: LaptevVV Россия  
Дата: 28.04.10 13:33
Оценка:
Здравствуйте, 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 для поиска это антитехника.
Это утверждение слишком категорично...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[24]: Как обучать технике программирования?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 28.04.10 14:54
Оценка:
Здравствуйте, Аноним, Вы писали:

I>>>>т.е. буквально везде, где есть хоть какие то ограничения связаные с ресурсами.

А>>>Этот момент вторичен в контексте поставленного вопроса.
I>>Программирование вне индустрии вобщем то не существует. А то бы я с тобой согласился.

А>Хе-хе. Значит в контексте поставленного вопроса возражений нет?


Если взять и выбросить 90% индустрии, то да, ты прав.

А>А по поводу индустрии скажу так: я нигде не утверждал, что следует применять только ФП. Я ЗА использование разных подходов для увеличения эффективности. Только ты зачем-то прицепился отдельно к ФП и затеял холивар на пустом месте.


Я не цеплялся к ФП. Я говорю, что парадигму и языке неверно рассматривать в отрыве от индустрии.

А>>>А прокачивается оно математикой, а не императивным программированием.

I>>И математикой, и программированием.

А>И что же такого серьезного в программировании есть, от чего можно сильно прокачать абстрактное мышление?


Давай на примере — я покажу тебе два кусочка кода, а ты мне скажешь, у кого из авторов более сильный матбекграунд ? Идёт ?
Re[17]: Как обучать технике программирования?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 28.04.10 15:02
Оценка:
Здравствуйте, Аноним, Вы писали:

I>>Как обучать людей посмотри на МИТ и Стенфорд. Они отказались от функциональщины для обучения. Одни перешли на Питон, другие — на Си.


А>Насчёт Си не скажу, а вот питон, как высокоуровневый язык, как раз-таки позволяет рассмотреть разные подходы и парадигмы. Так что говорить "отказались от ФП" неправильно.


Отказались от обучения на основе ФП. Само ФП в программе есть, только его изучают чуть позже.
Re[25]: Как обучать технике программирования?
От: Аноним  
Дата: 28.04.10 15:41
Оценка:
Здравствуйте, Ikemefula, Вы писали:

А>>А по поводу индустрии скажу так: я нигде не утверждал, что следует применять только ФП. Я ЗА использование разных подходов для увеличения эффективности. Только ты зачем-то прицепился отдельно к ФП и затеял холивар на пустом месте.

I>Я не цеплялся к ФП. Я говорю, что парадигму и языке неверно рассматривать в отрыве от индустрии.

А я где-то утверждал обратное?

А>>И что же такого серьезного в программировании есть, от чего можно сильно прокачать абстрактное мышление?

I>Давай на примере — я покажу тебе два кусочка кода, а ты мне скажешь, у кого из авторов более сильный матбекграунд ? Идёт ?

Нет, ты лучше покажи примеры абстракций в программировании, которые не поймёт средний математик. А то ты в сторону уходишь куда-то.
Re[26]: Как обучать технике программирования?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 28.04.10 15:54
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>>>А по поводу индустрии скажу так: я нигде не утверждал, что следует применять только ФП. Я ЗА использование разных подходов для увеличения эффективности. Только ты зачем-то прицепился отдельно к ФП и затеял холивар на пустом месте.

I>>Я не цеплялся к ФП. Я говорю, что парадигму и языке неверно рассматривать в отрыве от индустрии.

А>А я где-то утверждал обратное?


Может не ты а другой аноним

А>>>И что же такого серьезного в программировании есть, от чего можно сильно прокачать абстрактное мышление?

I>>Давай на примере — я покажу тебе два кусочка кода, а ты мне скажешь, у кого из авторов более сильный матбекграунд ? Идёт ?

А>Нет, ты лучше покажи примеры абстракций в программировании, которые не поймёт средний математик. А то ты в сторону уходишь куда-то.


Ты сам куда то уходишь.

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

Могу показать на отличном примере и объяснить на нём же
Re[27]: Как обучать технике программирования?
От: Аноним  
Дата: 28.04.10 15:57
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I> Может не ты а другой аноним


Надо будет как-нибудь зарегаться что ли

А>>Нет, ты лучше покажи примеры абстракций в программировании, которые не поймёт средний математик. А то ты в сторону уходишь куда-то.

I>Ты сам куда то уходишь.
I>Код многих математиков настолько императивный, что хочется буквально смеяться.
I>Могу показать на отличном примере и объяснить на нём же

Ну покажи-расскажи
Только речь про код изначально не идёт ведь. Умение красиво кодировать можно относительно быстро натренировать при наличии соответствующего матбэкграунда. Проверено.
Re[15]: Как обучать технике программирования?
От: LaptevVV Россия  
Дата: 29.04.10 03:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Мы же не говорим про 90%. Вопрос стоит в том, как обучать людей. А обучать их надо так, чтобы задействовать возможности оставшихся 10% по максимуму. Ибо если ориентироваться на 90% (то есть в том случае, когда синтаксис ставится важнее семантики, когда отчёт о решении важнее самого решения и т.д.), то толку не будет ни от тех, ни от других.

Вы, наверное, не обратили внимание, что речь как раз идет о семантике. Цикл для перебора — это одна семантика, цикли для поиска — совсем другая семантика. При чем здесь синтаксис?
Это очень хорошо, что семантика задачи (поиск или перебор) явным образом отражается в синтаксисе. Проще запомнить паттерн.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Как обучать технике программирования?
От: Undying Россия  
Дата: 29.04.10 03:56
Оценка:
Здравствуйте, LaptevVV, Вы писали:

U>>С каких это пор while стал удобным способом поиска?

LVV>Со времен Кнута и Вирта. Читайте классиков.

Ссылки на авторитетов, без приведения аргументов не стоят ничего.

U>>
U>>string[] items;
U>>foreach (string item in items)
U>>{  if (item == condition)
U>>    return item;
U>>}
U>>

LVV>Это не структурные конструкции — выход из середины цикла...

Вы альтернативный код с while приведите. Чтобы было что сравнивать как по понятности, так и по лаконичности.
Re[6]: Как обучать технике программирования?
От: LaptevVV Россия  
Дата: 29.04.10 04:11
Оценка: -1 :)
Здравствуйте, 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 или Вирта "Алгоритмы и структуры данных",
и посмотрите линейный поиск с барьером.
Если вы до сих пор этого еще не сделали, то сделайте это сейчас.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: Как обучать технике программирования?
От: Undying Россия  
Дата: 29.04.10 04:58
Оценка:
Здравствуйте, 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
Вы, кстати, с учеников что требуете, цитирования Кнута или собственного понимания?
Re[5]: Как обучать технике программирования?
От: Undying Россия  
Дата: 29.04.10 05:18
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Это не структурные конструкции — выход из середины цикла...


Кстати, понятно, откуда брались такие ограничения у классиков. При обилии в тогдашних языках ресурсов требующих явного освобождения и отсутствии finally действительно требовалось чтобы точка выхода у блока кода была всего одна. Однако в современных языках (том же шарпе) ресурсов требующих явного освобождения очень немного, а для случаев когда явное освобождение все же требуется есть using/finally. Соответственно появилась возможность прерывать алгоритм именно в том месте, где это требуется по условию задачи, что резко увеличило читабельность кода. Очень плохо, что Вы этого не понимаете и до сих пор догматически учите студентов подходам, которые были меньшим злом раньше, но устарели для современных языков.
Re[7]: Как обучать технике программирования?
От: Undying Россия  
Дата: 29.04.10 05:19
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Пересказывать классиков — неблагодарная задача — лучше, чем у них, у меня вряд ли получится...


Кстати, когда к Вам студент подходит и просит объяснить то, что ему непонятно, Вы его также почитать Кнута отправляете?
Re[16]: Как обучать технике программирования?
От: Аноним  
Дата: 29.04.10 05:41
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, Аноним, Вы писали:


А>>Мы же не говорим про 90%. Вопрос стоит в том, как обучать людей. А обучать их надо так, чтобы задействовать возможности оставшихся 10% по максимуму. Ибо если ориентироваться на 90% (то есть в том случае, когда синтаксис ставится важнее семантики, когда отчёт о решении важнее самого решения и т.д.), то толку не будет ни от тех, ни от других.

LVV>Вы, наверное, не обратили внимание, что речь как раз идет о семантике.

Не только. Выше ведь были какие-то примеры с запретом на большую вложенность циклов и т.д. К семантике подобные запреты не имеют отношения.

LVV>Цикл для перебора — это одна семантика, цикли для поиска — совсем другая семантика.


Это правильно. Вот только от вас так и не последовало внятного объяснения, почему видов циклов у вас два.

LVV>Это очень хорошо, что семантика задачи (поиск или перебор) явным образом отражается в синтаксисе.


Да как же она отражается, когда не отражается? Маловато ваших двух операторов для передачи семантического смысла задачи.


PS. Кстати, что там с кванторами-то? Во что выльется высказывание "для любого Х существует Y, такой, что выполняется Z"?
А если я захочу над кванторами проделать операцию отрицания? В математической записи мне достаточно будет поставить знак отрицания над выражением. А как это будет отражено в вонючих тупых циклах for и while? И сейчас будете утверждать, что эти циклы связаны с кванторами и отражают семантически перебор и поиск?
Re[5]: Как обучать технике программирования?
От: IT Россия linq2db.com
Дата: 29.04.10 08:38
Оценка:
Здравствуйте, alpha21264, Вы писали:

IT>>Это потому что в боевых искусствах количество приёмов можно пересчитать на пальцах. Приёмы в программировании исчисляются совсем другими порядками.


A>Кха... Цикл, условие и подпрограмма.

A>Этого хватит на любую (кроме совсем уж экзотики) программу.

Ага. В одном только switch/case можно десяток приёмов насчитать. А по поводу выхода из двух циклов сразу у нас тут помнится на пол года баталия была.
Если нам не помогут, то мы тоже никого не пощадим.
Re[9]: Как обучать технике программирования?
От: IT Россия linq2db.com
Дата: 29.04.10 08:43
Оценка:
Здравствуйте, LaptevVV, Вы писали:

IT>>Зачем учиться писать циклы — не понятно Какая цель? Циклы ради циклов?

LVV>Затем же, зачем учатся наносить удар — чтобы применять.

Цикл без остальной части программы не имеет самостоятельного смысла, в отличии от удара. Поэтому я и спрашиваю, какой ответ будет давать преподаватель на вопрос студентов "зачем это надо?".
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: Как обучать технике программирования?
От: IT Россия linq2db.com
Дата: 29.04.10 08:49
Оценка: +1
Здравствуйте, LaptevVV, Вы писали:

LVV>

LVV>Например:
LVV>- запрет иметь больше одного цикла в процедуре — речь о независимых циклах; вложенные... часто тоже надо в процедуру, а при обучении — всегда; но в ряде случаев, конечно, они необходимы по эффективности;
LVV>- запрет организовывать циклы на уровне вложенности глубже, чем 1 (т.е. IF WHILE ... END ELSE .. END — можно, а вот в более глубокие IF-ы фигачить уже нельзя; разрешение на 1-м уровне — из опыта, опять же, что часто какая-то охрана перед циклом бывает нужна; а вот если глубже — то уже явно надо делить логику);

LVV>Мне кажется — это очень хорошие правила при постановке техники программирования.

Это абсолютно бессмысленные правила. Вот попробуй обосновать почему нельзя иметь более одного цикла в процедуре? Только используя логику, а не предпочтения типа общих фраз на подобии "это плохая практика" или "мне так кажется".
Если нам не помогут, то мы тоже никого не пощадим.
Re[17]: Как обучать технике программирования?
От: Dufrenite Дания  
Дата: 29.04.10 09:05
Оценка: 1 (1) +1
Здравствуйте, Аноним, Вы писали:

А> А как это будет отражено в вонючих тупых циклах for и while?


Вот это жесть
Re[8]: Как обучать технике программирования?
От: LaptevVV Россия  
Дата: 29.04.10 09:52
Оценка:
Здравствуйте, Undying, Вы писали:

U>Здравствуйте, LaptevVV, Вы писали:


LVV>>Пересказывать классиков — неблагодарная задача — лучше, чем у них, у меня вряд ли получится...


U>Кстати, когда к Вам студент подходит и просит объяснить то, что ему непонятно, Вы его также почитать Кнута отправляете?

1. Вы — не студент, а позиционируете себя профи.
2. Смотря какой студент и какой вопрос. Если я восемь раз рассказывал и 10 раз показывал, все уже все поняли, и я сам уже все понял И вдруг вылезает чудо, которое на лекции не ходило, лабы не делало, и заявляет, что ничего не понимает — таких однозначно посылаю. Если чел хоть чуть чуть приложился к теме, то и вопросы у него конкретные и точные — таким и нужно объяснять...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[17]: Как обучать технике программирования?
От: LaptevVV Россия  
Дата: 29.04.10 10:00
Оценка:
Здравствуйте, Аноним, Вы писали:

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? И сейчас будете утверждать, что эти циклы связаны с кванторами и отражают семантически перебор и поиск?
Посмотрите выше и увидите...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.