软件更新速度太快

核心提示上周我在知乎上看到了一个问题,引起了大家的热议,把握最基本的原理和方法,你永远不会被淘汰我的IT从业年限至今也有将近三十年了,也算是见证了整个IT的高速发展。表面上技术发展很快,特别是与用户直接接触的前端技术包括人机交互部分,但其实计算机的

上周在知乎上看到一个问题,引起了大家的热议。

掌握最基本的原则和方法,你就永远不会被淘汰。

我从事IT近30年,算是见证了整个IT行业的飞速发展。表面技术发展很快,尤其是和用户直接接触的前端技术包括人机交互,但实际上计算机的基本技术和原理并没有改变。

如果我再学计算机,我会认真上几门课,1:数据结构,2:算法,3:计算机体系结构4:操作系统,5:编译原理,6:计算机网络,7:数据库,8:软件工程。从自己的兴趣出发,学习一些数字信号处理和数据分析相关的课程。这些课上学到的东西,至少30年前用过,今天还在用。我可以肯定的说,这些课上的知识都很熟悉,技术水平肯定很高。

比如操作系统课程中介绍的“生产者-消费者”问题,就是一个经典问题,你在很多场景下都会经常遇到,比如TDengine中的查询调度。只有对生产者-消费者问题有了完整的理解,才能理解异步线程通信,唾手可得。在TDengine程序中,我们使用信号量将网络的异步操作转化为用户端的同步操作。再举个例子,比如编译原理,工作中不太可能会有让你写编译器的任务,但是一旦你学会了编译原理,你就要小心翼翼的考虑如何最大程度的优化你的程序,学习一门新的编程语言,写一个简单的解析器。

我个人最佩服的是认真学习操作系统,因为这都是关于各种资源的管理和调度,包括CPU,内存,网络,外设等等。世界上大多数IT系统管理这样或那样的资源。抽象来说,和CPU、内存、外围设备的管理没什么区别。所以你可以用操作系统课上学到的方法和算法去解决其他实际问题。

所有这些计算机的基本原理和方法几十年来都没有改变。我们只是把它们结合起来解决新的问题,比如物联网场景下的区块链和时间序列数据处理。所以只要你掌握了最基本的原则和方法,你就永远不会被淘汰。

掌握基本原理和方法,还要学会做创新。

就底层基础软件的实现而言,很多基本原理和方法都没有改变,但为什么做出的产品性能和市场竞争力差距很大?原因是如何巧妙地运用这些原理和方法。就像数学和物理公式一样,复杂问题的分析取决于你对这些公式的理解和运用。

以一个时间序列数据库的实现为例,实现横向扩展所采用的分区策略实际上是操作系统和数据库的基本内容,所使用的客户端和服务器之间的通信也是计算机网络中最基本的传输协议,构造索引所使用的基本索引方法也是如此,等等。一个好的产品功能,脱胎于用户和市场的需求,基于很多基本原理和方法的创新。

在时间序列场景下,物联网设备的规模可能达到数千万甚至上亿,每秒产生的数据可以达到数千万甚至上亿。面对如此大的吞吐量,普通数据库根本无法承受。在开发时间序列数据库时,要考虑如何充分利用时间序列数据的特性对数据进行分区和分片,如何更好地实时建立索引等等。解决这些具有挑战性的实际问题的方法是创新。

以TDengine为例,为了更好地解决这些问题,TDengine从一开始就开发了自己的存储引擎,创新性地提出了“一个数据采集点,一个表”和“超级表”的概念。我们从传统数据库中吸收了WAL、Skip List等方法,同时对流行的LSM树做了很大的改动,去掉了树的层次结构,变成了按时间段划分、按时间线划分的数据块。与典型的NoSQL存储模型相比,存储引擎的这一创新设计还使得TDengine能够将标签数据与时间序列数据完全分离进行存储,不仅大大减少了标签重复存储造成的存储浪费空,还可以极其高效地实现多表间的聚合查询,使得数千万个标签数据查询可以在毫秒内返回。

2008年我创业的时候,就是一个手机,一个消息队列。现在相比我的消息队列模块,物联网的数据处理只是结构化和非结构化存储架构的区别。前者是为了更高效地做各种计算和查询,但在实际应用中,我们还需要考虑如何高效地在多个设备间聚合数据。我很快就想出了对策,就是我们可以用数据分析中的维度表,维度表,维度表,维度表,维度表

受这些经典数据结构的启发,TDengine使用了流行了十几年甚至更久的基础技术。但在此之上,还有技术的合理使用和不断创新,最终真正成为为时间序列数据场景量身定制的数据库产品。

对于开发人员来说,掌握基本的技术知识和原理是进入这个职业门槛的通行证。如果你是一个有追求的人,真的想在工作中做出成绩,走的更远,你就要时刻思考如何利用好这些知识,如何更快的获得一些关于代码的创造性思维。

要想上去,一定不能平躺。

软件,尤其是基础软件的开源,已经成为不可阻挡的趋势。对于开发者来说,这是最好的时代。不需要自己苦思冥想,往往也不需要完全从0到1去思考一个设计。开源项目就像一本书,从中你总能获得一些超出你知识范围的基础技术的创新应用。无疑,站在前人的肩膀上,你能看得更远。

以编程语言为例,由于互联网行业本身变化大,发展快,编程语言也是五花八门。除了Java和Javascript,一些新的如Go,Rust,Dart,Kotlin,Swift等。已经在最近几年出现。在应用技术比例高的行业,对语言的掌握要相对广泛。幸运的是,这些流行语言并不难掌握。

有些低级语言功能很强大,开发要求低,所以一直很稳定。c语言就是这类语言的代表,学好了几十年也不会过时。但难点在于这种语言很难掌握,而且大部分涉及到硬件和操作系统的底层,所以很多人会对C语言望而却步。但其实C语言是值得学习的。它非常灵活。你可以向上写应用程序,向下写硬件。如果有一天互联网没落了,依靠对这门语言的掌握,完全可以让你转战其他赛道。

TDengine是用C语言自主开发的时间序列数据库,没有任何第三方库。所有东西都是自己开发的,包括定时器,RPC等模块,一直开源。之所以当初选择C语言作为开发语言,其实是受SQLite的影响。它没有服务器,只有一个C语言库。整个数据库存储在单个跨平台文件中,支持ACID,零配置,卷可以只有600KB。很高兴TDengine选择了C语言。虽然它确实有一系列令人头疼的问题,比如内存泄漏、无效指针、多线程同步等。,这些都在后期的优化中得到了改善。TDengine所具有的优势,如无依赖性、体积小、比其他时序数据库(如InfluxDB和OpenTSDB)少得多的内存,都是非常显著的。

参与开源项目也是学习编程语言的好方法。要知道,流行的开源项目都是经过实践后的成熟代码创作。仔细研究相关项目的源代码,然后依靠学到的代码思路去解决问题,会让你在语言学习上事半功倍。如果你很困惑,不妨参与一下TDengine开源项目。只要你真心诚意,我愿意花时间和你讨论这个问题。

洁玉

之前有很多人质疑我,认为我不是Oracle和DB2核心团队的人。怎么才能开发数据库?但如果你深入挖掘我的背景,知道我从1997年就开始做分布式高可靠无线核心网设备的研发,了解消息队列和时间序列数据的相似性,你就不会惊讶了。就像我开头说的,技术圈的很多基本原理和方法几十年都没变,善于思考和总结的人总会从中得到相关的规律。可能是因为我是跨界过来的,在基本原理和方法的应用上,我比那些在数据库领域浸淫多年,已经形成固化技术思路的开发者更容易想到创新甚至颠覆性的设计思路。

所以,过时的不是基本的技术原理和方法,而是人的思维能力和对技术的认识没有跟上。

 
友情链接
鄂ICP备19019357号-22