程序员必须要会算法吗?

原创 2015年07月09日 22:50:35

编程之路

自己是在大学的课堂上开始学习编程的,最早学习的是C语言,全系英文授课,而且常有上机实验,过程极为痛苦。到学期中的时候,自己还是学的一塌糊涂。

感觉到这样下去期末肯定挂,于是便到图书馆借了几本经典的书连同教材一同钻研。那个时候自己还没有笔记本,因此需要经常到学校的机房去练习。写完的程序就存在邮箱里,自己给自己发一封邮件。一直到现在,自己的邮箱里都保存着数十封的邮件。

慢慢的开始觉得无聊的编程开始变的有意思,因为它是有规律的,一组输入就必然有着严格的运算结果与之对应。但现在看来,那时学会的基本都是如何查找字符串、斐波那契数列的递归实现等等,只求实现,不求效率。

到后来,又学习了VB的课程,有界面的程序比起黑洞洞的控制台程序看起来要高大上的许多。于是按钮、编辑框、文本框、复选框……等等,这些在当时认为“极先进”的东西不断的出现在自己的程序中,成为了自己编程时的标配。

也是从VB开始,Java、Python、LabView、JS、C#也都学习过,但大多都是工程需要,属于蜻蜓点水般的学习,而且大多伴随着”哪种编程语言强大好用的选择恐惧症中”。但真正学的比较多也应用的比较多的是MFC的编程,这主要是在《VC++深入详解》的指导下进行的自学。这本书虽说是针对VC6.0的老书,内容有些过时,但细致的分析使得写起程序来容易,边写边操作,让自己很受益。

(jie)(chu)了这么多编程语言,得到的结果却是更加迷惑的自己。每学一门语言,试验着别人的代码,大量的做着重复的事。自己编程的目的这是这样吗?


另一个世界

最近面临着找工作的压力,开始读有关数据结构、算法设计之类的书,并在Leetcode上刷题。在这个过程中,我像发现另一个世界般,学到了不一样的东西——链表、栈、队列、树的遍历、图的连通、字符串查找……等等。特定的结构,高效的算法时常让自己感叹“神奇”。

但同时自己也有着疑问:这些都是一名程序员所应学的吗?哪一门语言没有提供现成的经过千锤百炼、无数次优化的数据结构?哪一门语言没有提供性能优良的基础算法?为什么我们要去学习如何设计数据结构和基础算法?

就是这“为什么”让自己很苦恼。在网上搜索,见过的最有意思的一个回答来自知乎——

程序员要不要会算法等同于搬砖要不要学物理。

说的好有道理,我竟无言以对。因为很形象,让我记忆深刻。在贺利坚老师的博客下写了自己的疑惑,第二天的回复如下——

一条一条的汽车生产线,在各个厂家都已经建好了,是否我们都只去学开车,而不需要有人去学造车了?一样的道理,学习算法设计,(1)有人就要去为算法大厦添砖加瓦的,尽管这座大厦永无完工之日;而(2)有些人,会发明新的语言,为这种语言中配备算法“基础设施”;(3)有些人,深谙算法之道,借此理解函数接口中能体现出的道道,将别人提供的算法库用得恰到好处。而对算法一无所知的人,宝藏就在那里,却总是牵是附会地使用,做出漏洞百出的系统。所以,如果在求学阶段,不要放弃对算法修养的追求。

之前的所有自认为的“编程”只不过是在完成某个特定的任务,而不是着眼于一类问题。而数据结构和算法设计的目的在于解决一大类的问题。你写一个for循环、swith case 语句等,是在编程;你写一个树的遍历、图的连通判断算法等也是在编程。不同的是前者对一个具体的问题是适用的,而后者对一类问题是适用的。对于具体的任务,你可以用不同的语言来实现;但对于一类问题,总有着近乎相同的核心结构或者算法来应对。

最近这段时间读到的这些书、学到的这些算法才使我真正的感觉到编程的博大,而不是几个按钮、几个控件那么简单。真正高大上的是简洁高效的源代码。

避免陷入编程语言的纷争,立足于当前掌握的C++,去接触学习弄通所有相关的算法。这是自己的思考结果,也是将来的方向。

程序员是否必须会算法

提到“程序员与算法”,就必然要涉及一个基本问题,那就是“程序员是否必须会算法”。这是一个充满争议的问题,虽然并不像“生存还是毁灭”之类的选择那样艰难而沉重,但也绝不是一个轻松的话题。朋友们在我的“算法...
  • turingbooks
  • turingbooks
  • 2015年05月28日 11:26
  • 12147

为什么说程序=算法+数据结构!

没有算法的程序,只是一些代码的堆砌,谈不上是一个优秀的软件。 算法是软件的灵魂,得益于好的算法会给软件带来的往往都是质的变化,性能都是呈指数倍提高滴。 算法比较厉害的~去做大数据分析,数据挖掘,数值分...
  • sdewenking
  • sdewenking
  • 2016年06月20日 22:27
  • 5718

编程中是语言工具重要还是算法重要

  学习编程已有十余年了,编程语言也学习了几种,总体上是由Basic到C这样发展过来的。跟风也学了些例如Delphi和C#。编程语言工具的学习总体感觉来说是一精百通。编程语言工具的核心思想都想同,只不...
  • kmyzbc
  • kmyzbc
  • 2008年01月02日 13:13
  • 373

程序员应该知道的10大基础算法

程序员应该知道的10大基础算法 [日期:2016-04-07] 来源:数学与计算机  作者:张 建中 [字体:大 中 小]   数学技术之算法概论篇(6)  ...
  • zkl99999
  • zkl99999
  • 2016年04月08日 08:19
  • 3448

程序员如何快速准备面试中的算法

前言     我决定写篇短文,即为此文。之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作了,如何备战算法。尽管在微博上简单梳理过,如下图所示:         但因字数限制,...
  • xtzmm1215
  • xtzmm1215
  • 2015年07月01日 21:44
  • 2223

数据结构和算法对于一个程序员的重要性

数据结构算法有什么用? 当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类的。 好用吗?好用,这就是数据结构的用处,只不过你在不知不...
  • qq_27194467
  • qq_27194467
  • 2016年06月07日 17:52
  • 4258

程序员如何快速准备面试中的算法

http://blog.csdn.net/v_july_v/article/details/19131887   程序员如何快速准备面试中的算法 分类: 21.Essays2014-02-1...
  • mmbbz
  • mmbbz
  • 2017年02月14日 18:12
  • 444

数据结构与算法究竟重要吗?

原文地址:http://www.lihuai.net/itlife/feeling/367.html    数据结构与算法究竟重要吗!?貌似很多刚入门的程序员都喜欢问这样的问题,尤其是对于那些非...
  • a4222012
  • a4222012
  • 2015年11月08日 21:41
  • 1500

机器学习算法工程师需要掌握的技能与要踩的坑

1. 前言 本来这篇标题我想的是算法工程师的技能,但是我觉得要是加上机器学习在标题上,估计点的人会多一点,所以标题成这样了,呵呵,而且被搜索引擎收录的时候多了一个时下的热门词,估计曝光也会更多点...
  • expleeve
  • expleeve
  • 2016年09月01日 13:09
  • 631

常用排序算法/程序员必须掌握的8大排序算法

分类: 1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:...
  • u012109105
  • u012109105
  • 2015年08月07日 18:04
  • 1224
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序员必须要会算法吗?
举报原因:
原因补充:

(最多只允许输入30个字)