本文披露了一些生存秘诀,如何尽一切可能保住自己的饭碗,乃生存之道,建议惠存之。
架构
- 充分利用微服务:微服务的思想,将服务细颗粒度拆分,是本世纪最伟大的发明之一,解决了多个程序员的吃饭问题。将服务拆的越细越好,引入多种内部微服务调用方式,拒绝考虑事物一致性问题,拒绝设计失败重试、限流限次功能;
- 不要把鸡蛋放到一个篮子里:引入Ruby、Rust这种小众语言,结合微服务异构你的项目,市场人才缺失,解决人员可持续性问题;
- 分而治之:分布式的强大,在于创造了很多工作岗位,通信协议、一致性、流量调度、服务调度、容错机制…而且饭碗数量还会随着项目的变大而增多,非常不错;
- 假装进行表设计:不需要考虑第几范式的问题,什么是规矩,我就是规矩,随意设计,实现功能即可;
编码
- 学会撒谎:学会本生存指南的第一要义,就是要学会撒谎,以便留下好的名声。优秀的代码是要发扬匿名者精神的,正所谓功成不必在我。代码中的作者,能复用前作者,就用前作者,能用他人的名字就用他人的名字;
- 小题大做:把每一种正常逻辑,都当作特殊情况。使用策略模式代替简单的switch代码;
- 膨胀代码:扩张每一个实现类的代码,确切的说,你不用刻意这么做,不删除在Stackoverflow、CSDN上复制过来的多余的代码就好了;
- 逆向思维:正向思考问题不能锻炼智商,使用逆向思维优化你的代码。试图优化所有
if
逻辑,将逻辑反向为“逆否”逻辑,你的代码,没你不行; - 覆盖测试:没错,要以测试驱动思想TDD写你的代码,将代码覆盖到所有案例就够了。比如验证是否为偶数的代码,请不要用
i mod 2
实现,请参考测试案例,写为i == 0 || i == 2 || i == 4 || i == 6
,切记,一定要保证测试正案例和反案例全部通过; - 量子理论:学会用量子思维治理你的系统,禁止使用常量、静态等概念。不存在任何常量,让一切都可变,方便引入更多的hacky思想;
- 着眼当下:如果项目中存在缺陷,发现哪个,就修哪个。如果发现第5点中,无法判断8是否为偶数,直接在hotfix中添加
i == 8
即可,简单,快速,安全; - 表示本意:不要为函数名、变量起名而发愁,函数名、变量用其本意即可。如
firstFunc
goIntoMethod
param1
param2
key
value
,一次代码,到处复制,可以复制到不同的工程中无需更改代码; - 不断封装:将一个函数,不断封装,每一层级都有每一层级的作用,这样才能保证充分的利用;理论上一个函数如果有n个参数,最多可有n!个封装方式;
- 鸭子模式:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”,没错,进行后端设计的时候,无需关注表名、字段名、接口名,只实现功能即可;
- 业务为王:遇到产品经理跟你说,需求又要变的时候,切记,这是一件好事。不需要多余的思考,就按照需求增加功能,架构?设计模式?不,不需要动,以需求为准,一切随着业务而动;
- 充分设计:在第一次设计项目时,尽可能的把未来要遇到的所有情况的子情况都考虑在内,一定要把所有的情况都定义到代码中,即使它目前来讲没有任何用途,甚至永远不会走到这个逻辑;
版本
- 不要真的使用版本控制软件:版本控制是用来提交代码的,要学会使用文件夹进行版本管理,如
xxx-center-20200525-第一次修改版
,xxx-center-20200525-最终版
,xxx-center-20200525-最终不改版1
,xxx-center-20200525-最终不改版2
,xxx-center-20200525-最终不改版2.zip
; - 假装使用CI/CD:如果CI过程中,单元测试不通过,可以把单元测试删掉,持续集成出来的包可以不用,最终投产替换本地生产包进行迷惑;
- 善用配置文件:将配置文件放置于多个目录不同层级进行迷惑,以springboot工程为例,将配置文件分别在项目内部、项目外部
.\
,.\config\
放置各一份,内容各不相同,只有掌握springboot加载优先级的优秀工程师才能区分清楚,便于筛选人才,如有备份的配置文件,甚至可放在同一目录进行迷惑; - 拒绝清理脏数据:因需求变更或者bug造成的脏数据,只要没有被发现,即可不用清理;
- 生产才是测试环境:牢牢把握这个原则,更多的问题,找真实的客户在生产测试,才会更全面;
文档
- 写技术文档是无用的工作:请不要遗留下任何文档,工作交接可以选择远程口述;
安全
- 学会表面上的安全:如果安全检查出开源组件出现威胁,可以自己修改开源组件的包名和版本号即可解决;如果安全检查出密码明文配置文件保存,可以通过密码写死在代码里、把配置文件打包在jar包里等多种方式即可解决;
- 搭建属于自己的蜜罐:升级后备份的之前的系统,不要下线,直接换端口号启动;不同机器网络隔离,使用多个nginx互相中转流量,建议使用20个以上nginx,只有迷惑自己,才能迷惑敌人;
- 坚持使用优秀开源框架:如
struts2
、fastjson
、thinkphp
等,开发人员和安全人员身处同一艘船,合作共赢才能更加持久的保住饭碗;
简而言之就一句话:你就正常写代码上版本就行