И выбор прост: брать что-то промышленное на данный момент (пусть оно и изменится через 5 лет) или брать то, что массово не востребовано в ромышленности?
Хм, откуда взялся такой критерий? По-моему выбор: брать то, на чём удобно демонстрировать чистые концепции, или то, где куча разнородных концепций перемешаны в дикую кашу. Вы за какой пункт из этих двух?
Вообще-то, дистанционные формы образования всё популярнее.
Есть обучение, а есть самообучение… Почитать вики — это про самообучение. В целом оно даже эффективнее, так как движется интересом, но без соответствующих навыков или менторства может быть слишком сложно.
А насчёт меня — я что, должен был Вам скопипастить оттуда сюда, чтобы показать, что я умею найти нужную мне в каждый момент времени информацию? :) самому не смешно?
Да нет, конечно. Вопросы вообще были для примера… Просто некоторые ответы неправильные, некоторые неточные. Если Вам интересно восполнить этот пробел в знаниях, рекомендую книжку «Семь моделей конкуренции и параллелизма». В комментариях на мой взгляд не лучшее место расписывать, т.к. правильные ответы с пояснениями потянут на отдельную статью.
И именно это знание, знание теории управления, принадлежит к числу нетленных, не устаревающих со временем, что мегаважно в наш век перемен.
Ладно, надо будет глянуть «Закон Времени», раз рекомендуете. А то всё равно пока слишком размыто выглядит.
Ну и пусть раз в 5 лет мейнстрим меняется — ну так обновлять программу обучения всё равно нужно.
Ахах, Вы слишком хорошего мнения о минобре, новую программу лет 5 только согласовывать будут.
Да и потом, с чего Вы взяли, что предложенные языки неадекватны?.. за исключением Паскаля, остальные вполне себе используются в production, хоть и во втором эшелоне по популярности, а С так вообще — в первом, просто он уже достаточно стабилен, чтобы не дёргаться каждый год в новые фичи.
P.S. Если отвлечься от школы и переключиться на действующих программистов… Перечислите, если не трудно, список языков, которые Вы считаете перспективными с горизонтом 10 лет?
Неужели нельзя на чём-то реально и массово востребованном на рынке нельзя объяснять?
Учить надо на том, что проще понять.
Конкуренция со стороны Java и Python-программистов мне параллельна, пусть поддерживают legacy хоть ещё 100 лет )))
Я вижу, что они уже неактуальны для многих новых проектов, поэтому для меня эти 2 языка выглядят как захламлённый Паскаль :-)
Если цель обучать под JVM, то любой из Kotlin, Scala, Clojure будет лучше Java.
А Python по моему прогнозу лет через 5 останется только как инструмент для сисадминов… всякие сценарии автоматизировать. Конечно, я могу ошибаться, но это мы узнаем только в 2021 году :-)
Ну а лет через 10 актуальными будут только те языки, которые позволят эффективно использовать сотни ядер и квантовые компьютеры, т.е. чисто декларативные. Все мои рекомендации исходят из этого убеждения.
Мне вот кажется, что попытка решить самостоятельно «до» может дать нехилое понимание не только того, что мы используем, но и ответить на извечные вопросы «зачем» и «почему».
Да, это так. Но всё-таки это надо как-то дозировать в образовательном процессе… ведь одна из его целей — в сокращении количества набитых шишек.
Потому то и нужно быть человеком, а не роботом, чётко исполняющим любые инструкции
Анекдоты показывают как раз чёткую логику. Как записан алгоритм, так и исполнять. Компьютер так и делает (за редким исключением), человек так не делает почти никогда.
«Может быть» == вероятность самореализации строго больше нуля.
«да нет, наверное» == вероятность самореализации строго меньше 0,5
Изучать Паскаль, чтобы на нем продемонстрировать работу циклов?
Вы передёргиваете… Структурное программирование не ограничивается циклами. Какие ещё языки Вы бы выбрали для демонстрации именно этой концепции в чистом виде?
В образовательных целях предпочел бы какой-нибудь другой ORM.
Вот Вы считаете, что LINQ — это ORM и вендорозависимое решение. А по факту, это не ORM и такой же подход можно реализовать во многих языках, где есть ФВП.
Мне вот кажется логичной мысль не завязывать образовательный процесс на проприетарное относительно дорогое решение
Ну что Вы привязались к Паскалю, он ведь 1 из списка, образовательный процесс на него не будет завязан, он будет его синтаксис использовать для демонстрации структурного программирования. Я уж молчу про то, что LCL — это OpenSource (Lazarus).
Вы же чуть выше говорили, что изучать нужно сами основы, а не конкретный продукт конкретной конторы, который неизвестно еще, будет ли жив через пару-тройку пятилеток.
Правильно. В школе и не нужно изучать ASP.NET MVC и т.п. Это был ответ на Ваш вопрос по поводу внеклассной программы для тех, кто очень увлёкся программированием. И смысл в том, что они найдут чем заняться вне школы для любого ЯП.
К стыду своему признаю, что тут я вообще не авторитет.
Так это не стыдно. Их слабая известность — это недостаток текущей системы образования. Поизучайте их на досуге и поймёте почему те, кто уже ознакомился, хотели бы чтобы этим концепциям учили сразу… вместо того, чтобы пробиваться к ним годами через пот и слёзы промышленного программирования.
А Python, Go? Не сложнее паскаля и бейсика, имхо.
Python гораздо сложнее, как любой мультипарадигмальный язык. Go — на мой взгляд не простой, а урезанный… Чуть в сторону и уже приходится извращаться.
Было бы довольно внезапно, неск лет в школе изучая специальные какие-то языки, выйдя во взрослую жизнь, обнаружить, что они в принципе никому не нужны…
Так именно поэтому и не надо учить в школе Java/Python… Они подвержены моде, как любой мейнстрим.
Концепции по большей части моде не подвержены, поэтому всё что останется для перехода к production — это изучить синтаксис модного к тому моменту языка. Что как мы знаем занимает 2-3 недели, включая основную часть стандартной библиотеки.
А теперь подумайте сколько лет понадобится чтобы переключиться на что-то типа Haskell после 10 лет изучения Java.
Можно добавить, что большинство банков требует от ИП декларацию за 2 предыдущих отчётных периода, т.е. за предыдущие 2 года. Поэтому если Вы зарегистрировались недавно, то с ипотекой всё ещё сложнее.
Ну вот, следуя вашей же логике, от таких вещей, как циклы, в преподавании надо отказываться.
На примере Pascal о них как раз можно рассказать. А в VB.NET, я так подозреваю, давно уже LINQ заправляет работой с Enumerable.
А вменяемые UI-библиотеки для этих языков?
Есть. Для паскаля есть VCL и LCL. Биндинги к wxWidgets есть практически подо всё.
Домашний сайт?
С VB.NET можно использовать ASP.NET MVC. Smalltalk, Haskell, Racket тоже отлично справятся с этой задачей. Хотя, честно говоря, в эту сторону я не думал. Считаете веб-программирование стоит тоже в учебный план включить?
назовите мне хоть одно реальное преимущество хотя бы одного из 3-х названных вами языков над той же многострадальной Java.
Изначально этот список языков был приведен не с мыслью выбрать что-то одно… А продемонстрировать разные концепции на наиболее подходящем языке, т.е. разные языки для разных концепций. С цитатой прекрасно сочетаются Haskell и Racket.
А конкретно эта ветка про то как «сложно» в Haskell без циклов.
Убить полтора часа над схематической записью в тетради без возможности проверки «выхлопа» алгоритма — на мотивацию не похоже.
Так я и не предлагал в тетрадке программировать, хотя мы в школе именно этим занимались первые полгода в 10-м классе, а потом нас к Агатам допустили, вот такая веселуха была в начале 00-х.
По крайней мере, дети будут понимать, как работают чужие велосипеды, признанные «готовыми решениями для автоматизации типовых задач».
Опыт мне подсказывает, что признанные решения редко совпадают с первым, что в голову пришло. Но здравое зерно тут тоже есть, хотя бы иллюзия понимания будет, которая придаёт некоторую уверенность в своих силах.
Вполне. Разве что насчёт C сомневаюсь, слишком низкоуровнево для непрограммистов.
А в остальном я за те языки, которые учат думать. Нравится или нет, но Java и Python учат разве что искать готовые решения на SO.
Pascal — структурное программирование, классические структуры данных и алгоритмы
Smalltalk — обмен сообщениями, ООП, программирование через отладку, интроспекция
Haskell — алгебраические типы данных, изоляция побочных эффектов, ФП
Racket — гомоиконность, метапрограммирование, DSL
Наколеночный ежедневник я, собственно, писал. Тысячи полторы строчек вышло.
Я не про кол-во строчек, а про то, что в современном мире ежедневник без мобильных клиентов — это чисто учебный проект, делайте хоть с программным интерфейсом, хоть с консольным, хоть с GUI, никому кроме автора он не нужен будет.
Учить чему-то на том же Паскале или Бейсике, как мне кажется, форменное издевательство. Да, у них очень невысокий порог вхождения, что есть, безусловно, плюс. С другой стороны, дальше чем «пописать сортировку в учебных целях» на них не уедешь.
Откуда такое пренебрежение к Паскалю и Бейсику? Есть же Component Pascal, Object Pascal (он же Delphi), Visual Basic .NET. Что такого на них нельзя написать, будучи школьником?
И Вы совершенно верно написали, что есть огромное количество преподавателей, которые их уже знают хоть в какой-то мере.
но не даем никаких возможностей для роста будущим «рок-звездам» в программировании.
Да ладно, для таких достаточно предоставить доступ к компьютеру :-D
С прикладным применением всё равно не угадать… Вспомните, когда Вы в школу поступили, какие из сегодняшних мейнстрим-языков хотя бы существовали?
Согласен, путаница вышла. Хотя для языков, которые не поддерживают ни то ни другое прозрачно, лучше частичное применение реализовать, а то f(a)(b)(c)(d) уже сложно читать, а что-то типа carry(carry(carry(carry(f, a), b), c), d)() и подавно.
В разделе «Пример использования каррирования» у Вас показано не каррирование, а то, что функции являются объектами первого рода, т.е. функция может вернуть функцию.
Каррирование — это когда функция принимает N аргументов, мы ей передаём M параметров и она превращается в функцию, принимающую N-M аргументов, где N >= M && M > 0. Swift скорее всего не поддерживает такое из коробки.
Возможно, Вы сможете определить свою функцию carry(fn, arg), которая будет принимать произвольную функцию и первый параметр для неё, и возвращать её в каррированном виде.
Есть обучение, а есть самообучение… Почитать вики — это про самообучение. В целом оно даже эффективнее, так как движется интересом, но без соответствующих навыков или менторства может быть слишком сложно.
Да нет, конечно. Вопросы вообще были для примера… Просто некоторые ответы неправильные, некоторые неточные. Если Вам интересно восполнить этот пробел в знаниях, рекомендую книжку «Семь моделей конкуренции и параллелизма». В комментариях на мой взгляд не лучшее место расписывать, т.к. правильные ответы с пояснениями потянут на отдельную статью.
Ладно, надо будет глянуть «Закон Времени», раз рекомендуете. А то всё равно пока слишком размыто выглядит.
Да и потом, с чего Вы взяли, что предложенные языки неадекватны?.. за исключением Паскаля, остальные вполне себе используются в production, хоть и во втором эшелоне по популярности, а С так вообще — в первом, просто он уже достаточно стабилен, чтобы не дёргаться каждый год в новые фичи.
P.S. Если отвлечься от школы и переключиться на действующих программистов… Перечислите, если не трудно, список языков, которые Вы считаете перспективными с горизонтом 10 лет?
Конкуренция со стороны Java и Python-программистов мне параллельна, пусть поддерживают legacy хоть ещё 100 лет )))
Я вижу, что они уже неактуальны для многих новых проектов, поэтому для меня эти 2 языка выглядят как захламлённый Паскаль :-)
Если цель обучать под JVM, то любой из Kotlin, Scala, Clojure будет лучше Java.
А Python по моему прогнозу лет через 5 останется только как инструмент для сисадминов… всякие сценарии автоматизировать. Конечно, я могу ошибаться, но это мы узнаем только в 2021 году :-)
Ну а лет через 10 актуальными будут только те языки, которые позволят эффективно использовать сотни ядер и квантовые компьютеры, т.е. чисто декларативные. Все мои рекомендации исходят из этого убеждения.
В булевой логике нет понятия «вероятность».
Ахах, давайте вообще школу отменим, можно же википедию почитать… Только вот не читают, включая Вас, судя по ответам на предыдущие вопросы :-)
Что за управление? Менеджеров хотите готовить?
Вот Вы считаете, что LINQ — это ORM и вендорозависимое решение. А по факту, это не ORM и такой же подход можно реализовать во многих языках, где есть ФВП.
Ну что Вы привязались к Паскалю, он ведь 1 из списка, образовательный процесс на него не будет завязан, он будет его синтаксис использовать для демонстрации структурного программирования. Я уж молчу про то, что LCL — это OpenSource (Lazarus).
Правильно. В школе и не нужно изучать ASP.NET MVC и т.п. Это был ответ на Ваш вопрос по поводу внеклассной программы для тех, кто очень увлёкся программированием. И смысл в том, что они найдут чем заняться вне школы для любого ЯП.
Так это не стыдно. Их слабая известность — это недостаток текущей системы образования. Поизучайте их на досуге и поймёте почему те, кто уже ознакомился, хотели бы чтобы этим концепциям учили сразу… вместо того, чтобы пробиваться к ним годами через пот и слёзы промышленного программирования.
Python гораздо сложнее, как любой мультипарадигмальный язык. Go — на мой взгляд не простой, а урезанный… Чуть в сторону и уже приходится извращаться.
Концепции по большей части моде не подвержены, поэтому всё что останется для перехода к production — это изучить синтаксис модного к тому моменту языка. Что как мы знаем занимает 2-3 недели, включая основную часть стандартной библиотеки.
А теперь подумайте сколько лет понадобится чтобы переключиться на что-то типа Haskell после 10 лет изучения Java.
Есть. Для паскаля есть VCL и LCL. Биндинги к wxWidgets есть практически подо всё.
С VB.NET можно использовать ASP.NET MVC. Smalltalk, Haskell, Racket тоже отлично справятся с этой задачей. Хотя, честно говоря, в эту сторону я не думал. Считаете веб-программирование стоит тоже в учебный план включить?
Вы про паскали и бейсик? Они проще.
А конкретно эта ветка про то как «сложно» в Haskell без циклов.
Опыт мне подсказывает, что признанные решения редко совпадают с первым, что в голову пришло. Но здравое зерно тут тоже есть, хотя бы иллюзия понимания будет, которая придаёт некоторую уверенность в своих силах.
А в остальном я за те языки, которые учат думать. Нравится или нет, но Java и Python учат разве что искать готовые решения на SO.
Pascal — структурное программирование, классические структуры данных и алгоритмы
Smalltalk — обмен сообщениями, ООП, программирование через отладку, интроспекция
Haskell — алгебраические типы данных, изоляция побочных эффектов, ФП
Racket — гомоиконность, метапрограммирование, DSL
Я не про кол-во строчек, а про то, что в современном мире ежедневник без мобильных клиентов — это чисто учебный проект, делайте хоть с программным интерфейсом, хоть с консольным, хоть с GUI, никому кроме автора он не нужен будет.
И Вы совершенно верно написали, что есть огромное количество преподавателей, которые их уже знают хоть в какой-то мере.
Да ладно, для таких достаточно предоставить доступ к компьютеру :-D
С прикладным применением всё равно не угадать… Вспомните, когда Вы в школу поступили, какие из сегодняшних мейнстрим-языков хотя бы существовали?
f(a)(b)(c)(d)уже сложно читать, а что-то типаcarry(carry(carry(carry(f, a), b), c), d)()и подавно.Каррирование — это когда функция принимает N аргументов, мы ей передаём M параметров и она превращается в функцию, принимающую N-M аргументов, где N >= M && M > 0. Swift скорее всего не поддерживает такое из коробки.
Возможно, Вы сможете определить свою функцию
carry(fn, arg), которая будет принимать произвольную функцию и первый параметр для неё, и возвращать её в каррированном виде.