马上又到了春招的季节,你需要问下你自己,算法那一关,你过了吗?
2022年TIOBE年度编程语言排行榜的结果出来了,Python稳居榜首,C++终于超越了Java,上升到第三位。
在之前的几年中,这个榜单的排名也都不尽相同。
前几年Java是比较火的,但最近两年随着人工智能(AI)的兴起,Python又成为头部。
可以用一句诗来形容:“江山代有才人出,各领风骚数百年”。
在语言火爆程度不断更迭变化的背后透露的是技术的革新以及主流编程工具不断变化发展。
也正是这种快速的变化,才使得人们都觉得IT行业是个不断更新,需要持续学习的行业。
我不否认这一点,从事IT行业确实需要不断学习,持续精进的毅力和品质,但是如果我们透过现象看本质,就会发现:无论编程语言的流程趋势怎样变化,编程工具怎样迭代更新,其背后总有一个不变量,这就是“算法”。
在编程世界中, 算法+数据结构=程序。
如果将数据结构比喻成程序的肉体和骨架,那么算法就是这个程序的灵魂。
数据结构这个肉体和骨架可以用任何语言来实现(比如C++,Java,Python),而算法则是不变的、最本质的东西。
正如李开复在《算法的力量》一书中写到:“算法是计算机科学领域最重要的基石之一,…… 编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论,例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等。”
现代的编程语言会将很多算法和数据结构的实现封装在自己的类库中,这在很大程度上降低了编程的难度和门槛,但也使人们产生了巨大的依赖性。
程序员越来越像建筑工人,只需要将一个个模块黑箱按照业务逻辑拼装在一起,一个程序就搭建完成了。但是黑箱的内部是什么样子,可能你永远也不清楚。
这样就无形中给自己的认知和视野加上了一层壁垒,开发者很难有属于自己的思维方式,就更不要提创新了。
所以Ruby之父松本行弘就曾表示,我们应当注重的是算法而不是工具。只有具备了良好的算法思维,才能突破工具的壁垒获得思想的自由。
一般来说,技术面试=基础知识和业务逻辑面试+算法面试。
基础知识和业务逻辑部分可以通过短时间的突击快速上手掌握,而算法则需要一段时间的积累和刷题才能达到一定的高度。
因此算法的考查是很有区分度的,可以用来筛选人才。所以现在越来越多的大厂都更愿意将数据结构和算法问题作为招聘人才(特别是应届生)的考查题目了。
我推荐的方法很直接,同时我觉得也比较管用和靠谱,这就是基础+提高+刷题的“三步走战略”。
首先必须要夯实数据结构和算法的基础,这一点无比重要。因为数据结构和算法的体系和分支是相对比较复杂的,涉及的问题也是千变万化,唯有打下坚实的理论基础,才能更加有把握地应对各种复杂的问题。
在掌握了数据结构和算法的基础知识后,还需要在此基础上进一步提高水平。提高阶段的学习是具有挑战性的,因为这部分内容理论相对复杂,题目也更加灵活多变。如果我们可以努力突破这部分,在数据结构和算法领域就会得到一次全面的升华。
最后一个阶段就是刷题。无论是参加编程比赛,还是考研或是参加大厂招聘的笔试面试,归根到底也是一种应试。要想通过考试,刷题是必不可少的一个环节。我们这里所说的刷题是在已经打下坚实的理论基础(完成第一阶段和第二阶段学习)的条件下进行的刷题,所以这里的刷题应该更具有针对性,主要目的是为了拾遗补缺,将我们在第一阶段和第二阶段学习过程中发现的薄弱环节,以及重点和难点等通过大量的题目反复锤炼,这样才能更加全面和熟练地掌握知识要点,最终赢得考试。
这里向大家推荐 《人人都离不开的算法——图解算法应用》 一书。这本书是一本既可以帮助读者筑牢数据结构和算法基础,同时又能帮助读者提升职场竞争实力的书籍。
图书介绍彩页
京东购买链接:https://item.jd.com/13368139.html
应广大粉丝的需求,特开放一个高质量的嵌入式C语言交流群,群里大多数是嵌入式相关领域的开发者朋友,也有不少是行业内的资深开发,每天我们都有不是嵌入式C语言的技术话题交流,如果你也对嵌入式C语言技术有着狂热的爱好,那么欢迎你加入这个圈子。
由于我需要保证圈子的高质量性,而不被外面的“不法分子” 破坏,所以在此我不便公开群二维码,有意向加入的朋友,请私信我或者找到本文尾部的VX二维码联系我。谢谢。