这段时间部门做了很多项目,我也有幸负责了其中的一个项目。
谈谈我这段时间的感受吧,或许能给各位新晋项目技术负责人一点启示。
初做大型项目技术负责人犹如修炼,我提炼了技术负责人应该具备的以下能力:
自动化思维
将能想到的重复劳动做成自动化,比如自动化生成代码,自动比对分析项目中多个版本的区别。
我们的项目模式为:按月作为版本迭代的期限,也就是没到月底就会要求上线一个新版本,而在这个月的新版本开发过程中,还需要对老版本的新需求进行迭代和修改老版本的bug,那么此时就存在老版本bug修改了,但是新版本还是有对应的bug,老版本迭代的新需求需要做到新版本里面去等等,所以势必需要一个比对多个版本区别的程序。
在这个过程中,我大致解决了下面的问题的自动化
新老版本的数据自动化割接 | ||
---|---|---|
自动化打包 | 私网工作流 | |
数据库层代码自动生成 | ||
配置权限,维护权限 | ||
对接自动化及更新 | ||
比较多个版本代码的区别 | ||
编写格式化的接口文档 | ||
任务流程 |
后续的博客中我会挑有技术含量的部分详细说说实现原理。
极度抽象的逻辑思维
本质上讲就是对一种场景做技术抽象,提炼成算法模型或者设计模式的模型,然后再实现。
思考以下需求:
1、项目中所有的查询,和编辑(除修改密码)等要求去除用户输入的前后空格
2、当需要导入大量的数据的时候,如何提高导入效率,而导入的模块众多,如何做到统一?
3、对于一个系统,需要调用外部接口,当你的接口需要调用外部接口而相应又很慢的时候,如何去统一处理?
4、系统的各类关键操作需要存储操作日志,如何处理?
5、系统的某些模块遵循一定的数据权限(用户具有不同的角色拥有不同的可视范围)
上面的四个问题,都有一个共同的简单解决方案,即哪里需要做,我就去哪里写。这会带来一些问题:
1、对于同一个功能,不同的人写法参差不齐,后期维护升级的成本会很高。处处编写,处处维护。
2、开发人员会写很多业务无关的代码,而且会写掉,造成测试成本上升
所以,此时更好的方案是对这些通适需求进行抽象,然后形成统一的解决方案,尽可能的让开发人员感知较少或者无感知,排查问题也会比较简单。
以上面的需求为例,我想到了如下的解决方案:
1、去除前后空格,可以在请求拦截器中对请求的参数进行拦截,根据一定的策略拦截到那些需要去除前后空格的url的参数,如果是字符串类型,就去除前后空格。同时在数据库层查询和入库的时候,也对这些参数的值进行处理,一般的orm框架都提供了拦截器用于增加操作。
2、实现一个线程池组件,自动将导入任务拆分成小的导入任务,然后利用多线程的模式去提交任务。
3、暂无方案
4、由于日志是需要记录成功或者失败和上下文资料的,所以不能在请求拦截器里面处理,考虑利用切片编程,对所有的controller响应做处理。
5、在jwt里面放置一些权限信息,由于jwt不可更改的特性,就算用户解析到了自己的权限,也无法篡改,同时也无法造成越权,然后再利用请求拦截器对jwt里面的内容序列化成java对象注入到请求参数中,开发人员只需要在controller层接收一下这个参数并且放置到数据库层的查询中就行(数据库层是自动生成的)。
等等
极限编程的思维
这里说的极限编程狭义上是指的技术负责人自身应该具备高强度编程的能力,需要在极端压力的情况下也能保证写出的代码没有太大的问题。这里主要需要锻炼了逻辑思考能力,代码力和抗压能力。
广义上是一种敏捷开发的思维,要求项目团队保持加强沟通,勇敢反馈的态度,我总结就是不惧测试的bug,勇于修复bug;不惧新需求,勇于分析新需求;不惧批评,勇于弥补团队缺陷。
在极端环境中也能积极的去发现问题,解决问题。
丰富的编程底蕴
技术负责人要有广阔的技术眼界,对编程基础知识的强烈认知,对各种编程问题的丰富经验。
这一点,要做到,很难。人嘛,总是会沉浸在自己构想的虚拟世界中,总觉得自己什么都会了。
绝佳的动手实践能力
想到就去做,不要成为空想主义者
基本的运维知识
包括但不限于:服务器的各类命令,计算机网络的原理,安全领域相关的基础知识(漏洞产生的原理,解决方案)等等
应急响应方案-未雨绸缪
提前准备好各类场景的解决方案,避免临时需要快速寻找解决方案的问题。
海纳百川有容乃大
项目组成员技术水平参差不齐,无论出现什么情况,都要心平气和的跟团队成员进行交流,因为他们才是利益共同者,你们是需要一起战斗的。有句话叫兵来将挡水来土掩,没有过不去的需求或者批评。(ps:以前做纯开发的时候还真没面临这么多方来的压力)。一定要及时给予项目成员真心的称赞和鼓励。
心有猛虎,细嗅蔷薇
粗中有细,做技术负责人一定要胆大心细。包括:仔细读各类文档,仔细观察产品原型,仔细了解用户需求等等。
细节决定成败。
合理的项目控制
项目文档,需求管理,缺陷管理等等,推荐一个工具:语雀的缺陷管理,用起来简单好管理,刚好与它的知识库相结合。
抗压
这是最沉重的话题,压力这种东西,是自发产生的,而抗压这个主题要解决的事儿,就是需要发现自己压力产生的原因,然后分析怎么去解决。
这段时间,我通过以下分析和调整,压力有所减少:
1、压力来源于对未知的恐惧:那么解决方案就是尽可能减少未知
2、压力还来源于突然之间的紧迫感,解决方案就是深呼吸,减少这种紧迫感,同时在平时有时间的时候,增多应急预案,避免突然之间面临一些复杂的情况而又没有参考解决方案而带来的紧迫心情。临时找解决方案是对未知结果的恐惧,解决方案就是提前编排好各类场景,然后找到对应的解决方案并形成文档。
绝佳的自律
中午和晚上的时间安排,根据自己的生物钟调整,让自己处于恒定的学习周期中。
等等