Обновить
102
0.2
Роман Смирнов@Source

Head of Elixir at Ecom.tech

Отправить сообщение
В разделе «Пример использования каррирования» у Вас показано не каррирование, а то, что функции являются объектами первого рода, т.е. функция может вернуть функцию.
Каррирование — это когда функция принимает N аргументов, мы ей передаём M параметров и она превращается в функцию, принимающую N-M аргументов, где N >= M && M > 0. Swift скорее всего не поддерживает такое из коробки.
Возможно, Вы сможете определить свою функцию carry(fn, arg), которая будет принимать произвольную функцию и первый параметр для неё, и возвращать её в каррированном виде.
Вторая (концепция опциональности) — заставляет нас думать о возможных крайних случаях и ошибках, которые могут прийти извне, и обрабатывать их корректно.
В Haskell Вы наоборот не думаете о крайних случаях и не определяете функций, которые принимают Maybe (если следуете концепциям языка). Это особенность как концепции опциональности, так и монад в целом… Вы пишете функции, которые принимают чистые значения и возвращают монадические, обо всём остальном заботится >>=, сам по себе или внутри do-блока.

Ещё в определении sum есть лишняя строка:
sum (x:[]) = x -- one element

Спору нет, упростить и в каком-то объёме рассказать можно почти всё, что угодно. Но в данном вопросе я не вижу связи с информатикой… да, нечёткая логика применяется в нейронных сетях и ещё в нескольких областях, но это уже не основы информатики. Давайте по-честному, этими темами от силы 0.1% профессиональных программистов владеет.
Ну не знаю, спорить не буду. Просто лично я не вижу практического смысла в глобальном объединении всех предметов.
А как тогда работать с упорядоченными массивами? Просто кастовать «примени ф-цию чтотонужное() к массиву девайсы»?
В том же комментарии, который Вы процитировали есть ответ: функции высшего порядка (map, filter, reduce), генераторы списков и рекурсия. Да, некоторые низкоуровневые алгоритмы останутся как есть, но это уж точно только профессиональных программистов должно интересовать, а не школьников.

Но компу всё равно придётся элементы перебирать по очереди, даже если высокоуровневый язык позволяет об этом не знать.
И что? Причём тут циклы?
На уровне ассемблера есть только goto (jmp, loop) и goto по условию (jpe, jnz, ...). Ну, реально нет циклов в архитектуре современных компьютеров, что тут поделать…

Нового железа уже не будет и всё можно будет писать на высокоуровневых языках?
Я уже чуть выше писал, что новое железо вообще может принести новую архитектуру и будет вам Quipper вместо C. Только опять же причём тут циклы?

Только вот циклы — как раз одна из таких концепций, о которой не рассказать, выходит, нельзя.
Да можно, так же как на уроках физики про теорию эфира рассказывают… Исторический фактор никто не отменял.
> Уровень развития интеллекта старшеклассников уже достаточен для некоторых видов работы.

Причём тут это? Нечёткая логика — раздел высшей математики, который изучается уже поверх знания теории вероятностей, классической логики и теории множеств. Предлагаете всё это в школьную программу затолкать? o_O

> нечёткая логика очень даже хорошо реализуется через булевую.

Реализуйте для начала через булеву логику такие понятия как «может быть» и «да нет, наверное».

Ну и немножко из классики жанра
В одном банке работал программист, исправно ходил на работу…
Hо вдруг не пришел, день нет, второй, народ заволновался, приходят к нему домой, стучат… нет ответа, ломают дверь, находят его синим в ванной. А в руках флакон шампуня с инструкцией на обороте:
1. Hанести шампунь на голову
2. Помассировать
3. Через 5 минут повторить…

Жена посылает программиста в магазин:
— Купи батон колбасы, а если будут яйца, купи десяток!
Приходит программист в магазин.
— У вас яйца есть?
— Есть!
— Дайте мне 10 батонов колбасы!
просто все люди (включая учителей) — разные

Кто ж спорит… но мы тут вроде обсуждаем, что хорошо было бы включить в школьную программу, а вот она едина для всех. Вопрос её подачи — это уже другой вопрос.


А в школе не время/не место изучать такие формы для демонстрации?

Дело в акцентах. Вы гнёте линию, что надо выбрать какой-то один ЯП и учить ему. А я говорю о том, что информатика не об этом и надо учить концепциям с использованием 5-6 языков, не углубляясь в stdlib и прочее. Практически у каждой дисциплины есть 2 стороны — фундаментальная и прикладная. Фундаментальную учат в школе и в ВУЗах, прикладную — преимущественно в ПТУ или на работе. Так устроено изучения абсолютно всех наук, и я не вижу причин почему информатика должна тут быть не такой как все.


в одном слове: асинхронность

Вот хотя бы этот пример. Зачем нужна асинхронность? Чем она отличается от многопоточности? Чем параллельность отличается от конкурентности? Какие существуют модели конкурентности? В чём недостатки модели конкурентности в Node.JS и для каких задач она не подходит?
Вот на какие вопросы должно отвечать образование, а не выбирать что-то одно подо всё. "No Silver Bullet" ©

Да я в общих чертах представляю что такое STEM. Просто Вы забыли, что в школе есть ещё и куча гуманитарных предметов. Или предлагаете литературу тоже в концептах математики разбирать? А вместо изучения правил русского языка заняться частотным анализом?
Физика с математикой и так всегда связаны были, в том числе и в школьной программе. Химия тоже с ними переплеталась. Ну добавили биологию и информатику к ним ещё. Это всего 5-6 школьных предметов. А всего предметов, емнип, раза в 4 больше.
С остальным я, в принципе, и не спорю… Хотя всё это разнообразие аббревиатур наводит на мысли о горе-маркетологах. Особенно доставляет GEMS с дискриминацией по половому признаку… как они такое название в США зарегистрировать то смогли )))

Ну, STEM — это даже не половина школьных предметов )))

Для детей постарше есть такого плана: https://www.youtube.com/watch?v=XnDvebuc0tw

Я бы в школе учил как решать обычные задачи автоматизации и обработки.

Задумка интересная. Но как быть с тем, что не существует типовых задач автоматизации и обработки, для которых ещё нет готового решения?


Perl, к моему большому сожалению, заглох

Так вон же, Perl 6 вышел, только я почему ты сомневаюсь, что Вы забросите Python и вернётесь обратно.


А смысл в концепциях без языка?

Развитие мышления. Это гораздо полезнее, чем любой конкретный язык.


Как вы сами понимаете на продукцию этих фирм завязаны миллиарды и что-то менять просто так они не будут.

Не понимаю, Вы ж сами написали, что они переходят на Python… Значит ничто им не помешает и перейти с Python на что-то другое. Это всё лишь вопрос времени. Пока в индустрии консенсусом на тему языков программирования даже не пахнет. А значит всё ещё не раз поменяется.


Так в том-то и дело, что на Java написано уже столько, что переписать уже точно не получится.

С одной стороны написано много, с другой стороны всё переписывать и не нужно, многое устаревает само собой. К тому же я перечислял языки под JVM в предыдущем комментарии, именно они пока теснят Java как язык. С каждым годом причин выбрать именно Java, а не другой JVM-язык для нового проекта всё меньше, поэтому всё возможно.


В общем-то тут 2 варианта: либо всё стабилизируется как есть, либо текущие мейнстрим-языки уйдут в узкие ниши вместе со всем legacy… В первый вариант мне лично слабо верится. А если какие-нибудь квантовые компьютеры вытеснят обычные, то вообще прощайте все популярные ЯП, привет Quipper )))

Вы путаете тёплое с мягким… Все алгоритмы бытового/общественного плана построены на нечёткой логике. И это весьма сложная тема в формализованном виде, явно не под силу школьникам. Однако люди оперируют нечёткой логикой на интуитивном уровне и им для этого школа вообще не нужна.
Компьютерные же алгоритмы, за редким исключением, построены на булевой логике, которая за пределами компьютеров относительно редко встречается. Попробуйте для прикола осознанно использовать булеву логику при общении, все окружающие мигом заметят, что Вы странно себя ведёте :-)

Потому что они на уровне вкусовщины… Можете представить фразу типа "мне много лет нравилась механика, пока не узнал про термодинамику"?
Учебная программа — серьёзная вещь, в ней нет места личным пристрастиям. И ещё раз подчеркну, что языки программирования — это не объект изучения для школьной информатики. Это лишь форма записи для демонстрации концепций.

Уметь программить — это не опция, а насущная потребность сегодняшнего дня.

Ну ё-моё, зачем всех под себя подстраивать? Я тоже могу сказать, что умение объяснить почему небо голубое — это насущная потребность сегодняшнего дня. Все люди разные, для кого-то элементарная арифметика в уме уже за гранью понимания...

Вы предлагаете Haskell как один из подходящих? Хорошо. Расскажите мне как на нем писать циклы. Или циклы не нужны? ;)

1) Чтобы прояснить, я предлагаю использовать несколько языков, каждый для демонстрации отдельных концепций в чистом виде. Вы знаете язык, который лучше Haskell подходит для демонстрации алгебраических типов данных и отделения побочных эффектов? Это концепции, которые полезны сами по себе и даже если человек станет программистом они пригодятся в любом языке. Сейчас большая проблема в том, что программисты не хотят развивать мышление… Многие пару месяцев поучившись на курсах сайтики делать, с горем пополам трудоустроившись после этого, считают что дело в шляпе, забывая что они находятся на уровне первого семестра ПТУ.


2) Теперь про циклы… Циклы — это абстракция, которая была удобна на определённом этапе развития индустрии. Сейчас её спокойно можно считать устаревшей. Все мейнстрим языки переползли сначала на итераторы, а потом на функции высшего порядка, генераторы списков и рекурсию, которые в Haskell изначально. Я не исключаю рассказ про циклы в рамках рассмотрения С, но в целом — да, они не нужны уже сейчас в 99% случаев.


Слишком уж хорош Python для своей ниши

То же самое про Perl говорили 20 лет назад. Когда дети закончат школу, выйдет какой-нибудь Python 4, на который ещё 10 лет переходить будут… Спасибо, но ну нафиг )))


Java умрет, как ей пророчат с 90-х годов прошлого века

C самого рождения или даже чуть раньше? o_O
Если серьёзно, то Java как виртуальная машина разумеется протянет ещё 10 лет точно, но как язык — разве что для поддержки legacy. Я стараюсь в этот стек вообще по минимуму заглядывать, но очевидно ведь, что попытки сделать лучшую Java в виде Scala, Groovy, Clojure, Ceylon, Kotlin, etc. рано или поздно увенчаются успехом.


А для того, кто только начинает количество вводимых символов все-таки важно.

Это Вы решили аргументов в пользу Haskell накидать? :-)


Поймите меня правильно, я за изучение концепций, а не конкретного языка программирования. Ни один из них не стоит на месте, поэтому изучение с упором на язык — это пустая трата времени, особенно для тех, кто не собирается завтра искать работу программистом.

PS мне много лет нравился именно питон, пока не узнал про ноду

Как Вы чётко в одном предложении выразили, почему не надо ни Python, ни JavaScript использовать в обучении основам :-)

Вы забываете цели обучения в школе. Главная — знакомство с разнообразными предметами, по каждому из которых рассказывается классическая теория, т.е. то что общепринято и значительно уже не изменится. У школы нет задачи подготовить специалиста по конкретному предмету.


Захотел ребенок для себя «ежедневник» написать

Вы же понимаете, что учебный вариант можно написать абсолютно на чём угодно. А для реального понадобится не только бэкенд, но и 3 клиента под разные мобильные платформы, 1 — под веб и от 1 до 3 под десктопы. И это в реальности делает большая команда, а Вы хотите одного бедного школьника нагрузить задачей, которой ни один профессионал в одиночку не занимается?


ребенок, который реально «перерос» школьную программу и уже не получает кайфа от чисто «тренировочных» задач, кроме этих самых сортировок ничего написать не сможет.

К чему эта ложная дихотомия? Тренировочных задач гораздо интереснее сортировок целое море. Ну а если действительно перерос основы 5 языков, которые я перечислил, у него будет свобода выбора перейти к практическому применению одного из них уже вне школы.

Границы вовсе не искусственны, они исторически сложились, просто потому что невозможно быть специалистом по всему одновременно. Да, сейчас уже есть много прикладных дисциплин на стыке разных наук, но перемешать всё в одну — это Вы явно загнули.

Computer Science — это ведь не про языки программирования… они лишь одно из следствий и инструментов.
Какие есть фундаментальные вещи, которые можно изучать в классическом курсе? К примеру, архитектура фон Неймана, простые алгоритмы, алгебраические типы данных, лямбда-исчисление, абстрактное синтаксическое дерево и т.д. и т.п. Языки можно использовать разные, но чем чище в языке выражена та или иная концепция, тем лучше он годится для её объяснения. Т.е. отвечая на Ваш вопрос, для образования непригодны языки, в которых намешаны разнородные концепции.

Ну, так можно далеко зайти… Если мама объясняет ребёнку, что не надо хвататься за включенную лампу накаливания, потому что когда её включают — она горячая, можно ли это считать вводной формулировкой закона Джоуля-Ленца? :-)

Информация

В рейтинге
3 185-й
Откуда
Россия
Работает в
Зарегистрирован
Активность