年终总结
2020年是不平凡的一年,对全世界,对我自己。
总的来说,2020年是在充实的无尽止业务代码中度过的。迄今为止,在软件开发行业工作已经4年半了。按工时算的话,其实也不短了,根据一万个小时定律,我理应成为这个行业的高手(高级工程师),但实际上,我并没有成为高手,而一直蹉跎于中级,并不是我学习止步了,也不是我怠慢了工作,从中级到高级需要项目的历练和平台的支撑,我想这可能就是很多工程师长时间停留在中级的原因吧。不仅如此,今年想换互联网后台服务端开发,这个方向对于做软件工程开发有更大的挑战性,面对的业务是高可用、高并发、超大的业务量等很有挑战的工作。比如开发一个支持一千个客户端的服务器和开发一个支持一百万个客户端的服务器设计和架构是完全不同的,前者可能从网上找一个demo或利用one thread per connection做法单机即可实现,但后者工作量可远远不止前者那么简单,后者一定是跑在分布式系统上的,一旦涉及到分布式就必须考虑其CAP(强一致性、高可用、分区容错),但同时满足CAP是不现实的,实际工程中一般根据业务满足BASE(基本可用、软状态、最终一致性)。所以考虑再三,决定从现在的传统软件开发方向转互联网后台开发方向,虽然之前的经验不能完全复制过去,但最起码开发语言(C++以及Python)的使用可以拿来用,还有解决问题的能力。
总结过去是一个很好的习惯。过去一年做的主要事情是完善自己的技能图谱,根据图谱知识点针对性的补习。主要包括:
- C++语言特性
- 数据结构和算法
- 网络编程
- 操作系统
- 系统设计
- 分布式系统
首先,基础知识是不能被遗忘的,即便进行了很多年的业务开发。重新巩固了数据结构原理、操作系统知识、网络协议(主要是TCP和HTTP),巩固过程中加深了对这些基础知识的理解,甚至纠正了之前的一些误区,收获很大。作为工作了近5年的工程师,不能只会调用库,还需要理解库的实现原理。我们使用库是为了更高效地开发,防止重复造轮子;我们理解其原理是为了拥有造轮子的能力,因为在变幻莫测的复杂业务中,很可能出现某个轮子不合适,此时就需要我们改造为自己所用了。
其次,工程能力,当我们写小体量代码的时候通常很随意,但工程代码逐渐增多的时候,模块化设计和分层设计便派上用场了。工程能力全靠在实际工作中锻炼了,当然也可以看一些优秀的开源库,比如muduo,bRPC等。
软技能
我们的工作是做不完的,可能会同时有若干件事情需要处理,但人的大脑毕竟是单核的,同时只能做一件事情,如果每件事都做一半来回切换,还得在大脑中保存其上下文,反而效率不高,那必然挑其中紧急且重要的一件事先做。紧急和重要的界限要把握清楚,这在工作中体现尤为重要。通常我会优先解决紧急的事,然后给重要的事留下足够的大块时间来处理,这样在重要事情的处理上不会慌乱。学习同样也是如此,应该抓住本质,有所侧重点,这样能锻炼自己解决问题抓住本质的能力。
自制力与兴趣的坚持,要说人都是有惰性的,如何保持对一件事或工作的热情呢?答案就是自己的兴趣。在兴趣的道路上,最大的绊脚石是自身的自制力不够强大。这一点对于过去一年,我深有感触。C++后台开发路线并不像前端那样可以做出来酷炫的页面来展示自己的成果,也不像嵌入式开发那样可以控制实体设备做有趣的事。实际上后台开发基本都是黑窗口程序,看不到任何界面,调试完全根据日志和数据,似乎不那么有趣,所以后台开发必须是自己感兴趣才能坚持下去。也许过个一年半载,自己的斗志和激情会磨灭,但只要在自己信心动摇时,保持自制力,坚持下去,终会迎接到自己成为高手那一刻。有时候想一想这么多台机器共同协作完成后台服务的提供,难道不是很有趣吗?
黑胡子所言:
人的梦想是不会终止的!
展望未来
未来3年,我期望能够在后台开发领域驰骋,在级别上能够达到高级工程师,提高实际解决问题的能力,进一步提高工程能力。近些年程序员35岁危机在网上很热,起源于华为裁掉了部分超过35岁的技术支持工程师,传到网上后开始发酵以及以讹传讹,很多人担心自己到35岁后被公司优化掉。但实际上,有些公司优化大龄程序员是优化的那些能力没有提升的,或是技术类支持的,工作很容易被替代的。一句话讲就是能力与工作年限严重不匹配的工程师会被淘汰。我不希望我自己在若干年后变成这样,我也不认为写代码就是低等繁重的工作,反而写代码有很多乐趣。不知何时起,国内有了工作N年以上的程序员还在写代码就是能力不强的论调,我认为这种风气是很不好的,我相信很多程序员都有相同的观点,这是热爱技术的一个很重要的表现。
保持乐观和身体健康
大家都知道身体是革命本钱,有多少人想健身但最终因为各种各样的原因放弃了,制定的计划屡屡被取消,很难吗?最重要的是不够坚持罢了。新的一年,继续坚持锻炼。知乎上的《有哪些让你受益的好习惯》,很推荐看看,强迫自己养成一些好习惯,真的受益终身。