软件的核心就是数据结构与算法

如果你问一个大神,学习软件编程有哪些重要知识点需要掌握的,他的答案一定会包括数据结构与算法。

对于一直疲于完成增删改查的广大码农来说,只要能把分配的任务顺利完成,不出 bug 就行了,至于性能、优雅性,那是大神们才考虑的事。其实,在日常工作中,我们也习惯于利用各种框架快速实现功能,网上看几遍关于框架的快速上手应用的博文,就马上能把各种高大上的新技术应用到项目中去。

是的,新技术的使用门槛并不高,就连大数据、深度学习,甚至区块链技术,对一个有点经验的程序员来说,快速上手也不是难事。可要是使用这些新技术框架过程中,遇到一些莫名奇妙的问题,连 Google 也给不出答案时,程序员们就有点尴尬了。因为我们大多不会深究这些框架技术的底层逻辑,也不关心数据是如何组织存储和计算处理的。

今天公司的同事给我们简单介绍了 Kafka 框架的基础知识,我发现这个框架里就到处充斥着数据结构与算法。消息从生产者到 broker 节点,再到消费者,中间过程需要对消息进行传输,就涉及到数据按约定的格式进行组织,什么样的数据结构才有利于实现安全、可靠、高效的传输呢?用什么算法才能更高效校验消息是否被人篡改?借助的 Zookeeper 又是怎样协调集群里的 broker 节点实现负载均衡?消息的持久化又是怎样分区分块,又可以让消费者快速的查询取出的呢?可以说在这一个框架里,包含了太多计算机的基础知识了。

今天在同事讲述消息的数据结构的时候,我突然想起这种结构有点像 java 字节码文件的数据结构,有魔数,属性表,接着是参数名的长度,然后是参数,参数值的长度,参数值。再回想一下 TCP 协议里数据包的数据结构以及公司里的自定义传输协议,还有流行的 protobuf 之类的协议,它们采用的数据结构都大同小异,然后有自己特定的约定格式。以前我对这些知识都是看过了就算了,也没有认真思考为什么要这样设计,如果要我来设计,我又会怎么做呢?现在我意识到了,这些基础的东西是不会过时的,无论技术怎么层出不穷,还是脱离不了核心的基础知识。

不光是技术,生活中很多事情也是这样,如果只是浅尝辄止,或许能一时应急,但始终会觉得不知所以然。比如现在的房价涨得这么厉害,身边买房的人都赚了,自己是不是也借够首付上车呢?大学选专业是选现在超赚钱的金融、计算机类的吗?如果光看表面,或许你周围的清洁工人、种田的大叔们都能轻松给你一个答案,但问题的本质是什么,你有没有详细研究过呢?

软件的核心就是数据结构与算法,那么人生的核心又是什么呢?

你可能感兴趣的:(软件的核心就是数据结构与算法)