作为一个刚毕业三年的研究僧,并且本科学的是机械,在面对复杂多变的IT技术圈时,常常感到困惑。我该拿什么是作为立身之本?要怎么样才能时常保持竞争力?销售靠嘴巴,码农靠键盘。因此个人理解码农的立身之本就是高效率基于功能完成编码,交付需求。高效率编码如果纠结细节,是一个永恒讨论不完的话题,原因是不同时代有不同的讲究,不同的技术组成,这是一个随着时代发展而动态变化的过程。在某个时代编码所用的工具集(开发语言、框架、代码运行环境等)便构成了那个时代需要的技术栈。说到底立身之本就是技术栈,要时常保持个人竞争力就需要不断地更新技术栈。可以考虑分解成三部分,后续再补充(个人对于文章的想法就是想到哪写到哪,不断更新,不追求一次性完美)。
分析工作中技术栈由哪些组成
目前本人主要从事分布式存储开发维护工作,准确说就是 Ceph 项目。
- 涉及的开发语言和工具。项目主要使用 c\c++ 进行开发,其次对上层应用提供丰富的语言接口,如python, ruby, go。管理系统方面则提供 restapi,各种性能统计插件支持,如 zabbix, influx, prometheos 等等。社区的自动化代码评审、质量保证体系,要求测试本身就是代码。项目本身的单元测试与集成测试用到的支持工具如 gtest, gmock, pytest, tox等。社区代码管理与贡献神器 git。程序管理脚本,比如shell, systemd, udev。代码编译管理,cmake, autoconfig, pip。内核开发,这是当前存储要求高性能时无法避开的技术栈,无论是使用块设备还是文件系统。
-难以看见的技术栈,如代码风格、架构、项目管理过程(需求收集、讨论、实现、版本发布、bug 反合等),社区发展的路线。
- 引用其他项目,这是一个非常大的技术栈,有些功能实现需要借助第三方库。比如 rocksdb, 纠删码,boost等等。
上面只是列举了大部分目前我比较关心的,看上去已经很多了。当然这跟跟存储是一个较底层的功能集有关(传统三大件,计算、存储、网络)。
哪些是基础的、更新频繁的
对于常年占据开发语言前三的语言,c/c++ 无疑是最基础的,演进相对比较慢。其次若想要参与代码贡献,则代码管理工具git,单元测试等,也是很基本的功底。
参与社区贡献有很大的好处是能与业界大牛实时互动,混熟关系,技术栈上也能保持跟上更新。因为社区大牛对新知识点会非常喜欢。
因此若有实力和精力参与社区开发,是一条非常不错的更新技术栈的途径。
如何获取更新信息
这是一个非常苦恼的问题,原因是有些问题看不到实质,容易被淹没在信息的海洋中。目前能想到的途径有以下:
- 经常查阅项目官网的相关文档、开发人员的聊天记录、帮助文档等。这点对于成熟的基础项目很有效,原因是官方已经基本考虑到了各种层次开发人员的需求;
- 追踪相关开发人员、或者相关技术牛人的分享(说起来可能容易,但是做起来比较难)
- 查看专业领域的网站,大部分牛人分享的文章或者某些新产品发布都会在权威一点的专业网站上看到;
- 对于新技术栈、新思路的出现,如果不是追求第一时间发现,则大部分可以在专业卖书(Thoughtworks)、大型网站的总结报告中看到(stackoverflow, github);如果追求第一时间发现,并做为积极发布者、甚至是发起者,则经常查阅论文是一个不错的途径;
- 对于看到的新技术栈,如果有不明白或者遇到相关问题,可以考虑发邮件至相关项目开发频道、开发者询问。