Подтвердить что ты не робот

Следует ли преподавать функциональное программирование перед императивным программированием?

Мне кажется, что функциональное программирование - отличная вещь. Он устраняет состояние и упрощает автоматическую параллельную работу кода.

Многие программисты, которые сначала изучали императивные стили программирования, очень трудно изучить функциональное программирование, потому что это так отличается. Я начал задумываться о том, будут ли программисты, которым сначала было преподавать функциональное программирование, было бы трудно начать обязательное программирование. Похоже, что это было бы не так сложно, как наоборот, поэтому я подумал, что было бы хорошо, если бы больше программистов научили программированию в первую очередь.

Итак, мой вопрос в том, должно ли функциональное программирование преподаваться в школе до императива, и если да, то почему это не более распространено, чтобы начать с него?

4b9b3361

Ответ 1

Собственно, некоторые школы уже так делают. Где я учился (Университет Копенгагена), они учат SML в первом семестре, как введение в программирование. Затем они учат Java впоследствии, как введение в ООП.

Я думаю, что он работает очень хорошо, и я согласен с тобой лучше, чем наоборот. Функциональное программирование довольно интуитивно понятное для того, кто еще не программист. Он намного лучше соответствует тому, чему нас учили математике в старшей школе или раньше, поэтому люди, которые еще не были подвергнуты императивному программированию, обычно выбирают ее без особых проблем.

На самом деле существует тенденция к тому, что люди, которые новичок в программировании, когда регистрируют SML, быстрее, чем те, кто уже изучил Java или С++.

Кажется, есть большой концептуальный переход от императива к функциональному, но обратное кажется намного проще большинству. Студенты, как правило, не находят Java трудным, когда они подвергаются этому после обучения SML. Как только вы узнаете о "чистых" концепциях программирования, склеивание по побочным эффектам довольно просто. Но если ваше понимание программирования основано на побочных эффектах, гораздо труднее представить, что без них возможно что угодно.

Я думаю, что большое преимущество такого подхода состоит в том, что принципы функционального программирования становятся важной частью вашего инструментария программирования, а не каким-то эзотерическим дополнением, которое вы можете использовать, если хотите показать. Даже при программировании на императивных языках, я думаю, что есть преимущество в том, чтобы иметь опыт работы на функциональном языке. Даже при программировании на чем-то более низком уровне, чем C, есть возможность подумать о минимизации состояния и побочных эффектов и быть использованным для концепции функций более высокого порядка (даже если они недоступны на языке)

Ответ 2

Многие школы учат функциональному программированию. Некоторые из них даже учат его в первую очередь. Я думаю, что MIT, в течение длительного времени, использовал для обучения схеме во введении к классам программирования.

В моей школе мы рассмотрели ML как часть "сравнительного языка языков программирования", который каждый должен был принять.

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

Многие считают, что такие языки, как Haskell и Scheme, не получили более широкого принятия, это потому, что люди "рушились" от них императивным программированием. Это вздор.

Настоящая причина, по которой эти языки не получили широкого распространения, заключается в том, что они не используют фигурные скобки. Серьезно.

Стиль синтаксиса C/Algol распространен, потому что людям нравится, как он выглядит.

Ключом к усилению внедрения функциональной программы является не разговор о том, как велика Haskell и как злые побочные эффекты, или сказать слово "монада" неоднократно. Вместо этого просто создайте функциональный язык, который использует фигурные скобки и полуколоны. Люди будут использовать его.

Ответ 3

Многие (большинство?) школ учат функциональному программированию. Очень немногие учат его первой жесткой по многим причинам.

  • Большинство сред разработки для функциональные языки сосут, и требуют обширного программирования знания для адекватного использования. Это становится все менее и менее верным, но мы все еще далеки от Visual Студия для Haskell.

  • Тяжелее прыгать в "кричащем" вещи. Инструменты GUI и библиотеки для большинства функциональных языков. Показательные вещи на экране и награждение ученика важны.

  • Ученые-программисты склонны тяготеть к императивному /OO языкам по историческим причинам. Наличие BASIC в юности, зная, что их любимая игра была написана на C или С++, вы называете ее.

  • Простые ресурсы и учебные пособия для функциональных языков программирования труднее прийти. Сравните количество образцов С# с образцами Lisp в Code Project. Имейте в виду, что Lisp старше 5 раз.

Ответ 4

Это может быть проблема ума, так как большинство учителей/профессоров, вероятно, сначала изучили императивные стили.

Кроме того, я бы догадался, что для преподавания императивных стилей существует гораздо больший объем работы.

Ответ 5

Я могу только предположить, что ООП, казалось, был излюбленным словом/стилем, поэтому школы придерживались этого,

Мне учили дизайн ООП с самого начала, его только недавно учили себя функциональным стилем программирования, и я вижу, что он имеет свои преимущества.

Ответ 6

Изменить: Далее следует оригинальное название: "Почему функциональное программирование не преподается в школах". В школах есть учителя, а не профессора. Школьные учителя не пишут свои собственные учебники.

Основными проблемами являются учебники, из которых учителям разрешено приобретать свои материалы. Компании-учебники быстро перескакивают на "следующую большую вещь", которая была ООП несколько лет назад. Функциональное программирование упало на обочине. Многие преподаватели не могут или не могут преподавать курс без учебника, поэтому выбор курса обычно следует за наличием учебников от крупных поставщиков.

Ответ 7

Во-первых, я нахожу основание вашего вопроса ошибочным, потому что меня учили функциональному программированию в школе. (Это было не то, с чего я начал, но мы сделали некоторое функциональное программирование.)

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

В-третьих, программирование (для большинства людей) - навык работы. Подавляющее большинство магазинов используют обязательное программирование. Поэтому для будущих кодеров наиболее полезно изучить императивное программирование.

Ответ 8

Четкий поток управления императивного программирования хорошо подходит для реализации и анализа алгоритмов в учебной среде. Объектно-ориентированное программирование - это удобное расширение этого, так что естественно, что он используется чаще всего. С другой стороны, функциональное программирование (декларативное программирование на самом деле) - это совершенно отдельная парадигма, требующая целого нового набора соображений (производительности и других), многие из которых намного легче визуализировать, если вы сначала понимаете императивное программирование. В конце концов, все это сводится к императивному языку в конце.

Ответ 9

Для этого должен быть исторический угол (показывающий мой возраст) для учебных программ в школе. Функциональным было все, чему я должен был учиться, когда начал.

Но отложив это, вы должны начать где-то, чтобы один из них был первым. Если вы начнете с императива, тогда будут вещи, которые вы достигнете, потому что вы не будете там, когда будете изучать функционал, и вам придется привыкнуть к поведению иначе. Если вы начнете с функциональности и перейдете к императиву, вам придется привыкнуть к изучению новых концепций/конструкций и вспомнить, что они там используются.

Всякий раз, когда вы программируете, вы пытаетесь решить проблему. Хорошо иметь и в вашем наборе инструментов, чтобы решить проблему. Поэтому я думаю, что было бы лучше начать с итеративного, а затем изучить функциональность: если вы обнаружите, что достигли чего-то, что не указывает на то, что вы выбрали неправильный инструмент для решения своей проблемы.

Кроме того, это означает, что он подбрасывает.

Ответ 10

Я был на самом деле просто в разговоре с человеком, который разрабатывает Bootstrap (учебный план программирования, который в настоящее время работает Citizen Schools). Казалось, он считает, что стиль функционального программирования является лучшим фоном для алгебры, поскольку он затрагивает концепцию функций как процессов, так и объектов (со своими собственными свойствами). (Конечно, декларативные языки программирования могут также иметь первоклассные функции, но основное внимание уделяется не так много.)

Лично я считаю, что преподавание функционального программирования в первую очередь стоит того. Декларативный подход преподаётся очень рано в математическом классе, поэтому функциональное программирование предоставляет некоторые новые концепции, которые нет в декларативном программировании. Я согласен со многими из вышеперечисленных плакатов, что бит об этом "слишком тяжелый" - это миф, это было сделано.

Ответ 11

Итак, мой вопрос в том, должно ли функциональное программирование преподаваться в школе до императива, и если да, то почему это не более распространено, чтобы начать с него?

Хотя мне не посчастливилось начать с функционального языка, у меня есть коллеги, которые это сделали. У меня также был друг, который изучал математику, и единственным языком, который он изучил в школе, был Haskell!

На самом деле есть две вещи: информатика и компьютерная инженерия. Хотя линия очень тонкая, ИМО, она очень сильно зависит от курса (как упоминалось выше) и соответствующей области фокуса отдела, на каком языке вырезаете свои зубы. Большинство инженерных школ начинаются с одного из C, С++ или Java, которые имеют потенциально большой рынок труда. Другие могут начинаться с Lisp, Haskell и т.д.

Ответ 12

Функциональное программирование проводится в большинстве университетов. Часть причины, которую он не преподавал в старшей школе, вероятно, объясняется тем, что миф "Функциональное программирование - это трудный".

Ответ 13

Не знаю, о вашей школе, в моих студенческих исследованиях ML был неотъемлемой частью курса основных языков программирования, и был добавлен дополнительный курс учебной программы, посвященный Haskel.

Ответ 14

Честно говоря, я думаю, что это неправильный вопрос.

Если цель вводного класса состоит в том, чтобы преподавать основную компьютерную науку, алгоритмы, программно решать проблемы, то ваш курс является фундаментальным, и вы можете выбрать его на основе ясности, простоты и понимания ваших идей. Некоторые функциональные языки будут для вас отличными. В частности, если у студентов мало или вообще нет предыдущего опыта.

Обычно это не является целью многих вводных классов. Они могут потребовать определенные методы или определенные языки для более позднего курса. Они могут захотеть использовать определенные библиотеки и т.д. Возможно, им просто нужно сопоставить чекбоксы "els" с "els".

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

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

Ответ 15

Думаю, да, да.

Кроме того, нет консольных приложений и нет "миксеров цветовой палитры", но сначала выполняются юнит-тесты.

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

По моему мнению, самые плохие методы кодирования (запахи кода, антипаттерны) исходят из полного невежества в отношении теории и лучших практик.

Итак, сначала научите их F #, запретите использование консольных входов/выходов и графических интерфейсов и используйте только модульные тесты.

Во-вторых, научите их императив/функциональный смешанный стиль в контексте ООП с полным использованием и объяснением шаблонов проектирования.

Затем - и ТОЛЬКО, они могут попытаться поместить clickybuttons где-нибудь, возможно, в качестве награды. Но теория и хорошие методы кодирования в первую очередь. В противном случае мы создаем следующее поколение "RAD" - жертв, которые не могут даже правильно использовать отступ и ошибаются ctrl + c/ctrl + v для разработки программного обеспечения.