我的历程

以我的年龄而言,在小学就开始接触电脑。

高中接触到pc机,在同龄人中已经属于少有的际遇,上了学校的计算机竞赛班,还拿了一个市里的计算机竞赛二等奖,学了一些诸如递归,回溯的算法。

大学的专业不是计算机,但也有一些关于编程和算法的课程,成绩马马虎虎,毕业后基本都忘光了。

啰嗦几句,在同龄人中,我算是很幸运,很早就接触了编程和算法,但高中的时候,是为了竞赛成绩好获得高考加分(然而并没有),而大学的时候则是为了混学分好毕业,浑浑噩噩的学算法,浑浑噩噩的去考试,然后浑浑噩噩的忘掉。

刚工作的那几年,才意识到数据库是非常重要的,大部分常见的应用,网站,社群,背后都是数据库在支撑,但那时候也都是最基本的使用而已,对背后的原理和机制一无所知,也因此犯了相当多的错误。直到后来,对性能,负载的要求越来越高,处理越来越复杂的数据问题的时候,才开始恶补这方面的知识和内容,不怕你们笑话,都一把年纪了才把数据索引效率的问题搞清楚,还不敢说精通。而数据索引效率的理解,btree这样的结构,说来也是算法。到后来用到redis的有序数组,就已经有意识主动的去看数据结构的逻辑和背后的算法,并基于此去评估其开销和应用场景。

那么,算法,说到底是什么?

学习任何一个具体算法之前,要首先有时间复杂度,空间复杂度的概念,要知道在有限的计算资源条件下,在对系统开销有明确约束的前提下,如何有效的解决所需面对的计算问题。

中国的程序员数量庞大,郝培强老师在他最近的文章(好吧,是同一篇主题的软文)里提到说,光一个二分法(入门级的算法吧)就能筛掉很高比例的面试者。

我工作最初几年,也总觉得,算法其实不实用,理解业务就够了,理解业务并实现,似乎也不是多难的事情,但那时候确实年少无知,后来才意识到

性能,效率,资源紧缺是非常要命的事情,而且会极大制约一个创业企业的发展,有时候一个人黑暗中摸索,终于绞尽脑汁想出一个可行策略,觉得自己真是天纵英才,然而这种自以为是的状态过不了多久,某个机缘巧合的机会才发现,原来有个什么什么算法,跟我想到的思路类似,但是比我自己瞎琢磨的其实更简洁,更有效率,通用性更好。 举个真实的例子,当初遇到需要高效屏蔽词过滤问题的时候,我苦思冥想,自以为找到了合适的方法,后来发现有个AC自动机算法,明显比我想到的方法更高效简洁。这样的例子其实还有一些。

一些国内和国际互联网巨头都喜欢考算法,刷算法题是硅谷华人程序员最常见的求职通路

但能对时间复杂度,空间复杂度有明确的认知和概念,写出一段代码来,能立即评估其效率和性能瓶颈,这种思想意识,我认为,是每个程序员都需要具备的,而达到这一点,其实并不需要多么高深和复杂的知识。

一个程序员的价值,有几个关键的体现方式
1、对业务的理解力

能够正确理解业务诉求,能够从业务中发现问题和甄别问题,这其实是很重要的,技术人员的职场宽度会得到极大扩展,

 

创业领袖的人。

转型投资,运营管理的高手,这些都可以说是业务理解力很强,而利用技术人员特有的逻辑分析能力对业务诉求进行拆解和归纳,让自己拥有更多优势,从而让自己的职业道路变得宽阔。

2、沟通交流的能力

很多技术人员欠缺这一点,这块我觉得怎么强调都不过分,闷头做事,大量无用功,分不清主次重点,以及莫名其妙成为背锅侠,还有就是自己的职场权益无法保障,说到底这里很多都是沟通交流能力欠缺导致的。

3、技术理解力

技术理解力决定了你能达到的技术的高度,决定了你在技术团队中不可或缺的位置。

而技术理解力里面,很关键的就是时间复杂度,空间复杂度的认知,和在现实研发过程中的体现。这里,其实就涉及了大量的算法基础。

我反思自己当年读书的时候,浑浑噩噩的学算法,其实并没有从时间复杂度,空间复杂度去思考,只是因为老师讲了,

其实,技术理解力在其他领域也是互通的,你有这样的一些认知,你对处理业务诉求,运营诉求的时候,也可以使用到这样的思想,如何降低复杂度,提升效率。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值