查看原文
其他

程序员必须要会算法吗

2017-11-21 IT哈哈

很多人可能是好莱坞大片看多了,以为计算机神通广大,但事实不是这样的。计算机其实是一种很傻的工具,傻到几乎没有智商,它可以连续几年做同一件事情而毫无怨言,但是如果你不告诉他怎么做,他什么事情也不会做。最有创造性的活动其实是由一种被称为“程序员”的人做的,计算机做的只不过是人类不愿意做的体力活而已。比如图像识别技术,需要一个字节一个字节地处理数据,提取数据的特征值,然后在海量的数据中比较,匹配这些特征值。计算机愿意做,但前提是你要告诉他怎么做。算法可以理解为这样一种技术,他将告诉计算机怎么做。有人将编程理解为搭积木,直接用别人开发好的组件,库,甚至是类或API就行了,并且美其名曰“不用重复发明轮子”。我认为这其实就是所谓的系统集成,如果一个程序员每天的工作就是搭积木,那将是令人十分羡慕的事情,但是我知道事实并不是这样的。这样搭积木式的编程计算机就可以做,没有必要让人来做,因为人工的成本高于计算机。我遇到的更多的是在论坛里发帖求助的人,比如“求代码,把一个固定格式的文本文件读入内存”,再比如“谁能帮我把这个结构数组排序啊,书上的例子都是整数数组排序”。他们是如此的无助,如果不是论坛对回帖有积分奖励的话,恐怕不会有人理他们。


我要说的是,大多数程序员并不需要知道各种专业领域里的算法,但是你要会设计能够解决你面临问题的算法。一些领域内的经典问题,在前人的努力之下都有了高效的算法实现。但是更多情况下,你所面临的问题并没有现成的算法实现,需要程序员具有创新精神。算法设计需要具备很好的数学基础,但数学并不是唯一需要的知识,计算机技术的一些基础学科(比如数据结构)也是必须的知识,有人说:程序=算法+数据结构,这个虽然不完全正确,但是提到了计算机程序最重要的两点,那就是算法和数据结构。算法和数据结构是永远紧密联系在一起的,算法可以理解为解决问题的思想,这是程序中最具有创造性的部分,也是一个程序有别于另一个程序的关键点,而数据结构就是这种思想的载体。


重申一遍,并不是要求每个程序员都精通各种算法。大多数程序员可能在整个职业生涯中不会遇到像ACM组织的国际大学生程序设计竞赛中的问题,但是说用不到数据结构和算法则是不可想象的。

来源:算法的乐趣




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存