Здравствуйте, Mr.Cat, Вы писали:
MC>В третьих, цитата иллюстрирует то, как отважно императивные программисты борются с проблемами, которые сами же себе создают. Если бы в языке не было уродского деления на выражения и стейтменты (а все было бы выражениями — как в ФЯ) — обозначенной проблемы не стояло бы.
А если бы люди рождались сразу математиками, то программировали бы на языке покруче хаскеля на три порядка.
Пример Лиспа и прочих функциональных показал, что люди делают выбор не в пользу ФП. Отсюда и деление навыражений и стейтменты, и никак не наоборот
Здравствуйте, IT, Вы писали:
LVV>>А это — обучение методом проб и ошибок! В боевых искусствах — совсем не так. Там проб и ошибок нет, там сразу ставят прием правильно!
IT>Это потому что в боевых искусствах количество приёмов можно пересчитать на пальцах. Приёмы в программировании исчисляются совсем другими порядками.
Зато и осваиваются много быстрее. Простые приемы в БИ осваиваются годами.
Здравствуйте, IT, Вы писали:
IT>Думаю, не существуют. В правописании и боевых искусствах понятна конечная цель упраждений. В боевых искусствах ученики повторяют за мастером чтобы поставить удар и научиться его применять. Палочки нужны, чтобы научиться из них составлять буквы и в конечном счёте писать.
IT>Зачем учиться писать циклы — не понятно Какая цель? Циклы ради циклов?
Писать не циклы, а решать задчи которые закрепляют понимание того, что такое итерация.
После этого можно переходить к более высоким материям, как например последовательности, фильтры, преобразования.
Здравствуйте, Mr.Cat, Вы писали:
LVV>>1. Принцип KISS — вы согласны? MC>Нет. То, что ты предлагаешь — это требования к структуре программы, не учитывающие ее семантику. Эти требования всегда будут усложнять программу за счет появления в ней лишних сущностей, которые вводятся ради удовлетворения ограничений.
Ни в коем случае. Арифметика, да и вообще вся математика, как она дается в школе суть избытточность и лишние сущности с тз проф. математика.
Зато в обучении без этого никак.
LVV>>3. Посмотрите на Рефакторинг. Там неоднократно призывается уменьшать размеры методов, оставляя за методом ЕДИНСТВЕННУЮ задачу. MC>Тут речь о задачах — т.е. семантике. Ты же накладываешь ограничения на структуру.
И правильно. Для обучения нужно наложить ограничения на структуру. Это везде и всюду используется.
Нужно что бы человек научился распознавать паттерны. Оные паттерны ему сначала подсовывают в рафинированом, чистом виде, что бы распознать было легко и так же легко запомнить.
Уже после этого можно усложнять. Но начинать с самых ограниченых, т.е. настолько чистых, что в природе оные не существуют.
В постановке техники ничего необычного нет — вначале ситуации вырожденные, т.е. дети складывают 2+2, боксеры бьют по воздуху стоя на месте а штангисты приседают с пустым грифом.
Все освается понемногу и по отдельности, а со временем сложность наращивается.
Цель такого дела — довести технику до автоматизма, что бы даже в стрессовой ситуации не было сбоя.
Здравствуйте, Ikemefula, Вы писали:
I>Пример Лиспа и прочих функциональных показал, что люди делают выбор не в пользу ФП.
Это потому что после обсуждаемого обучения циклам и всяким низкоуровневым сущностям на языке C/С++ человек уже не может думать в другой парадигме. Он начинает думать в терминах циклов и у него возникают сложности уже с пониманием простой рекурсии, не говоря уже о других "сложных" материях, которые он пытается внутри своей головы выразить в "циклическом" базисе. А если подобное обучение венчается еще С++'ным ООП, то можно считать, что мозги сломаны навсегда.
Здравствуйте, Ikemefula, Вы писали:
I>И правильно. Для обучения нужно наложить ограничения на структуру. Это везде и всюду используется.
До сих пор помню, как преподша по матанализу на семинарах заставляла явно расписывать, какую делаешь замену переменной при взятии интеграла, и не засчитывала ответ. При том, что ответ можно было вообще в уме получить. Убивать надо таких преподов с такими ограничениями на структуру и такими воззрениями на обучение, которые заставляют зубрить синтаксис, уделяя мало времени сути.
I>Нужно что бы человек научился распознавать паттерны. Оные паттерны ему сначала подсовывают в рафинированом, чистом виде, что бы распознать было легко и так же легко запомнить. I>Уже после этого можно усложнять. Но начинать с самых ограниченых, т.е. настолько чистых, что в природе оные не существуют.
Только не ограничивать паттерны циклами, ага? А то человек после такого обучения кроме циклов ничего воспринимать не сможет.
I>В постановке техники ничего необычного нет — вначале ситуации вырожденные, т.е. дети складывают 2+2, боксеры бьют по воздуху стоя на месте а штангисты приседают с пустым грифом. I>Все освается понемногу и по отдельности, а со временем сложность наращивается.
Если брать пример с детьми и "2+2" и продолжать дальше, то получится так:
человек приходит в ВУЗ и ему там говорят: "забудьте то, что учили в школе", и дальше начинают не наращивать, а ПЕРЕУЧИВАТЬ. Вот те люди, в которых жестко сидит школьная парадигма, не смогут воспринимать (и не воспринимают) новый материал. Они никогда не поймут матанализ, высшую алгебру, тфкп и прочие умные вещи в терминах счётных палочек и складывания 2+2.
А теперь вернёмся к программированию. То, что вы тут предлагаете — это и есть вдалбливание этой "школьной" парадигмы, после которой перестроиться на более общий и широкий уровень уже просто так не получится. А так как подобное явление распространено повсеместно, то и получаем ситуации, когда "люди делают выбор не в пользу ФП", когда простые вещи делаются сложно не в подходящем базисе технологий, просто потому что люди думают в ограниченных рамках.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Ikemefula, Вы писали:
I>>И правильно. Для обучения нужно наложить ограничения на структуру. Это везде и всюду используется.
А>До сих пор помню, как преподша по матанализу на семинарах заставляла явно расписывать, какую делаешь замену переменной при взятии интеграла, и не засчитывала ответ. При том, что ответ можно было вообще в уме получить. Убивать надо таких преподов с такими ограничениями на структуру и такими воззрениями на обучение, которые заставляют зубрить синтаксис, уделяя мало времени сути.
Мало решить задачу, нужно решить её методически правильно. В противном случае будет делать огрехи.
Суть как раз простая — овладеть методикой решения задач. Только в этом случае ты можешь перейти на следующий уровень мышления. В противном случаей абстракциям будут мешать огрехи.
I>>Уже после этого можно усложнять. Но начинать с самых ограниченых, т.е. настолько чистых, что в природе оные не существуют.
А>Только не ограничивать паттерны циклами, ага? А то человек после такого обучения кроме циклов ничего воспринимать не сможет.
А ктото здесь сказал что надо циклами ограничить ? Вроде было ясно обозначено, что циклы лишь пример, а не догма.
А>Если брать пример с детьми и "2+2" и продолжать дальше, то получится так: А>человек приходит в ВУЗ и ему там говорят: "забудьте то, что учили в школе", и дальше начинают не наращивать, а ПЕРЕУЧИВАТЬ. Вот те люди, в которых жестко сидит школьная парадигма, не смогут воспринимать (и не воспринимают) новый материал. Они никогда не поймут матанализ, высшую алгебру, тфкп и прочие умные вещи в терминах счётных палочек и складывания 2+2.
Поймут и понимают. Нет никакого противеречия между школьным подходм и вуовским.
Вся разница — в школе сильный упор на воспитание, а в вуз люди счтаются уже воспитанными, потому контроля меньше.
Все что касаеться обучения никакого противоречия нет.
Как правило, сильный выпускник школы имеет неплохой задел на первый курс а то и два.
А>А теперь вернёмся к программированию. То, что вы тут предлагаете — это и есть вдалбливание этой "школьной" парадигмы, после которой перестроиться на более общий и широкий уровень уже просто так не получится.
Нет никакой школьной парадигмы в том понимании как ты описал.
>А так как подобное явление распространено повсеместно, то и получаем ситуации, когда "люди делают выбор не в пользу ФП",
ФП никогда не будет доминирующей парадигмой. 50 лет эволюции программрования во всех транах это хорошо показали.
>когда простые вещи делаются сложно не в подходящем базисе технологий, просто потому что люди думают в ограниченных рамках.
В том то и дело. И так во всех странах на всех континентах. Состояние педагогических наук не оставляет желать другого.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Ikemefula, Вы писали:
I>>Пример Лиспа и прочих функциональных показал, что люди делают выбор не в пользу ФП.
А>Это потому что после обсуждаемого обучения циклам и всяким низкоуровневым сущностям на языке C/С++ человек уже не может думать в другой парадигме.
Это сильное заблуждение. ФП нельзя освоить без императивного.
Здравствуйте, Ikemefula, Вы писали:
А>>До сих пор помню, как преподша по матанализу на семинарах заставляла явно расписывать, какую делаешь замену переменной при взятии интеграла, и не засчитывала ответ. При том, что ответ можно было вообще в уме получить. Убивать надо таких преподов с такими ограничениями на структуру и такими воззрениями на обучение, которые заставляют зубрить синтаксис, уделяя мало времени сути.
I>Мало решить задачу, нужно решить её методически правильно. В противном случае будет делать огрехи. I>Суть как раз простая — овладеть методикой решения задач. Только в этом случае ты можешь перейти на следующий уровень мышления. В противном случаей абстракциям будут мешать огрехи.
Речь о том, что при обучении слишком много времени уделяется "методической правильности" в ущерб уровню абстракций. Даже чересчур много.
А>>Если брать пример с детьми и "2+2" и продолжать дальше, то получится так: А>>человек приходит в ВУЗ и ему там говорят: "забудьте то, что учили в школе", и дальше начинают не наращивать, а ПЕРЕУЧИВАТЬ. Вот те люди, в которых жестко сидит школьная парадигма, не смогут воспринимать (и не воспринимают) новый материал. Они никогда не поймут матанализ, высшую алгебру, тфкп и прочие умные вещи в терминах счётных палочек и складывания 2+2.
I>Поймут и понимают. Нет никакого противеречия между школьным подходм и вуовским. I>Вся разница — в школе сильный упор на воспитание, а в вуз люди счтаются уже воспитанными, потому контроля меньше. I>Все что касаеться обучения никакого противоречия нет. I>Как правило, сильный выпускник школы имеет неплохой задел на первый курс а то и два.
Да вот не понимают. Большинство не может воспринимать многомерные пространства, интегралы-градиенты и прочие математические вещи, пытаясь представить их в рамках привычных им сущностей и понятий. Всё, что получается понять — это геометрический/физический смысл производной, площадь под кривой и т.д. А реальное понимание обычно приходит только потом, если вообще приходит.
А>>А теперь вернёмся к программированию. То, что вы тут предлагаете — это и есть вдалбливание этой "школьной" парадигмы, после которой перестроиться на более общий и широкий уровень уже просто так не получится.
I>Нет никакой школьной парадигмы в том понимании как ты описал.
Я взял слово "школьный" в кавычки. В данном случае "школьная парадигма" означает уровень знаний, потребный для простейшего бытового применения и которому учат на начальном этапе обучения. И который не годится в качестве платформы для дальнейшего обучения. Механика Ньютона, пригодная для бытовых нужд — лишь частный случай эйнштейновской теории, однако чтобы перейти на этот качественно новый уровень, придется поменять в своей голове основы. Другое дело, что старый опыт может помочь сделать это быстрее, а может и наоборот, стать непреодолимой преградой. Вот в программировании как правило так и бывает.
>>А так как подобное явление распространено повсеместно, то и получаем ситуации, когда "люди делают выбор не в пользу ФП", I>ФП никогда не будет доминирующей парадигмой. 50 лет эволюции программрования во всех транах это хорошо показали.
А кто говорит о доминировании? Речь о том, что люди выбирают неправильные инструменты. В том числе и потому что не могут мыслить вне тех рамок, которые им вдолбили на начальном этапе обучения. Более того, они и внутри этих рамок мыслят лишь на уровне "методической правильности". И это печально.
Re[19]: Как обучать технике программирования?
От:
Аноним
Дата:
28.04.10 09:42
Оценка:
Здравствуйте, Ikemefula, Вы писали:
I>Это сильное заблуждение. ФП нельзя освоить без императивного.
Вот это как раз и есть заблуждение. ФП можно прекрасно освоить без императивщины. Она может потребоваться только для понимания того, во что выливаются функциональные конструкции на низком уровне. Для оптимизации по скорости, памяти и т.д. А чтобы мыслить в этой парадигме, их знание изначально не требуется. Например, для освоения SQL (хоть это и не ФП как таковое), никакой императивщины не нужно, она только отвлекает от сути.
Кроме того, никто не предлагает переходить на ФП. Я лишь говорил о том, что при однобоком подходе (каковым является зубрёжка только лишь императивных сущностей и конструкций) у человека костенеют мозги, и он потом с трудом воспринимает (если вообще воспринимает) другие парадигмы.
Здравствуйте, Аноним, Вы писали:
I>>Мало решить задачу, нужно решить её методически правильно. В противном случае будет делать огрехи. I>>Суть как раз простая — овладеть методикой решения задач. Только в этом случае ты можешь перейти на следующий уровень мышления. В противном случаей абстракциям будут мешать огрехи.
А>Речь о том, что при обучении слишком много времени уделяется "методической правильности" в ущерб уровню абстракций. Даже чересчур много.
Методическая правильность решения задач должна проверяться во всех задачах.
Ошибки в технике проявляются тотально и исправить их крайне тяжело.
В университете ставитяс именно техника, потому что те знания, которые там дают, вообще говоря мизер по сравнению с тем, что выпускник получит в течении уже первого года работы.
I>>Все что касаеться обучения никакого противоречия нет. I>>Как правило, сильный выпускник школы имеет неплохой задел на первый курс а то и два.
А>Да вот не понимают. Большинство не может воспринимать многомерные пространства, интегралы-градиенты и прочие математические вещи, пытаясь представить их в рамках привычных им сущностей и понятий.
А это проблема людей вообще. Абстрактное мышление нельзя привить просто так. Его нужно прокачивать.
И при этом огрехи в технике и становятся препятствием.
>Всё, что получается понять — это геометрический/физический смысл производной, площадь под кривой и т.д. А реальное понимание обычно приходит только потом, если вообще приходит.
Разумеетяс. Понимание это реальный опыт + время. нельзя скормить n-задач, лишь бы как решить и получить понимание.
Есть одно эмпирическое правило — профессионалами становятся минимум за 10 лет.
Образование сроится так, что бы время в ВУЗе вошло в эти 10 лет.
I>>Нет никакой школьной парадигмы в том понимании как ты описал.
А>Я взял слово "школьный" в кавычки. В данном случае "школьная парадигма" означает уровень знаний, потребный для простейшего бытового применения и которому учат на начальном этапе обучения. И который не годится в качестве платформы для дальнейшего обучения. Механика Ньютона, пригодная для бытовых нужд — лишь частный случай эйнштейновской теории, однако чтобы перейти на этот качественно новый уровень, придется поменять в своей голове основы.
Не надо ничего менять в голове. Сложность наращиваетя постепенно, точно так же как и блины на штанге.
И всегда обучение идет от частного к общему.
>Другое дело, что старый опыт может помочь сделать это быстрее, а может и наоборот, стать непреодолимой преградой. Вот в программировании как правило так и бывает.
В программировании хорошо если 10% спецов имеют хорошую подготовку. Остальные либо самоучки со слабой подготовкой и без профильного образованя, либо лица приравненые к оным.
А>А кто говорит о доминировании? Речь о том, что люди выбирают неправильные инструменты.
Люди выбирают инструмены соответсвующие своему уровню мышления.
>В том числе и потому что не могут мыслить вне тех рамок, которые им вдолбили на начальном этапе обучения. Более того, они и внутри этих рамок мыслят лишь на уровне "методической правильности". И это печально.
Даже идеальное образование не сделает человека умнее. Абстрактное мышление нельзя привить сверху, его можно только прокачать с самых нулей. бОльшинство не заинтересовано в этом в принципе.
Большинсво программистов не занимается самообразованием, да и в универе учились для галочки или не по профилю.
Нет никаких чудес, 90% людей не заинтересовано в развитии, по этой причине императивное программирование бует рулить и через 100 лет.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Ikemefula, Вы писали:
I>>Это сильное заблуждение. ФП нельзя освоить без императивного.
А>Вот это как раз и есть заблуждение. ФП можно прекрасно освоить без императивщины. А>Она может потребоваться только для понимания того, во что выливаются функциональные конструкции на низком уровне.
Интересно, как ты поймешь во что выливается, если ты это не освоил ?
>Для оптимизации по скорости, памяти и т.д.
т.е. буквально везде, где есть хоть какие то ограничения связаные с ресурсами.
>А чтобы мыслить в этой парадигме, их знание изначально не требуется.
Что бы мыслить в этой парадигме нужно иметь хорошо прокачаное абстрактое мышление. По другому никак.
>Например, для освоения SQL (хоть это и не ФП как таковое), никакой императивщины не нужно, она только отвлекает от сути.
Я около года назад хорошо посмотрел, как ипользуют SQL люди без императивщины.
Их ничего не отвлекало, только с парой запросов пришлось разбираться более месяца.
А>Кроме того, никто не предлагает переходить на ФП. Я лишь говорил о том, что при однобоком подходе (каковым является зубрёжка только лишь императивных сущностей и конструкций) у человека костенеют мозги, и он потом с трудом воспринимает (если вообще воспринимает) другие парадигмы.
Проблема в отсутствии развития у большинства программистов. Просто в силу отсутствия желания. Потому они и застревают на императивном уровне.
Re[14]: Как обучать технике программирования?
От:
Аноним
Дата:
28.04.10 10:05
Оценка:
Здравствуйте, Ikemefula, Вы писали:
I>В программировании хорошо если 10% спецов имеют хорошую подготовку. Остальные либо самоучки со слабой подготовкой и без профильного образованя, либо лица приравненые к оным.
I>Даже идеальное образование не сделает человека умнее. Абстрактное мышление нельзя привить сверху, его можно только прокачать с самых нулей. бОльшинство не заинтересовано в этом в принципе.
I>Большинсво программистов не занимается самообразованием, да и в универе учились для галочки или не по профилю.
I>Нет никаких чудес, 90% людей не заинтересовано в развитии, по этой причине императивное программирование бует рулить и через 100 лет.
Мы же не говорим про 90%. Вопрос стоит в том, как обучать людей. А обучать их надо так, чтобы задействовать возможности оставшихся 10% по максимуму. Ибо если ориентироваться на 90% (то есть в том случае, когда синтаксис ставится важнее семантики, когда отчёт о решении важнее самого решения и т.д.), то толку не будет ни от тех, ни от других.
Re[21]: Как обучать технике программирования?
От:
Аноним
Дата:
28.04.10 10:14
Оценка:
Здравствуйте, Ikemefula, Вы писали:
А>>Вот это как раз и есть заблуждение. ФП можно прекрасно освоить без императивщины. А>>Она может потребоваться только для понимания того, во что выливаются функциональные конструкции на низком уровне.
I>Интересно, как ты поймешь во что выливается, если ты это не освоил ?
Мы же говорим про возможность овладевания ФП без императивщины. И овладеть можно. Остальное — да, уже другой вопрос.
>>Для оптимизации по скорости, памяти и т.д.
I>т.е. буквально везде, где есть хоть какие то ограничения связаные с ресурсами.
Этот момент вторичен в контексте поставленного вопроса.
>>А чтобы мыслить в этой парадигме, их знание изначально не требуется.
I>Что бы мыслить в этой парадигме нужно иметь хорошо прокачаное абстрактое мышление. По другому никак.
А прокачивается оно математикой, а не императивным программированием.
>>Например, для освоения SQL (хоть это и не ФП как таковое), никакой императивщины не нужно, она только отвлекает от сути.
I>Я около года назад хорошо посмотрел, как ипользуют SQL люди без императивщины. I>Их ничего не отвлекало, только с парой запросов пришлось разбираться более месяца.
Стоит ли говорить, что чистые императивщики мудрят с запросами не хуже
Здравствуйте, Аноним, Вы писали:
А>Мы же говорим про возможность овладевания ФП без императивщины. И овладеть можно. Остальное — да, уже другой вопрос.
Это остальное и есть главная причина.
Просто попрограммировать речи не идет, речь идет об индустрии.
I>>т.е. буквально везде, где есть хоть какие то ограничения связаные с ресурсами.
А>Этот момент вторичен в контексте поставленного вопроса.
Программирование вне индустрии вобщем то не существует. А то бы я с тобой согласился.
I>>Что бы мыслить в этой парадигме нужно иметь хорошо прокачаное абстрактое мышление. По другому никак.
А>А прокачивается оно математикой, а не императивным программированием.
И математикой, и программированием.
I>>Я около года назад хорошо посмотрел, как ипользуют SQL люди без императивщины. I>>Их ничего не отвлекало, только с парой запросов пришлось разбираться более месяца.
А>Стоит ли говорить, что чистые императивщики мудрят с запросами не хуже
Здравствуйте, Аноним, Вы писали:
I>>Нет никаких чудес, 90% людей не заинтересовано в развитии, по этой причине императивное программирование бует рулить и через 100 лет.
А>Мы же не говорим про 90%. Вопрос стоит в том, как обучать людей.
Как обучать людей посмотри на МИТ и Стенфорд. Они отказались от функциональщины для обучения. Одни перешли на Питон, другие — на Си.
>А обучать их надо так, чтобы задействовать возможности оставшихся 10% по максимуму. Ибо если ориентироваться на 90% (то есть в том случае, когда синтаксис ставится важнее семантики, когда отчёт о решении важнее самого решения и т.д.), то толку не будет ни от тех, ни от других.
Обучать нужно столько, что бы удовлетворить потребности индустрии. А сейчас удовлетворяется спрос, вместо потребностей.
Re[23]: Как обучать технике программирования?
От:
Аноним
Дата:
28.04.10 12:58
Оценка:
Здравствуйте, Ikemefula, Вы писали:
I>>>т.е. буквально везде, где есть хоть какие то ограничения связаные с ресурсами. А>>Этот момент вторичен в контексте поставленного вопроса. I>Программирование вне индустрии вобщем то не существует. А то бы я с тобой согласился.
Хе-хе. Значит в контексте поставленного вопроса возражений нет?
А по поводу индустрии скажу так: я нигде не утверждал, что следует применять только ФП. Я ЗА использование разных подходов для увеличения эффективности. Только ты зачем-то прицепился отдельно к ФП и затеял холивар на пустом месте.
I>>>Что бы мыслить в этой парадигме нужно иметь хорошо прокачаное абстрактое мышление. По другому никак. А>>А прокачивается оно математикой, а не императивным программированием. I>И математикой, и программированием.
И что же такого серьезного в программировании есть, от чего можно сильно прокачать абстрактное мышление?