程序员修炼之道(每周看一遍)

一、代码质量

1.用自动化提升工作效率

使用脚本将简单重复的工作自动化,能有效的提高工作效率,shell python 脚本的熟练使用,对工作是锦上添花

传统公司中,使用shell比较多;互联网公司变化快,使用python做测试的比较多。

 

2.逻辑清晰的代码,可读性和可维护性好

代码逻辑简单明了,条理越清晰,代码隐藏的bug就越少,后续维护起来成本也越小,等到需要对代码进行重构或优化时,会相对容易点。

代码逻辑混乱不清,条理越混乱,越会提高后续开发和维护中的bug缺陷的发生。

 

3.多阅读同事的代码

每天至少抽1个小时来code review自己的代码和同事的代码。

看看自己的代码哪里写的不好?代码写的有bug本质原因是什么?

是没有梳理清楚业务逻辑?还是技术本身掌握的不好?

哪里是可以改进的?自己看不懂或不理解的代码,多和同事交流和请教。

 

4.编写可测试的代码 writing Testable code(写商业代码)(2020年重点目标)

什么样的代码是可测试的代码,

单元测试如何来编写?

如何编写有效的单元测试?

代码覆盖率

具体可看《C++程序设计和编程实践》,好好的践行其中的方法。

autotests自动化测试工具(还未尝试)

实践完成这一阶段后,找一个文档齐全的开源软件看看是它是如何做单元测试的。

5.如何输出日志

一定要控制好日志的级别,在线上机器只打印输出错误日志和必要的日志,不要打印无关的日志,原因如下:

一方面,频繁的输出日志会影响系统性能

另一方面,太多的无用日志就相当于没有日志,不利于线上环境排查问题根源

 

5.如何梳理项目的业务逻辑和流程

一次性看明白流程,省的每次都要看反复看相同的东西,每次只看一部分流程,然后每次还要重复的看。很浪费时间和精力。

 

二、学习新技术

1.培养快速学习新技术的能力(需提高)

周老师说过,高手不是懂的多,而是学的快,平时注重基础知识的积累,基础越扎实学新东西越快,举一反三的能力越强。

 

2.看官网文档学习新技术(需提高)

从时效性和准确性来说,成熟开源软件的官网文档doc是最好的,网上的博客文章多数都是抄来抄去,看多了也是浪费时间。

道理简单,但真正愿意耐心看文档的人不多,我以前看官网文档也只是粗略的阅读,导致对新技术的原理、机制、细节掌握的并不好

 

3. 自己擅长的领域,必须把技术知识搞的“门清”

和领导、同事交流技术时,分为以下两种场景

1)自己不熟悉的技术,耐心、细心的听别人讲;切勿夸夸其谈自己的幼稚想法,降低别人对自己的印象

2)自己熟悉的技术,用通俗易懂的技术将知识点讲解的明明白白,注意自己说话的语气和语速

说的多的人往往是技术一瓶子不满,半瓶子晃悠的人。

软件工程师对技术掌握的“模棱两可”是最危险的,从以下两个角度考虑:

从领导角度考虑:领导无法放心把事情全权交给你做,因为你的技术是半桶水水平,懂一点然而不全懂是挺尴尬的。

从其他组同事考虑:售后群不是讨论技术的群,在客户和运维人员的面前,给出毫无根据的猜测和结论,会降低运维人员对你的信任度,尤其是不要犯一些低级错误。

领导询问一件事情时,是希望员工对这个技术的各个细节都是明确的,知道的明明白白。

不明白的地方,就老老实实的说出来,也好让领导心里有个底,否则领导心里也有点懵,不知道具体情况

3)和领导探讨技术问题,首先自己要经过深思熟虑,否则逻辑上都漏洞百出如何来说服领导呢?

 

三、做事方式

1.领导安排工作任务时,要认真仔细的听,必要时用笔记录下来

任务的具体内容包括哪些?(明确做什么)

任务的优先级高不高?如果是高优先级,则考虑优先执行。

任务的时间周期是多长?3天?一周?一个月?(时间决定项目完成质量)

每个时间点对应的阶段性输出是什么?(类似里程碑)

完成任务时的输出是什么?代码?报告?文档?

如果领导安排的任务仅仅是一个想法,那么首先将事情拆分成一个个小任务,分批次找领导进行沟通和确认。

领导安排的工作,如果对安排的任务有不清楚的地方,及时问老员工或者领导请教,以免白白花费力气做的事情不是领导想要的。确保心里明白领导安排的任务是要做什么,然后才去动手去开展工作。

2.在工作期间遇到困难,和领导及时沟通

随时保持和领导沟通项目进度,

当前工作进度处于什么阶段?

遇到了什么问题?是技术问题还是非技术问题?

需要什么帮助?

技术问题:查阅资料,共同攻克技术难关。

非技术问题:,前期低估了项目的复杂度,导致功能代码实现和测试延后,需要调整人手和时间。

很多搞不定的问题,领导指点一下,可能很快就能找到解决问题的方法

 

3.做事要认真,认真,认真,提高靠谱程度

提交代码重点前检查以下几点:

1. 单元测试

2.把能考虑到的应用场景都测试到位

3.集成测试,或灰度测试

4.提交的代码要符合公司代码规范,将调试相关的打印以及添加的日志都删除掉,避免污染生产环境(很重要!!!)

5.即使只改一行代码,也要进行编译和验证

6.切勿在生产环境修改代码(除线上紧急修复任务),单台机器的批量化操作,会导致后续运维人员无法批量化升级机器。

7.代码的覆盖率要进行测试,提高代码的质量

提交代码,明明进行过单元测试,但是生产环境中又出来了低级错误,这点也要自己保证好

在做事时,要竭尽全力将事情做的漂亮些,做事时务必注意细节。

尽量不要犯低级错误,低级错误在领导看来就是傻逼行为,会减低你在别人心中的印象分。

4. 做事与信任

从领导的角度考虑,分配给下属一件任务,下属很好的完成了任务,领导审核通过后心里很满意,心里对此员工的印象分也会有所提升,下次会分配更有挑战性的任务给他,下属可通过任务来不断的磨练自己的技术。

分配给下属一件任务,下属频频遇到卡壳的问题,最后勉勉强强完成了任务或无法完成任务,领导心里会降低对此的印象分,以后下属只能沦为打杂的工作。

人和人之间的信任开始都是相同的,分配的工作完成的好、质量高,对下属的信任值会不断的增加;

分配的工作完成的不合格、质量差,对下属的信任值会不断的降低;

信任的高低,决定了下次分配给你什么样的任务来做

把事情做好,才是王道,时间多花一点,多测试一下,尽量确保事情做的完善。

 

三、沟通待加强

我以为我知道

我以为你知道

我以为你知道我这样认为

 

在大型公司沟通需求时,一定要挖掘出最终的需求是什么?

首先,明确需求有哪些内容

然后,了解需求背后的原因,客户为什么提出这个需求

最后,将需求整理成文档,抄送给需求相关的人员以及领导,让客户确认已经讨论过的需求

如果和客户谈需求时只是口头形式,那么后面出现需求变更和成本更变等问题时,将无从查证。

在跨部门沟通时,尽量让自己的表述能够简洁易懂。

 

在公司运维群进行沟通时,先明确以下问题

简单技术问题,小组内部自己解决

运维平时很忙,尽可能简明扼要的表明自己需要什么帮助

太傻逼的问题不要问,会降低运维对自己的印象

 

四、程序安装部署以及升级

开发人员,运维人员好好合作,才能确保程序的安装部署和升级

1.程序的依赖,是否依赖系统内核模块?是否依赖第三方库,redis,etcd,mongodb?是否依赖其他服务?依赖于哪些数据?

是否使用了数据库?是否使用了定时任务contrab?这些都要在文档中说明

2.可执行文件的路径,需要什么权限来运行程序?

3.程序是否需要加载配置文件?配置文件中字段的含义以及配置方法实例

4.程序是否需要写日志?日志的目录和文件是否需要创建?

5.告知运维人员程序如何启动?以服务的方式启动?是否需要守护进程?

6.检查程序启动是否成功,运行状态是否正常

7.代码编写时就要把相关的错误情况都考虑到,并输出对应的错误日志,以便后续自己排查生产环境的问题,否则很难定位线上问题,错误1和错误2是两种错误,如何在日志中区分出这两种错误?

8.程序部署或升级后,要马上检查程序的运行状态,功能模块是否符合预期,不定时的要查看下

9.在为项目或程序编写代码之前,要考虑到项目或者程序是部署在什么节点上的?才能把情况都考虑周全

普通节点

网关节点 redis的主服务器 jlb的集群 lb rs

DNS服务器

cdn节点

五、代码部署升级流程

提交代码到gitlab上,提mr,review,申请发布代码,自己来检查服务状态,看syslog日志,以及错误信息

某个项目的git版本,运维来编译好release包。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章