挨踢项目求生法则(5)——编码篇

摘要程序员

有一句古语“少壮不努力,老大作IT”,作IT确实挺悲剧的,但最悲剧的是作码农(程序员)!烂代码直接产出来软件,而烂代码是怎样产生的呢?是烂程序员吗?大部分程序员是追求进步和高质量代码的,每每是烂的管理方式、无节操的项目工期而致使程序员不知所措、疲于奔命、为赶工而写代码。当加班成常态,你还跟我谈什么代码质量呢!算法

 

什么叫挨踢项目?

IT项目,特别是软件开发项目,都属于“挨踢”项目的范畴。挨踢项目的几大特色:
1.需求不肯定。
2.技术不肯定。
3.工期限死。
4.预算限死
两大不肯定和两大限死,你想不“挨踢”都难!数据库

 

“无节操”的加班编程

某公司有个加班龙虎榜,每周按照加班的总时长进行排名,加班时间最多的就是状元,而后是榜样、探花。其实没有谁这么变态要打进三强,但大部分人不想本身常常出如今榜尾,由于让领导看见了不是很好,有可能会致使饭碗不保,因此只能“自觉”加班!因而加班成了屡见不鲜……架构

某创业公司的老板搞了个“奖罚分明”的激励制度,任务分派下来若是能提早完成,提早时间越多,奖励越多;相反,若是任务推迟完成,推迟越多惩罚越多。结果你们都懂的,这些任务基本都是 mission impossible,“提早完成”须要人品大爆发,“推迟完成”是正常现象,程序员们的薪金都被扣得差很少了,再推迟的话就要倒贴公司了!框架

一我的一天当中,能高度集中精神的工做时间有多长呢?你能够自测一下,个人答案是6小时,偶尔能够爆发到7-8小时。数据库设计

若是不用加班,按一天工做8小时算,若是其中有6小时能高度集中精神工做,其实已经很不错了!ide

若是加班呢?我告诉你,本来还有6小时的高效工做时间,立刻就会减小!加班越长这6小时减小得越多,若是加班时间屡见不鲜,那么这6小时就会变成零!工具

软件研发不是体力活,是高强度的智力运动,但愿管理者要清楚明白这个软件研发的客观规律,咱们不能违背这个天然规律。低效率的加班只能是一种心理安慰(这个心理安慰只对领导有效),只能带来更多的问题。开发工具

 

“奔放”的项目管理者

领导要K人,通常会把要K的对象叫进会议室,而后关上门来K,开门后就好像没有发生过任何事情同样,门外的人一概不知道发生了什么事情。(PS:这里说的K不是指打人噢,而是批评,俗称骂人。)

可是有些领导很“奔放”,直接当众K人,有些邮件K,但这个邮件会抄送项目组全体甚至全体员工!我运气比较好,尚未遇到过“奔放”老板,但万一你运气好,遇到了被领导“奔放”地K了一顿,你会怎样呢?固然你要这样想:这个领导其实算不错的了,在“阳光”下K你,若是他来“阴”的,岂不是更恐怖!

闷骚、腼腆、脸皮薄、心灵弱小,是程序员的特色,通常的程序员是接受不了“奔放”的管理模式的……

 

保命四招

若是你遇到“极端状况”,后面介绍的法则都不会适用,你要用的是这保命四招。

什么是“极端状况”呢?

那就是相似前文提到的“无节操的加班”和“奔放的项目管理者”这些状况,固然不限于这些状况,由于没有最惨只有更惨!

如下是保命四招: 

1)抱怨有益健康。

有人说抱怨没有用,但若是不抱怨你会憋死,因此你须要宣泄,你能够约朋友吃饭喝酒齐齐诉苦,这样才能有益身心。但要注意抱怨并不能解决问题,不要沉迷抱怨噢!

2)忍一时风平浪静,退一步死无全尸。

工做中遇到不公想发做,你必定要用第二招:忍一时风平浪静,退一步死无全尸!要忍但不要退,要用耍太极的方式来推挡一些事情,不要累死本身便宜了别人。

3)自我增值才是硬道理。

增长你的价值就是增长你的谈判筹码,这就是第三招。我曾经和领导直接电话对骂,我竟然没事,由于当时公司须要我完成这个项目,我有恃无恐!你能够尝试在公司爆发一下,测一下你的价值,若是爆发完你没事,说明你对公司的重要性不错。但若是出事你不要找我噢!我当年敢干这些出格的事情,是由于我年少无知、血气方刚,而且自觉得本身很牛B!自我增值让你有更多选择,能帮助你选择更好的工做。

4)我只想将工做作好!——这不可取,由于这是你辛苦的根源。

在“极端环境”下,好的工做态度是不受欢迎的,只能变成折磨你本身!作好工做不是你一我的的事情,咱们没有这么强大,咱们只能顺势而为。不少事情咱们改变不了,但咱们能改变本身。我不是鼓励消极的工做态度噢,这是在你由于各类缘由还不能选择更好的工做机会时的过渡方法,有好的工做环境时,你就须要从新树立“我要将工做作好”的态度!

 

面对“极端状况”我也没有什么好招,前面的内容实在是太多负能量了,实在有点“儿童不宜”!

下面将会介绍“正常状况”,“正常状况”固然也会存在不少问题,但这些问题都是有机会解决的,后面的内容都是正能量滴,是“老小咸宜”滴噢!

 

牺牲质量能提高进度吗?

项目管理基础知识中提到,项目管理主要管成本、进度和质量,咱们不可能用很低的成本、很快的进度和很高的质量来完成项目,也就算俗称的“多快好省”地完成项目是不可能的。咱们的软件项目成本是卡死的,进度也是很紧的,因此咱们只能稍微下降质量来保证进度,这样的逻辑合理吗?

实际工做中咱们其实就是进度优先,但仍然有不少加班。忽视质量其实并不能带来更快的进度,而是更多的加班!

咱们为何会加班?咱们的加班大部分缘由是要返工,或者是前面没有发现问题后期问题才爆发,简言之就是前面工做质量不过关,致使后续更大的工做量。工做质量包括需求的质量、设计的质量、代码的质量等等。重视质量反而会加速项目进度!咱们须要定下项目的基本质量要求,想清楚才动手,一步一个脚印地作好项目。

 

代码的重要性

我认为项目中是两类文档是必须的,那就是需求和代码!有人可能会更绝,必须的文档只有一种,就是代码!没有代码就编译不出软件,其余文档能够不要,但代码必须有。而程序员是写代码的,非程序员是写其余文档的,因此除了程序员,其余角色也能够一概不要。其实上述说法是成立的,我曾经试过只有我和另一位程序员的状况下,不须要其余人就咱们两个程序员,咱们就能作好一个软件而且这个软件的销量还能够。

代码及代码的质量实际上是至关重要的,但不少项目多是这样的一种现状:不抓代码质量,软件问题多多,但一抓代码质量,项目立刻就会死翘翘! 

如何解决上述困境呢,下面的求生法则可能有用! 

 

法则1:问题根源80%在于需求

程序员的工做职责是什么?这个是单选题,你选择哪一个?

A)写代码;
B)完成领导分派的任务;
C)实现自我价值;
D)实现客户价值;

标准答案是:D

客户价值就是经过需求来体现的,不要扎头就写代码,要弄清楚需求。需求文档实际上是必须的,不过文档的载体和格式是不限的。

 

法则2:拒绝需求变动

某项目原定一个月发布某版本,但这个版本延迟大半个月仍是发不出来。原来客户喜欢提需求变动,而且越接近发布日期,变动的要求就越多,客户但愿这个版本包含的内容越多越好,而项目组为了避免得客户答应了这些要求。不要怕得罪客户,要拒绝这样的需求变动,我会跟客户这样说:欢迎需求变动,但这个版本不考虑,下个版本再考虑。

这个法则并非要你拒绝全部需求变动,而是某个一迭代中要实现的需求是稳定的,不适合再改的。盲目顺从客户最终并不会让客户满意,而程序员们由于要应对这些需求变动,须要反复改代码,这样是很打击士气的。

需求变动是不可能没有的,咱们须要:

1)反省需求分析的工做质量,请留意法则1;
2)原则上拒绝当前版本的需求变动,下个版本再考虑;
3)万一遇到重大的需求变动确实须要立刻实施,那能够停掉当前版本从新规划,必定不能用“逐步添油”的方式工做。(出现这种状况,一般是由于需求分析工做质量不过关致使的,因此法则1很重要啊!)

 

法则3:程序员的工做须要有灵魂

咱们先看看什么叫程序员工做“没有灵魂”:

1)不知道本身为何客户服务;
2)不知道项目的远景;
3)只有项目经理操心项目,而程序员以“打工”的心态工做;
4)程序员任何改进意见都听不进,能写完代码就阿弥陀佛了!

那怎样才能让程序员“有灵魂”呢?

1)让程序员理解需求,至少本身作的部分要理解;
2)让程序员先行本身估算本身的工做,项目经理给出指导;
3)尊重程序员的实际水平,想办法让他引爆小宇宙,而不是靠强压。

 

法则4:写代码也是在作软件设计

程序员们会用“码农”来自嘲本身,其实写代码是搞技术含量的活,写代码其实同时也在作软件设计工做,包括软件的架构设计、详细设计甚至是数据库设计!

当你用开发工具规划solution、project的时候,当你在project中划分文件夹的时候,你其实就是在作架构设计;当你新建一些类文件,思考类的职责而且有注释写下来,当你写下方法的定义(暂时没有实现的代码)的时候,你其实就在作详细设计;当你分析各类业务对象后,在数据库中去创建表、字段、表关系的时候,当你在代码中设计实体类的时候,你其实在作数据库设计及实体类设计。

因此咱们不是码农,优秀的程序员其实也是优秀的软件架构师、软件设计师以及数据库设计师!做为程序员来讲,不要将本身定位为码农,你能够站得高作得更好;做为程序员的领导来讲,不要将程序员定位为低技术含量的工种,程序员实际上是最重要最有技术含量的工种。

 

法则5:关注程序员的须要

问:工做了这么久,领导找过你谈心没有?

答:有啊,常常“谈心”呢!谈工做,谈进度,谈缺陷,谈作完了没有!!

我说的“谈心”是指领导和员工谈员工的职业发展,让员工说出他的想法,领导在公司层面给予支持和帮助。

程序员有什么须要?无非是如下须要:

1)薪金的须要;
2)我的职业发展的须要;
3)生活上的须要。

薪金的须要一般是不能知足的,做为程序员领导的你可能也对本身的薪金不满,更谈不上让你去涨程序员的薪金了。但领导是否是能够问问程序员的职业须要呢,他想学什么技术,作什么类型的项目等等,在工做安排上给予必定的照顾呢?在生活上是否是能够容许程序员稍微弹性上班呢?有些家庭生活上的事情可让程序员先出处理一下,不用他请假更加不会扣他的工资,程序员没有后顾之忧才能作好工做啊。程序员多是地球上最善良的一类人,他们会滴水之恩涌泉相报!

 

法则6:男女搭配效率加倍

有些公司比较“变态”:不招聘女生,若是要招聘就必定要找已婚已育的!还冠上堂而皇之的理由:女生出差不方便啊!女生加班不方便啊!

有些领导比较“歧视”女生:女孩子嘛,不适合干什么技术活,作一下测试或QA就行了。

女程序员原本就少,加上以上的缘由,更加是少上加少!

女生的威力特别是女程序员的威力是很强大的,不只仅是这位女程序员自身的做用,更重要的是女程序员对男程序员发生的化学做用!若是男程序员原来的战斗力是10,若是有女程序员一同工做,那么男程序员们的战斗力至少能够上升到15。因此那些老板们太不会打算盘了,不要只看着女生生孩子的那段时间,请一位优秀的女程序员,绝对是一个超值的投资!

 

法则7:编码规范不是摆设

问:大家有编码规范吗?

答:有!

问:谁能说出编码规范中最有用的几条要求?

答:……

很多公司的编码规范是“空降”的,或者是你来到公司后就一直知道有编码规范这回事,但一直没有见过这份文档,更加没有在工做中执行过。

“空降”的意思是所谓的参考业界标准“抄”过来的一份文档,或者从某CMMI多少级的公司中“抄”过来的文档,“空降”文档注定就是要被摆上神台供奉的,不能落地的。

有效有用的编码规范能够很简单,最开始的时候能够一页纸就搞定!咱们只须要总结出当前编码中出现的问题,针对性地定出规范,只制定当前能执行的规范,不能执行的不要写进去,这样很快一页纸的规范就能够定出来,而且你们都愿意执行。规范不在于长短,不在于参考了什么“伟大”的标准,关键是能不能执行!

全部的改进都应该遵循按部就班、持续改进的原则,这样一页纸的规范将会逐渐添加更多的内容,这样也代表了咱们的编程水平正在持续提高。

 

法则8:提高编程基本功

有些程序员是写不出排序算法的,更悲剧的状况是在一堆数中找出最大的算法也写不出来。

两个途径解决编程基本功的问题:

1)把好入职关,增长编程基本功的笔试题。
2)加强代码评审。

代码评审应该在早期就作,高手评初手,评审主要目的不只仅为了发现和解决问题,更重要的是提高程序员的水平。程序员水平提高后,评审就能够减小次数甚至不须要。

 

法则9:零缺陷意识

MSF(微软解决方案框架)提到的“零缺陷意识”很是有价值!零缺陷代码可能真的很难写得出来,但零缺陷意识必须有。

做为项目管理者来讲,你要知道零缺陷的代码才能准确预测项目的进度;做为程序员来讲,你要把这个当成基本的素养,对本身提出严格的要求,不要盲目求快,不要说反正后面有测试,若是程序有问题,那就是测试没有作好。

做为程序员来讲必须作到如下两点的最基本质量要求:

1)你的程序能编译经过;
2)你的程序能经过“冒烟测试”。

经过冒烟测试是指:

1)模拟用户的最多见的正常操做,程序不会出错。
2)点击全部能点击的按钮、菜单等,程序不会出错。

这个冒烟测试是程序员本身作的,程序员们要本身擦干净本身的屁股噢!

 

法则10:避免“外包人头”

某些大公司大国企为了所谓的下降研发成本,会使用一些“临时工”,这些临时工和正式工一同工做,一般正式工干主要的岗位,而临时工干码农的工做。这些临时工是一些合做方公司以“外包人头”的方式租给雇主,临时工是合做方的正式员工,但在雇主那里他们就是“临时工”。

将软件研发工做特别是编码工做当作是低技术含量的事情,将程序员当作“工人”,这自己就是违背软件研发特色和客观规律的不合理作法!对于一些公司这样的作法,我是强烈喷之的。这样的作法其实不会下降成本,反而是增长很多成本。若是你是公司的管理层,强烈建议你不要采用这样的作法,说得难听一点,这是“反人类”的作法,并且这其实并非“同工同酬”,实际上是违法的作法。

试想一下,“临时工”会有怎样的战斗力?不是他能力不行,而是体制上的问题,他愿意尽心尽力吗?软件研发是高技术含量的团队工做,不是靠人多就搞定的。假设企业本来打算使用100名临时工,你不如招聘20名正式员工,20人的正式员工比100人的临时工的工做效率会更高,但总成本节省很多。企业还能够将节省的成本拿一部分出来,用来提高你们的薪金,这样总体效率会提高很多。

若是你的团队中已经有“临时工”了,你也没法改变领导层雇佣临时工的用工策略,你该怎样办呢?

相信你在工做中已经能体会到,你是很难调动“临时工”的工做积极性的,固然会有少数“临时工”是不错的。你能够参考“法则5:关注程序员的须要”,程序员是一种你对我好、我对你更好的善良物种。

 

小结

有那么一句话:找老公就要找程序员!

这句话不太对,你当女程序员不存在啊,这句话应该是:找老公就要找男程序员!

那找老婆呢?女程序员!遇到单身女程序员,必定要尽早动手,由于她很抢手。

程序员们是可爱的群体,编码是高难度高技术含量的活,但愿咱们的编码工做能变成富有激情和战斗力的工做吧!


我是CSDN博客之星2013候选人之一,若是你喜欢个人文章,欢迎投我一票!

投票连接:

http://vote.blog.csdn.net/blogstaritem/blogstar2013/u010825142


谢谢!



做者:张传波

创新工场创业课堂(敏捷课程)讲师

软件研发管理资深顾问

CMMI首席专家

《火球——UML大战需求分析》做者

www.umlonline.org创办人

相关文章
相关标签/搜索