在命令式编程之前是否应该教授函数式编程?

Zif*_*fre 31 functional-programming

在我看来,函数式编程是一件好事.它消除了状态,使得自动使代码并行运行变得更加容易.

许多首先教授命令式编程风格的程序员发现学习函数式编程非常困难,因为它是如此不同.我开始怀疑那些先学习函数式编程的程序员是否会发现很难开始命令式编程.看起来它不会像其他方式那么难,所以我认为如果更多的程序员首先学习函数式编程会是一件好事.

所以,我的问题是,如果在命令式之前在学校教授函数式编程,那么,为什么从它开始并不常见?

jal*_*alf 28

实际上,有些学校已经这样做了.在我学习的地方(哥本哈根大学),他们在第一学期教授SML,作为编程的介绍.然后,他们之后教Java,作为OOP的介绍.

我认为它的效果非常好,我同意你的看法,它比其他方式更好.函数式编程对于尚未成为程序员的人来说相当直观.它更好地映射到我们在高中或更早的时候被教授的数学,所以那些尚未接受命令式编程的人通常会毫不费力地接受它.

实际上,有一种趋势是,在注册时不熟悉编程的人比那些已经学习过Java或C++的人更快地选择SML .

从命令到功能似乎有一个很大的概念上的跳跃,但反过来似乎更容易.学习SML后,学生在接触Java时通常不会发现Java困难.一旦你了解了编程的"纯粹"概念,粘贴副作用就相当简单了.但是如果你对编程的全部理解都是基于副作用,那么很难想象没有它们就有可能做到.

我认为这种方法的一大好处是功能编程原则成为编程工具箱的重要组成部分,而不是你想炫耀时可能会使用的一些深奥的附加组件.即使用命令式语言编程,我认为将您的背景用于函数式语言也是有益的.即使在像C一样低级编程时,考虑最小化状态和副作用,并习惯于高阶函数的概念(即使它们在语言中不可用)也是有益的.

  • 我自己作为学生的经历是先是Scheme,然后是C,然后是OCaml(编译器课程),而不是Java中的OO.Scheme非常棒,作为完整的初学者,我们可以做一些有趣的事情,比如推理系统或符号微积分.我一直在教C作为一门初学者语言(我还没有控制那个选择),并且对一些学生来说状态是一个难点.但最大的问题是概念噪音.C很好但很难,Java更糟糕.像Scheme或Smalltalk这样的最小语法和语义非常适用于入门课程.对于高级OO,我会选择Smalltalk或Eiffel而不是其他任何东西. (2认同)

Sco*_*ski 12

许多学校教授函数式编程.他们中的一些人甚至先教它.我认为麻省理工学院长期以来习惯于在计算机编程课程的介绍中教授计划.

在我的学校,我们将ML作为"比较编程语言课程"的一部分,每个人都需要参加.

无论如何,我认为功能编程对于来自命令式语言的人来说难以学习.至少它不适合我.

很多人认为像Haskell和Scheme这样的语言没有得到更广泛采用的原因是因为人们被命令式编程"毁掉"了.那是胡说八道.

这些语言未被广泛采用的真正原因是因为它们不使用花括号.认真.

C/Algol语法风格很流行,因为人们喜欢它的外观.

增加功能性编程的关键不是谈论Haskell是多么伟大,副作用是多么邪恶,或者反复说"monad"这个词.相反,只需创建一个使用花括号和分号的函数式语言.人们会用它.

  • Python非常流行,不使用花括号和分号. (9认同)
  • 当你是对的时候,你是对的. (3认同)
  • 这让我发笑,但我认为你是对的. (2认同)

jfc*_*tte 9

许多(大多数?)学校教授功能编程.由于许多原因,很少有人会先教它.

  • 功能语言的大多数开发环境都很糟糕,需要广泛的编程知识才能充分利用.这变得越来越不真实,但我们仍然远离Visual Studio for Haskell.

  • 跳进'华而不实的东西'更难.GUI工具包和库很适合大多数功能语言.在屏幕上显示内容并奖励学生非常重要.

  • 由于历史原因,自学成才的程序员倾向于使用命令式/ OO语言.BASIC年轻时的可用性,知道他们最喜欢的游戏是用C或C++编写的,你可以说出来.

  • 简单的资源和函数式编程语言教程很难得到.在Code Project上将C#样本的数量与Lisp样本进行比较.请记住,Lisp已经超过5倍了.

  • @kgrad:我不同意.如果你刚开始,FP并不比OOP更难掌握.一旦你深深扎根于命令式编程思维模式,FP就变得更加难以学习. (9认同)
  • 我非常不同意"奖励学生"部分.当我在大学时,很少有任务有GUI,而那只是5年前我毕业的时候.我真的希望事情没有那么大改变. (7认同)
  • 数学是不可改变的.如果在等式中x = 5,则x保持该值.您无法为其指定新值.学生已经习惯了.无论如何,我的观点并不是说FP更容易*,只是因为对于从头开始的人而言,这并不难*.就像我在回答中说的那样,我看到很多人开始学习FP,这不是问题.他们并不挣扎,就像熟悉命令式编程的人一样.他们并不期望变量应该是可变的. (6认同)
  • 我不认为你所说的'华而不实的东西',在介绍性的CS /编程课中有一些事情要做.它更多的是概念. (2认同)

chi*_*s42 5

它可能是一个思想共享的问题,因为大多数教师/教授可能也首先学习命令式的风格.

另外,我猜想有更多的工作可用于教授不完美的风格.