每个抱怨的程序员,应该读一读曾国藩

非常惭愧的是,受课本的影响,我对曾国藩这样的人物并没有好感,在我心目中,他是镇压农民起义的刽子手、满清走狗、卖国贼。近些年来,社会上忽然掀起了研究曾国藩的热潮,各种《曾国藩家书》、《曾国藩传》都成了畅销书。本来我对畅销书并不十分感冒,不过看到很多牛人推荐,耐不住好奇心,还是决定看一看。市面上曾国藩传记版本很多,我读的是张宏杰著的《曾国藩传》。读完之后,不禁感叹,曾国藩真乃圣人,偏偏历史又对其误解甚多(更多的是故意歪曲),幸好时代在前进,人们终于能够客观的评价他了。

我开始是在微信读书上看的,看完后意犹未尽,又下单了纸质书,准备细细品读。曾国藩的整个人生就是一个资质平平的小镇青年的逆袭史,难道接下来准备煲一碗浓浓的鸡汤吗?非也,我只想结合程序员普遍存在的一个现象谈谈我的感受。

程序员这个群体,普遍受教育程度高,接触网络也比一般的群体多,有比较多的发声机会,所以进各大论坛、微博、朋友圈,可以看到各种花式吐槽,弄的不明真相的人还以为程序员都生活在水深火热之中。其实仔细想想,如果程序员这个职业那么差,每年还有那么多人转行到这个行业吗?

很多初入行的朋友,踌躇满志,想着要写出改变人类历史的程序,然而,现实是无情的,他们大概率的会做一些现有代码的维护工作。

接收经过N代人之手的代码,左看右看,怎么看都是垃圾。文档,那是没有的,即使有,也可能是N年前的,已经和代码对不上。注释,那也是没有的,即使有一点注释,也不知道说啥。想理解前人的设计意图,真是难上加难。问题是,这些代码还在工作啊,还可能提BUG上来呀?没有办法,见招拆招吧,于是,本来就混乱的代码,又加上一层补丁。更痛苦的是,产品经理可能还会丢一些需求过来。想重新设计吧,时间来不及,再说心里也没底啊,所谓牵一发而动全身,目前系统至少还能工作,万一你动了哪个模块,系统崩溃了咋办。

日复一日,感觉这样的日子没有尽头,于是牢骚日盛,工作也没有了激情,只能寄希望于跳槽。但是跳槽之后又怎样呢?能够保证下次的工作不是维护现有产品么?

曾国藩当年创办湘军,其实面临着相似的困境。曾国藩为什么决心创立湘军,就是因为他看到清军已经烂到骨子里了。当时已经处于清朝晚期,经过了鸦片战争,但清政府还是没有觉醒,军队腐败,而太平天国运动风起云涌,清政府正规军遇到农民起义军都是一触即溃。曾国藩认为要从根本上解决问题,必须另起炉灶。所以,第一个问题,当你遇到一份烂到家的代码,你有勇气重写吗?

有人会说,我也想重写呀,可是没资源啊,领导也不支持啊。曾国藩创办湘军,别以为组织上会给什么样的资源,相反还有掉脑袋的危险。曾在地方训练军队,中央会怎么想,皇帝会怎么想,想造反吗?所以,曾国藩训练军队,不仅得不到上面的支持,还要藏藏掖掖,他其实打着团练的旗号,想得到上级拨款是不可能的,只能自行解决经费问题。

嗯,新代码可以抽空写,牺牲一点下班时间,只要能摆脱这堆烂代码,再痛苦也是值得的。然而,等真正着手开干的时候,发现还有一个拦路虎,现在的系统太庞大了,涉及好多模块和知识,还是没办法下手啊。其实曾国藩也遇到同样的问题,他是一个文官,对带兵打仗一窍不通,管理军队也是一个复杂的系统工程,如何招兵、如何筹饷、如何采购武器、如何编营、如何训练、如何布阵 …,太多知识需要掌握,其难度丝毫不亚于开发一个软件系统。曾国藩的解决方法只有一个字:学。

曾国藩的朋友很多,那一定是有很多朋友过来帮忙吧?真相是,当年的曾国藩并不是后来的他,由于太过于耿直,把上下官员得罪光了,这之前不久的长沙之辱,还差点被兵痞给杀了。不但地方官员们不齿于他,甚至他的那些好友都认为他行事鲁莽,难以成功,没有一个人愿意前来帮忙。

这还没完,你以为这样克服重重困难,训练出的军队就能所向披靡么?现实就是如此残酷,一心想首战必胜的曾国藩,迎来了首战惨败,曾国藩也因此有了第一次自杀(当然没有成功,否则就没有后面的传奇)。真是应了那句话:天将大任于斯人也,必先苦其心志,…。然而这一切,都没有击垮曾国藩,湘军反而越战越勇,最后击败太平军,拯救了清政府,也免于中华文明丧于太平天国之手。这个期间,其实也不省心,要应付上级的瞎指挥、皇帝的猜忌、同僚的排挤,所有不可能完成的事情,就这样在曾国藩手中一一变为可能。试想想,作为程序员,在工作中能碰到这么多困难么?

当然,曾国藩凭一己之力,延缓了清政府的倒台,但毕竟无法扭转历史的进程。如果你也付出了这样的努力,仍然无法改变公司烂到骨子里的现状,那是需要考虑离开的时候。但是,如果你并没有作出任何努力,只是在那里抱怨,换一个公司也只能是开始新一轮的轮回。在你没有证明自己的能力之前,别人拿什么相信你?