最近一直思考一个问题,就是如何构建一个程序员完整的知识体系。IT技术多如牛毛,新的技术,新的框架层出不穷,感觉一不留神就被时代甩出去几公里。一个人要想所有内容都掌握几乎是不可能的,舍得舍得有舍才有得,我觉得还是在深度方面找一个方向去深挖下,但是也要在广度上时刻保持对于各个技术领域的关注,这样才能在技术发展的浪潮中乘风破浪,披荆斩棘。
1. 软件工程师的基本功
开发语言:汇编、C语言、Java生态、C++生态、Python生态、Shell脚本、GO语言、Ruby、R语言...
数据结构;
算法 (软件的灵魂);
编程思想: 面向对象、面向过程、面向切面AOP、函数式编程、泛型编程、响应式编程;
2. 软件领域的基础软件
操作系统、编译器、调试器、数据库、网络协议栈;
3. 软件专家的几个方向
操作系统方向:Linux内核开发;
云技术方向:KVM/XEN、OVS、Docker容器、这个统称为CNCF技术领域
WEB浏览器方向:Chrome浏览器内核开发;
云网络和协议栈方向:TCP/UDP/KCP/QUIC/IPV4/IPV6/vLAN/xVlan/OVS/OpenSwitch;短距离通讯WIFI/蓝牙;无线通讯3G/4G/5G;多如牛毛的庞大体系;
数据库方向:Oracle、MySQL、Postgres、各种NoSQL;
AI/推荐/算法方向:机器学习、TenserFlow等开源项目;
搜索方向:开源的Lucense、Elastic Search;
编译器和语言方向:开源的GCC/GDB, Java编译器等;
大数据方向:Hadoop生态、Spark、数据挖掘;
移动端方向:Android、IOS;
大前端方向:HTML/CSS/JS、NodeJS、Vue、Angular、React等;
分布式方向:消息中间件(Kafka、Rabbit MQ)、数据一致性、分布式事务等;
区块链方向:比特币、以太坊;
网络安全: 信息安全、黑客技术、渗透测试、0Day、又是一个多如牛毛的技术领域;
面对如此纷繁复杂的IT技术世界,如果我们都是去做些表面的文章,那么穷其一生也不可能成为一个计算机高手。其实我觉得身边很多程序员包括我自己,还是对计算机的基本原理只是了解各皮毛,每天的工作陷入到了追逐表面功夫的各种架构上和框架上,而没有静下心来去做系统性和针对性的专项提升。
那么我们心目中的技术大牛都是如何成长起来的呢?我们不妨看看几个故事,或许你能受到一点启发:
蚂蚁金服研究院红雪的故事:https://blog.csdn.net/b0q8cpra539hafs7/article/details/80970792
阿里巴巴P10技术专家余锋的成长故事:http://blog.yufeng.info/
看了他们的故事,想想自己也工作10年了,真是白活了。专家就是要找到一个切入点,并且在这个点上能够理解到深入骨髓,然后加以项目中的不断实践和系统化总结,先在一个领域站稳脚跟。然后再触类旁通的去理解其他技术领域,一方面这个专攻的点上会让你需要理解周边很多知识的深入原理,另一方面这个专攻的点所积累的技术知识在其他领域都是能够触类旁通的。所以要成为一个技术大牛,那么就要选择一个与当前本职工作强相关的领域做深做透,做到行业前10%,然后在去做些别的事情。
结合我个人当前的工作方向,还是聚焦在IO这个领域,深入骨髓的理解什么是高并发的本质?我打算参与两个项目首先参加下DPDK项目的开发,后续在参加下Netty项目的开发,在目前统一长连接的工作上寻求技术点的突破。
那么就让我重新出发,从DPDK源码开始做起:https://www.dpdk.org/
网友评论