五千年(敝帚自珍)

主题:【整理】关于编程改革 -- 代码ABC

共:💬53 🌺271
全看树展主题 · 分页首页 上页
/ 4
下页 末页
家园 【整理】关于编程改革

看到两篇文章,似乎让我想到了什么。事实上,这些说法并不是最近才有的,不过......嗯,让我再想想。先记录下来

编程改革

也谈编程改革

家园 请教一下:没有高等数学基础,能做编程这行吗?

好像编程是很讲数理逻辑的事情,可是有些少年好像中学都没毕业,就自学编程,成为高手,是他们具有天生的数学潜质,还是数学不一定好,只有悟性高就行?

家园 在美国,当然能,在中国,可能够呛

首先,“编程这行”太广了。小学数学水平要是干微软,脸书,google的编程工作,可能够呛。但要是编个公司报表产生程序,其实能干得了。

我曾在编程这个行当里干了8年,我认为绝大多数编程工作只需小学数学。当然,有很多工作中学数学基础就可以干得更好。只有非常少的编程工作才需要更高深的数学。

但是做编程这行(其实任何一行都是)最主要的是找到这行的工作。在中国,老板至少也有高中数学水平,小学数学水平太露怯了,我认为很难找到工作的。

绝大多数老美的小学数学都没学好,所以他们当老板也问不出所以然来。而且因为数学太差,绝大多数也不愿意学或想学也学不懂。

根据这个文章外链出处,美国2008-2009年度计算机科学的本科毕业生比1984-1985年度还少。所以老中只要愿意转行做编程的大多数都能在美国找到工作。

我一个老美同事,计算机科学本科毕业,某天在饮水机旁拦住我问,可否将两个平均数相加除二来算总平均数。我到他办公室给他解释两个平均数产生时如果分母不同,不能相加除二(我知道他两个组不一样大)。此时另一个老美同事(电子工程本科毕业)打来电话,说他刚用微软Excel试了一下两组各五个,相加除二和十个总平均数是一样的,所以可以。

我一个大学同学曾在王嘉廉创立的软件公司CA工作。他说他的老美同事不知道两数之积的对数等于两数的对数之和。

所以,至少在美国,编程工作大概连小学数学都不需要。


本帖一共被 1 帖 引用 (帖内工具实现)
家园 编程要的不是数理逻辑能力

编程最基础的能力是抽象能力,也就是把实际问题转换成数学问题的能力。因为我们日常用的数学大多只需要小学算术能力,所以这绝大多数的转换确实不超过小学数学知识。这样就解释了为何小学数据都不及格的人也可以写程序。

另外,在许多程序员眼中,数学物理问题可以抽象成神秘的模块,只需要知道怎么调用就可以了,不需要了解内部机制。这些年成长起来的程序员尤其如此——现在还有谁是从空白的CPU开始写程序的?举一个抽象的例子:让一个小学数学不及格的程序员写开平方程序(sqrt函数)能行吗?当然可以!我们只需要告诉他一个迭代公式,然后让他明白只要不断地循环计算这个公式,直到前后差别小于某值就可以了。然后别忘了给那个函数取一个叫sqrt的名字。大多数程序员会说:哇哦,原来只用加减乘除就可以算平方了,真神奇!而更大多数的程序员则只需要从标准库调用就好了,开平方函数和一个能在Word文档中加水印的函数没有区别。这恰恰就是编程最基础的能力要求——抽象能力。

家园 其实中国也能

虽然大多数国内程序员都有本科以上的学历,但是其数学大致也就中学水平。个别极端的会退化到小学水平。

家园 知其然不知其所以然恐怕解决问题上有难度。

高级程序员恐怕数学要求比较高吧。

家园 编程要的是套公式的能力

我认为需要一般逻辑能力,并不需要太多数学。越高级的程序员恐怕数学忘掉的越多。

一般情况下,所有的问题都已经被人解决了。好的程序员应该会把一个大问题分成一堆小问题来各个套公式(copy&paste).高级程序员应该更知道怎么分成一堆小问题,并且什么公式更好和怎么套。

当然,你要是给INTEL写遍译器或库函数的高级程序员数学就要非常牛了。数学要求最高的应该是写数居加密程序的程序员。

家园 软件开发的分工不同

不同的分工对能力有不同的要求,研究算法的必须具备相当的数理基础;做架构、设计的强调抽象、管理;做实现的强调表达。其实写代码是用一种非人类的语言和非人类打交道,说到底是语言表达能力的问题——文科生的基本要求。

家园 那得看你做什么样的编程

首先,就像下面代码ABC说的,不管什么样的编程,都需要抽象能力,即建立模型的能力(不一定是数学模型)。其实我觉得如果想写出像样的程序,逻辑能力也非常重要。

但是如果想靠这一行吃饭,数学一定要好。本身抽象能力和逻辑能力就是数学的基石。往上走,一个好的程序员,计算机科学的算法一定要精通,因为在实际问题中,方方面面都会涉及到这些东西。基本的计算机科学的算法设计和分析,以离散数学和数理逻辑为基础,不需要太多的高等数学。但是近来所谓“大数据”大兴其道,程序员除了需要扎实的算法功底来对付“分布式”和“大规模”这些问题之外,也开始要能够理解机器学习,人工智能,优化,统计相关的东西。那些玩意儿所需要的数学基础就广泛了。如果想设计算法,一个计算机科学,或者应用数学,或者其他相关学科的硕士会有很大帮助。

如果再看除了计算机科学这帮人之外的各行各业,其实也有很多“专业”程序员。很多工程方向的程序员,必须精通应用数学才能玩得转。最极端的就是华尔街的矿工:名校理科博士型的程序员(矿工们轻拍)。

总之,不是每个程序员的数学都好。但是薪水越高的,数学越好,虽然他们不一定高等数学好(那大半是因为他们没有受过相关训练,不意味着他们做不了)。这个趋势统计上是没错的。

通宝推:铁手,
家园 同意,尤其最后那句,请大家注意“统计趋势”的含义。
家园 这个问题我也曾经想过很久

个人认为,这两篇文章都没有提到什么革命性的概念,算是对编程的方法微调了一下吧。

最大的矛盾是人的表达,总是模糊的,电脑的要求总是精确的。对电脑的输入,垃圾进去,只能是垃圾出来。

这两篇文章,我觉得这是提出一些简单的编程语言,(作者认为是更精确的语言,我则认为还有必要进一步论证是否更精确)然后依赖更聪明的编译器来执行。我对这种做法有点不以为然。

家园 这一段让我大汗……

我一个老美同事,计算机科学本科毕业,某天在饮水机旁拦住我问,可否将两个平均数相加除二来算总平均数。我到他办公室给他解释两个平均数产生时如果分母不同,不能相加除二(我知道他两个组不一样大)。此时另一个老美同事(电子工程本科毕业)打来电话,说他刚用微软Excel试了一下两组各五个,相加除二和十个总平均数是一样的,所以可以。

这个应该是国内小学数学的要求吧?

家园 手算开根号是初二内容...

虽然是选读吧

家园 写编译器用不着高深的数学

一本编译原理足够。

写数据加密程序也用不着数学,现在的DES,RSA算法早有了,照着套就是了。需要高深数学的是开发新的数据加密算法,以及——做黑客。

家园 同意楼下的,没什么太大的革命性

这两篇文章中所提到的东西前人也都思考过,也有过实践,不过从结果来看,都不能从根本上改变目前的编程状况。其中第一条就是效率问题。目前没有一种通用的新机制能在效率上达到现有主流语言的水平。这两篇文章叙述的东西可以在某个领域内取得成功,但是目前来看还不能通用化。

全看树展主题 · 分页首页 上页
/ 4
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河