为什么新手程序员没有感觉到算法和数据结构的重要性?(文末含抽奖)
2020年06月20日 23:00 __ _ _ _ _

We’d better struggle for the future rather than regret for the past. 后悔过去,不如奋斗将来。

放下,才能接纳;接纳,才有新的力量。
作者| 程序员客栈
链接| https://www.zhihu.com/question/400503367/answer/1288385399
往日回顾: 愿即将高考的你,滚烫青春,无畏向上——致敬高考
在知乎上看到有人问为什么要学算法和数据结构,也有人觉得算法什么的太难学了,而且学了也容易忘,小编觉得还是得给大家科普一下为什么要学算法和数据结构,这里引用别人的高分回答:
为什么刚入门的程序员没有感觉到算法和数据结构的重要性?
为什么一些资深程序员也认为算法和数据结构不重要?
那些认真学了算法和数据结构的朋友后来都混的怎么样了?
在回答这个问题之前,先来看看什么情况下才要用到算法和数据结构,先看下面这个例子:
上大学的时候,有一次打印课程设计,要打印两份,每份二十张。我当时不太会操作打印机,不知道为什么打印出来的资料是“1122334455…”排序的,于是我就在店门口左一张右一张的开始分成两摞。
然后在打印店帮忙的一个同学走过来看了一眼,一脸鄙视的从我手里抢过一摞打印稿,左边两张,右边两张的分了起来,按照“1,12,23,34,45…”的顺序,一次两张的分成有序的两摞。
这是在生活中第一次让我意识到算法的用处,同样的一件事情,我完成要20*2=40步,人家只要2+38/2=21步。
这样的状况也会出现在编程的过程中也会出现:
在计算机刚刚出现和普及的那些年,硬件性能极弱,每秒只能执行5000次加法或400次乘法运算。那个年代,美国用来算导弹弹道的计算机和登月飞船上用于通讯导航的计算机性能,甚至还不如现在你带的手环。
在这样的情况下,计算机的性能上限明明白白的摆在那里,不死机就算好的了,想靠性能进一步提升效率,不可能的。
于是只有回到数据本身,减少数据的运算步骤。而这个减少步骤的方法,就是最初的算法。
但是,到了上个世纪90年代中后期,随着集成技术的发展,半导体芯片的集成度越来越高,计算机的运算速度越来越快,计算机的性能慢慢从不够用到够用到现在的过剩。程序运行的「效率」越来越不能成为编程的一个障碍,数据结构作为一个日常的「无用品」,也就慢慢的不再被广泛重视。
毕竟,对于一般的项目而言,运算时间0.001秒和0.01秒又有什么区别?并不会影响使用;同样的,我一个只有一万用户的网站,能承载十万并发与承载百万并发又有什么区别呢?服务器并不会崩溃。
毕竟,有多少人一生中又能有多少次,能够接触到上百万次每秒这种级别的数据呢?
于是, 为什么刚入门的程序员没有感觉到算法和数据结构的重要性?
因为对于初级程序员来说,算法和数据结构确实没啥用,不影响我做项目,也不影响我解决问题,既然只要通过考试就可以了,那我对它的重视就止于绩点确定的那一刻。
但是一些 资深程序员多多少少会经历需要用到数据结构和算法的项目,但为什么他们也认为算法和数据结构不重要了呢?
因为总有前人铺路,然后写下经验留下方法,我们这些不想开山淌水的后人便只需在前人栽下的大树下方乘凉即可。
当我们遇到问题了,需要优化了,需要压榨性能了,怎么办?大部分情况是不需要操心,因为总有一小撮人/公司帮你想好了,搞定了。咱们拿过来直接用就行了。
比如:你觉得parse
json会很消耗性能,想优化下,fastjson已经帮你搞定了;再比如你觉得数据处理单机太慢,需要并行,所以想搞搞调度和IO优化,spark,hive等已经帮你搞定了。
学会他们也就是几周的事情而已。
但是,凡是一旦有了但是,就会有那么一些打破常规的人或事出现。
但是,如果真的出现了这样的情况,前人的经验解决不了了,怎么办?
2015年,天猫“双11”最终的交易额达到912.17亿元,
11日当天系统交易创建峰值达到每秒钟14万笔,支付宝最高峰值每秒8.59万笔交易。到了2016年,天猫“双11”24小时总成交额达到1207亿元,其中,线上占比为82%,交易峰值达到了每秒17.5万笔。
而且,这个数据逐年提升,阿里的技术人员每年都在担忧,担忧他们这一年的准备究竟能不能在短时间内承载如此巨大的流量。因为在他们前方已经没有经验可以借鉴,每一年做出来的东西都是新的,需要走过来才知道靠不靠谱。整整十年,阿里的技术团队都扛下了逐年增重的担子。而这其中,离不开算法和数据结构。
所以, 那些认真学了算法和数据结构的朋友后来都混的怎么样了?
那些还不错的,年年有技术难关可以攻克,技术水平年年上涨,不用担心所谓的程序员中年危机,不用抱怨日复一日的代码搬运。
至于你说钱?
那是初级程序员才会考虑的问题,他们不缺。
然后再从另一个角度回答这个问题,为什么我们要重视算法和数据结构?
**因为越基础的东西越能体现你的价值,这里的基础不是指「简单」,而是「深入」,深入到一些「根本」的问题中去。**而在计算机科学中,这样的问题有两类。一类是理论:算法,数据结构
,复杂度,机器学习,模式识别,等等。一类是系统:操作系统,网络系统,分布式系统,存储系统,游戏引擎,等等。
理论是在追问:在给定的计算能力约束下如何把一个问题解决得更快更好。而系统是在追问:对于一个现实的需求如何在众多的技术中设计出最多快好省的技术组合。
但是,在我们的日常生活以及工作中,很少会涉及到这样「根本」的问题,毕竟不是所有的公司都像阿里。
于是这样的能力更多的时候是一种“储备”。在你真的遇到需求之前,真的很难用得上。问题在于你愿不愿意花精力为这个“光荣的时刻”做储备呢?做了,不一定能成;但是不做,一定成不了。
有一句话很普通,但很有道理,你也一定听过:
机遇总是青睐于有准备的人。
所以,为什么我们要重视算法和数据结构?
因为这就是我们在机遇没有到来之前的一种准备。试想一下,如果你们公司突然有一天遇见了这样的一个问题,所有人都因为没有深入学习过算法和数据结构而双手一摊时,你突然一拍脑门,说:这个我会!然后顺利的把问题解决了。
请问,谁加薪谁升职?
之后你再面对同事疯狂吐槽,
为什么这个程序里80%的代码都是我们这些资深程序员敲出来的,剩下的15%是新来的实习生敲的,凭什么升职加薪的确是你们这些敲了不到500行代码的「懒鬼」?
你大可以轻轻一笑,怼他一句:
当我绞尽脑汁地学习算法和数据结构的时候,你因为觉得难而无用弃如敝屣。如今你敲的80%的代码我也能敲,但那关键的5%你能吗?
你能吗?
程序员的世界,一向是能者上位,而不是不辞辛劳者上位。

小编今天给大家准备了 抽奖 哦,奖金虽不多,但也是小编的一份心意。
分享助力更有几率抽中哦。
往期推荐:
愿即将高考的你,滚烫青春,无畏向上——致敬高考 2020-06-17
小Bob杂谈:学了这么久C语言,还不知道图形界面? 2020-06-15
来学Python啦,大话字符串 2020-06-12
公众号:程序员Bob
一个正在学习C语言的人,致力于将所学内容讲得更透彻!
点赞关注谢谢你
长按下图二维码关注,和你一起领悟程序员的魅力。

点“ 在看 ” 你懂得

预览时标签不可点
阅读
__











