不等不靠不要,程序员自己减轻“辛苦”

294 阅读11分钟
原文链接: zhuanlan.zhihu.com

嗯,这算是应景作文了。

昨天看了51CTO推荐博文,yaocoder朋友写的《谁来减轻程序员的“辛苦”》,算是有点感触,所以当时顺手就留言,说我也想写一篇。呵呵,同道中人嘛。

这不,还债来了。

我觉得在讨论这个话题之前,我们首先得讨论一下,什么叫做“程序员的辛苦”。

程序员辛不辛苦,这个话题其实我思考很多年了,总结自己这近二十年的职业程序员生涯,我得说,辛苦,也不辛苦,看怎么看。

说辛苦,这么多年,加班是加惨了的,就是去年,我加班还接近1000个小时,嗯,算算啊,1000/8=125天,呵呵,牛吧?前几周去新疆调试,客户的闺女今年高考,结果怎么着,客户看了我们的工作场景,坚决不让他闺女学计算机,说这一行太辛苦了。

现场客户最大嘛,我们只有在旁边呵呵呵。呵呵。

我想,很多朋友进入程序员这个职业,做不长久,后来都转行了,有能力的,慢慢走到项目经理、经理,进入公司的管理层,还有一些,离开这个公司、这个行业,去做其他事情了。我也得承认,这么多年,我看见的程序员,走掉的确实不少。

为什么,我想这值得我们思考。

再说说不辛苦。

大家想想,每个行业的成功人士,哪个不是天天加班努力?谁没有在自己的职业生涯中经历过这么一段艰苦奋斗的时光?

谁不辛苦?

所以,我想说的第一个话题,想做事,想成功,无论做任何一个行业,其实都很辛苦,没有辛苦,哪来的回报哦?大家说是不是?

当然,包括yaocoder朋友,我相信大多数朋友,从走入职场开始,还是不怕吃苦的,是做好的辛苦的思想准备的。

这就带出了第二个话题,什么样的辛苦是真辛苦?我想这个值得探讨一下。

我先抛砖引玉啊,我说“没有结果的辛苦最辛苦”,大家说对不对?

一件事儿,我们付出了很多努力,最后办成了,总是有回报的,可能是薪水,可能是奖金,可能是表彰,等等,再不济,我们还有个人成就感嘛,回家喝点小酒,和自己的太太、孩子吹吹,这件事儿我做的怎么怎么棒,太太孩子一片崇敬的目光,呵呵,很过瘾的,这些,其实都是回报。

我的第一个结论:“付出了,有回报,其实就无所谓辛苦”,大家说是不是?

最害怕的是付出了,最后事儿还办砸了,这才真的很郁闷。

都不好意思和人讲,有苦只能憋在自己心里,有句话怎么说来着?男儿不哭,呵呵,我的经验,不是不哭,是不肯当着人前哭,大家有兴趣的话,半夜两点过起来到街上转转,那些蹲在街边喝啤酒,一边喝一边哭的,有印象没?那都是白天太苦了,晚上出来发泄一下,大家理解一下吧。

所以,我的理解,程序员要想不辛苦,一定要以结果为导向,一切以解决问题为原则,而不要拘泥于程序设计技术,天天想着写一个多么酷的程序出来给人看,获得一些廉价的表扬。

把客户的问题解决了,把钱赚回来,再辛苦都不叫苦,解决了半天,问题依旧,最后客户打折,或者拒绝买单,那前面的辛苦就白费了,这才是真的苦。

所以我的第二个话题:“务实的程序员不会太辛苦!”,大家说是不是?

第三个我们说技术,我呢,写程序有点久了,对于程序员的辛苦也有一点心得,在开发工作中,我认为两点最辛苦,一个是bug,一个是需求变更,有经验的朋友点评一下,看是不是这样?

一般说来,大多数场景下,项目经理在组织开发工作时,时间还是留的差不多都够了的,如果顺顺当当做开发,基本上大家都不用加班。大家想想是不是这样?

关键是,哪一回是“顺顺当当”?呵呵。

无穷无尽的bug,我也说句话,几乎所有的加班都是bug造成的。属于程序员自己的问题。

什么叫bug?程序崩溃、挂死,叫做bug,计算错误叫做bug,UI设计的不漂亮叫做bug,甚至一个按钮拜访的位置不对都叫bug。总之,客户的需求不满足,就叫做bug。

很多时候,其实需求变更我觉得也可以视为bug的一种,我们设计的方案,和客户的真实需求之间有偏差,无法满足客户需求,必须得改,从这个意义上讲,我认为也是bug,是方案级bug。

这部分,我觉得应该是程序员自己的问题,是可以改变的。

一个大学生,刚毕业,什么经验都没有,确实如前所述,那会儿他写程序,肯定是乱七八糟的,因为他不知道自己在做什么,也不知道自己该想什么,怎么想。

这是客户服务经验,这没办法,前期肯定通过碰壁、挨批评甚至挨骂来学习,委屈多了,就知道大家约定俗成的方式是怎样的,慢慢地调整自己的行为,输出结果,再慢慢的,菜鸟变老鸟,东西一出手,客户就满意,也可以坐在那里喝杯茶,顺便骂骂刚来的程序员,呵呵,各位大牛们,你们是不是这么过来的?

注意哦,这个时候已经开始分两种人了,聪明的,爱学习的,善于调整自己的,也犯错误,但是错误只犯一次,下次就记住了,不会再乱来了,这种人慢慢就起来了,最后会变老鸟。

但也有很多人,说不好听啊,教不变的猪,同样的错误犯了一次又一次,就是不改,说了还不听,其实大多数最后程序员做不下去的,都是这种人。

大家想想,生活中有没有碰到过这种人?我的问题是,他们这个习惯不改,做其他行业,不做程序员,能成功不?

所以我的第三个结论:“善于学习的程序员不辛苦”,大家看同意不?

一般软件开发公司里面,都有编程规范,这个规范哪,我也写过很多,我评价一句话啊,“编程规范就是想办法把事情搞麻烦!”,呵呵,大家同意不?

明明一个变量,我起个名字叫做a,挺好,可项目经理不干,非要我改成nHashTravelCount,这么一个又臭又长的名字,多敲多少字?不干。

明明我一个函数就搞定的问题,可是那个没良心的经理,居然要我拆分成三个函数,这不是浪费我的劳动力嘛,加班还不给工资,不干。

... ...

这些思路,大家以前有过没有?见过没有?

最后的结果怎样呢?

慢慢的,大家发现,做事情稍微勤快一点的程序员,他的团队合作总是最友好,他的模块bug总是最低,大家用他提供的功能总是最顺畅。

反而那些天天抱怨的程序员,谁和他合作都是一肚子气,想让他多谢几行代码,多提供个方便的接口,比杀了他还难受,还不如自己来。

再慢慢的,大家发现勤快的程序员,工作任务越来越重,公司经理也越来越器重他,给他加薪,升职,最后,他居然变成项目经理了。

而抱怨的程序员呢,越来越闲,没什么事儿做,也没什么朋友,慢慢被边缘化,直到某个年终的末位淘汰,他不见了。

这些事儿,大家有遇到过没有?好,我的问题来了,大家觉得哪种程序员最辛苦?

所以,我的第四个结论,“勤快的程序员不辛苦!”,大家说是不是?

因为勤快,程序员就可以比别人多做很多事情,下班回家,没事儿的时候不玩,总结一下自己的工作。

嗯,这个需求我在哪个地方遇到过,今天又遇到了,可能我需要琢磨个套路,或者总结一段公有函数,甚至公有类,抽象性好一点,以后再遇到这类需求,就不用写了,直接套用。

又或者,我找找看,看哪个开源库里面有成熟的代码,翻出来评估一下,如果合用,也就算作自己的公有模块了。

于是开干,很快,一段像模像样的抽象模块就出来了,嗯,放哪呢?

yaocoder朋友已经说到了,准备一个库。

其实我也是这么办的,我的0bug工程库就是这么来的,不过我这人脾气怪,什么都喜欢自己写,所以我的库全部是自己来的。

有库好啊,走到哪儿,遇到什么问题,都有解决方案。

一个程序员,再怎么走,再怎么跳槽,基本上还是在某一个业务领域圈子里面转,比如我是做数据传输的,找的开发工作怎么都和TCP啊、UDP啊、数据通信啊这类有关,所以我库里面这部分代码是最多的。

还有个很关键的,库这个东西自己一直在用,前面的工程实际上已经把库中间的代码测试过了,已经证明了东西是对的,没有bug,至少应对新应用场景的时候,bug很少。

库代码自己长期在维护,对里面的逻辑熟悉程度很高,即使遇到问题,也很容易定位,迅速找到bug并解决。

所以,有自己私有库的程序员,和没有这个的程序员,工作效率差别是很大的。

我昨天还在问一个朋友,我说请他评估一下,去年我们两个人,写了差不多二十万行代码,做出了一个商业实时数据库,我们有没有时间debug?

实际上是没有的,我们任务太重,根本没有太多时间犯错误,几乎所有的程序都要求写出来一次过,编译器过了,基本上就没有什么bug了,最多联调的时候解决一些不匹配的问题,还有就是研究一些特定场景的高性能算法。

这里面其实主要就是我的0bug库在起作用。

大家想想,一个大型工程,还没有开始做,我们先说,所有的内存泄露、线程问题、锁问题、7*24小时的内存碎片问题,大规模数据组织问题,就都不是问题了,我们可以在这个基础上直接开发,只关心业务逻辑和产品性能。这么开发,大家说厉害不厉害?

很多小公司的开发团队做不到的。

我们去年的辛苦和前面的bug还真没多大关系,主要是人手少,任务重,一个数据库的开发,它有那么多事情要做,少一件都不成。

所以,我的第五个结论:“善于总结的程序员不辛苦!”,大家同意不?

呵呵,哩哩啦啦说这么多,还没怎么按照yaocoder朋友的思路写,嗯,莫怪啊。

我一直有个看法,程序员的工作,要说不辛苦的其实有。

找个好公司,找个好领导,或者找个好爸爸,在爸爸开的公司里面做程序员,肯定不辛苦啦。

其实这些都可能让程序员不辛苦的。

但是,这些都是外因,有偶然性,不是普适性的道理。

我想说的是,作为一个程序员,或者一个想成为程序员的人,要有清醒的人士,辛苦是必然的,做事情肯定会很辛苦,但是要正确看待,要不断学习、总结,调整自己,让自己慢慢地变得不是那么辛苦。

所以我起了这么个题目,“不等不靠不要,程序员自己减轻辛苦!

大家说呢?

本文出自 “肖舸的blog” 博客,请务必保留此出处tonyxiaohome.blog.51cto.com