我身边有一个前辈1984 年开始写程序的,见证了整个 IT 的高速发展。表面上技术发展很快,特别是与用户直接接触的前端技术包括人机交互部分,但计算机的基本技术和原理都没有什么变化。

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

以我自己创业开发的时序数据库(Time-Series Database) TDengine (http://www.tdengine.com) 为例,我们开发了自己的内存管理、文件管理、调度器、消息队列,使用了多种索引方法、排序等等。如果你不能随手写一个二叉树、Hash,你都没法做 TDengine 的研发工作。虽然这些基本的原理都有现成的库,但针对自己的场景,比如时序数据场景,很多情况下都不能直接用,或性能不够,因此就一定得自己写,而自己写的话,不掌握那些原理是写不出来的。

举一个例子,操作系统课程里介绍的“生产者-消费者”问题,就是一个经典问题,在很多场景下,你往往都会遇到,比如 TDengine 里的查询调度就需要。只有你对生产者消费者问题完全搞清楚,你才可能把异步线程通讯搞明白,随手拈来。在 TDengine 的程序里,我们就使用信号量来将网络的异步操作转化为用户侧的同步操作。再举个例子,比如编译原理,工作中不太可能有任务要你写一个编译器,但是学会了编译原理,你对怎么最大程度地去优化自己的程序、学一门新的编程语言、写个简单的 parser ,就会得心用手。

我个人最推崇的是认真学习操作系统这门课,因为它讲的都是各种资源的管理和调度,包括 CPU、内存、网络、外围设备等等。世界上绝大部分 IT 系统都是管理这种或那种资源,抽象地来看,与 CPU、内存、外围设备的管理其实没任何区别。因此你可以用操作系统课里学会的方法、算法去解决其他实际问题。

所有这些计算机的基本原理、方法几十年都没变,我们只是把它组合起来,去解决新的问题,比如区块链,再比如 IoT 场景下的时序数据处理。因此只要把握最基本的原理和方法,你就永远不会被淘汰。

掌握了基础的原理和方法,还要学会做创新

以底层基础软件的实现来说,很多基本的原理和方法都没有变过,但是为什么做出来的产品,所呈现出的性能、市场竞争力却有很大差距?原因还是在于如何巧妙运用这些原理和方法,就像数学、物理公式一样,复杂难题的解析也是看你对这些公式的理解和运用程度。

以实现一个时序数据库(Time-Series Database)为例,为实现水平扩展所采取的的分片分区策略,其实都是操作系统、数据库里的基本内容,使用的客户端服务器之间的通讯也都是计算机网络中最基本的传输协议,构建索引所使用的也都是基础的索引方法,等等。一个好的产品功能,脱胎于用户和市场需求,建立在众多基础原理和方法的创新之上。

在时序场景下,IoT 设备规模可能达到千万甚至上亿,每秒产生的数据就能高达千万、亿级别,面对这样大的吞吐量,普通数据库根本难以承受,那我们在开发时序数据库时,就要考虑数据如何充分利用时序数据特点来做分区分片、如何更好地实时构建索引等等,这些极具挑战性的实际问题的解决思路就是要创新。

以 TDengine 为例,为了更好地解决这些问题,TDengine 从最初就自研了存储引擎,创新地提出了“一个数据采集点一张表”与“超级表”的概念。我们从传统的数据库里吸取了WAL,Skip List等方法,同时把流行的LSM Tree做了很大的改动,把树层级结构去掉了,变成了只是按时间段分区、按时间线分块的数据块。这种对存储引擎的创新设计,也让 TDengine 与典型的 NoSQL 存储模型相比,实现了标签数据与时序数据完全分离进行存储,不仅极大地降低了因为标签重复存储所带来的存储空间的浪费,还能够极为高效地实现多表之间的聚合查询,使得千万级别规模的标签数据查询可以在毫秒级别返回。

在我 2008 年创业做和信时,就是一台手机一个消息队列,现在物联网数据的处理,和我当年做消息队列模块相比,在存储架构上,只是一个结构化与非结构化的区别,前者是为了更高效地做各种计算和查询,但在实际应用中,我们还需要考虑到多个设备间数据如何进行高效聚合,我很快就想到了对策,那就可以用数据分析中的维度表、事实表的模型来解决,这样一来,超级表的概念也就出来了。

TDengine 受这些经典数据结构的启发,使用到的也都是流行十几年甚至更久的基础技术,但在此之上还有对技术的合理运用和不断创新,最后才真正成为一个为时序数据场景量身定做的数据库产品。

对于开发者来说,掌握基础的技术知识和原理是迈进这个职业门槛的一个通行证,如果是一个有追求的人,真的想要在工作中有所建树,还想往上更进一步,那就还应该时刻思考怎么运用好这些知识,怎样才能更快速去获得一些对代码的创意思考。

想要往上走,就一定不能躺平

软件特别是基础软件开源,已经成为不可抵挡的潮流,对于开发者来说,这是最好的时代,你不需要苦思冥想自己瞎琢磨,很多时候也不用完全从 0 到 1 去进行一个设计思考。开源项目就像是一本书籍,你总能从中获得一些超出你认知的对于基础技术的创新运用,毫无疑问,站在前人的肩膀上,你能看到的会更远。

就拿编程语言来说,因为互联网行业本身变化大,发展迅速,编程语言也是五花八门,除了 Java、JavaScript 一类的,近几年新出的还有如 Go、Rust、Dart、Kotlin、Swift 等等,在应用型技术占比很高的行业中,对于语言的掌握也要相对广泛一些,好在这些流行语言还并不是很难掌握。

还有些偏底层的语言,本身是很强大的,开发需求低,所以一直都很稳定,C 语言就是这类语言的代表,学好了几十年后也不会过时。但难点就在于这种语言比较难掌握,而且大多涉及硬件和操作系统底层,所以很多人都会对 C 语言望而却步。但事实上 C 语言非常值得学习,它的灵活性极强,向上可以写应用,向下可以写硬件,如果哪一天互联网衰败了,依靠对这门语言的精通完全可以让你平移到其他赛道。

TDengine 就是一款使用 C 语言自主研发的时序数据库(Time-Series Database),没有使用任何第三方的库,一切都是自己开发,包括定时器、RPC 等模块等,并且已经开源。当初我选择 C 语言作为开发语言的原因,其实是受到了 SQLite 的影响,它没有服务器,仅仅一个 C 语言库,整个数据库存放于单一跨平台的文件,支持 ACID,零配置,而且体量可以仅为 600 KB。我很庆幸 TDengine 选择了 C 语言,虽然确实有一系列头疼问题,如内存泄露、无效指针、多线程同步等,但这些都在后期优化中得到了改善,而 TDengine 所拥有的无依赖、体量小、内存远远小于 InfluxDB、OpenTSDB 等其他时序数据库这些优势,都是非常显著的。

参与开源项目也是学习编程语言的一个好方法,要知道,流行的开源项目中都是经过实践推敲、比较成熟的代码创作,认真去研读相关项目的源码,然后再依靠学习到的代码思路去解决问题,这会让你在语言学习上事半功倍。如果你正在迷惑,不妨参与到 TDengine 开源项目中来,只要你真心有投入,我乐意花时间与你一起探讨问题。

结 语

以前很多人质疑过我,认为我不是一个从 Oracle、Db2 核心团队出来的人,怎么能研发数据库?但如果你深挖了我的背景,知道我一直在做分布式高可靠的无线核心网络设备研发,也明白消息队列与时序数据之间的相似之处后,你就不会奇怪了。就像我开篇时说的,技术圈里很多的基础原理和方法,几十年都未曾改变,善于思考总结的人总会从中得到相关的规律。

可能正是由于我是跨界过来的,比起沉浸在数据库领域多年且已经形成技术思想固化的开发者,才更容易在基础原理和方法的运用上,想到创新甚至是颠覆式的设计思路。

所以,过时的不是基础的技术原理和方法,而是人的思考能力以及没有跟上节奏的对技术的认知。

唠叨唠叨

我在读书和工作中喜欢收集计算机经典编程书籍,过去几年收集了一套资料包:包含数据结构、操作系统、C++/C、网络经典、前端编程经典、Java相关、程序员认知、职场发展)、面试找工作的资料汇总都打包放在这了,需要的小伙伴直接私信我即可
看看目录,非常经典:

祝大家前程似锦,在程序员的道路上一帆风顺,一起加油一起进步。

咱就是说码字是真的不简单呀走过路过的留下你们的赞,有需要这方面资料的铁子直接私信我即可

现在计算机这个行业的技术更新换代怎么可以这么快(在不学点东西真的会被淘汰)相关推荐

  1. 下列哪个不是it行业技术岗位_28岁毕业进入IT互联网行业从事技术研发岗位是否还来得及...

    首先,虽然28岁毕业开始进入IT互联网行业确实不算早,但是入行早也未必就一定会走得远,在当前IT互联网行业整体进行结构升级的大背景下,人才结构升级也是一个必然的发展趋势,而这个过程也会推动IT互联网行 ...

  2. 计算机应用的时间识别的,计算机人工智能识别关键技术及运用

    刘丽娜 摘   要:互联网的信息时代,通过计算机和人工智能识别技术相结合,在人们的日常生活中不断的进行运用,让人们与科技紧密相连,真正的体验科学发展给生活带来的乐趣.人工智能识别技术可以满足所有行业的 ...

  3. 《安富莱嵌入式周报》第285期:电子技术更新换代太快,我要躺平,Linux内核6.1已经并入RUST,一夜161个网站密码遭泄,Matlab精选课件,开源电子书

    往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...

  4. 运维是不是IT行业里技术含量最低的岗位?

    在互联网行业里,运维一直都是一个被人误解很深的岗位,以致于很多人都认为运维在IT行中的技术含量很低,但是今天我要为运维人"平反". 开发与运维搞不清楚 从本质上说,运维其实是用自己 ...

  5. 防火墙技术在计算机网络安全中的应用分析,计算机网络安全中防火墙技术的应用分析...

    计算机网络安全中防火墙技术的应用分析 张忠霜 湛江科技学院 524000 摘要:在我国计算机技术不断发展和进步的现阶段,这项技术已经广泛应用于各行各业的建设中,为我国居民的生活和工作提供了更多的便利, ...

  6. JAVA计算机毕业设计基于vue技术的汽车维修检测系统设计与实现源码+数据库+系统+lw文档

    JAVA计算机毕业设计基于vue技术的汽车维修检测系统设计与实现源码+数据库+系统+lw文档 JAVA计算机毕业设计基于vue技术的汽车维修检测系统设计与实现源码+数据库+系统+lw文档 本源码技术栈 ...

  7. 2020中国高校计算机大赛网络技术挑战赛,中国高校计算机大赛-网络技术挑战赛的新跨越...

    原标题:中国高校计算机大赛-网络技术挑战赛的新跨越 导语 摩课云竞赛平台助力中国高校计算机大赛-网络技术挑战赛,实现高校竞赛新跨越. 中国高校计算机大赛-网络技术挑战赛 9月15日,2019" ...

  8. 中国高校计算机大赛网络技术挑战赛,2019年度“中国高校计算机大赛-网络技术挑战赛”国赛圆满落幕...

    2019年9月15日,2019年度"中国高校计算机大赛-网络技术挑战赛"国赛在温州大学举行,并在当晚迎来盛大的颁奖典礼,历时半年的网络技术作品类竞赛至此圆满落幕. 中国高校计算机大 ...

  9. 室内设计属计算机专业吗,室内设计技术专业

    室内设计(interior design)就是反映对建筑物的内部空间进行设计.室内设计作为独立的综合性学科,于20世纪60年代初形成,在世界范围内开始再现室内设计概念. 中文名 室内设计技术专业 专业 ...

最新文章

  1. 简述WinCE开发特性及忠告
  2. 《时间简史》(评论一)(转载)
  3. css3圆角360度转动画,target,框架集,css3过渡动画,css3圆角-阴影-透明度,运动曲线,图片文字遮罩,变形...
  4. k8s pod应用升级回滚(set image/rollout)和弹性伸缩(scale)示例
  5. 52.4. APC Cache (php-apc - APC (Alternative PHP Cache) module for PHP 5)
  6. 编码风格:Mvc模式下SSM环境,代码分层管理
  7. Active Report 紙張設置小結
  8. 每日英语:How to say No to other people
  9. 线上IIS应用程序池自动关闭
  10. 前端js获取屏幕高度
  11. centos linux远程桌面连接工具,VNC Viewer轻松连接远程CentOS6.8桌面
  12. java doc 文件转pdf_Java中Word转PDF解决方案
  13. maven编译报错java -source,pom设置maven.compiler.source原理
  14. 微信分享多个图片和文字到朋友圈
  15. 任务二:实现求平方根关键算法(30 分)求 n 以内(不包括 n)同时能被 3 和 7 整除的所有自然数之和的平方根 s,然后将结果s 输出。例如若 n 为 1000 时,则 s=153.909
  16. file:/usr/local/hive/iotmp/89de7dfe-8f26-4a6e-87b4-bacd16c2b2c8/hive_2021-11-05_05-06-07_555_3392062
  17. 《你是我的荣耀》制片人张萌犯受贿罪:被判处有期徒刑三年
  18. 四苯基卟啉铜TPP-Cu(2+) cas14172-91-9分子量676.26600分子式C44H28CuN4
  19. c语言凑数的不同种方法,凑数强化版【庆贺2021年5月9日母亲节】
  20. 东亚期货护航产业稳健发展

热门文章

  1. Genymotion模拟器下载及安装步骤详解
  2. C 语言和 C++、C# 的区别
  3. html 中 img图像标签
  4. 【题库】上海市学校心理咨询师-发展心理学-考点解析 2.4 精神分析论
  5. 心理咨询师考试 笔记[8]
  6. caffe 报错 Check failed: error == cudaSuccess (77 vs. 0) an illegal memory access was encountered
  7. 【产品经理】从电视节目看如何做产品
  8. 汽配企业信息化建设——让仓库业务数据更准确
  9. 【Vue】Vue的路由
  10. 程序人生 - 退税教程(个人所得税)