不知不觉,来实习已经3月有余,成长了很多,今天来分享一下自己的学习感悟吧。
1.三句话
大厂的实习,环境确实太多,很多系统,一开始接触是一头雾水的,面试造飞机,进来造轮子,就这么真实,但是造轮子也能学习一些东西吧。自己在造轮子中碰到的一些问题经常是通过向导师,同事,自己排查。记得当时他们给我说了三句话,现在记忆深刻,也时刻铭记于心!
-
小步快跑,逐步迭代
-
先0再完善
-
自己的问题自己排查,现在不练就排查内功,真正生产环境如何自救
针对以上三句进行详细展开。
1) 小步快跑,逐步迭代
这句话是我当时git提交,每次写完代码,写的太多,导致CR文件太多,于是就引出了:小步快跑,逐步迭代 这句话。是想给我传达多人开发,应该不图快,而是每个功能完成了,就提一次Reviewer并合入master,而非一个大功能完毕后,才合入master。正确的多人开发流程是:
A同学在master开了个dev-A,B同学开了个dev-B,A完成一小段功能就MR一次,B完成了一小段功能也MR一次,不断维护master的功能,直到完全开发完毕。不应该A同学完成了全部功能,然后让B同学一下子Reviewer全部代码,这样一次Reviewer太多,工作量太大,效果不好,也容易出问题,记得Leader一次组会提到CR头痛问题的解决办法。
-
代码控制100行-200行
-
文件少
-
没人每天记得CR一次
但是,现在我个人觉得,还是得催促对方CR(Code Reviewer),不然就会忘,CR类似于Github的PR里面的代码Reviewer,MR相当于PR的合并,这是一个看别人的代码并学习别人代码的好方式,同时能发现代码规范,以及操作不当等问题的好手段,例如:C++写脚本,禁止使用裸指针,一看到指针存在,CR就可以拒绝掉,代码不规范,变量未被初始化,通常可以拒绝合入master。
一个团队的开发,应该小步快跑,逐步迭代,注释详细,分工明确,规范统一,这样对于每一个人开发效率将是非常的高。
2)先0再完善
在实习一开始的时候,给你个项目做,通常在个人想法中只是个概念,基本不太懂这个项目,所以需要跟着带自己项目的同事请教,当时在做某项目的时候,我一开始做是有点疑惑的,需要自己去设计通信协议,调用别人接口,以及呈现内容设计等,就拿呈现内容与协议设计来说吧,当时带我的同事送了我一句话,先0再完善,是想给我说先开始做,再不断的去完善它,在这个过程中,确实针对协议设计以及内容呈现设计等都会不断的清晰,一开始接触某项目或者某事情的时候,或迷茫,或无知,或未知,应多请教,多交流,有一点思路就先去实现它,不断完善。
3)自己的问题自己排查,现在不练就排查内功,真正生产环境如何自救
在写代码过程中,自己碰到了一个前所未有的死循环,我想去读配置,测试读不了,其实很简单,例如:自己实现读配置就好了,这个还简单,那如何解决初始化雪崩问题呢。问题是:xx进程初始化直接失败,在容器中,一初始化就失败了,后来问了框架大佬是因为初始化时在A类进程中进行初始化操作,该操作如果涉及RPC调用,就会崩溃,因为A类并不支持协程操作,这一点坑死我了。一开始肯定对框架不熟,像这种东西,文档也不会写,只有非常了解源码或设计的才会知道。当时问同事,他给我说要自救,不然如何解决以后的生产环境问题呢,自己bug还是自己解决。随后,就自己去一步步排查了,当时排查工作主要如下:
-
控制变量,去掉核心操作,注释开关
-
容器上查看进程,查看不同类的log
-
定位日志及打印位置
最后发现,一开始没发现的问题是由于自己Log看错了,看成了B的log,不然这种小问题,就不是问题了。。。
2.一点思考
来到这边实习已经3个多月,做了几个项目了,自己在团队协作开发上能够解决一些冲突问题,并提出项目的一些建设性意见,涉及了Lua+C++脚本开发,C++性能分析及优化、C++工厂设计模式、Git版本控制等等,其中大多时间是在拧螺丝,但是却觉得有那么一点意思,例如:
-
如何设计当前协议
-
如何以更少的代码重构当前代码
-
当然代码设计的合理性
-
当前代码的性能瓶颈
-
当前代码的业务逻辑
以上只是我个人在学习过程中,扪心自问的点,如果以上至少有一个没解决,那么拧螺丝还是非常有意义的,写代码的过程,需要独立思考,独立设计,培养思维,而不是单纯为了实现而实现,这种就没啥意义。
1)开发过程中,切记团队开发准则及代码规范,培养自己的代码优雅能力与规范能力。
2)开发过程中,多看看需求,多沟通。
3)开发过程中,多对一下接口设计的合理性及泛化性。
4)主干代码功能完整性及可测性。
5)问题积累及业务积累
以上是我实习阶段学到的几点建议及想法吧,