2020回顾

概述 磕磕碰碰又是一年,沉沦崛起又是一年,哭哭笑笑又是一年,姑且来回顾一下今年的经历吧,总体来看今年的经历还是很“多样”的。有个伟人说过,聪明的人懂得保持生活的不稳定性。感觉我这一年可以用几个字概括:在稳定中窥探不稳定。
大致的方面还是工作、学习和生活,特意看了上一年的展望,大致展望还是完成了,马马虎虎。
工作 总的而言,工作压力不小,主要设计几个复杂项目的重构,作为负责人,需要考虑的事情多,极力在保障系统的合理性和稳定性。这里挑主要的分类描述,细的事情且忽略。
重构及带来的思考 这一年需要重构的大系统有两个,别的小重构就忽略不占篇幅了,这两个系统有共同的地方:
1、业务功能多;2、业务处理流程长;3、业务逻辑复杂;
在这些挑战中,如何保障业务逻辑的可读性、如何保障系统的稳定性、基于什么思维或模式对系统进行设计,这些都是挡在我们开发人员面前的首要问题。苦心思虑,并和小伙伴付诸实践后,我发现沉淀下来其实是软件设计的问题。若将这些重构归类于软件设计的思考,我发现与nginx源码中有共鸣的地方,因为都是很复杂的逻辑,这些逻辑用面向过程一行一行朴素地描述必然是无法维护的,简单而言是先确定软件模型,再设计软件流程,最后使用方法如模块化、钩子等将子逻辑解耦管理。后面有时间我再输出一篇关于重构的文章,在nginx源码的文章里也打算按此思路描述。这个过程是痛苦且无奈的,基本是先确认可行的方案,再与小伙伴们讨论和后面编写代码验证的过程中,不断打磨和质疑该方案,并作出优化。
在这个过程中也窥探到架构设计的门槛,关于一个良好的架构是如何被设计出来的,这个问题被种下了一个种子。在2020学习的回顾中,nginx源码后面的学习方向转向软件设计,部分原因就是由此由来的。
研发流程管理 在开发过程中,由于遇到一些大项目,逐渐意识到要保证项目良好,研发流程的管理是必然要重视的,流程如系统设计、技术评审、模块分工、协议制定、单元测试、业务逻辑开发、联调、提前冒烟测试等等,都是需要专人和需要单独的工作量的,在各个阶段小伙伴们各尽其事,将风险识别并处理,才能保障项目是完善的,系统稳定性才是可保障的。小项目不需重视,但是大项目不重视必手忙脚乱,捉襟见肘。
系统稳定性思考 服务在重构后,系统是分层设计的,每层逻辑也是归属到各个模块的,系统的可读性和可维护性是有相应保障了,但是随之而来的是架构变动引发的系统稳定性保障,如何防止模块的越界,是否推行CodeReview?如何保障模块性能?如何保障模块开发的质量,是否需要添加单元测试?以及服务的监控指标采集和监控等等,这些都是引发的思考,目前还没有精力作更多的实践,后面可能会作计划实践。
工作其它 其实不管是重构还是小迭代,抑或是职业发展,工作中都不由自主的有一个自我驱动的问题,就是到底怎么样的素质,才是一个高程应具备的,在以往的面试经历中,可能会自然想到算法、某开源软件源码、设计模式,但是作为一个务实的程序员,我们心知肚明这些被“绑架”的技能其实在并不会在工作中发挥很大的影响,或者说这些是基本技能而非决定性的关键技能,但是如何去探索这个命题呢?这个问题也是导致我学习方向转变的原因,后期学习会去看关于“高级开发基本的素质”的书,如《代码整洁之道》、《重构》、《程序员修炼之道-从小工到工匠》、《程序员修炼之道-通向务实的最高境界》等等,目前只输出了《代码整洁之道》的阅读笔记,在学习计划的回顾中在作描述。
学习 学习其实占据了2020年很大的时间占比,在2020年年初接续19年的计划,打算在架构学习上继续折腾,20年的大体计划其实还是架构学习,只是在方向上有了更多转变和细化。
20年初到年中,大概是3月到5月这个区间,折腾的是MySQL的高可用,基本是分库分表的实践和输出,接续19年看kingshard的源码,但是没有取得很大的或者是实用的成效,这段实践后期是学习MySQL的协议,因为kingshard的MySQL协议里握手的逻辑一直报错,只能苦读MySQL协议的官方文档,这部分的学习没有进度管理,进度一般,后面也没有沉淀输出文章,是需要改善的地方。
6月份开始,决定学习网络模型,网络模型的沉淀已经单独输出了文章了,其实主要是研究reactor的实现。
7月份,开始学习nginx源码,初衷或者动机还是网络模型,主要希望了解nginx对于reactor的具体实现。这时候开始了学习进度管理,基本是记录每周学习计划,每日进度,每周总结等等。看nginx源码一直持续到年底,学习效率其实是比较一般的,不过也能勉强完成任务。
在近年底的时候,学习方向慢慢转向至软件设计,看nginx源码的期间也穿插看了一些软件设计的资料,主要是工作上已经学习的思考总结上认为软件设计可能更有意义和有价值,方向其实还是架构设计。
nginx 源码学习 看nginx源码其实是希望了解reactor其中一个成熟的实现,netty太复杂学成本太高,于是挑了一个稍简单一些的nginx的实现,但是学习中对nginx的http细节的实现没有太多的兴趣,主要是逻辑太多,在主框架的基础上,http的几个阶段其实就是不断的后续回调各阶段回调函数处理,具体细节强行背下来实在是太枯燥,没作详细的学习。主要学习在对nginx的整个框架的流程上,对整体流程或事件模型还是比较熟悉的,目前对nginx的输出目录如下(nginx 源码分析之网络IO模型),后面视情况调整:

  1. nginx 设计概述
    • 模型设计
    • 多进程模型
    • 多路复用模型
    • 流程设计(主流程)
    • 模块设计
  2. nginx 进程或 reactor 模型概述
  3. nginx 进程信号模型
  4. nginx 进程通信
  5. 基于信号和通信,nginx 的管程功能
  6. nginx 的锁实现
  7. nginx 的定时器功能
  8. 子进程 reactor 事件模型
  9. nginx 执行主流程(初始化服务端连接的逻辑等)
  10. 模块结构与模块主流程解析
软件设计 软件设计是后期学习方向上的转变,也是21年后续学习的方向,学习的初衷有工作上重构触发的思考,有写代码过程中对代码的思考,最主要的是对学习方向的探索和后面的职业规划,也就是架构设计。在学了极客时间一些关于架构设计的专栏和看了架构师大神的直播后,对架构设计有一个大体的了解,意识到在做一些“厉害”的系统架构设计前,其实有不可缺的业务架构设计和应用架构设计,这里包含了需求理解、系统边界划分、业务代码设计等等更务实的架构设计,这里可以看极客时间 王庆友 大神的架构专栏,李智慧大神在直播中也提到架构是来源于业务,并且是随着公司业务发展逐步升级的。
在业务架构里其实很重要的是如何做软件设计,如何对软件作解耦,如何根据需求选择对应的软件模型。这里引发出来的其实是对诸如软件设计的艺术、软件设计的素质等的探索。李智慧大神在直播中有一个建议的书单,书单第一个就是《程序员修炼之道-通向务实的最高境界》,因此在研究设计艺术前,我想先了解和确认一个高程应具备的素质,或是架构设计应具备的素质,以作砍柴前磨刀之功。
今年的进度尚开始,目前的学习计划是读《程序员修炼之道》,后面的方向是设计原本、设计模式,再往后是架构模式等,计划还待细化。
其他学习 由于现在求职对算法还是有不低的要求,因此算法的学习还是需要的,但是20年没有什么计划和精力学习算法。
除算法外,对概率论居然也有兴趣,20年翻出大学概率论的教材翻了几章,并没有深入的学习。
这些其它的学习,我打算作为学习的“点心”,当在学习主方向上疲乏了,或停滞不前的时候,就转移注意力到这些“点心”的学习上,按20年的学习进度管理,无进度的时间还是相当不少的,与其停滞无进度,不如转移注意力在一些其它的愿意研究的方向上,算法和概率论都非常有意思。
生活 生活上今年没有太大的进步,19年的展望是调理好身体,但是并没有太多的好转,但是好的方面是大概知道了病因,后面慢慢调理还是有希望的。
生活上偏单调,本意上是继续发展健身、养生的兴趣,并且将自己的生活调整为自己期愿的作息,但是心理上有一些问题,直接影响到身体了,导致健身到20年11月份基本就停止了,11月份前的计划也仅仅是夜跑和晨跑,没有太多真正兴趣上的期盼。可以说20年的生活交的答卷是不及格的,从下面几个方面,我记录一下生活方面的回顾。
心理健康 从小在一个不怎么有爱的家庭成长,父亲与母亲之间没有太多感情,极少相互关心,父亲强势,母亲懦弱,我小时候还有家暴。父亲将自己事业生意上的问题肆意发泄在家庭中,身为家庭的支柱却给家庭施加了极大的压力。母亲经常偷偷抹眼泪。我作为小孩子过早地暴露在这种成人的世界中,长期缺乏安全感,后面进一步造成自卑和胆怯的性格。在此基础上,父亲强行将自己狭隘的世界观强加在儿子身上,使得我更加郁闷,无处宣泄。在北京漂泊的6年,由于远离家人,极少与父亲沟通,心理健康上的问题反而被隐藏起来,回到南方后儿时记忆被唤起,父亲处处价值观和世界观的强加使得心理一度扭曲。使得20年被笼罩在这个心理扭曲的阴影下,对生活的影响尤大。主要是心情压抑,导致脾胃不好,精神状态差,身体气血不好,因此健身、工作、学习的进度很大一部分是由此影响的。
上述这些基本就是20年的心理健康的情况了,好处是至今已经能将心理问题描述出来,也就是能找到病因。目前看后面的职业发展不能算一马平川,但是也能一步一个脚印按计划前进,只要自身可以完全独立,脱离原生家庭,那么心理问题也能逐渐被解开。
由于骨子里爱好养生和运动,假以时日,可以将心理不健康导致的身体问题调理回来。
生活作息 生活作息上20年有几个目标,分别是晨练、饮食、睡眠上达到自身期望,晨练20年坚持了半年;但是饮食上其实没有按自己期望的来进食,还没有太多精力来研究合适自己的食谱;由于心理问题,以及工作压力,20年睡眠上也有不少障碍,但是好在都有解决办法,慢慢调理即可。
作息上21年仍有很大的挑战,仍有很多东西需要学习,这些将会体现在21年的每周总结内,将会逐渐调整到正轨上。
蛋壳纠纷 自11月中下旬房东上门通知搬离,打开手机一看,方才知道蛋壳暴雷了,而后就开始了每天心脏吊着的状态,一方面希望蛋壳能恢复,但是一方面又要与室友一起与房东周旋。后面发生的事情其实相对新闻上被赶、跳楼的租客而言是好运多了,房东是个广东中年妇女,性格其实很好,但是不明事理,在一次次谈判中撕破脸皮,在基本达成了双方将损失分摊的方式后,但是房东又不愿意分摊租客损失。一度将我们租客赶到了派出所,好在警察同时是站在租客这边,在警告房东后又平安度过了一周。这样一直坚持了一个月,后面约到社区工作站调解的一周中,房东提出可以多住一个月,我由于正在重构大项目,工作压力大,在损失10几天房租的基础上,各方分摊损失,双方达成了一致。
12月中下旬,微众银行看租客是在是太可怜,将蛋壳欠租客的贷款免除,转为由微众向蛋壳提起诉讼,至此,我们这些占比高达69%的微粒贷租客终于解放,我在近12月底解除合同,搬到了村子里。
蛋壳纠纷正正发生在我作为负责人的第二个重构项目中,工作压力和生活压力大,加上本身心理健康问题,一度精神状态恍惚,还好室友小伙伴以及工作小伙伴非常给力,才能平稳度过。
过年的一些思考 过年回老家,在一些瞬间发现按自己程序员的职业发展,以及自己理想中的生活方式,回老家发展越来越不切合实际,目前还是多做准备,多学习。
回老家与亲戚的交谈中,意识到自己对未来的规划太过细致,太过焦虑,实际上大部分人无法清晰地看到后10几年自身的发展和未来,既然如此,何不将遥远未来的规划忘掉,像是10年后的未来,保持这个不稳定性,保障自己未来2、3年的规划稳定性即可。焦虑来源于未知,那就把能控制的未知填上,将无法预知的未知忘却。
21年展望 21年专注的方面与20年一致,依旧是工作、学习、生活,不一样的是需要做的比20年更好,要交更合格的答卷。
工作上依然是沉淀,学习上依然是折腾,生活上依然是坚持。当然能找到更多的朋友一起走是再好不过的事情了。
【2020回顾】在稳定中窥探不稳定吧,不是伟人说的,我说的。

    推荐阅读