1
27
实际上,有些学校已经这样做了。在我学习的地方(哥本哈根大学),他们在第一学期教SML,作为编程入门。然后他们教Java,作为OOP的介绍。 我觉得它非常好用,我同意你的观点,它比其他方法更好。 对于还不是程序员的人来说,函数式编程是相当直观的。它能更好地映射出我们在高中或更早的时候学过的数学知识,所以那些还没有接触到命令式编程的人通常会很容易地学会它。 事实上,有一种趋势是,刚开始编程的人在注册时会选择SML 更快 比那些已经学习了Java或C++的人。 从命令式到功能式似乎有一个很大的概念跃迁,但对大多数人来说,相反的情况似乎要容易得多。学生在学习SML后,一般不会发现Java很困难。一旦你了解了编程的“纯”概念,那么粘合副作用就相当简单了。但是,如果您对编程的全部理解都是基于副作用的,那么很难想象任何事情都有可能发生。 没有 他们。 我认为这种方法的一大好处是,函数式编程原则成为了编程工具箱的一个重要组成部分,而不是一些如果你想炫耀的话可能会用到的深奥的插件。即使是在命令式语言编程时,我认为在函数式语言中有你的背景也是有好处的。即使是在像C这样的低级编程中,考虑最小化状态和副作用,并习惯于高阶函数的概念也是有好处的(即使它们在语言中不可用)。 |
2
12
许多学校教授实用程序设计。他们中的一些人甚至先教。我认为麻省理工在很长一段时间里,在计算机编程课程的导论中,一直在教授这个计划。 在我的学校,我们将ML作为“比较编程语言课程”的一部分,每个人都必须参加。 无论如何,我认为对于来自命令式语言的人来说,函数式编程并不是那么难学。至少不是为了我。 很多人认为像Haskell和Scheme这样的语言没有被广泛采用的原因是人们被命令式编程“破坏”了。那是胡说。 这些语言没有被广泛采用的真正原因是它们不使用大括号。说真的。 C/ALGOL语法样式很流行,因为人们喜欢它的外观。 增加功能程序采用的关键是不要谈论haskell有多大,副作用有多严重,或者反复说“monad”这个词。相反,只需创建一种使用大括号和分号的函数语言。人们会使用它。 |
3
9
很多(大多数?)学校教授功能编程。因为许多原因,很少有人先教它难。
|
4
5
这可能是一个思想共享的问题,因为大多数教师/教授也可能首先学习命令式风格。 另外,我想还有更大范围的工作可以用来教授违纪风格。 |
5
2
我只能假设OOP似乎是最受欢迎的流行语/风格,所以学校坚持这一点, 我从一开始就被教授OOP设计,直到最近我才自学编程的功能风格,我可以看到它有它的优点。 |
6
2
编辑: 以下内容反映了原始标题, 为什么学校不教函数式编程? “学校有教师,而不是教授。学校老师不会自己写课本。 允许教师购买教材的教科书公司是最大的问题。教科书公司很快就跳上了几年前的“下一件大事”。函数式编程已经走到了尽头。许多教师不能或不允许在没有教科书的情况下教授课程,因此课程选择通常遵循大供应商提供的教科书。 |
7
1
首先,我发现你问题的基础是错误的,因为我是在学校教函数式编程的。(这不是我刚开始做的,但我们做了一些功能性编程。) 第二,我质疑从功能编码到命令式编码的转换是否容易。我觉得事情不会像你想象的那么简单。 第三,编程(对大多数人来说)是一种工作技能。绝大多数商店使用命令式编程。因此,学习命令式编程对未来的编码人员来说是最有用的。 |
8
1
命令式编程的清晰控制流程有助于在教学环境中实现和分析算法。面向对象编程是对它的一种方便的扩展,所以它自然是最常用的。另一方面,函数式编程(实际上是任何类型的声明式编程)是一个完全独立的范例,它需要一整套新的考虑因素(性能和其他方面),如果您首先理解命令式编程,那么其中许多因素更容易可视化。毕竟,归根结底,它归结为一种命令式语言。 |
9
1
学校里的课程必须有一个历史的角度来显示我的年龄。功能性是我开始学习的全部内容。 但把这些放在一边,你必须从某个地方开始,所以其中一个必须是第一个。如果你从命令开始,那么当你学习功能性的东西时,你所能达到的东西将不在那里,你将不得不习惯于以不同的方式做事情。如果您从功能性开始,然后转向命令式,那么您必须习惯于学习新的概念/结构,并记住它们是它所使用的。 每当你在编程时,你都试图解决一个问题。把这两个都放在工具箱里是很好的,可以用来解决手头的问题。这就是为什么我认为最好从IMeractive开始,然后学习实用性:如果你发现自己在寻求一些不存在的东西,那就意味着选择了错误的工具来解决你的问题。 除此之外,我认为这是一个折腾。 |
10
1
实际上,我只是在一个正在发展的人的谈话中 Bootstrap (目前由公民学校开办的编程课程)。他似乎认为函数式编程风格为代数提供了一个更好的背景,因为它涉及函数作为过程和对象的概念(具有它们自己的属性)。(当然,声明性编程语言也可以有一流的函数,但重点并不是那么多。) 就我个人而言,我认为先教函数式编程是值得的。声明性方法在数学课上很早就被教授了,因此函数式编程提供了一些声明性编程没有的新概念。我同意上面的许多海报,关于它“太难”的一点是一个神话,它已经做到了。 |
11
0
虽然我没有幸运地从一种功能性语言开始,但我确实有同事这样做了。我还有一个朋友学数学,他上学时唯一学的语言就是哈斯克尔! 实际上有两件事:计算机科学和计算机工程。虽然这条线很细,但在我看来,它很大程度上取决于课程(如上所述)和相关部门的重点领域,即用哪种语言来切齿。大多数工程学校从C、C++或Java开始,它们的就业市场潜力很大。其他,可以从Lisp、Haskell等开始。 |
12
0
大多数大学都教授函数式编程。高中不教这门课的部分原因可能是因为“函数式编程很难”的神话。 |
14
0
老实说,我认为这是个错误的问题。 如果一个入门课程的目标是教授基本的计算机科学、算法、以编程方式解决问题,那么你的课程是基础课程,你可以根据清晰、简单和理解你的想法来选择一门课程。一些函数式语言将非常适合这一点。尤其是如果学生以前的经验很少或没有。 不过,通常这并不是很多入门课程的目标。在以后的课程中,他们可能需要某些技术或语言。他们可能想利用特定的库等。他们可能只需要匹配某人的“功能”复选框列表。 所以我认为你想把你的问题抛在脑后。弄清楚这门课程实际上想要达到什么样的目的,并为这个目的选择最好的语言。在某些情况下,这可能是一种功能性语言。 如果你真正要问的是如何最好地教授入门级的编程和计算机科学,那是一种不同的蠕虫。 |
15
0
我想,应该是的。 另外-没有控制台应用程序和“调色板混音器”,但先进行单元测试。 只有当学生表现良好并且写的测试用例覆盖率极高时,他们才可以快速查看如何从键盘读取字符。 在我看来,大多数糟糕的编码实践(代码气味、反模式)来自于对理论和最佳实践的完全无知。 所以-首先教他们F,禁止使用控制台I/O和GUI,只使用单元测试。 其次,在OOP环境中教他们命令式/功能性混合样式,并充分使用和解释设计模式。 然后-只有这样他们才能尝试把点击按钮放在某个地方,也许作为奖励。但首先是理论和良好的编码实践。否则,我们会创建下一代“rad”-受害者甚至不能正确使用缩进,并将ctrl+c/ctrl+v错误地用于软件开发。 |
nanounanue · 使用python和高级操作符的函数管道 6 年前 |
Zazaeil · 这个特定的递归可以用尾部优化的方式重写吗? 6 年前 |
corvid · 使用ramda通过变量进行升序/降序 6 年前 |
CodingNow · Scala:如何制作多种方法并逐一应用? 6 年前 |