博舍

我打算当一个码农,但不学数据结构与算法行不行 数据结构与算法重要吗

我打算当一个码农,但不学数据结构与算法行不行

最近准备先着手写一个【数据结构与算法】的专栏!!!

完事开头难,过程难上加难。今天就把开头难这个事情解决掉!!!

我是渣渣,渣渣是我,因渣而骄傲!

作为一个本科非CS出生的我,不知不觉在敲代码的路上渐行渐远~~~~~~

对一般的工科生来讲,大一的时候都会上C语言的课,先学写代码,之后才学数据结构与算法。然鹅,在我的记忆中我开始认真接触代码这个东西还是大二时为了考NCRE才学的。大一的我几乎不上课,考试都是C的,真怀念那段荒废时光的日子,让我变得一无所知,真TM开心。于是大二为了考证而自学,“刻苦”学习的我不仅自己考,还同时给同学代考,于是我自己挂了,给别人考过了。看看自己多么助人为乐,无比开心。后来……故事情节太过于曲折,还是废话少说吧,哈哈哈。

……

为啥好多码农都不会数据结构与算法?

现在作为一个思想健全的人,终于打算好好把数据结构与算法啃下来了。很多人一直不愿意学这个有这么几点原因,我相信我不是个例,相信不会这个的你总会有一条中招。

意志力不行,说实话数据结构和算法真的不简单;

通常我们写代码都不需要理解代码底层运行逻辑,功能都是封装好的,不用太管代码效率;

非CS出身却走了敲代码这个路的人,很多对数据结构与算法多多少少有种恐惧感;

学习或工作中真的用不到,就算不会,照样各种框架用的贼溜;

……

不学数据结构与算法行不行呢?

当然可以了,如果你愿意的话当一个底层的码农也不失为一种乐趣!

像我这种在学术上没什么潜力的人(把我逼急了,真的要读个博士后去改变世界),想找个有钱途的工作,不好好学学数据结构是万万不能的,我都不能放过我自己。

知乎上有这么一段话不错

你说如果连数据结构和算法都不会,有没有什么影响。我觉得是有的,要知道程序员这个群体也是有金字塔结构的。如果你连基本的算法和数据结构都不会,基本上属于比较底层的程序员。比较底层的程序员就意味着比较低的薪酬。同样是出售脑力劳动和时间,你比别人少赚。

所以看在钱的份上,请你不要忽视算法跟数据结构!!!

为什么程序员中年危机很严重呢?肯定是因为TA能力不行呀,可能代码能力不行也可能学习能力不行再或者管理能力也不OK没法混到管理层,稍微深究一下,根本原因还是基本功不够扎实,时间久了短板就暴露出来了,自己无法进步或进步太慢。

当然,现实生活中的码农不是都在写算法改变世界,大部分都是CRUDboy(createreadupdatedelete,增删改查),尤其是业务代码,干这种工作真的没有多大的上升空间。

好吧,以上这些我也没亲身经历过,就当不存在吧。下面说点即将要面临的,也是为什么要学数据结构与算法的重点:找工作

我知道好多朋友想找CV、NLP、机器学习、推荐算法等方面的工作,没有哪家大公司面试不考数据结构算法的,因为这才是最能衡量一个人基本功是否扎实的方式,才更能体现一个人的长期潜力。或许你很牛逼,自己能创造一个非常神奇还NB的神经网络架构,可是面试官问你关于稍微难点的数据结构,你一问三不知,直接pass掉。让你现场手写一个数据结构的代码,也不会直接pass掉。

想工作比别人起步高,那就没有理由不好好学数据结构。

长期来看,如果不想被行业淘汰,就不要想着写一些凑活能用的代码就可以了,谁也不想被老板说“你写的代码真垃圾!”

有没有听说过“学计算机的人还是聪明”这么一句话,其实是数据结构学的好的人真的聪明,这东西真的锻炼大脑。

下面说点正经的!

该专栏涉及内容

这个数据结构与算法专栏主要偏向于实现,大都有相应的代码,笔者现在主要python用的更多些,所以专栏里面所涉及的代码大都是python代码,简单易懂。所有代码都是笔者深思之后写的,当然难免有参考他人的写法,可以随时找我探讨。专栏内容包括简单的数据结构,如数组、链表、堆、栈、队列等,还有散列表、树、图、排序、查找、搜索、字符串匹配、哈希算法、动态规划等等。写完之后再做一总结。

学习/写作参考内容

当然我不是自己凭空就能写出这些东西。有参考很多书,以及其他人写的博客,看视频教程等等。很多文章里我都会把我参考的博客地址或是某些观点的原始出处列出来,供大家参考。这里我先把一些参考书目和课程列一下,大家都可以选择性的看看。后面的内容可能会有更多参考内容,在相应文章里我会再提。

参考课程:

《数据结构与算法之美》

《算法面试通关40讲》

……

参考书目:

《大话数据结构》,完全不懂的可以从这本书入手,很快可以看完。

《图解算法》、《算法图解》这两本不一样哦,都算入门书,个人觉得后一本更好点。

《数据结构与算法:python语言描述》

《算法导论》,传世经典,不过就是内容太多,难度也大,适合当工具书。

还有面试必刷书单:

《剑指offer》、《编程珠玑》、《编程之美》、《算法之美》

公众号【书伟认视界】后台回复“数据结构与算法书单”,我给大家打包好了电子书。不想买纸质书的可以先看电子书,不过还是建议多看纸质书哦!

福利:公众号内回复【极客时间】有免费资源送哦!

其他说明

文章里的各种配图大都是从一些专业网站引用/制作的,或是自己做的。偶尔有个别配图引用于他人博客等,相应位置这些都会注明来源。所写文字也难免有个别之处与他人所写有相似之处(主要是概念性文字),因为从某个角度来讲,这个专栏也算是我的一个学习总结。如有侵权内容,请及时联系笔者,若情况属实会立马删除!

算法与数据结构对程序员的重要性

###############################################

"""算法对于新手就是你会了算法,你写代码脑子会清楚,知道该怎么写!"""

 

###############################################

"""算法的重要性有几点1,面试用,80%的公司都会考算法,认为算法好的人,思维好,基础好,有潜力,所以有很多的公司,你技术一般,但是算法好,也要你,因为你有培养的潜力,2,算法工程师工资高3,训练编程思维,4,提高你的代码的性能,"""

 

###############################################

"""算法与数据结构对程序员的重要性曾经有个说法,程序=数据结构+算法。这在面向过程的编程语言流行的年代是很受推崇的。那么,在这个多样化的年代,如果想立志做编程开发,还有没有必要学好数据结构和算法呢?我的回答是,非但有必要,更应该学好、学博、学精。第一,数据结构与算法是程序的灵魂,是朴素的基础,学好它有有助于理解各种上层抽象。在没有充分学习和理解数据结构与算法的基础上去学习面向对象、设计模式,是无法真正体会这些上层抽象的真正意义的,最终可能会导致学之泛泛,用之泛泛。遇到的真正设计高手,还没有一个是对数据结构与算法是不精通的。让他讲为什么这样设计,为什么这样架构,他往往能深入浅出,将面向对象的思想、设计模式的考虑,与基础的数据结构和对应的算法结合起来,贴合问题的实际情况,给出良好的结论。从编程的角度来看,数据结构与算法几乎是最朴素的基础知识了,这是关,是每一个立志当好程序员的必经之路,第二,在编程实践中,数据结构和算法随处可见,影响重大。见过不少对链表的基本属性都不了解的人,在程序里一味使用数组,内存能开多大就多大;也见过太多根本不知道HASH原理的人,对Hash表随意使用,造成KEY值严重重复、效率极为低下、失去了选用HASH的初衷。第三,现在的软件工程充斥着大量的过度设计、资源浪费,实际上已经到了硬件承受不了的地步了。学好数据结构和算法,能够从根本上去避免这些问题。第四,当今流行的WEB新时代,各种云概念,海量数据,百万用户并发(从以前著名的C10K问题,到现在的C1000K甚至更高问题),最终都是数据结构与算法的比拼。这一切,较量才刚刚开始。"""

 

###############################################

"""用计算机解决实际问题,首先要做的事情就是要把涉及问题的相关信息存储到计算机中,所以先要用合理的结构表示数据然后根据问题处理功能的要求,对存储到计算机中的数据进行处理。根据相应的算法处理结构,所以数据结构和算法就是处理问题的两个步骤1,收集信息,使用数据结构存储数据,2,处理信息,这就是算法了,数据表示和数据处理正是数据结构学科要研究的内容。商用程序员李申在他的博客中写到:“这么多年,我做过游戏、通信、工业控制、教育、VoIP、服务器集群等各个方向的项目,不可谓不宽”。但是我知道的是,其实我都是在用同一种方法写程序。那就是从最底层的数据结构和算法开始做起,用最基本的C、C++语言开发。用来用去,还是那么几个数据结构,队列、堆栈,等等。这就好比武侠小说里面的内功,内功修好了,学招式,非常容易。但如果没有内功,练再好的招式,见到高手就软了。一力破十慧,就是这个道理。在绝对的实力面前,任何花招都是没有用的。"""

 

###############################################

"""业务开发工程师,你真的愿意做一辈子CRUDboy吗?如果你是一名业务开发工程师,你可能要说,我整天就是做数据库CRUD(增删改查),哪里用得到数据结构和算法啊?何为编程能力强?是代码的可读性好、健壮?还是扩展性好?我觉得没法列,也列不全。但是,在我看来,性能好坏起码是其中一个非常重要的评判标准。但是,如果你连代码的时间复杂度、空间复杂度都不知道怎么分析,怎么写出高性能的代码呢?有一些大龄候选人,简历能写十几页,经历的项目有几十个,但是细看下来,每个项目都是重复的堆砌业务逻辑而已,完全没有难度递进,看不出有能力提升。久而久之,十年的积累可能跟一年的积累没有任何区别。这样的人,怎么不会被行业淘汰呢?如果你在一家成熟的公司,或者BAT这样的大公司,面对的是千万级甚至亿级的用户,开发的是TB、PB级别数据的处理系统。性能几乎是开发过程中时刻都要考虑的问题。一个简单的ArrayList、LinkedList的选择问题,就可能会产生成千上万倍的性能差别。这个时候,数据结构和算法的意义就完全凸显出来了。数据结构和算法这个东西,如果你不去学,可能真的这辈子都用不到,也感受不到它的好。但是一旦掌握,你就会常常被它的强大威力所折服。之前你可能需要费很大劲儿来优化的代码,需要花很多心思来设计的架构,用了数据结构和算法之后,很容易就可以解决了。算法和数据结构有多重要?他们的影响无处不在"""

 

###############################################

"""从我接触到算法及数据结构的学习开始,就经常看到各种书中说,计算机程序就是由数据和算法组成的。但是我一直不能理解为什么这么说。今天也是搜索了一下,看到的比较多的回答是这样的,我们解决问题的思路一般是三个步骤:1)准备输入2)处理数据3)得到输出这应该最最上层的抽象步骤。通过学习了基本的算法和数据结构,你在处理数据的时候,就可以按照一种已经有的解决方案。而不是重新寻求新的方案。我觉得这个解释比较重要。这也是给了我非常好的启发。换句话说,就是说,还是学习了已经有的算法思维,来给我们后续的问题提供思路。就是我每次解决问题的时候,并不能去思考以后的算法,那些东西不能给我帮助。我感觉,我每次写程序,我就是按照一种过程式编程的思想来进行的。最直观的说法,就是我在写程序的时候,就没有可以借鉴的东西。所以我到底欠缺到哪里。,或者说,上面的这个,就是因为我脑子里本身就没有??我感觉,我的思维存在一些问题,导致我每次都是感觉脑子里空空的,想问题有些直。所以这样以来,其实是我思考问题,或者解决问题的思路不对。"""

 

###############################################

"""平时工作中很少接触的数据结构与算法,为什么会经常出现在面试题中呢?这不是让人很难理解吗?1,在面试时考察数据结构与算法,也是在短时间内考察一个人长期潜力的捷径。因为数据结构与算法功底扎实的程序员,其技术实力、业务能力、自学能力大多都不会差。这种问题考验的更多的是一个人的编程功底和长期积累。所以很多大公司都会使用算法题来筛选人才。2,在计算机编程领域,数据结构与算法的应用是无处不在。比如图像视频处理、数据库、游戏开发、编译器、搜索引擎、AR、VR、人工智能、区块链等领域,都是以数据结构算法为基石。扎实的数据结构与算法功底,能让我们站在更高的角度去思考代码、写出性能更优的程序,能让我们更快速地学习上手各种新技术(比如人工智能、区块链等),能让我们敲开更高级编程领域的大门。"""

 

###############################################

 

 

###############################################

 

 

###############################################

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇