F#,印度数学教育与优秀编程
gisspace 转帖

这个周末,我终于可以坐下来做我在一年来一直承诺要做的事情:我开始应用F#。这次体验相当有趣。十多年来,我第一次不能只是通过坐着瞧一些样本代码来理解一门语言。

这次体验强化了当前通用编程语言的可悲状况。确实,过去我曾多次抱怨过VB.NET、C#、Java等语言的平庸之处。但明白我的所作所为对我的思考方式有着重大影响,这引起我的强烈兴趣。

我在11年级使用EdScheme时初次遇到一种函数编程语言。虽然F#的语法与EdScheme大有不同(EdScheme是Scheme的一个版本,是Lisp的一个术语;F#以OCaml为基础),它们的许多原理是一样的,特别是在“标签”与“值”相对的概念方面。

在函数编程语言中,有一种避免(或完全禁止)“值”概念的倾向。相反,每个标识符实际上作为一个标签,引用一个特殊的函数。

例如,“let x=5+y”并不是设定x的值等于y加5得到的值。相反,x是一个函数,调用后,它计算5+y并返回结果。如你所见,这种思维方式与我们大多数人学会的过程代码截然不同。

说明一下,我在“过程代码领域”中包含了面向对象(OO)代码,因为在最原始、低级的层次,每个OO程序都以一个非常传统、过程化的思考过程结束。换句话说,OO只是访问和编写过程代码的一个非常优秀和有组织的方法。

姑且不谈那一点。我发现我的思维很难接受某些概念。让人感到沮丧的是,我过去了解这种情况。并不仅仅是因为我有些迟钝或缺乏练习,我发现自己难以接受F#的思考方式。

想象一下,如果你去骑自行车,但由于你开了15年的汽车,你的脚总是不由自主的伸向油门处;你说的情况和这类似。

这让我记起我在几个月前的一次谈话。与我交谈的是一位由印度访美的程序员,他和我彼此相当熟悉,他做程序员已有相当长一段时间了,可能和我的时间一样长。他和我谈到教育。

众所周知,印度、中国和许多其它国家在数学教育上远远超过美国。因此我问他在印度如何教授数学。我的问题让他感到十分困惑,好像学习数学还有别的方法,而这是他第一次听说似的。

“从书本,通过黑板上的例子(学习数学);还有别的方法吗?”我向他询问计算器和电脑的使用情况,这两种工具在美国的数学教育中应用广泛。

他对我解释说,印度高中禁止使用计算器;大学也只允许使用计算器进行基本的计算(如加、减、乘、除、指数、平方根、对数和自然对数);他们反对使用计算器甚至达到这样的程度:使用计算器可能会招致奚落和羞辱。

这听起来与美国的教育环境全然不同,在美国,学校如今要求七年级的学生拥有T1-85——一种可能比巡航导弹的导航系统还更加强大的计算器。

所有这一切归结于基本的思维方法。编写代码(并写出好代码)需要某种思维能力。我的多次经验证明:一旦某种思维方式得以确定,就很难发生改变。对F#而言,当我在经验极为不足时可以轻松学会的思维方式却因为如今经验丰富而变得艰难起来。

一所摇摇欲坠的房子建立在优秀的早期教育打下的牢固思维基础之上,如果我希望建立一幢漂亮的新房子,就必须将其摧毁。但如果我推倒这间危房,至少我还有一个坚固的基础,干净的水井和完整的管道设备。

那些企图在松软地基上建立一间摇摇欲坠的房子的人将会遇到严重的问题。这也是我为何如此关注普通教育的缘由。

我知道我可以学会F#。虽然我的学习过程要比平常人困难得多,但学会的可能性依然很大。我只是需要一直自我提醒函数语言的运行机制,这样就不存在什么问题。

但对于缺乏那种经历的人而言,缺少基本的思维基础,他们怎么能学会它呢?对此我一片茫然。了解一种函数编程语言是成为程序员的先决条件吗?当然不是。

许多优秀的程序员并没有接触过函数编程语言。但是,从这种经历汲取的思维方法却异常宝贵。我知道,我学习EdScheme的经历对我成为一名优秀的程序员大有裨益,即使一段时间以来我一直陷入“通用OO语言”的怪圈之中。

所以,与印度朋友交谈后,我感到十分担心。在我看来,印度、中国和其它许多国家的学校似乎为他们的学生打下非常优质的普通教育基础。

我看着我的兄弟姐妹(我比他们大得多)学习的“数学”,我可不希望让我的孩子接受这种糟糕的“教育”(我还没有正式成为父亲,但几天或几个星期后就会做父亲!)我喜欢看到人们接受最好的教育。电脑和高级计算器打下的数学基础并不能使你成为一名优秀的程序员。

我想,一旦我完成这段F#经历(我希望了解更多内容,以便评估它在现实编程中的适应性),就该是返回基础理论的时候了。几个星期以前,一名读者推荐了几本ER Tufte的书籍,我想我应以此为起点。

在我当前的任务中,自己动手的编程工作已减到最少。我需要再次温习我的编程原理,尽量做到最好。(文/Justin James)

F#,印度数学教育与优秀编程相关推荐

  1. [转]F#,印度数学教育与优秀编程

    这个周末,我终于可以坐下来做我在一年来一直承诺要做的事情:我开始应用F#.这次体验相当有趣.十多年来,我第一次不能只是通过坐着瞧一些样本代码来理解一门语言. 这次体验强化了当前通用编程语言的可悲状况. ...

  2. 数学建模竞赛用python_2018全国中学生数学建模与Python编程夏令营

    全国中学生数学建模与Python编程夏令营招生简章 为什么要学习数学建模? 1)国务院关于新一代人工智能发展<规划>:在中小学阶段设置人工智能相关课程,实施全民智能教育项目,在中小学阶段设 ...

  3. python数学建模大赛_2018全国中学生数学建模与Python编程冬令营

    全国中学生数学建模与Python编程冬令营招生简章 为什么要学习数学建模? 1)国务院关于新一代人工智能发展<规划>:在中小学阶段设置人工智能相关课程,实施全民智能教育项目,在中小学阶段设 ...

  4. 中国AI技术领先,是因为数学好?美国杂志直指中美数学教育差距

    (给机器学习算法与Python学习加星标,提升AI技能) 本文由机器之心(nearhuman2014)整理 美国 CS 专业超过 64% 博士生和近 70% 的硕士生是留学生,数学博士学位有一半授予了 ...

  5. 转:V.I. Arnold 论数学教育

    V.I. Arnold 论数学教育 2011-03-14 08:42 V.I. Arnold 论数学教育  地点: Palais de Découverte in Paris 时间 1997年3月7日 ...

  6. 从小害怕数学的他,却成为了科普数学教育的数学家

    谈到数学,你们会想到什么? 也许部分模友们会想到数学上的公式.定理.几何图形.微积分等等, 也许会有模友们想到高数,(多数大学生的痛) 也许大家还会想起高中数学老师课堂上的"循循教诲&quo ...

  7. 华罗庚先生的数学教育思想

    我虽然从学生时代起就多次见过华罗庚先生,但并无机会当面聆听他的谈话.这里提到的华先生的数学教育思想,都已经公开发表.这些耳熟能详的名言,已经深刻刻印在中国数学教育的历史上.我只是千千万万受益者中的普通 ...

  8. 随记:我们需要怎样的数学教育?

    注:这篇文章里有很多个人观点,带有极强的主观色彩.其中一些思想不见得是正确的,有一些话也是我没有资格说的.我只是想和大家分享一下自己的一些想法.大家记得保留自己的见解.也请大家转载时保留这段话. 我不 ...

  9. 利用支持MicroPython的TPYBoard开发板自制PM2.5检测仪(萝卜教育学科式编程)

    2019独角兽企业重金招聘Python工程师标准>>> 秋冬季节,雾霾天气的持续,让人们对空气质量的关注程度提升.而近期人们对于空气质量的关注总也绕不开一个词--"PM2. ...

最新文章

  1. 本地如何使用phpstudy环境搭建多站点
  2. javascritp笔记1
  3. oleread.php,PHP的垃圾回收机制详解
  4. Leetcode232使用栈实现队列
  5. 已知三角形三边长怎么求面积_已知三角形三边求面积的公式——海伦公式
  6. top.location.href和localtion.href代码剖析
  7. jquery checkbox 选中、改变状态、change 和 click 事件
  8. MVVM和MVC有什么区别
  9. JAVAEWEB实现文件的上传案例
  10. 不同程序语言的注释和变量要求
  11. activeMQ 的kahadb存储引擎分析
  12. windows Service 之调试过程
  13. 重新审视虚拟桌面存储
  14. kubernetes视频教程笔记 (27)-集群调度-污点和容忍
  15. 保存Google、Bing翻译的语音
  16. 超详细的OpenCV入门教程,12小时带你吃透OpenCV。
  17. minist数据集训练与测试
  18. 魔兽和星际的最大差别
  19. Ubuntu20.04更换系统默认启动内核
  20. sony android mp3播放器,高音质与流媒体兼具,索尼 NW-ZX500 安卓音乐播放器评测

热门文章

  1. 打印机显示另一台计算机正在使用,惠普打印机显示“由于另一个程序或另一台计算机正在使用联网的HP成像设备因此无法执行”怎么办?...
  2. 【网络与系统安全实验】网络监听及防御技术
  3. 携程网呼叫中心落户永川
  4. 【人脸识别】FROM:提升遮挡状态下的人脸识别效果
  5. java解惑之字符之谜(谜题17)
  6. 干货 | 日访问过亿,办公IM及开放式平台在携程的实践
  7. 做一个美女图片大全那种的网站怎么提高网站流量?
  8. 基于布谷鸟优化的BP神经网络(分类应用) - 附代码
  9. python交互界面实例_什么是“面向对象”程序设计-以Python为例
  10. Docker构建Shipyard