为了账号安全,请及时绑定邮箱和手机立即绑定

狼和香辛料——程序员和算法

1.写在前面

在CS(计算机科学)应用高度普及,我们已经不能简简单单的定义一个程序员就是只做软件开发了。在我们的思维深处,总有这样一种观念,提到程序员,就会想到软件开发,将程序员和软件开发不知不觉划上了等号。

这真是一个愚蠢的错误,程序员绝不仅仅是软件开发,过去不是,将来更不是。开发和算法,就是程序的一体两面,就像旅行中的狼和香辛料,看似毫无关联,实则是漫漫探索生涯中不可分割的部分。

以下内容纯属个人想法,不作为任何参考~


2.什么才是真正的程序员?

今天早上,柳猫在 Google 上搜索的时候,偶然看到了一个帖子,作者声称:所有人都不该使用 C++ 标准库里的 make_heap 函数,因为,几乎没有人是在正确的使用它。柳猫立即在心里大骂这是多么荒谬的断言,因为任何人只要上过基本的算法课程,都会知道如何正确的使用make_heap。

这不禁让柳猫开始思考,如何看待那些不知道堆(heap)为何物的程序员,以及那些根本并不需要知道它为何物的程序员,到底哪种人才是真正的程序员。

在柳猫看来,这两种人,我们都应把他们称作程序员。

程序员这个词涵盖了一个异常宽泛的技术谱系和层次。从纵坐标上讲,一个程序员,从能仅仅会用 vbscript,到能为因特尔 CPU 写编译器、为航空公司开发系统运算软件。从横坐标上讲,他可能是专长于数据库,或能从 CPU 指令级别调整性能,或能开发并行处理库,或制造物理过程引擎,或做图片处理,或创作 3D 模型,或写打印机驱动,或使用 coffeescript,HTML5,和 AJAX 来开发网站应用,或使用 nginx 和 PHP 开发 LAMP 架构 web 应用,或他能编写网络应用库或能做人工智能科研。真实情况是,他们,都是程序员。

3.关于语言的争论

我们的世界正在被软件吞噬。编程将会和数学和语文一样成为基础课程。四个R将会成为主流——Reading (阅读), ‘Riting, ‘Rithematic (数学), 和 Recursion (递归算法)。如果再说某某人是一个程序员将会是一句废话,因为超过 10% 的人口将会具有一定水平的编程能力。“程序员”这个词涵盖了如此多的内容,如果你称自己为程序员,就好象称自己为“科学家”而不是“物理科学家”。我们还能有其他称呼吗?

图片描述
有人试图做了这方面的尝试,指出一个程序员和一个计算机科学家直接的不同之处,但说的毫无价值,根本无法区分我和一个从大学毕业的人工智能博士生之间的区别。他懂得多维数学分析,用函数式语言计算,这些是我不通过数年的研究是无法理解的。而我能够写出速度超快的,灵巧的 C++ 或 HLSL 汇编程序,能变戏法似的处理和变换矩阵,在屏幕上绘出漂亮的图像。我说的这两种情况都是出于完全不同的原因下的极其复杂的工作,他不能完成我的,我不能完成他的。一种操作对一个人很熟练,对另外一个人却是困难的。但我们都是程序员。只是在我们各自的领域里的程序员,我们是图像计算程序员或人工智能程序员或[xxx]程序员。

为什么会有这样毫无目标的语言论战和毫无意义的关于哪一种语言更好用的争论吗?为什么人们 —— 除非在自己的小圈子里当“XX方法”对所有人表示同一个意思的时候 ——永远不能在这些问题上达成共识的原因吗?

image

答案就是因为“程序员”这个职业赋予了过多的内容。我们把自己看成了由数个程序员的集合—— 每个子集都专长于某项东西,我们错误的认为我们的观点能够适用于我们的专长之外的领域。我们是工业工程师却试图想告诉化学家如何进行他们的试验。我们是建筑师却试图想告诉英语专业的学生如何创作一篇论文 —— 只是因为我们都用了大量的纸张。

这种态度深深的根植于计算机科技界的核心深处。计算机科学的主要目的是用一些基本数据结构来帮人们完成以前需要人做的所有事情。如果你认为这完全是编程的事,那你就错了,这是不可能的。我们忘了,这些数据结构只是我们在神奇的数据计算领域需要的,我们忽略了,对于不同的实现,需要对完全不同领域的编程,针对的是完全不同的用户。


4.大爷还是大爷

Donald Knuth 深知理论和实现之间的不同之处 —— 我们需要认真的理解这些关于理论和特定实现的忠告之间的区别。

在这里,柳猫不得不提到 Donald Knuth——高德纳(Donald Ervin Knuth,1938年 1 月 10 日-),出生于密尔沃基,美国著名计算机科学家,斯坦福大学计算机系荣誉退休教授。高德纳教授被誉为现代计算机科学的鼻祖,在计算机科学及数学领域发表了多部具广泛影响的论文和著作。

高德纳最为人知的事迹是,他是《计算机程序设计艺术》(The Art of Computer Programming)的作者。此书是计算机科学界最受高度敬重的参考书籍之一。他创造了算法分析的领域,在数个理论计算机科学的分支做出初步贡献,此外还是排版软件 TeX 和字型设计系统 Metafont 的发明人。

高德纳 Donald Ervin Knuth

“注意上面这段代码;我只是感觉它没问题,但没有试过。” – Donald Knuth

image

这里,隆重推荐大佬的《《计算机程序设计艺术》(The Art of Computer Programming)》,每一个从事算法工作的秃头患者,都是他的忠实读者。


最后的最后,带着算法之神的祝福,柳猫祝福所有的所有人生路上的程序猿们,都能带着自己的狼和香辛料,在一次又一次旅途中,见识到属于自己的风景~

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消