“ 闲居少邻并,草径入荒园。鸟宿池边树,僧敲月下门。过桥分野色,移石动云根。暂去还来此,幽期不负言。”贾岛为琢磨这首《题李凝幽居》,也不管交通法规, 骑驴闯了官道。对于全诗只有一处拿不定主意,那就第二句中的“僧敲月下门”的“敲”是否应换成“推”。可他又觉着“推”不太合适,不如“敲”好。不知是“ 敲”还是“推”好。嘴里就推敲推敲地念叨着,也不管屁股下的毛驴往那里走,结果那毛驴也不认识什么大官小官,就直奔韩愈的仪仗队里,韩愈虽然官高位重,但 是也是一介文人,问贾岛为什么乱闯。贾岛就把自己做的那首诗念给韩愈听,但是其中一句拿不定主意是用“推” 好,还是用“"敲”好的事说了一遍。韩愈听后对贾岛说:“我看还是用‘敲’好,去别人家,又是晚上,还是敲门有礼貌呀!而且一个‘敲’字,使夜静更深之时,多了几分声响。再说,读起来也响亮些”贾岛听了连连点头。他这回不但没受处罚,还和韩愈交上了朋友。
贾岛在唐朝被人称做苦吟派诗人。什么叫苦吟派呢?就是为了一句诗或是诗中的一个词,不惜耗费心血,花费工夫。贾岛曾用几年时间做了一首诗。诗成之后,他热泪横流。当然他并不是每做一首都这么费劲儿,如果那样,他就成不了著名诗人了。
软 件开发和写作在我看来,多少有点相似的味道,都是靠人脑力劳动,通过作者的想象,分析和努力,把原本凭空存在的东西变成现实。只是作家写作可以天马行空, 笔尖上挥洒千里,随意发挥。但是软件开发却需要一步一步求证,严谨科学。不过很多人把开发软件也称为写软件,这是因为软件工程的开发和写作一样,都是一字 一字的代码堆积成每个功能,然后汇总成为系统,这和写作基本相同。作者往往在需要反复推敲文章之后,才能写出让己让人都满意的美文。那么软件开发呢?
当 然在做软件开发的时候,不会像贾岛那样,几年才写成一首诗,这样的产量估计留给自己业余玩玩还可以,对于公司来说,这种产量估计老板会把他那张脸绷得比猪 皮还紧。我们在做任何开发的时候,也是条条道路通罗马,对于同样的一个动作,文章中讲究推和敲的意境,对于软件来说,同一个功能,也可以用不同的方法来实 现,可能有些人会把其中的公用的功能抽象出来,做成通用的函数,或许另外一些人就通过复制和拷贝来实现这种功能的复用。虽然功能都做到了,但是对于后期的 维护的人,估计他对两种方法的会有比较大的反应,搞不好还会念叨三字经,顺带拜会写代码人的父母长辈。
对 于软件开发中,我们的代码其实也需要像写文章那样推敲,反复提炼,特别是在于团队开发中,这种推敲工作显得更为主要。不是说我们一个项目完成之后,我们的 代码超过十万行,百万行就是一个了不起的项目,其实对于如此庞大的代码量,我们需要在兴奋之余想想到底有多少的代码是有用的代码,有多少的代码是值得再三 提炼的代码,而不是说这么多的代码都是废话,就像是海绵浸了水,拧干之后就什么都没有。
我刚刚把面试的人送出会议室,返回到我的位置上,木子已经迫不及待地问道:“小余,刚刚那个时不时那个百万大侠?”并用一种崇拜的眼神望着那人离去的背影,仿佛渐行离去的人就是她仰望已久的偶像。
我听完之后摇了摇头,说道:“不是他,他会在半个之后来。”因为项目的准备工作已经逐步开始,在前期的准备过程中,人员招聘也是非常紧迫的一个环节。毕竟想要找到一个合适优秀的人员,所花费的周期往往都比较长。昨天HR那边送来的几个的Senior级别的应聘者的简历,有些是自己投递的,有些是他们通过猎头找来的。在这些简历中其中有一份简历让阵个团队几乎炸锅了。
简历是Word的文档,在第一页不像一般人的简历那样,先写自己姓名和基本情况,还有一些工作的履历情况。开头先来了一个特别说明,其中说明有两点,其中第一点赫然写到:“XX油田项目曾经在半年的时间写代码量总共写了100万行代码。”说明的第二点就是关于这个项目实现的功能说明。但是我看到这里的时候,看到100万行代码的时候也忍不住惊讶,心里面也不由的佩服此人,毕竟我估计还不可能在半年之内完成这么多的代码开发工作。
“哇,100万!”因为大师也在看应聘者的简历,即便平时显得沉稳的他也不由自主的惊叹道。
“什么100万?”开发室中其余几个人听到大师的感叹,好奇的问道。
很快,此人的简历被整个开发团队的所有成员都阅读了一遍,全部的人对他从满了好奇和期望,都希望能够尽快看看如此厉害的人物到底是什么样子?时不时有三头六背,否则怎么能够在半年内完成如此多的代码工作量呢?阿毛还特地计算了一下这个人每天写代码的数量,半年等于180天,那就是一天写接近5600行的代码,如果一天工作12个小时的话(确实,这样的项目不加班不可能),1个小时需要写460行的代码,那么每一分钟需要写8行代码。经过阿毛的计算,所有的人都觉得不可思议。结果在短时间内,没有人都去关心这人的真实姓名,百万大侠也就加冕给他。木子还特叮嘱我说,如果明天百万大侠来了,一定要让她看看。
我在位置上作了议会,前台就通知说有面试的人来了,我看了一下时间,比约定的早10分钟。我拿着简历正准备和大师一起走到会议室,木子也随后跟在我们的后头,我笑了笑便由着她。我和大师进了会议室,面试的人已经坐在里面,木子脑袋在门口探了两次,便回到了开发室。
我和大师一坐下来,便仔细观察眼前的人,倒没有三头六倍的感觉,中等的个子,年龄和简历上所描述的30岁倒也相符,短短的头发看起来显得很精神,坐在那里喝着水,显得神色自若,并没有看出有紧张的样子。
面试的开始都是流水的操作模式,他简单地做了一个自我介绍,等他一介绍完成之后,大师便直接问到他:“你能不能说说你这个XX油田的项目?”
“这个项目是B/S的项目,其中我完成中核心的功能是报表的功能,因为对于油田项目中报表的要求比较复杂,在这个项目客户需要实现报表的功能是报表的字段可以随意自定义,而且我们还实现了数据正确但是不正常的数据的自动检测和自动预警功能……”
其 实他对项目的介绍是比较清晰的,他所承担的主要是针对报表部分的功能,在这个功能上主要实现的是自己编写报表逐渐来自定义报表模板,使用存储过程与通用控 件交互的方式实现报表的浏览、导出、打印等功能。对于报表来说,不同的行业对于其要求的复杂度存在的非常大的差异,如果说对于要求比较特殊的行业来说,要 实现其报表绝非通过简单的报表工具就可以实现,所以对于这部分的功能的确存在大量编码的可能性。不过由于没有从事过石油行业的开发工作,所以对其中的复杂 度也无法度量,所以我就没有针对为什么会有100W的代码去深究。
而大师却紧接着问道:“你简历上写着XX油田项目曾经在半年的时间写代码量总共写了100万行代码。我想知道你这100万行的代码是怎么算出来的?”
“我用工具统计出来的,大概有100W行左右。”
“这100W行的代码都是你自己写的吗?”大师继续问道。
“不是,其中30到40万行的代码是通过代码生成工具生成的,还有部分的代码是html上的代码,所有的代码文件都加在一起大概是100W行。”
大师没有继续追问了,其实到这里他大概也能凭借自己的经验估计出来有用的代码数量是多少,实际上利用现有的开发工具进行开发,开发工具自动生成的代码数量也非常惊人,很多时候开发人员通过拖拖拉拉就可以生成数以万计的代码来,对于这部分的代码统计出来又能够说明什么问题呢?
其实在团队开发过程中,我们需要时常斟酌、推敲我们自己写出来的代码,看看代码的效率,代码的复用性等等。很多时候我们需要控制代码的量,代码并非越多越好,如果成了老妈子的裹脚布,那只会是又长又臭。对于这样的代码,开发一旦进入后期,其维护的成本非常惊人。如果再10人的开发团队中,有时候部分的功能代码是可以通用,但是10人 之间彼此独立成章,每个人都自己对于某个功能写一套代码,可能由于项目缺乏标准的原因,缺乏有效的代码注释,开发的人也懒的去读代码,分析功能,就自己写 了一套;还有可能因为怕对现有的代码进行修改,影响了其余部分的功能,所以就再写一套代码,这样项目中存在的重复性的代码就非常多。在后期维护的时候,带 来的结果是往往改了左边丢了右边,问题不断的出现。
在 团队开发中,我们既要控制我们代码的冗余,避免出现大量无效杂乱的代码,这些代码往往来自于开发工具的自动生成,有时候来自开发人员低效率的代码编写。还 需要对代码进行归纳集中,对通用性,公用性的代码进行抽象,提取。同时还需要加强开发规范的约束。通过这些来保证代码的质量和效率。
一个程序员一天能够写出来的代码是有限的,我们既要减少他们彼此之间的重复劳动量,还需要提高他们的代码书写质量,如果质量能够得到控制,那么效率就能够提高,进而就是时间的节约。如果我们能够从有限的时间中节约出来部分,那么项目的整体进行就是另外一番景象。
作者:Yice(小余)
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。