一个程序员的自我修养

时间:2023-02-12 10:57:05

勇气

程序员每天面对很多你不敢得罪的人:老板、上级、客户,哪个你都惹不起。但有些事儿,你惹不起也得惹,这就需要勇气。

正在开计划会议,老板说:这些功能必须在下周结束前完成提交给用户。你很清楚这做不到,你应该咬咬牙接下来呢,还是应该跟老板分析下说为什么做不到?当然,分析完还应该提出建议,比如减少业务范围。如果你这时候没有勇气,可能你将面临两个痛苦的星期,并且最后很有可能老板也不满意,因为你没说做不到让他以为可以,打乱了他的计划。

产品经理提出一个让人眼花缭乱的需求。你定定神想了半天,还理不清思路,你担心是不是自己智商有问题,不敢继续提问下去了。结果做的时候和产品要求大相径庭,结果也可想而知。作为合格的开发人员,如果你都无法理解需求,那么对客户来说就更难理解,这样的需求是否有价值?不能理解透彻的需求,一定要打破砂锅问到底,不明白的事儿不做。

这次开发任务有一块儿看起来很有技术难度,Team里面没有人做过,怎么办?有勇气的开发人员应该站出来,接受这个挑战,就算完不成,也给其他人趟出一条路来。

精益求精

碰到一个Bug,找了半天没找到原因,结果第二天来了他好了。庆幸庆幸,少一件事儿,下次不知道什么时候这个定时炸弹又会冒出来,到时候让那个碰到的倒霉蛋接吧。真正的程序员应该有不找到原因不罢休的精神,通过对疑难问题的分析,你的水平可以又提高一步。

一个Feature写完了,马上提交,准备下一个。等等,你确定你刚写完的代码是你能写出来的最好的吗?一般开发中都有“脚手架代码”。一开始是为了实现功能,有些类、方法 的设计就不一定合理,命名可能也有问题,重复代码也可能存在。不要等“有空”的时候再来修改这些问题。写完立即进行重构,如果你有单元测试护航,这些重构对你不是问题。

功能写完了,交互方式对用户来说是最佳的吗?还有没有改进空间?怎么样能让用户更方便?这些不仅仅是产品设计者的问题,作为第一线开发人员,你对这个问题应该更敏感。如果有问题,立即叫来设计人员进行沟通,如果有条件,和客户直接沟通。

测试代码

你有过不进行测试就把代码往上丢的经历吗?我有过,当然结局很不好。有些说我就改了一行代码,很简单,不会有事儿的。我有过只改了一个字符串就导致App崩溃的,因为修改后的字符串丢失了一个占位符,导致格式化出错。

任何代码的改动必须测试,这是铁的纪律。当然,如果你有写单元测试的习惯(你最好有),跑一次单元测试,看到全部绿条,会让你放心不少。

单元测试跑完,不能证明系统一定没问题,必要的端到端测试也必须做。不要等测试人员来帮你发现Bug,最好他们都发现不了,这才是你应该骄傲的。0 Bug可能吗?我不知道,但这是每个开发人员应该努力的目标。

开诚布公

产品经理做了个看起来很愚蠢的Feature,你应该告诉他吗?应该,不然你就可能去开发这个愚蠢的没人用的东西了。你喜欢这样吗?我想没人喜欢自己去做一个愚蠢的东西。

同事的某块代码写得不好,你应不应该告诉他你有更好的主意?你学习到了一些新的技术和理念,是不是应该分享给其他人,当大家一起进步?

尊重他人

尊重每一个人,不管产品还是其他程序员。开诚布公要求的是对事儿,尊重他人要求是对人。如果对人不尊重,那么即使你的意见是对的,很多人也很难接受。比如在代码评审的时候,用提问的方式说:你有考虑多线程的情况吗?而不是说:你这个傻逼,多线程的时候你这代码会崩溃。

程序员和产品的关系是各种互联网笑话吐槽的对象,两个总是互相伤害。对产品的的问题,要坚决开诚布公,讲出你的态度,但不要上升到人身攻击。对最后确定下来的Feature,要严格按照要求去完成。

帮助他人

闻道有先后,术业有专攻。程序员的职业知识范围很大。即使是一种语言,各种框架、技术层出不穷,每个人专攻的区域也不相同,在一个团队里面肯定有高有低。对于某些方面不如你的同事,如果遇到问题,尽力帮助他人,毕竟,团队产品做好了,才算成功,而不是你自己完成自己的工作就算成功了。

我在刚开始工作的时候,我的上级就是个很好的老程序员。刚开始我对Delphi也是刚入门,甚至SQL语句还写不完整,一开始遇到问题他给了我很多帮助,我熟练了以后有帮助了很多其他同事。这让我在一年内就升职做了项目经理,我想这和我积极帮助他人有关。

一个具有相互帮助习惯的团队,氛围肯定也会更加融洽。由于相互帮助,弥补对方短板,完成任务的效率也肯定会更高。

解决问题

程序出问题是不可避免的,无论你怎么努力,毕竟编程是个复杂的技术工作。出了问题之后,第一要务是如何解决问题,而不是找问题起因好惩罚哪个带来问题的家伙(事后可以查找,以免下一次再犯)。

解决问题就像破案,程序员需要有侦查员的精神。我一般做法是首先梳理一下程序的调用过程,然后大概分析一下有几个部分,并运用逻辑进行排除:假如是A部分出现问题,那么应该怎么样,然后逐步排除。

有些问题会比较诡异,出现了,你重启了一下,又好了,继续工作,于是问题没了。这时候应该彻底进行排查,找出具体原因和解决方案。有次碰到一个系统,过段时间上面的Tomcat就会报PermGen space out of memory,然后处理人员重启下就好了,这种处理方法他们一直用了几年!我看到后查了一下,发现是Hotspot的一个问题,在大量动态类创建的时候就会这样,那个项目jsp太多了,然后虚拟机换成JRockit就好了。

持续学习

IT工业还是一门新兴行业,到现在也才几十年,变化速度非常快。我刚工作的时候常用的编码技术、框架,现在几乎已经没有人使用了。从我10多年前开始使用Java语言,也从1.1到1.8了,中间语言特性、各种框架、编码方式都发生了巨大变化。如果还用10几年前的经验,到现在肯定要被淘汰了。

除了技术,项目管理的方式也不断在变化。10几年前敏捷才刚出现,大家都还在试图用瀑布模型开发,按那时的标准,我实际上从未用在瀑布模型的模式下成功过。当然,也开发成功不少产品,但都和瀑布模型无关。到了现在,如果你不学习一些敏捷方法,恐怕会越来越没有竞争力。

热爱生活

网上流行的黑程序员的段子,大约集中:天天加班、没时间找女朋友、忙到没朋友。 这不是一个好的程序员应该做的。除了认真工作,更要热爱生活。工作期间努力、职业地工作,把事情做好。下班了就好好享受生活,读书、旅游、家庭、朋友都不能忽略,像个正常人一样生活。哪些以把所有时间都用在工作上为荣的人,或许他们很成功吧,但我不羡慕。