Проект "Semantic IDE — интерактивный самоучитель по программированию" победил во всероссийском конкурсе Фонда содействия развитию малых форм предприятий в научно-технической сфере "СТАРТ-2013"!
Online-презентация проекта московскому жюри состоялась 25 января 2013 года в Астраханском Государственном Университете через интернет.
Наш проект занял 35 место из 397 победивших заявок.
Теперь наш проект получит финансирование в размере 1 миллиона рублей в течение года на скорейшую доработку самоучителя и запуск веб-сервиса.
Адрес первой версии нашего сайта: www.sem-tech.net
Заходите, регистрируйтесь, участвуйте в обсуждении.
Среда предназначена для обучения, поэтому пост — здесь.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Privalov, Вы писали:
P>Здравствуйте, LaptevVV, Вы писали:
VV>>Адрес первой версии нашего сайта: www.sem-tech.net LVV>>Заходите, регистрируйтесь, участвуйте в обсуждении.
P>В англоязычной версии сайта снимки экранов выглядят несколько необычно.
P>Среду посмотрю попозже.
Англоязычный мы еще не доделали.
Но все равно — участвуйте, так как нам важны замечания-подсказки со всех сторон.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Курилка, Вы писали:
К>Здравствуйте, LaptevVV, Вы писали:
LVV>>Но все равно — участвуйте, так как нам важны замечания-подсказки со всех сторон.
К>Исходники принципиально закрыты?
Пока — да.
Там посмотрим. Работы много. Как пойдет коммерция. а то, возможно и откроем...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
On 14.02.2013 8:58, LaptevVV wrote:
> Адрес первой версии нашего сайта: www.sem-tech.net <http://www.sem-tech.net>
Жесть: "пока и < размер повторять".
Как совком повеяло, тогда то же подобное было и все сильно от него плевались
Здравствуйте, Vzhyk, Вы писали:
V>On 14.02.2013 8:58, LaptevVV wrote:
>> Адрес первой версии нашего сайта: www.sem-tech.net <http://www.sem-tech.net> V>Жесть: "пока и < размер повторять". V>Как совком повеяло, тогда то же подобное было и все сильно от него плевались
Статью почитайте...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Privalov, Вы писали:
P>Здравствуйте, LaptevVV, Вы писали:
LVV>>Но все равно — участвуйте, так как нам важны замечания-подсказки со всех сторон.
P>Любопытство победило. Скачал, открыл "Hello, world!" Установил язык лексем английский, получил следующее:
P>
P>namespace HelloWorld {
P>function main() {
P> cout << "Привет, Мир!";
P>} конец main
P>} конец HelloWorld
P>
P>Вопрос: слово "конец" должно быть? "End" в данном случае выглядело бы более логичным.
Согласен.
Давай регись на нашем форуме — там и поотвечаем обстоятельно.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Проект "Semantic IDE — интерактивный самоучитель по программированию" победил во всероссийском конкурсе Фонда содействия развитию малых форм предприятий в научно-технической сфере "СТАРТ-2013"! LVV>Online-презентация проекта московскому жюри состоялась 25 января 2013 года в Астраханском Государственном Университете через интернет. LVV>Наш проект занял 35 место из 397 победивших заявок.
LVV>Теперь наш проект получит финансирование в размере 1 миллиона рублей в течение года на скорейшую доработку самоучителя и запуск веб-сервиса.
LVV>Адрес первой версии нашего сайта: www.sem-tech.net LVV>Заходите, регистрируйтесь, участвуйте в обсуждении. LVV>Среда предназначена для обучения, поэтому пост — здесь.
Тов. Лаптев, не могли бы вы в двух словах объяснить, почему я должен срочно выкинуть студию и учить студентов программированию с использованием новосозданной среды. Я без наездов, вдруг то, что вы сделали — это действительно ценная разработка...
J>Тов. Лаптев, не могли бы вы в двух словах объяснить, почему я должен срочно выкинуть студию и учить студентов программированию с использованием новосозданной среды. Я без наездов, вдруг то, что вы сделали — это действительно ценная разработка...
Как человек, имевший опыт преподавания студентам:
1. Очень простой интерфейс. Его конечно надо допилить в плане удобства (добавить первую вкладку с undo-redo, закомментировать/откомментировать), но и так — более чем пойдёт, особенно если сравнить со стандартным FreePascal То, что уже есть — вполне на уровне взрослых IDE. Генерация/рефакторинг по месту (добавить оператор/метод/функцию, изменить видимость и т.д.) — шикарно
2. UI очень лёгкий и быстрый, Все ошибки сразу высвечиваются снизу в окне ошибок.
3. Подробная справка на русском языке.
4. Есть (как я понял — в зачаточном виде) возможность выполнить/проверить лабораторную работу прямо в IDE.
5. Возможность выбора произвольного синтаксиса языка. Это офигенно классно, особенно для начинающих программистов — человек учится понимать код (вытаскивать алгоритм) вне зависимости от оформления кода.
6. Чисто технически — мне нравится сама идея семантической разметки кода. Это хороший задел для расширений ide/средств контроля исходного кода (мерж/дифф структурированного xml всё-таки проще чем чистого текста).
Понятно, что проект ещё пилить и пилить:
— нет отладки
— нет возможности собрать отдельный бинарник
— UI местами неудобен (неплохо бы добавить контекстное меню к обозревателю проектов и доделать подсветку/выделение отдельных блоков/токенов)
— XML в .sl-файлах абсолютно нечитабелен.
Всё равно, то что уже есть очень радует. Моё уважение всем участникам
Здравствуйте, jhng, Вы писали:
J>Здравствуйте, LaptevVV, Вы писали:
LVV>>Проект "Semantic IDE — интерактивный самоучитель по программированию" победил во всероссийском конкурсе Фонда содействия развитию малых форм предприятий в научно-технической сфере "СТАРТ-2013"! LVV>>Online-презентация проекта московскому жюри состоялась 25 января 2013 года в Астраханском Государственном Университете через интернет. LVV>>Наш проект занял 35 место из 397 победивших заявок.
LVV>>Теперь наш проект получит финансирование в размере 1 миллиона рублей в течение года на скорейшую доработку самоучителя и запуск веб-сервиса.
LVV>>Адрес первой версии нашего сайта: www.sem-tech.net LVV>>Заходите, регистрируйтесь, участвуйте в обсуждении. LVV>>Среда предназначена для обучения, поэтому пост — здесь.
J>Тов. Лаптев, не могли бы вы в двух словах объяснить, почему я должен срочно выкинуть студию и учить студентов программированию с использованием новосозданной среды. Я без наездов, вдруг то, что вы сделали — это действительно ценная разработка...
1. Студию выкидывать не нужно...
2. В нашей среде код не набирается посимвольно, а вставляется/удаляется целыми операторами. Таким образом, ошибки набора отсутствуют
3. В нашей среде можно посмотреть одну и ту же программу в разных видах: на русском, на английском, в С-подобном виде, в паскале-подобном виде.
Таким образом, новичок осознает, что учим не синтаксис, а семантику.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, jhng, Вы писали:
J>>Тов. Лаптев, не могли бы вы в двух словах объяснить, почему я должен срочно выкинуть студию и учить студентов программированию с использованием новосозданной среды. Я без наездов, вдруг то, что вы сделали — это действительно ценная разработка...
S>Как человек, имевший опыт преподавания студентам: S>1. Очень простой интерфейс. Его конечно надо допилить в плане удобства (добавить первую вкладку с undo-redo, закомментировать/откомментировать), но и так — более чем пойдёт, особенно если сравнить со стандартным FreePascal То, что уже есть — вполне на уровне взрослых IDE. Генерация/рефакторинг по месту (добавить оператор/метод/функцию, изменить видимость и т.д.) — шикарно S>2. UI очень лёгкий и быстрый, Все ошибки сразу высвечиваются снизу в окне ошибок. S>3. Подробная справка на русском языке. S>4. Есть (как я понял — в зачаточном виде) возможность выполнить/проверить лабораторную работу прямо в IDE. S>5. Возможность выбора произвольного синтаксиса языка. Это офигенно классно, особенно для начинающих программистов — человек учится понимать код (вытаскивать алгоритм) вне зависимости от оформления кода. S>6. Чисто технически — мне нравится сама идея семантической разметки кода. Это хороший задел для расширений ide/средств контроля исходного кода (мерж/дифф структурированного xml всё-таки проще чем чистого текста).
S>Понятно, что проект ещё пилить и пилить: S> — нет отладки S> — нет возможности собрать отдельный бинарник S> — UI местами неудобен (неплохо бы добавить контекстное меню к обозревателю проектов и доделать подсветку/выделение отдельных блоков/токенов) S> — XML в .sl-файлах абсолютно нечитабелен.
S>Всё равно, то что уже есть очень радует. Моё уважение всем участникам
Спасибо за конкретику!
Заходите на наш сайт, который тоже первая версия...
Обязательно пропишите и неудобства поподробнее — чтобы мы знали, где косяки.
За год доведем до более-менее приличного уровня в сфере обучения.
И сделаем возможность конвертить в другие языки, чтобы можно было реальные проги получать.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали: LVV>Заходите на наш сайт, который тоже первая версия... LVV>Обязательно пропишите и неудобства поподробнее — чтобы мы знали, где косяки.
Сорри, регистрироваться лень, напишу под катом:
Скрытый текст
1. Догфудинг. Заставьте разработчиков использовать/проверять IDE на регулярной основе. Куча мелочей очевидна с первого запуска IDE, как они прошли в релиз —
2. То, что сразу бросается в глаза:
— Нужен MRU (список недавно открытых проектов, опция "восстановить последний проект при открытии")
— Нужна первая вкладка со стандартными действиями — копипаст, отмена/повтор, закомментировать/раскомментировать код, контекстные действия для токенов в ближайших строках. Последний пункт есть на вкладке Программа, но он работает только для текущего токена
3. То, что желательно добавить:
— Нормальная подсветка блоков при наведении мыши. Оранжевый привлекает на себя внимание, человек отвлекается от кода. Постоянное мигание подсветки — оранжевый-синий-белый вообще выносит мозг. В идеале при наведении мыши надо показывать рамку аля подсветка блоков в решарпере (второй рисунок, видите такую тоненькую рамочку)?
— Текстовое выделение. Его нет
— Поведение при щелчке мышью по ключевым словам/токенам. Во-первых, курсор никогда не должен пропадать с поля ввода. Во-вторых, неплохо бы добавить смарттеги. В-третьих, отказаться от выделения всего метода при щелчке по скобке параметров. Для выделения блоков есть вертикальные полоски и сворачивающиеся блоки, зачем что-то ещё?
— Контекстное меню в менеджере проектов.
4. То, что желательно убрать:
Вкладка "Проект". Она пугает
LVV>За год доведем до более-менее приличного уровня в сфере обучения. LVV>И сделаем возможность конвертить в другие языки, чтобы можно было реальные проги получать.
Ок, удачи!
Здравствуйте, Sinix, Вы писали: S>Здравствуйте, LaptevVV, Вы писали: LVV>>Заходите на наш сайт, который тоже первая версия... LVV>>Обязательно пропишите и неудобства поподробнее — чтобы мы знали, где косяки. S>Сорри, регистрироваться лень, напишу под катом: S>
Скрытый текст
S>1. Догфудинг. Заставьте разработчиков использовать/проверять IDE на регулярной основе. Куча мелочей очевидна с первого запуска IDE, как они прошли в релиз — S>2. То, что сразу бросается в глаза: S>- Нужен MRU (список недавно открытых проектов, опция "восстановить последний проект при открытии") S>- Нужна первая вкладка со стандартными действиями — копипаст, отмена/повтор, закомментировать/раскомментировать код, контекстные действия для токенов в ближайших строках. Последний пункт есть на вкладке Программа, но он работает только для текущего токена
S>3. То, что желательно добавить: S>- Нормальная подсветка блоков при наведении мыши. Оранжевый привлекает на себя внимание, человек отвлекается от кода. Постоянное мигание подсветки — оранжевый-синий-белый вообще выносит мозг. В идеале при наведении мыши надо показывать рамку аля подсветка блоков в решарпере (второй рисунок, видите такую тоненькую рамочку)? S>- Текстовое выделение. Его нет S>- Поведение при щелчке мышью по ключевым словам/токенам. Во-первых, курсор никогда не должен пропадать с поля ввода. Во-вторых, неплохо бы добавить смарттеги. В-третьих, отказаться от выделения всего метода при щелчке по скобке параметров. Для выделения блоков есть вертикальные полоски и сворачивающиеся блоки, зачем что-то ещё? S>- Контекстное меню в менеджере проектов.
S>4. То, что желательно убрать: S>Вкладка "Проект". Она пугает
1. У нас есть пара тестировщиков, но пока нет технологии тестирования. Будет обязательно.
2. Понятно и сейчас делается.
3. Текстовое выделение — сейчас делается.
К концу семестра сделаем...
За предложения по мыши — спасибо!
Замечания по подсветке — респект! Мы как-то привыкли, глаз замылился...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>1. У нас есть пара тестировщиков, но пока нет технологии тестирования. Будет обязательно.
Не, только тестировщики не спасут.
Пользователи, в отличие от тестировщиков и программистов не тыкают по UI в поисках "работает/не работает". Для пользователей важно даже не отсутствие ошибок, их рано или поздно пофиксят. Куда важнее, чтобы UI не раздражал и мешал делать основные, стандартные, рутинные действия (в идеале — помогал в этом). У вас классно сделаны фишки, которые важны для презентации — настройки, переключение синтаксиса/языка идентификаторов. А вот те самые мелочи — копировать, undo-redo, комментировать, быстро написать код не пользуясь мышью — увы
Поэтому и разработчики и тестировщики (особенно разработчики) _обязаны_ использовать код на практике. Иначе в продакшн утекает куча очевидных мелочей/недоделок, на которые даже тикет заводить не хочется, типа потом доделаем.
Здравствуйте, LaptevVV, Вы писали:
LVV>Давай регись на нашем форуме — там и поотвечаем обстоятельно.
Может быть, позже. За приглашение спасибо.
Немного поковырял среду. В целом согласен с мнением Sinix. От себя добавлю: распаковал архив на компе, на котором установлена не русская локалб (с XP). Увидел вместо русских имен файлов кракозябры, система эти файлы не нашла.
Мне доводилось работать с прикладной системой, построенной по схожим принципам: файлы хранятся в XML, вводить можно только определенные вещи. Сразу скажу: даже после поверхностного осмотра ваша разработка показалась мне лучше. Добавить некоторую наглядность, например, сделать, чтобы студент видел, что происходит при вызове функции, как передаются в нее аргументы. Случается, что таких подробностей не знают не только первокурсники. И не терять контроля над продуктом. Он же позиционируется как обучающая система? Вот пусть таким и остается.
Постараюсь подсунуть его своим детям. Если получится, и они как-то отреагируют, сообщу.
Здравствуйте, LaptevVV, Вы писали:
LVV>Online-презентация проекта московскому жюри состоялась 25 января 2013 года в Астраханском Государственном Университете через интернет.
И до сих пор молчал LVV>Наш проект занял 35 место из 397 победивших заявок.
Мои поздравления.
LVV>Адрес первой версии нашего сайта: www.sem-tech.net LVV>Заходите, регистрируйтесь, участвуйте в обсуждении.
Зашёл на сайт -> вижу "скачать" -> не вижу для какой оси, у меня мак, смысл качать есть?
Здравствуйте, ry, Вы писали:
ry>Здравствуйте, LaptevVV, Вы писали:
LVV>>Online-презентация проекта московскому жюри состоялась 25 января 2013 года в Астраханском Государственном Университете через интернет. ry>И до сих пор молчал
Ну дык результаты появились только 13 февраля. LVV>>Наш проект занял 35 место из 397 победивших заявок. ry>Мои поздравления.
Спасибо! LVV>>Адрес первой версии нашего сайта: www.sem-tech.net LVV>>Заходите, регистрируйтесь, участвуйте в обсуждении. ry>Зашёл на сайт -> вижу "скачать" -> не вижу для какой оси, у меня мак, смысл качать есть?
Спасибо. Мы как-то не подумали — постоянно в винде работаем и пока о линуксе не вспоминаем.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Мы выиграли Старт!
От:
Аноним
Дата:
20.02.13 11:20
Оценка:
Скажите а можно участвовать в этом конкурсе если используются коммерческие компоненты?
Здравствуйте, Аноним, Вы писали:
А>Скажите а можно участвовать в этом конкурсе если используются коммерческие компоненты?
Не знаю.
Можно спросить прямо у Фонда: http://www.fasie.ru/
Хотя...
Фонд дает деньги на НИОКР.
И обычно интеллектуальная собственность (разработанный продукт) регистрируется.
Правообладателем должно быть ваше инновационное предприятие.
Если в вашем продукте есть коммерческие компоненты — надо с юристами советоваться.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>2. В нашей среде код не набирается посимвольно, а вставляется/удаляется целыми операторами. Таким образом, ошибки набора отсутствуют
Это значит, что нужен продвинутый автокомплит, вот и всё. самурай без меча то же самое, что мышью, но без мыши.
LVV>3. В нашей среде можно посмотреть одну и ту же программу в разных видах: на русском, на английском, в С-подобном виде, в паскале-подобном виде. LVV>Таким образом, новичок осознает, что учим не синтаксис, а семантику.
Но семантику очень похожих языков. Подмножество Си, подмножество Паскаля, Паскаль-а-ля-рюс. (А почему не РАЯ?)
Это, конечно, объяснимо: счастливые семьи императивные языки из мейнстрима похожи друг на друга, а все остальные — каждый имеет свою особенность на глубоком, идейном уровне. Разве что откровенно родственные языки, такие, как Lisp/Scheme, или там SML/Caml/F#, или... ну не знаю, что бы ещё привести в пример.
(А нет ли у вас перспектив — сделать подход к функциональщине, в частности, пропагандировать и даже русифицировать MoscowML? )
Кстати, про русский: пришла в голову мысль. В чём претензии к русскому языку программирования? В том, что это адский пиджин.
Ключевые слова не сгибаются (падеж, время, число, род...), и русское ухо это ужасно режет. Чтобы было не так больно, — условность псевдочеловеческого языка подчёркивают сокращениями. Вместо "целое Номер, открытое процедура фубар()" — "цел, откр" и т.п.
А что, если не мучить человека в угоду компилятору, а позволить ключевым словам хотя бы ограниченно варьироваться: т.е. "целый, целое, целая, целые" — и всё это соответствует integer. Проверку грамматики делать не стоит, — можно начать с того, что тупо считать их синонимами.
Но это, конечно, требует ручного ввода; либо грамматического анализатора, чтобы "целый Номер" рефакторился в "целое Число".
Здравствуйте, Кодт, Вы писали:
LVV>>2. В нашей среде код не набирается посимвольно, а вставляется/удаляется целыми операторами. Таким образом, ошибки набора отсутствуют К>Это значит, что нужен продвинутый автокомплит, вот и всё. К>самурай без меча то же самое, что мышью, но без мыши.
Мы сейчас довольно активно анализируем мнения попробовавших и пытаемся добавить-подправить-исправить... LVV>>3. В нашей среде можно посмотреть одну и ту же программу в разных видах: на русском, на английском, в С-подобном виде, в паскале-подобном виде. LVV>>Таким образом, новичок осознает, что учим не синтаксис, а семантику.
К>Но семантику очень похожих языков. Подмножество Си, подмножество Паскаля, Паскаль-а-ля-рюс. (А почему не РАЯ?)
Естественно, мы начали с императивщины.
Ибо цель была и пока остается: обучать чистых новичков, которые в школе программирование не проходили. К>Это, конечно, объяснимо: счастливые семьи императивные языки из мейнстрима похожи друг на друга, а все остальные — каждый имеет свою особенность на глубоком, идейном уровне. Разве что откровенно родственные языки, такие, как Lisp/Scheme, или там SML/Caml/F#, или... ну не знаю, что бы ещё привести в пример. К>(А нет ли у вас перспектив — сделать подход к функциональщине, в частности, пропагандировать и даже русифицировать MoscowML? )
Отработаем императивщину — подвинемся и в эту сторону. К>Кстати, про русский: пришла в голову мысль. В чём претензии к русскому языку программирования? В том, что это адский пиджин. К>Ключевые слова не сгибаются (падеж, время, число, род...), и русское ухо это ужасно режет. Чтобы было не так больно, — условность псевдочеловеческого языка подчёркивают сокращениями. Вместо "целое Номер, открытое процедура фубар()" — "цел, откр" и т.п. К>А что, если не мучить человека в угоду компилятору, а позволить ключевым словам хотя бы ограниченно варьироваться: т.е. "целый, целое, целая, целые" — и всё это соответствует integer. Проверку грамматики делать не стоит, — можно начать с того, что тупо считать их синонимами. К>Но это, конечно, требует ручного ввода; либо грамматического анализатора, чтобы "целый Номер" рефакторился в "целое Число".
Пока мы этим не заморачиваемся. А о русском языке в программировании есть несколько свидетельств преподов, которые реально учат школьников программированию.
Хотя и доктора наук.
Вот, например, Константин Поляков (преподавал на КуМире):
Общие выводы по результатам года:
1. школьники воспринимают русские команды намного легче, чем английские;
2. для изучения основ программирования и алгоритмизации КуМир ничем не хуже Паскаля и Бейсика...;
3. КуМир очень неплохо идет даже в 9–11-х классах на базовом уровне и может быть очень
удачным выбором для тех, кто в будущем не будет профессионально программировать.
Вот у нас много как раз таких студней, которые "в будущем не будут профессионально программировать".
А кроме того, мы, как и Поляков три года пробовали Кумир, обнаружили, как и он, довольно много недостатков и ограничений.
И нашелся студент, которому это было интересно запрограммировать.
Работа ему показалась настолько интересной, что он выиграл с ней Умника, написал бакалаврскую работу, диплом специалиста и поступил в аспирантуру.
В процессе написания, обсуждения и разработки обнаруживаются фишки, которых сначала было не видать: синтаксис как интерфейс из их числа...
И теперь мы выиграли старт.
Естественно, это только сырая старапская версия.
Которую мы к 1 сентября доведем до первой по-настоящему обучающей среды.
И продолжим еще в сторону обучения проектированию и тестированию.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Аноним, Вы писали:
А>Скажите а можно участвовать в этом конкурсе если используются коммерческие компоненты?
Можно. Важно чтобы ваш НИОКР (под который они дают деньги) на выходе имел интелектуальную собственность — программы и\или патенты.
Пример. Покупаете Visual Studio, покупайте программу HelloWorld у Васи (с регистрациией программы и оформлением лицензии на право использования и перепродажи кода). Делее обращаетесь в фонд с проектом по разработке программы HelloWorld for Retail, т.е. решение основанного на васином HelloWorld-а специализированное под конкретную рыночную нишу. Вам придется доказать фонду лишь то что в вашей программе есть инновационная составляющая и имеются перспективы создания работающего бизнеса и\или привлечения инвестра.
LVV>Естественно, мы начали с императивщины. LVV>Ибо цель была и пока остается: обучать чистых новичков, которые в школе программирование не проходили.
Это как раз не естественно. Новички в школе изучали, как минимум, математику. И функциональщина (особенно с паттерн-матчингом) на эту математику ложится просто сразу.
LVV>Второй этап. LVV>Теперь наш проект получит финансирование в размере 2 миллионов рублей на год.
Это конечно хорошо, но суммы как-то не впечатляют. Это зарплата пары программистов на год, не говоря уже об инфраструктуре и материальном обеспечении.
LVV>>Второй этап. LVV>>Теперь наш проект получит финансирование в размере 2 миллионов рублей на год. T>Это конечно хорошо, но суммы как-то не впечатляют. Это зарплата пары программистов на год, не говоря уже об инфраструктуре и материальном обеспечении.
Ну, вы зажрАлись, батенька!
На халяву дают два лимона, а вы недовольны...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>>>Второй этап. LVV>>>Теперь наш проект получит финансирование в размере 2 миллионов рублей на год. T>>Это конечно хорошо, но суммы как-то не впечатляют. Это зарплата пары программистов на год, не говоря уже об инфраструктуре и материальном обеспечении. LVV>Ну, вы зажрАлись, батенька! LVV>На халяву дают два лимона, а вы недовольны...
Работает только под адинской учеткой, глючит, кое где кривой интерфейс, синтаксис объявления класса — ужас. Так что действительно на халяву.
LVV>Ну, вы зажрАлись, батенька! LVV>На халяву дают два лимона, а вы недовольны...
Где хоть нота недовольства. То что деньги выделяют это уже хорошо, и не на халяву. Но более менее серьезные разработки на эти "гранты" вести сложно, если только это не начальный этап прототипирования одним-двумя, ну пусть пятью, энтузиастами.
Здравствуйте, Qulac, Вы писали: Q>Работает только под адинской учеткой, глючит, кое где кривой интерфейс, синтаксис объявления класса — ужас. Так что действительно на халяву.
О!
ВЫ интересовались!...
Мы — двигаемся.
Работы — много.
Тем более, что мы пока не открывали продаваемый релиз. Это пока альфа-альфа-афльфа...
Но инвестор жеж нам деньги дал тоже. А там мужик просто так бабки не раздает — он долго и упорно анализировал...
И все-таки с нами договор подписал.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Temnikov, Вы писали:
LVV>>Ну, вы зажрАлись, батенька! LVV>>На халяву дают два лимона, а вы недовольны... T>Где хоть нота недовольства. То что деньги выделяют это уже хорошо, и не на халяву. Но более менее серьезные разработки на эти "гранты" вести сложно, если только это не начальный этап прототипирования одним-двумя, ну пусть пятью, энтузиастами.
Ну, я со смайликами ж писал...
Так что ни в коем случае ничего личного не имел ввиду...
А вы сами сформулировали: начальный этап прототипирования одним-двумя, ну пусть пятью, энтузиастами.
Именно так и есть.
Но на кафедре мы уже третий год настольную систему в качестве обучающей используем.
Все-таки это лучше, чем сразу промышленные языки давать.
И потихоньку ее развиваем.
Вот теперь в инете сервис начали — ваЯем потихоньку...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Mamut, Вы писали:
LVV>>Естественно, мы начали с императивщины. LVV>>Ибо цель была и пока остается: обучать чистых новичков, которые в школе программирование не проходили.
M>Это как раз не естественно. Новички в школе изучали, как минимум, математику. И функциональщина (особенно с паттерн-матчингом) на эту математику ложится просто сразу.
Гипотетически. На практике, всегда и везде начинают с того, что четко видно в реальном виде — поведение, состояние и тд. Отсюда первый фундаментальный барьер — ввод-вывод. Программирование это новая область деятельности, соответсвенно, нужно начинать примерно как дети в саду — считать на палочках, коробочках и тд и тд.
С функциональщиной эту часть пропускаем. Факт в том, что часть студентов конечно же потянут функциональщину сходу. Но такой результат ни о чем не говорит. Не ясно, какой у этих студентов бекграунд. Собтсвенно, факт и в том, что бОльшая часть студентов никак не потянет функциональщину.
Скажем, я сейчас работаю со студентами прикладной математики и мехмата. Аппликативные, функциональные примеры проходят мимо их сознания. Казалось бы, у людей математики столько, что дальше некуда, а все код пишут в жесточайше-императивном стиле.
M>В отличие от императивщины.
Что характерно, ни разу не видел, что бы товарищ с хорошей функциональщиной имел проблемы с императивным программированием. А вот наоборот — полно примеров.
M>>Это как раз не естественно. Новички в школе изучали, как минимум, математику. И функциональщина (особенно с паттерн-матчингом) на эту математику ложится просто сразу.
I>Гипотетически. На практике, всегда и везде начинают с того, что четко видно в реальном виде — поведение, состояние и тд.
То есть функциональное программирование виновато в том, что вместо того, чтобы преподавать на уже понятных ученикам моделях, им начинают ломать мозг?
I>Отсюда первый фундаментальный барьер — ввод-вывод.
Не вижу ничего фундаментального в этом барьере.
M>>В отличие от императивщины.
I>Что характерно, ни разу не видел, что бы товарищ с хорошей функциональщиной имел проблемы с императивным программированием. А вот наоборот — полно примеров.
Здравствуйте, Mamut, Вы писали:
I>>Гипотетически. На практике, всегда и везде начинают с того, что четко видно в реальном виде — поведение, состояние и тд.
M>То есть функциональное программирование виновато в том, что вместо того, чтобы преподавать на уже понятных ученикам моделях, им начинают ломать мозг?
Понятные модели это такие, которые известны дольше всего, то есть, с детства. Если человек 20 лет пользовался ящиками/коробками/сумками, и 3-4 года функциями, то вроде как очевидно, какая модель будет более простой для него.
I>>Отсюда первый фундаментальный барьер — ввод-вывод.
M>Не вижу ничего фундаментального в этом барьере.
Предлагаешь особенности твоего зрения обсудить ?
M>>>В отличие от императивщины.
I>>Что характерно, ни разу не видел, что бы товарищ с хорошей функциональщиной имел проблемы с императивным программированием. А вот наоборот — полно примеров.
M>Именно.
Если ты с этим согласен, то не ясно, откуду взялось твое мнение про математику. Функциональное программирование это просто более высокий уровень абстракции. Что характерно, абстракции невозможно скопировать из одной головы в другую или передать через книги, лекции и тд.
Абстракции формируются с самых простых вещей. Например сначала дети двигают палочки, загибают пальцы, делят кофеты, а уже потом появляются первые абстрации — числа, цифры, операции, функции и тд и тд.
Ты же хочешь сразу перепрыгнуть все эти шаги.
M>>То есть функциональное программирование виновато в том, что вместо того, чтобы преподавать на уже понятных ученикам моделях, им начинают ломать мозг?
I>Понятные модели это такие, которые известны дольше всего, то есть, с детства.
Мамина сиська?
I>Если человек 20 лет пользовался ящиками/коробками/сумками, и 3-4 года функциями, то вроде как очевидно, какая модель будет более простой для него.
Четай до полного понимания Execution in the kingdom of nouns. «Коробки-ящики» даже близко не описываются ООП/императивщиной.
I>>>Что характерно, ни разу не видел, что бы товарищ с хорошей функциональщиной имел проблемы с императивным программированием. А вот наоборот — полно примеров. M>>Именно. I>Если ты с этим согласен, то не ясно, откуду взялось твое мнение про математику.
Еще раз:
— у функциональщиков нет проблем с императивным программированием
— у императивщиков есть проблемы с функциональным программированием
Очевидно, что проблема не в ФП. Но, почему-то, вместо того, чтобы преподавать ФП, после которого нет проблем с императивщиной, и которая прекрасно ложится на математику, ты предлагаешь изучать императивщину, после которой сплошные проблемы (по твоим же словам)
I>Функциональное программирование это просто более высокий уровень абстракции. Что характерно, абстракции невозможно скопировать из одной головы в другую или передать через книги, лекции и тд. I>Абстракции формируются с самых простых вещей. Например сначала дети двигают палочки, загибают пальцы, делят кофеты, а уже потом появляются первые абстрации — числа, цифры, операции, функции и тд и тд. I>Ты же хочешь сразу перепрыгнуть все эти шаги.
Ты придумал за меня какой-то тезис, и активно пытаешься с ним бороться, ага.
Здравствуйте, Mamut, Вы писали:
I>>Понятные модели это такие, которые известны дольше всего, то есть, с детства.
M>Мамина сиська?
Ты наверное хотел это в скайп кому то написать, но ошибся ?
I>>Если человек 20 лет пользовался ящиками/коробками/сумками, и 3-4 года функциями, то вроде как очевидно, какая модель будет более простой для него.
M>Четай до полного понимания Execution in the kingdom of nouns. «Коробки-ящики» даже близко не описываются ООП/императивщиной.
Именно этим и описываются. Ящики-коробки это поведение в чистом виде. ООП и императивщина оно именно про поведение. Функциональщина — про результат.
I>>>>Что характерно, ни разу не видел, что бы товарищ с хорошей функциональщиной имел проблемы с императивным программированием. А вот наоборот — полно примеров. M>>>Именно. I>>Если ты с этим согласен, то не ясно, откуду взялось твое мнение про математику.
M>Еще раз:
M>- у функциональщиков нет проблем с императивным программированием M>- у императивщиков есть проблемы с функциональным программированием
M>Очевидно, что проблема не в ФП.
Ты просто повторил исходную посылку, только добавил "очевидно". Это слово не является доказательством, ты в курсе ?
> Но, почему-то, вместо того, чтобы преподавать ФП, после которого нет проблем с императивщиной, и которая прекрасно ложится на математику, ты предлагаешь изучать императивщину, после которой сплошные проблемы (по твоим же словам)
Никто не учит функциональщину вместо императивщины. Чуть не весь человеческий опыт императивен по своей сути, функциональщина появляется только после серьёзного вкуривания математики.
Математика, что характерно, появляется после серьезного механического, читай императивного, опыта.
То есть, сначала механическим опытом наращиваются абстракции, а уже потом появляются абстрации. Иногда эти абстракции наращиваются медленно, тогда фунциональщины не видать.
I>>Функциональное программирование это просто более высокий уровень абстракции. Что характерно, абстракции невозможно скопировать из одной головы в другую или передать через книги, лекции и тд. I>>Абстракции формируются с самых простых вещей. Например сначала дети двигают палочки, загибают пальцы, делят кофеты, а уже потом появляются первые абстрации — числа, цифры, операции, функции и тд и тд. I>>Ты же хочешь сразу перепрыгнуть все эти шаги.
M>Ты придумал за меня какой-то тезис, и активно пытаешься с ним бороться, ага.
Я тебе показываю, что доказательную часть своих утверждений ты где то потерял и не желаешь это видеть.
M>>Четай до полного понимания Execution in the kingdom of nouns. «Коробки-ящики» даже близко не описываются ООП/императивщиной.
I>Именно этим и описываются. Ящики-коробки это поведение в чистом виде. ООП и императивщина оно именно про поведение. Функциональщина — про результат.
Они именно что не описываются. Реальный мир вообще не описывается программированием, от слова никак. Не надо натягивать сову на глобус.
I>>>Если ты с этим согласен, то не ясно, откуду взялось твое мнение про математику.
M>>Еще раз:
M>>- у функциональщиков нет проблем с императивным программированием M>>- у императивщиков есть проблемы с функциональным программированием
M>>Очевидно, что проблема не в ФП.
I>Ты просто повторил исходную посылку, только добавил "очевидно". Это слово не является доказательством, ты в курсе ?
Я не повторил исходную посылку. Я повторяю твои слова. Из которых ты делаешь какие-то совсем идиотские выводы.
M>>Ты придумал за меня какой-то тезис, и активно пытаешься с ним бороться, ага.
I>Я тебе показываю, что доказательную часть своих утверждений ты где то потерял и не желаешь это видеть.
Здравствуйте, Mamut, Вы писали:
I>>Именно этим и описываются. Ящики-коробки это поведение в чистом виде. ООП и императивщина оно именно про поведение. Функциональщина — про результат.
M>Они именно что не описываются. Реальный мир вообще не описывается программированием, от слова никак. Не надо натягивать сову на глобус.
Буквально, конечно, не описывается. Механика, поведение, мутабельность — все это в ООП и императивщине искаропки.
Ты так и не ответил на вопрос, почему функции будут более понятны контингенту, нежели ящики и коробки.
M>>>- у функциональщиков нет проблем с императивным программированием M>>>- у императивщиков есть проблемы с функциональным программированием
M>>>Очевидно, что проблема не в ФП.
I>>Ты просто повторил исходную посылку, только добавил "очевидно". Это слово не является доказательством, ты в курсе ?
M>Я не повторил исходную посылку. Я повторяю твои слова. Из которых ты делаешь какие-то совсем идиотские выводы.
Правильно. Ты повторил мои слова, добавил слово "очевидно" и сделал вывод "проблема не в ФП".
Ты забыл ответить, откуда, по твоему, берутся абстрации и как их скопировать из головы в голову.
У меня ответ простой — нужно начинать с моторики и наращивать раз за разом.
У тебя, что характерно, аргументы в духе: "не верно", "всё не так", "очевидно", "не вижу ничего" и тд.
После N лет долбления императивное "в цикле проверяем xxx на предмет yyy" превращается в функциональное "все x где x есть xxx удовлетворяет yyy"
Только так и никак иначе. Часть студентов с хорошим абстрактным мышлением уже готовы взять такое. А вот те, что не готовы, в принципе не смогут втащить сходу, им как ни крути придется пройти полный путь.
I>>Я тебе показываю, что доказательную часть своих утверждений ты где то потерял и не желаешь это видеть.
M>Ты не показываешь, ты занимаешься демагогией.
M>>Они именно что не описываются. Реальный мир вообще не описывается программированием, от слова никак. Не надо натягивать сову на глобус.
I>Буквально, конечно, не описывается. Механика, поведение, мутабельность — все это в ООП и императивщине искаропки. I>Ты так и не ответил на вопрос, почему функции будут более понятны контингенту, нежели ящики и коробки.
Потому что к тому моменту, когда наичнается изучение программирование, функции и их поведение уже известны из математики. Теперь возьмем твои слова:
На практике, всегда и везде начинают с ... поведение, состояние и тд
И тут начинают детям ломать мозг: забудьте все свои представления и знания о функциях и переменных в математике, мы будем все переворачивать с ног на голову.
M>>Я не повторил исходную посылку. Я повторяю твои слова. Из которых ты делаешь какие-то совсем идиотские выводы. I>Правильно. Ты повторил мои слова, добавил слово "очевидно" и сделал вывод "проблема не в ФП". I>Ты забыл ответить, откуда, по твоему, берутся абстрации и как их скопировать из головы в голову.
«Абстракции» берутся из уроков математики. Когда там к программированию подступают? В 8-м классе? В 8-м классе уже вовсю изучают системы уравнений и всякие вещи типа «область определения функций». Это прекрасно ложится на функциональное программирование.
I>После N лет долбления императивное "в цикле проверяем xxx на предмет yyy" превращается в функциональное "все x где x есть xxx удовлетворяет yyy"
После N лет долблений императивного, получим что? Давай я опять процитирую тебя.
ни разу не видел, что бы товарищ с хорошей функциональщиной имел проблемы с императивным программированием. А вот наоборот — полно примеров.
То есть вместо того, чтобы сразу давать функциональщину, чтобы потом не было проблем и с императивным, ты почему-то настаиваешь на том, чтобы вдалбливать императивщину, несмотря на то, что после нее проблемы
Здравствуйте, Mamut, Вы писали:
I>>Буквально, конечно, не описывается. Механика, поведение, мутабельность — все это в ООП и императивщине искаропки. I>>Ты так и не ответил на вопрос, почему функции будут более понятны контингенту, нежели ящики и коробки.
M>Потому что к тому моменту, когда наичнается изучение программирование, функции и их поведение уже известны из математики.
1 Изучают программирование зачастую классе в 3м
2 Даже в универе степерь прокачки абстракций сильно разная
>Теперь возьмем твои слова:
M>
M>На практике, всегда и везде начинают с ... поведение, состояние и тд
M>И тут начинают детям ломать мозг: забудьте все свои представления и знания о функциях и переменных в математике, мы будем все переворачивать с ног на голову.
Более простая модель это та, которая закома с детства. Через неё легко подвести людей к функциям 'как в математике'
У тебя телега впереди лошади — давайте дадим сразу математику, что бы опыт палочек появился сам собой.
I>>Ты забыл ответить, откуда, по твоему, берутся абстрации и как их скопировать из головы в голову.
M>«Абстракции» берутся из уроков математики.
Если ты плохо двигал палочки и ящики, когда тебе было 4 года, то про математику тебе нужно забыть, максимум что можно от тебя ждать это арифметики и то с ошибками.
>Когда там к программированию подступают? В 8-м классе? В 8-м классе уже вовсю изучают системы уравнений и всякие вещи типа «область определения функций». Это прекрасно ложится на функциональное программирование.
"Прекрасно ложится" — тому нет и никогда не было внятных подтверждений кроме "вот мне так кажется"
Абстракции прокачиваются начиная с моторики. Разные абстракции требуют разного опыта. Состояние, поведение, время — ничего этого в математике нет. Математика может это описывать, но ты это поймёшь только когда получишь опыт вместе с моторикой соответствуей. То есть, качать нужно с нуля, моторики.
I>>После N лет долбления императивное "в цикле проверяем xxx на предмет yyy" превращается в функциональное "все x где x есть xxx удовлетворяет yyy"
M>После N лет долблений императивного, получим что? Давай я опять процитирую тебя.
Получим функциональщину и только у тех, у кто прошел императивщину. Кому недостаточно N лет будут гарантировано испытывать проблемы с функциональщиной.
Те, кто прошел императивщину, не будут испытывать с ней проблем, по определению, потому что они это освоили.
M>
M>ни разу не видел, что бы товарищ с хорошей функциональщиной имел проблемы с императивным программированием. А вот наоборот — полно примеров.
M>То есть вместо того, чтобы сразу давать функциональщину, чтобы потом не было проблем и с императивным, ты почему-то настаиваешь на том, чтобы вдалбливать императивщину, несмотря на то, что после нее проблемы
Ты путаешь причину и следствие. Моё утверждение можно трактовать двояко (ты видишь только один вариант)
1 от императивнщины нужно еще добраться до функциональщиины и многие так и не добираются
2 функциональщина приносит с собой внятные знания императивщины
То есть, в кратце, функциональщина есть абстракции прокачаные в императивщине. Невозможно дать абстракции 'сверху'.
То есть, я говорю об 1, а тебе мерещится 2. П.2 требует некоего чуда — копирования абстракций из головы в голову.
Здравствуйте, Ikemefula, Вы писали:
I>>>Если человек 20 лет пользовался ящиками/коробками/сумками, и 3-4 года функциями, то вроде как очевидно, какая модель будет более простой для него. M>>Четай до полного понимания Execution in the kingdom of nouns. «Коробки-ящики» даже близко не описываются ООП/императивщиной. I>Именно этим и описываются. Ящики-коробки это поведение в чистом виде. ООП и императивщина оно именно про поведение. Функциональщина — про результат.
Отвечаю на все три (начиная с очевидно). Нет, не очевидно. Стоит отличать два потока данных о мире. Первый — наше восприятие мира, модель его поведения пока мы в него не вмешиваемся (feedback). Вторая — модель мира, когда человек пытается его изменить (т.е. выполнить некоторое действие, feedforward). Интересно, что на направлении "действие" ситуация смотрится становится немного (на самом деле — много) другой. И ведь при этом основная задача программиста — "отдавать команды", т.е. производить feedforward. От удобства feedforward и его связи с feedback зависит удобство языка программирования и скорость понимания. В дальнейшем на feedback я не особо фокусируюсь, там может быть что угодно и на общий результат дискуссии оно не влияет.
Для дальнейшего чтения очень рекомендуется прочитать вторую главу из "The Design of Everyday Things" (revised edition). Там очень много полезных картинок и я буду использовать терминологию оттуда. Например, я буду часто ссылаться на картинку об уровнях обработки информации человеком (в интернете нашел только здесь, 38-й слайд. Очень рекомендую книгу где-нибудь взять и почитать).
Вводную информацию вроде бы дал. Теперь можно начать моделировать мир. Можно взять какой-нибудь простой классический пример вроде "закрыть дверь". Очень показательный пример на самом деле. В реальной жизни задача "закрыть дверь" имеет два очевидных решения.
Первый вариант: "Вася.закрой(дверь)". Я прошу Васю закрыть дверь за меня. Не смотря на "императивное" указание это на самом деле описание результата "дверь закрыта". Т.е. я хочу чтобы "Вася сделал так, чтобы дверь была закрыта". Я не буду сильно возражать если дверь закроет Петя. Я не прошу выполнять действие (не Вася.закрывай(дверь)). Меня устроит и если Вася делегирует эту обязанность кому-нибудь другому. Меня интересует "результат" (функциональщина в определении выше). У меня нет цели изменить "внутреннее состояние Васи". Я предполагаю, что Вася после закрытия двери не изменится. В общем, с моей точки зрения Вася — это классический иммутабельный объект с поведением. А изменяемый объект (дверь) с моей точки зрения самостоятельного поведения не имеет. "Набор замыканий" из ФП как раз примерно эквивалентен данному объекту.
Второй вариант: "закрою(дверь)". Желание "закрыть" возникает на рефлексивном (reflective) уровне (см. картинку). Детальный план (встать, дойти, протянуть руку, толкнуть дверь) выполняется на поведенческом (behavioral) уровне. Что здесь интересно? А интересно то, что behavioral уровень — это "подсознательный" уровень. Не полностью, он может взаимодействовать с сознанием при необходимости, но в целом достаточно автономен, может разрабатывать детальные действия и контроллировать висцеральный (visceral, мышечные действия) уровень. Подчеркиваю, стимул "закрыть" (описание результата) вырабатывается на сознательном уровне. А вот "план действий" (последовательность операций) вырабатывается по большей части на подсознательном уровне! Это очень важно. Потому что во многих повседневных ситуациях сознание задействуется для решения задачи "что", определения результата. И именно на это сознанине тренировано (плюс иногда оно решает некоторые вычислительные задачи, когда подсознание само не может справиться, но это другая история).
В той же design of everyday things есть хорошее упражнение по прочувствованию разницы между reflective и behavioral.
1. Согните указательный палец.
2. Разогните указательный палец.
3. Сожмите руку в кулак.
4. Разожмите кулак.
5. Возьмите кружку в руку.
6. Налейте воду в кружку.
7. Поставьте кружку на (другой) стол.
А теперь опишите, как именно вы выполняли каждый шаг. О чем думали. Какие "команды" отдавали? На уровне сознания все это обычно редуцируется до "захотел согнуть палец" и "палец сам согнулся". Нижележащий уровень (behavioral) нам не доступен. Мы представляем результат и подсознание выполняет автоматически все операции. Включая обработку обратной связи (тяжесть кружки, колебания воды и т.п.). Эти автоматические операции могут быть достаточно сложными. Например, я на работу/с работы хожу почти автоматически (я не отвлекаюсь на контроль дороги). Подсознание вызывает несколько прерываний (для обработки перехода дорог), все остальное делает само. В принципе, оно на автомате умеет и дороги переходить (нажимает кнопку светофора, ожидает разрешающего сигнала, предпочитает моторный сигнал (вибрацию кнопки вызова) всем остальным индикациям (световой/звуковой)) но обычно я делаю это в ручном режиме, так как это чуть быстрее.
Теперь перейдем к обучению программирования. Выше я пытался показать, что для сознательного мыслительного процесса "целеуказание" является основным процессом в повседневной жизни. Иногда люди создают план, который является набором "достигнутых состояний" а не "каких-то процессов и действий" (действиями на самом деле кодируются промежуточные результаты). Работа программиста — "заставлять машину выполнять действия". Это feedforward и на этом пути мозг как всегда пытается "указывать цель". А вы его заставляете императивщину расписывать! Он ведь не приспособлен к такому. "Как я обычно это делаю? Да не знаю я как, просто делаю и все!". Вы заставляете детализировать весь процесс.
А после детализации наступает второй огромный облом. На поведенческом (behavioral) уровне происходит обработка "обратной связи" от действий и этот поток информации абсолютно необходим для достижения поставленной цели (мозг сравнивает планируемый результат с фактическим). Но у программиста результат детализации выполняет не программист! Его выполняет компьютер. И никакого незамедлительного ответа организму нет. Не понятно, правильно ли все сделано или нет. Нужно запустить программу и сознательно (reflective!) сравнить предполагаемый и полученный результат. Для человеческой "императивной" системы это выглядит как очень сильный облом. Она вроде бы и разработала план, но не получила никакой обратной связи. Появляется подозрение "что-то здесь не так".
В общем не удивительно, что у людей возникает проблема с императивщиной. Потому что мозг (сознательная его часть) не приспособлен изначально к такой модели и задействование "нужных уровней" сознания приводит к неприятным ощущениям (остуствие обратной связи). А вот "функциональщина — про результат" (это не я сказал). Это то, на что сознание натренировано за те 20 лет жизни. Люди ее легко осваивают, получают удовольствие (вместо разочарования) от процесса и одновременно учатся строить необходимые уровни абстракции. А потом уже легко переходят и на императивную модель (в тех местах, где она нужна). Особенно хорошо должно быть начинать с агрессивной "грязной" функциональщины (lisp-, ml- семейства языков). Наличие некоторых побочных эффектов (не на actor!) вполне вписывается в повседневную активность мозга. А вот императивная модель как раз является "абстрактной математикой". С точки зрения той же тренировки мозга "императивное программирование" ровно настолько же неестественно, насколько не естественны абсолютно чистые математические модели. Нет у императивщины "реального аналога", он есто только у "грязной функциональщины".
Ну и касательно уровня абстракций. А кто сказал, что идти нужно снизу вверх? Почему программирование начинается с языков а не с квантовой механики? Программирование же просто несколькими уровнями выше в этой цепочке. И почему в той же школе (и еще раньше, в детстве) начинают с самых верхних (а не нижних!) уровней? Ну там "огонь — бо-бо" а не термодинамика+химия+биология (а там и электрические сигналы, и химия, и нейросети). Может быть, стоит начинать с удобного (и достаточно практичного) уровня? Ну пусть он будет местами неточным. Но зато результат будет раньше и не будет издевательства над мозгом невинных студентов.
P.S. Не нашел, куда вставить. Пусть будет здесь. Уровни "действия" у функциональщины более сбалансированы. "Цель" формулируется сознанием, действие (набор команды) выполняется подсознательно (там нет "последовательности действий, в норме это скорее механическая трансляция разных map/fold/filter/etc...)), проверка высокоуровневого ожидания (результат выполнния)- сознанием, проверка правильности моторики (набор map а не fold) — подсознанием. Все на своем месте. У императивщины детализация (которой в таком виде нет у функциональщины) идет на границе сознания/подсознания а весь результат обрабатывается сознанием.
1. Спасибо за подробный развернутый ответ. Оставлю тут то, что зацепило сильнее остального. M>Ну и касательно уровня абстракций. А кто сказал, что идти нужно снизу вверх? Почему программирование начинается с языков а не с квантовой механики? Программирование же просто несколькими уровнями выше в этой цепочке. И почему в той же школе (и еще раньше, в детстве) начинают с самых верхних (а не нижних!) уровней? Ну там "огонь — бо-бо" а не термодинамика+химия+биология (а там и электрические сигналы, и химия, и нейросети). Может быть, стоит начинать с удобного (и достаточно практичного) уровня? Ну пусть он будет местами неточным. Но зато результат будет раньше и не будет издевательства над мозгом невинных студентов.
M>P.S. Не нашел, куда вставить. Пусть будет здесь. Уровни "действия" у функциональщины более сбалансированы. "Цель" формулируется сознанием, действие (набор команды) выполняется подсознательно (там нет "последовательности действий, в норме это скорее механическая трансляция разных map/fold/filter/etc...)), проверка высокоуровневого ожидания (результат выполнния)- сознанием, проверка правильности моторики (набор map а не fold) — подсознанием. Все на своем месте. У императивщины детализация (которой в таком виде нет у функциональщины) идет на границе сознания/подсознания а весь результат обрабатывается сознанием.
2. У меня только одно возражение по поводу всего изложенного — личный опыт.
Когда я в 18 почти лет увидел первый раз компьютер — я абсолютно ничего не знал про все написанное вами.
Но писать в кодах для Минска-22 не составило никакого труда. Абсолютно никакого. Это же — чистая императивщина!
И никакого ломания мозгов и всей психологиии.
И у моих одногруппников — тоже.
О функциональщине я узнал много позже — когда уже стал читать серьезные книжки по программированию — курсе на 4-м.
А когда попробовал — мозги пришлось серьезно перестраивать.
Почему так?
Это же явно противоречит всему, что вами тут написано.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, maxkar, Вы писали:
M>Здравствуйте, Ikemefula, Вы писали:
I>>>>Если человек 20 лет пользовался ящиками/коробками/сумками, и 3-4 года функциями, то вроде как очевидно, какая модель будет более простой для него. M>>>Четай до полного понимания Execution in the kingdom of nouns. «Коробки-ящики» даже близко не описываются ООП/императивщиной. I>>Именно этим и описываются. Ящики-коробки это поведение в чистом виде. ООП и императивщина оно именно про поведение. Функциональщина — про результат.
M>Отвечаю на все три (начиная с очевидно). Нет, не очевидно. Стоит отличать два потока данных о мире. Первый — наше восприятие мира, модель его поведения пока мы в него не вмешиваемся (feedback). Вторая — модель мира, когда человек пытается его изменить (т.е. выполнить некоторое действие, feedforward). Интересно, что на направлении "действие" ситуация смотрится становится немного (на самом деле — много) другой. И ведь при этом основная задача программиста — "отдавать команды", т.е. производить feedforward. От удобства feedforward и его связи с feedback зависит удобство языка программирования и скорость понимания. В дальнейшем на feedback я не особо фокусируюсь, там может быть что угодно и на общий результат дискуссии оно не влияет.
Не может там быть все что угодно. Фидбек это основа не только императивщины, а вообще всей инженерии.
M>Вводную информацию вроде бы дал. Теперь можно начать моделировать мир.
Спасибо, не надо. Мир никто не моделирует. Моделируют решение конкретной задачи.
>Можно взять какой-нибудь простой классический пример вроде "закрыть дверь". Очень показательный пример на самом деле. В реальной жизни задача "закрыть дверь" имеет два очевидных решения.
Задача имеет столько решений, сколько есть точек зрения на неё.
M>Первый вариант: "Вася.закрой(дверь)". Я прошу Васю закрыть дверь за меня. Не смотря на "императивное" указание это на самом деле описание результата "дверь закрыта".
На самом деле это способ достижения результата. Сам результат здесь описывается неявно.
>Т.е. я хочу чтобы "Вася сделал так, чтобы дверь была закрыта". Я не буду сильно возражать если дверь закроет Петя. Я не прошу выполнять действие (не Вася.закрывай(дверь)).
Согласно правилам русского языка ты именно просишь выполнить действие и возлагаешь эту обязанность на конкретного человека, более того — момент времени определен вполне однозначно.
>Меня устроит и если Вася делегирует эту обязанность кому-нибудь другому. Меня интересует "результат" (функциональщина в определении выше). У меня нет цели изменить "внутреннее состояние Васи". Я предполагаю, что Вася после закрытия двери не изменится. В общем, с моей точки зрения Вася — это классический иммутабельный объект с поведением. А изменяемый объект (дверь) с моей точки зрения самостоятельного поведения не имеет. "Набор замыканий" из ФП как раз примерно эквивалентен данному объекту.
Это тебе удобно так рассматривать дверь. Сама по себе дверь имеет массу, кучу других свойств и тд, то есть состояние.
M>Второй вариант: "закрою(дверь)".
Это не интересно. Есть более интересные вещи — "дверь.закройся()" , "дверь.состояние = закрыта"
M>Теперь перейдем к обучению программирования. Выше я пытался показать, что для сознательного мыслительного процесса "целеуказание" является основным процессом в повседневной жизни. Иногда люди создают план, который является набором "достигнутых состояний" а не "каких-то процессов и действий" (действиями на самом деле кодируются промежуточные результаты). Работа программиста — "заставлять машину выполнять действия". Это feedforward и на этом пути мозг как всегда пытается "указывать цель". А вы его заставляете императивщину расписывать! Он ведь не приспособлен к такому. "Как я обычно это делаю? Да не знаю я как, просто делаю и все!". Вы заставляете детализировать весь процесс.
Работа программиста — формализовать вычисления таким образом, что бы их мог выполнить кто угодно.
Не заставлять, а именно — формализовать.
Отсюда ясно, что к такой деятельности приспособлены даже дети — они начинают составлять инструкции, задания еще в детском саду.
Собтсвенно и императивное программирование это развитие всё той же идеи.
M>В общем не удивительно, что у людей возникает проблема с императивщиной. Потому что мозг (сознательная его часть) не приспособлен изначально к такой модели и задействование "нужных уровней" сознания приводит к неприятным ощущениям (остуствие обратной связи).
Я большей частью скипнул, потому что вся эта писанина требует не меньше чем нобелевки.
Просто подумай, каким образом ребенок в состоянии составить простую пошаговую инструкцию. Вся императивщина растёт именно отсюда. Более того, опыт наработаный на таких примеах, и доведенный до автоматизма, даёт функциональщину.
LVV>>Естественно, мы начали с императивщины. LVV>>Ибо цель была и пока остается: обучать чистых новичков, которые в школе программирование не проходили.
M>Это как раз не естественно. Новички в школе изучали, как минимум, математику. И функциональщина (особенно с паттерн-матчингом) на эту математику ложится просто сразу.
M>В отличие от императивщины.
Ну, у функционального программирования достаточно своих проблем. Например, классическое ФП предполагает stateless approach, в то время как немалое количество проблем вокруг нас — stateful. Но самая большая его проблема, ИМХО, в в том, что императивный подход интуитивно понятен человеку. Человек мыслит скорее императивно чем функционально (ну или, скорее, императивно с налетом функциональщины). Поэтому функциональное программирование гораздо тяжелее укладывается в голову, чем императивное.
Кстати, с многопоточностью та же история — ну не можем мы несколько мыслей думать параллельно. И это одна из причин почему у людей бывают серьезные проблемы с пониманием многопоточности.
Кстати, зачастую математическая формулировка решения/подхода/алгоритма проигрывает в понятности алгоритмической. К примеру, particle filter описывается жуткими формулами и выкладками, в то время как его алгоритмическое описание просто и понятно.
Здравствуйте, maxkar, Вы писали:
M>Ну и касательно уровня абстракций. А кто сказал, что идти нужно снизу вверх?
Понимаешь, есть в этом чтото интересное, идти сверху. Скажем, взять и забить на палочки, кружочки, а сразу дать детям Фихтенгольца, можно даже в детском саду.
Кто сказал, что идти нужно снизу вверх ? Вот и попробуй это на своих детях. Кстати, у тебя есть единомышленник, Маммут. Вы можете объединиться, сорганизовать вдвоём детей, прочитать им курс лекций Фихтенгольза, а уж после этого функциональщина наверняка станет плёвым делом.
>Почему программирование начинается с языков а не с квантовой механики?
Программирование никогда и не начиналось не с языков. Во все времена это была формализация простейших решений для разных задач, например, как собрать портфель в школу или купить в магазине бутылку газировки.
Здравствуйте, maxkar, Вы писали:
M>Здравствуйте, Ikemefula, Вы писали:
M>Детальный план (встать, дойти, протянуть руку, толкнуть дверь) выполняется на поведенческом (behavioral) уровне. Что здесь интересно? А интересно то, что behavioral уровень — это "подсознательный" уровень. Не полностью, он может взаимодействовать с сознанием при необходимости, но в целом достаточно автономен, может разрабатывать детальные действия и контроллировать висцеральный (visceral, мышечные действия) уровень. Подчеркиваю, стимул "закрыть" (описание результата) вырабатывается на сознательном уровне. А вот "план действий" (последовательность операций) вырабатывается по большей части на подсознательном уровне! Это очень важно. Потому что во многих повседневных ситуациях сознание задействуется для решения задачи "что", определения результата. И именно на это сознанине тренировано (плюс иногда оно решает некоторые вычислительные задачи, когда подсознание само не может справиться, но это другая история).
То что Вы описываете называются "моторные навыки". Они действительно выполняются подсознательно. Но многие из них мы разучивали императивно. Например, "трогание с места" на машине:
— проверить нейтралку;
— завестись;
— выжать сцепление;
— поддать газку;
— плавно отпустить сцепление.
Именно так, думаю, Вам его описывал инструктор. После нескольких месяцев (лет?) езды Вы действительно выполняете эти действия подсознательно, но от этого сам "алгоритм" трогания не поменялся; он как был собственно императивным, так и остался. В компьютере правильной аналогией был бы вызов подпрограммы "тронуться".
То же самое — это, например, игра на гитаре. Поначалу Вам изложили четкий алгоритм — как взять, например, аккорд Fm. Потом навыки "въедаются" в подкорку, и вы берете аккорд механически, не задумываясь.
Человек действительно мыслит и императивно, и функционально. Но чтобы описать КАК собственно выполнять некоторое несложное действие, нам легче применить императивный подход.