Уметь программить — это не опция, а насущная потребность сегодняшнего дня.
Ну ё-моё, зачем всех под себя подстраивать? Я тоже могу сказать, что умение объяснить почему небо голубое — это насущная потребность сегодняшнего дня. Все люди разные, для кого-то элементарная арифметика в уме уже за гранью понимания...
Вы предлагаете 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 накидать? :-)
Поймите меня правильно, я за изучение концепций, а не конкретного языка программирования. Ни один из них не стоит на месте, поэтому изучение с упором на язык — это пустая трата времени, особенно для тех, кто не собирается завтра искать работу программистом.
Вы забываете цели обучения в школе. Главная — знакомство с разнообразными предметами, по каждому из которых рассказывается классическая теория, т.е. то что общепринято и значительно уже не изменится. У школы нет задачи подготовить специалиста по конкретному предмету.
Захотел ребенок для себя «ежедневник» написать
Вы же понимаете, что учебный вариант можно написать абсолютно на чём угодно. А для реального понадобится не только бэкенд, но и 3 клиента под разные мобильные платформы, 1 — под веб и от 1 до 3 под десктопы. И это в реальности делает большая команда, а Вы хотите одного бедного школьника нагрузить задачей, которой ни один профессионал в одиночку не занимается?
ребенок, который реально «перерос» школьную программу и уже не получает кайфа от чисто «тренировочных» задач, кроме этих самых сортировок ничего написать не сможет.
К чему эта ложная дихотомия? Тренировочных задач гораздо интереснее сортировок целое море. Ну а если действительно перерос основы 5 языков, которые я перечислил, у него будет свобода выбора перейти к практическому применению одного из них уже вне школы.
Границы вовсе не искусственны, они исторически сложились, просто потому что невозможно быть специалистом по всему одновременно. Да, сейчас уже есть много прикладных дисциплин на стыке разных наук, но перемешать всё в одну — это Вы явно загнули.
Computer Science — это ведь не про языки программирования… они лишь одно из следствий и инструментов.
Какие есть фундаментальные вещи, которые можно изучать в классическом курсе? К примеру, архитектура фон Неймана, простые алгоритмы, алгебраические типы данных, лямбда-исчисление, абстрактное синтаксическое дерево и т.д. и т.п. Языки можно использовать разные, но чем чище в языке выражена та или иная концепция, тем лучше он годится для её объяснения. Т.е. отвечая на Ваш вопрос, для образования непригодны языки, в которых намешаны разнородные концепции.
Ну, так можно далеко зайти… Если мама объясняет ребёнку, что не надо хвататься за включенную лампу накаливания, потому что когда её включают — она горячая, можно ли это считать вводной формулировкой закона Джоуля-Ленца? :-)
Плюсанул, хотя со Scala не согласен, там слишком много разнородных концепций намешано в кучу. А для обучения лучше подходят чистые концепции аля Haskell, Scheme(всё-таки для обучения лучше Racket, чем Common Lisp), Smalltalk. Про SML ничего сказать не могу, я с ним не знаком )
Я уж молчу про обучение нормальным языкам, а не динозаврами, но даже не в этом суть
А какие языки нормальны для обучения? На мой взгляд, язык для обучения должен быть достаточно фундаментален, чтобы на его примере можно было показывать основные концепции, не подверженные быстрому устареванию. Т.е. получается, что для обучения можно применять C, Pascal, Smalltalk (есть в варианте для самых маленьких — Scratch), Haskell, Racket.
Советовать учить PHP, Ruby, Python, Java, C# в школе, я бы не стал… это всё либо станет неактуальным к моменту, когда они закончат школу и универ, либо 100 раз ещё изменится. Да и не все же должны прикладными программистами становиться… Подумайте о других предметах, везде даётся классический базис. С чего бы именно программу по Computer Science надо переписывать каждый год и учить тому, что заведомо будет неактуально лет через 20?
хочу, чтобы не просто какие-то конструкции ЯП можно было бы описать в терминах ТК, а чтобы само приложение было написано в терминах ТК. Короче, в Haskell есть конструкции, которые типа из ТК, но всё-равно приложения пишутся в терминах функций, типов, классов, а не ТК.
Для меня это выглядит логичным, потому что программисты, может быть за редким исключением, не мыслят в терминах теории категорий при разработке программы.
Но в любом случае, успехов Вам, может правда кому-то пригодится и такой ЯП.
Да, он по мотивам Haskell. Насчёт "мало ТК в Haskell" у меня возникает вопрос: Вы хотите много теории категорий в языке, чтобы что? Какой-то практический смысл в этом будет? Или просто just for fun эзотерический ЯП создать?
Вам намекнули, что "A опосредованно знает D" — это уже не ассоциативность, а транзитивность, которая вообще не про скобки. А вот что Вы подразумеваете под отношением "знает" и как его транзитивность следует из ассоциативности композиции функций или наоборот — это уже загадка.
На мой взгляд мобильной версией сайта просто неудобно пользоваться… Если статьи ещё можно читать, то комментарии писать и т.д. — почти нереально… все элементы управления малюсенькие и никак не учитывают возможность ими пользоваться на маленьком экране.
Откуда вы все в моем коменте находите происки JavaScript? :)
Ну, расскажите нам подробнее какие ещё есть отрасли, где такая же катавасия с технологиями, что они всего по 3 года живут.
нет в индустрии программирования такого объема знаний, который необходимо постигать десятилетиями.
Объём всё-таки довольно приличный, если всю индустрию взять, то и на 30+ лет изучения наберётся… Впрочем, на практике вся индустрия не нужна, нужна пара конкретных областей и немного из смежных, так что лет за 10 вполне реально выйти на плато. Но по факту мало кто выходит, т.к. по работе технологический стек может быть весьма ограниченным, что приводит к эффекту своеобразной зашоренности.
учитывая тот факт, что в программировании из нулевого стажа совсем не следует нулевой опыт практического программирования
гхм, мы тут вообще-то опыт и обсуждаем, а не стаж..
сам я занимаюсь rocket science, т.ч. в обозримом будущем у нас не наблюдается фазы "ничто не вечно под луною".
s/вечно/ново/
К rocket science эта фраза точно так же применима… Просто люди склонны переоценивать инновационную составляющую на порядки, в виду слабого знакомства с тем, что уже было :-)
Во первых, 3 года по меркам индустрии — это много, сравнимо со средним сроком актуальности конкретно взятой технологии.
Индустрия не ограничивается JavaScript. Так что в среднем срок актуальности технологий всё-таки ближе к 10 годам. Но суть даже не в этом… Когда у Вас наберётся приличный багаж знаний, Вы будете замечать общие моменты и мысль "ничто не ново под Луною" будет всё чаще всплывать при знакомстве с очередной супер-пупер-модной технологией.
Ниже уже писали, что годы могут пройти и без повышения левела, так что it depends…
На небольшом кол-ве лет проще делать выводы, т.к. можно прикинуть какое-то минимальное кол-во лет, требующееся для достижения конкретного уровня. Конечно, исключения возможны, но чаще за пару лет у людей возникает иллюзия компетентности, а не компетентность… Если уровень растёт, то человек это сам осознает постфактум.
Даже если это сарказм, то какой-то дурной… Всю статью можно свести к паре предложений:
"Не зацикливайтесь на ярлыках, а лучше вообще забудьте о них. Лучше делайте что должно для профессионального роста."
Автор же, отбрасывая одни ярлыки, тут же обвешивается с ног до головы другими: библиотекарь, ученый, художник, плотник. Имхо, это тупо.
Ну ё-моё, зачем всех под себя подстраивать? Я тоже могу сказать, что умение объяснить почему небо голубое — это насущная потребность сегодняшнего дня. Все люди разные, для кого-то элементарная арифметика в уме уже за гранью понимания...
1) Чтобы прояснить, я предлагаю использовать несколько языков, каждый для демонстрации отдельных концепций в чистом виде. Вы знаете язык, который лучше Haskell подходит для демонстрации алгебраических типов данных и отделения побочных эффектов? Это концепции, которые полезны сами по себе и даже если человек станет программистом они пригодятся в любом языке. Сейчас большая проблема в том, что программисты не хотят развивать мышление… Многие пару месяцев поучившись на курсах сайтики делать, с горем пополам трудоустроившись после этого, считают что дело в шляпе, забывая что они находятся на уровне первого семестра ПТУ.
2) Теперь про циклы… Циклы — это абстракция, которая была удобна на определённом этапе развития индустрии. Сейчас её спокойно можно считать устаревшей. Все мейнстрим языки переползли сначала на итераторы, а потом на функции высшего порядка, генераторы списков и рекурсию, которые в Haskell изначально. Я не исключаю рассказ про циклы в рамках рассмотрения С, но в целом — да, они не нужны уже сейчас в 99% случаев.
То же самое про Perl говорили 20 лет назад. Когда дети закончат школу, выйдет какой-нибудь Python 4, на который ещё 10 лет переходить будут… Спасибо, но ну нафиг )))
C самого рождения или даже чуть раньше? o_O
Если серьёзно, то Java как виртуальная машина разумеется протянет ещё 10 лет точно, но как язык — разве что для поддержки legacy. Я стараюсь в этот стек вообще по минимуму заглядывать, но очевидно ведь, что попытки сделать лучшую Java в виде Scala, Groovy, Clojure, Ceylon, Kotlin, etc. рано или поздно увенчаются успехом.
Это Вы решили аргументов в пользу Haskell накидать? :-)
Поймите меня правильно, я за изучение концепций, а не конкретного языка программирования. Ни один из них не стоит на месте, поэтому изучение с упором на язык — это пустая трата времени, особенно для тех, кто не собирается завтра искать работу программистом.
Как Вы чётко в одном предложении выразили, почему не надо ни Python, ни JavaScript использовать в обучении основам :-)
Вы забываете цели обучения в школе. Главная — знакомство с разнообразными предметами, по каждому из которых рассказывается классическая теория, т.е. то что общепринято и значительно уже не изменится. У школы нет задачи подготовить специалиста по конкретному предмету.
Вы же понимаете, что учебный вариант можно написать абсолютно на чём угодно. А для реального понадобится не только бэкенд, но и 3 клиента под разные мобильные платформы, 1 — под веб и от 1 до 3 под десктопы. И это в реальности делает большая команда, а Вы хотите одного бедного школьника нагрузить задачей, которой ни один профессионал в одиночку не занимается?
К чему эта ложная дихотомия? Тренировочных задач гораздо интереснее сортировок целое море. Ну а если действительно перерос основы 5 языков, которые я перечислил, у него будет свобода выбора перейти к практическому применению одного из них уже вне школы.
Границы вовсе не искусственны, они исторически сложились, просто потому что невозможно быть специалистом по всему одновременно. Да, сейчас уже есть много прикладных дисциплин на стыке разных наук, но перемешать всё в одну — это Вы явно загнули.
Computer Science — это ведь не про языки программирования… они лишь одно из следствий и инструментов.
Какие есть фундаментальные вещи, которые можно изучать в классическом курсе? К примеру, архитектура фон Неймана, простые алгоритмы, алгебраические типы данных, лямбда-исчисление, абстрактное синтаксическое дерево и т.д. и т.п. Языки можно использовать разные, но чем чище в языке выражена та или иная концепция, тем лучше он годится для её объяснения. Т.е. отвечая на Ваш вопрос, для образования непригодны языки, в которых намешаны разнородные концепции.
Ну, так можно далеко зайти… Если мама объясняет ребёнку, что не надо хвататься за включенную лампу накаливания, потому что когда её включают — она горячая, можно ли это считать вводной формулировкой закона Джоуля-Ленца? :-)
Плюсанул, хотя со Scala не согласен, там слишком много разнородных концепций намешано в кучу. А для обучения лучше подходят чистые концепции аля Haskell, Scheme(всё-таки для обучения лучше Racket, чем Common Lisp), Smalltalk. Про SML ничего сказать не могу, я с ним не знаком )
А какие языки нормальны для обучения? На мой взгляд, язык для обучения должен быть достаточно фундаментален, чтобы на его примере можно было показывать основные концепции, не подверженные быстрому устареванию. Т.е. получается, что для обучения можно применять C, Pascal, Smalltalk (есть в варианте для самых маленьких — Scratch), Haskell, Racket.
Советовать учить PHP, Ruby, Python, Java, C# в школе, я бы не стал… это всё либо станет неактуальным к моменту, когда они закончат школу и универ, либо 100 раз ещё изменится. Да и не все же должны прикладными программистами становиться… Подумайте о других предметах, везде даётся классический базис. С чего бы именно программу по Computer Science надо переписывать каждый год и учить тому, что заведомо будет неактуально лет через 20?
Физика начинается с 6-го класса, а химия — с 7-го, или сейчас что-то поменялось?
Для меня это выглядит логичным, потому что программисты, может быть за редким исключением, не мыслят в терминах теории категорий при разработке программы.
Но в любом случае, успехов Вам, может правда кому-то пригодится и такой ЯП.
Да, он по мотивам Haskell. Насчёт "мало ТК в Haskell" у меня возникает вопрос: Вы хотите много теории категорий в языке, чтобы что? Какой-то практический смысл в этом будет? Или просто just for fun эзотерический ЯП создать?
Спасибо за ответ. Теперь стало понятнее, что Вы хотели донести.
Уже ведь есть PureScript.
Вам намекнули, что "A опосредованно знает D" — это уже не ассоциативность, а транзитивность, которая вообще не про скобки. А вот что Вы подразумеваете под отношением "знает" и как его транзитивность следует из ассоциативности композиции функций или наоборот — это уже загадка.
На мой взгляд мобильной версией сайта просто неудобно пользоваться… Если статьи ещё можно читать, то комментарии писать и т.д. — почти нереально… все элементы управления малюсенькие и никак не учитывают возможность ими пользоваться на маленьком экране.
Ну, расскажите нам подробнее какие ещё есть отрасли, где такая же катавасия с технологиями, что они всего по 3 года живут.
Объём всё-таки довольно приличный, если всю индустрию взять, то и на 30+ лет изучения наберётся… Впрочем, на практике вся индустрия не нужна, нужна пара конкретных областей и немного из смежных, так что лет за 10 вполне реально выйти на плато. Но по факту мало кто выходит, т.к. по работе технологический стек может быть весьма ограниченным, что приводит к эффекту своеобразной зашоренности.
гхм, мы тут вообще-то опыт и обсуждаем, а не стаж..
s/вечно/ново/
К rocket science эта фраза точно так же применима… Просто люди склонны переоценивать инновационную составляющую на порядки, в виду слабого знакомства с тем, что уже было :-)
Индустрия не ограничивается JavaScript. Так что в среднем срок актуальности технологий всё-таки ближе к 10 годам. Но суть даже не в этом… Когда у Вас наберётся приличный багаж знаний, Вы будете замечать общие моменты и мысль "ничто не ново под Луною" будет всё чаще всплывать при знакомстве с очередной супер-пупер-модной технологией.
Ниже уже писали, что годы могут пройти и без повышения левела, так что it depends…
На небольшом кол-ве лет проще делать выводы, т.к. можно прикинуть какое-то минимальное кол-во лет, требующееся для достижения конкретного уровня. Конечно, исключения возможны, но чаще за пару лет у людей возникает иллюзия компетентности, а не компетентность… Если уровень растёт, то человек это сам осознает постфактум.
Даже если это сарказм, то какой-то дурной… Всю статью можно свести к паре предложений:
"Не зацикливайтесь на ярлыках, а лучше вообще забудьте о них. Лучше делайте что должно для профессионального роста."
Автор же, отбрасывая одни ярлыки, тут же обвешивается с ног до головы другими: библиотекарь, ученый, художник, плотник. Имхо, это тупо.