Функциональное программирование должно преподаваться перед императивным программированием? [закрытый]

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

31
задан Zifre 23 August 2013 в 15:18
поделиться

15 ответов

Actually, some schools already do it this way around. Where I study (University of Copenhagen), they teach SML in the first semester, as an intro to programming. Then they teach Java afterwards, as an intro to OOP.

I think it works extremely well, and I agree with you it's better than the other way around. Функциональное программирование довольно интуитивно понятно тому, кто еще не является программистом. Это намного лучше соответствует тому, чему нас учили как математику в старшей школе или раньше, поэтому люди, которые еще не были подвержены императивному программированию, обычно воспринимают это без особых проблем.

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

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

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

Гораздо сложнее представить, что все возможно без их.

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

Гораздо сложнее представить, что все возможно без их.

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

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

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

28
ответ дан 27 November 2019 в 22:07
поделиться

Many schools teach functional programming. Some of them even teach it first. I think MIT, for a long time, used to teach scheme in its introduction to computer programing classes.

At my school we covered ML as part of a "comparative programing languages class" that everyone was required to take.

In any case, I don't think functional programming is that difficult to learn for people coming from imperative languages. At least it wasn't for me.

A lot of people think the reason languages like Haskell and Scheme haven't gotten wider adoption is because people are "ruined" from them by imperative programming. That's nonsense.

The real reason those languages haven't seen wide adoption is because they don't use curly braces. Seriously.

The C/Algol syntax style is prevalent because people like the way it looks.

The key to increasing adoption of functional programing is not to talk about how great Haskell is and how evil side effects are, or to say the word "monad" repeatedly. Instead, just create a functional language that uses curly braces and semi-colons. People will use it.

12
ответ дан 27 November 2019 в 22:07
поделиться

Many (most ?) schools teach functionnal programming. Very few teach it first tough, for many reasons.

  • Most development environments for functionnal languages suck, and require extensive programming knowledge to use adequately. This is становится все менее и менее верным, но мы все еще далеко от Visual Студия для Хаскелла.

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

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

  • Простые ресурсы и учебные пособия для функциональные языки программирования harder to come by. Compare the number of C# samples to Lisp samples on Code Project. Keep in mind that Lisp is over 5 times as old.

9
ответ дан 27 November 2019 в 22:07
поделиться

It could possibly be a mindshare issue, as most teachers/professors probably learned imperative styles first as well.

Also, I would guess that there is far larger body of work available for teaching imperitive styles.

5
ответ дан 27 November 2019 в 22:07
поделиться

I can only assume its the fact that OOP seemed to be a favorite buzzword / style, So Schools stuck to that,

I was taught OOP design from the get go, its only recently ive been teaching myself the Functional style of programming and i can see it has its advantages.

2
ответ дан 27 November 2019 в 22:07
поделиться

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

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

2
ответ дан 27 November 2019 в 22:07
поделиться

First, I find the basis of your question faulty because I was taught functional programming at school. (It wasn't what I started with, but we did do some functional programming.)

Second, I question the ease of transferring from functional coding to imperative coding. I don't think it'd be as easy as you make it out to be.

Third, programming is (for most people) a job skill. The vast majority of shops use imperative programming. Therefore, it's most useful to future coders to learn imperative programming.

1
ответ дан 27 November 2019 в 22:07
поделиться

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

1
ответ дан 27 November 2019 в 22:07
поделиться

Functional programming is taught in most universities. Part of the reason it's not taught in high school is probably due to the "Functional programming is to hard" myth.

0
ответ дан 27 November 2019 в 22:07
поделиться

Dunno about your school by in my undergrad studies ML was an essential part of the basic programming languages course and there was an extra curriculum course dedicated to Haskel.

0
ответ дан 27 November 2019 в 22:07
поделиться

I was actually just at a talk given by the person who's developing Bootstrap (a programming curriculum currently run by Citizen Schools). He seemed to think the functional programming style provided a better background for algebra, since it hits on the concept of functions as both processes and objects (with properties of their own). (Of course, declarative programming languages can have first-class functions, too, but the focus is not on that nearly as much.)

Personally, I think that teaching functional programming first is worthwhile. The declarative approach is taught very early on in math class, so functional programming provides some new concepts that declarative programming does not. I agree with many of the above posters that the bit about it being "too hard" is a myth, it's been done.

1
ответ дан 27 November 2019 в 22:07
поделиться

Honestly, I think this is the wrong question to ask.

If the goal of an introductory class is to teach basic computer science, algorithms, programmatically solving problems, then your course is fundamental and you can choose one based on clarity, simplicity, and getting your ideas across. Some functional languages will be great for this. Particularly if the students have little or no previous experience.

Usually this isn't really the goal of many introductory classes, though. They may require certain techniques or certain languages for a later course. They may want to leverage particular libraries, etc. They may just have to match someone elses checkbox list of "features".

So I think you want to turn your question on its head. Figure out what it is the course is actually trying to achieve, and pick the best language you can for that purpose. In some cases, this may be a functional language.

If what you are really asking is how best to teach introductory level programming and computer science, that's a different can of worms.

0
ответ дан 27 November 2019 в 22:07
поделиться

So, my question is, should functional programming be taught in school before imperative, and if so, why is it not more common to start with it?

Though I was not fortunate enough to start off with a functional language, I do have colleagues who did. I also had a friend who studied Math, and the only language he learned while in school was Haskell!

There really are two things: Computer Science and Computer Engineering. Though the line is very thin, IMO, it depends a lot on the course (as mentioned above) and the concerned department's focus area which language to cut your teeth with. Most engineering schools start with one of C, C++ or Java -- which have a potentially large job market. Others, may start with Lisp, Haskell etc.

0
ответ дан 27 November 2019 в 22:07
поделиться

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

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

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

Кроме этого мне кажется, что это бросок.

1
ответ дан 27 November 2019 в 22:07
поделиться

Я думаю, это должно быть, да.

Также - никаких консольных приложений и никаких «микшеров цветовой палитры», но сначала юнит-тесты.

Только в том случае, если учащиеся ведут себя хорошо и пишут тестовые примеры с очень высоким охватом, им МОЖЕТ быть позволено быстро изучить, как читать символы с клавиатуры.

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

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

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

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

0
ответ дан 27 November 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: