代码整洁之道
前言
Robert C. Martin(Bob大叔)写的这本书确实让我受益匪浅,感同身受。他通过从事IT行业40多年的经历,娓娓道来各种程序员的故事,感觉很亲切,也很“接地气”,激励我写下自身的感受,与大家共勉。
整本书基本根据敏捷开发的实践流程进行阐述,以“专业主义”为主线连接起来。
什么是专业主义?
读过这本书后,我觉得“专业主义”就是具有勇于担当开发任务和挑战自己、追求代码完美和测试自动化、谨慎预估工作量和风险、严格时间管理、友好沟通与人际关系、经常反省。
专业的表现会让你耳目一新,与他/她一起工作,感觉“踏实”。专业人员的表现,会提高团队的专业水平和团队的应付各种挑战的信心。
怎样做到专业主义?
专业精神跟具体使用哪种开发流程无关,是程序员表现的职业素养。我觉得在Bob大叔特别强调了TDD(测试驱动开发),他很着迷于这种快速迭代、测试、实时发布的开发方式。
在敏捷开发中,我觉得程序员的“专业精神”更加重要,因为敏捷开发的流程比较自由,由于团队规模相对较小,每个人相对担当的角色相对都很重要;如果出现个别表现得不专业,就会对团队的建设产生更大的坏影响。
如何做到专业,或者在别的人眼里,你是专业的,我觉得从以下几点做起:
勇于担当
人无完人,总有某些方面是你不懂的,或者没有经验的。面临这种情况,敢于挑战自己,接受这个任务;特别是组织上在征求你的意见时,更是如此;为什么?因为组织上肯定也考虑过合适的人选,如果组织上愿意找你,说明你就是合适的人。当然此时或者稍后,你要积极跟进这件事情,给出详细的计划和各种风险,积极与组织沟通。如果你成功了,你的职业生涯会多一个亮点;如果你失败了,只要你保持与组织和相关人的沟通,组织上也应该会谅解你。
不齿请教
特别对新人来说,很多事情不懂;此时你需要找到愿意指导你的老师,经常跟他们请教,但是注意不能打扰他的工作时间和休息间。对于资深的工程师,也应该固守自己的“尊严”,勇于请教;问得越多,了解得越多,越能提高你对这个项目的了解,越能做出更大的贡献,慢慢的,你也会成为Master。
严格管理时间,兑现自己的承诺
专业精神就是要么不做,要么做好;没有其它选项。严格自己的时间意识,如果你觉得无法完成,请给出充分的理由,或者你可以给出其它选项,例如再给点时间、任务能不能少点等;不要认为是组织上分配给你的,你就默默接受,却在实际行动中又不积极实施或者没有提出任何反对意见,这是一种消极“抵抗”。
有信心交出自己的代码
如果对自己交出的代码没有信心,那别人对你的“专业精神”就会降低;我们不要寄希望别人(例如测试人员)替你揪出所有Bug,也不要认为如果自己的软件有问题,那不是自己的问题,而是别人没有测试到位;专业人员始终把“干净、整洁”的代码作为一个追求目标,因为只有你自己最了解自己的代码,你也知道风险在那里;如果你暗自不说就提交代码,这是一种不负责任的做法,从大的方面来说,也是不道德的。
保持乐观开朗的心情
开发软件不是一个人在开发,玩玩是非常多的人在一起工作,一天可能工作10几个小时,甚至连轴干;在这种快的工作节奏下,会很容易产生非常大的压力;如果你的心情不好,会“传染”到其它人或者整个团队。如果你保持乐观、开朗的心情,良好地与其它人沟通、工作,也会“传染”到其它人,从而带动其它人,这样也会增加个人的亲和力,提高你工作修养;也会从侧面有助于你的专业精神的提高。
“敏捷式”与“瀑布式”的不同
通过对专业精神的阐述后,我想简要说明下敏捷与瀑布的开发方式不同之处。
“瀑布式”软件开发方式,大致会经历:立项会议、需求分析、需求评审、风险识别、关键技术验证、需求里程碑会议、总体设计、概要设计、详细设计、设计评审、设计里程碑、代码开发、单元测试、开发里程碑、集成测试、系统测试、系统测试里程碑、验收测试、部署、调试、结束项目会议。感觉就非常重,各种阶段的评审、会议占用了大部分开发人员的时间。并且经历过这种开发方式后,开发出的软件可能已经不适应用户的需求,又需要重新从需求分析开始,而用户总是在抱怨软件交付太慢,不符合市场的快速需求。
有需求就应该有变化,“敏捷”(SCRUM)开发思想就应运而生,它是从“极限开发”(XP)思想而来,并且进行了理论的升华。这种开发方式的中心思想是“快速迭代”,摒弃为了流程而流程的僵化工作方式。敏捷开发不要求形式,技术架构或者设计可以通过Master与大家进行“头脑风暴”;每天站立开例会,严格时间限制;通过在白板上更新各自的Task状态和遇到的问题,让大家及时了解自己的开发进度;项目经理每天Check各种Task,而Task的进度在白板上就已经一目了然;严格迭代周期(基本为2个星期),保证每个迭代周期的软件可测试、可验证;并且,敏捷鼓励个性开发(个性的工作环境)、创造性开发和平等开发(每个人都共享自己的代码,提倡结对开发),并且经常举办“捉虫游戏”、结对编程游戏,提供工作的趣味性,提高团队的凝聚力。
总结
Bob大叔从代码开发、开发工具的使用、项目管理与建设各个方面,叙述了自身的经历。保持一颗永不疲倦的心,积极学习、勇于尝试新思想、新工具;时刻反省自己,不断提高个人的专业素养。
相关阅读
导语:在高中的时候,我的两个座右铭:“走自己的路,让别说去吧”,以及 “迟疑就面临着失败,抓紧时间,勇往直前”。这两句话一直在我心中,成
1.环境搭建 环境那个建 2.了解MVC模型 model–view–controller 3.搭建登陆页面
数据分析的重要性已经不用多说,做什么行业都离不开数据分析,做淘宝尤其如此,每天开电脑的第一件事和关电脑前的最后一件事就是看一下
读取位置 0x00000001 时发生访问冲突char content[100]; //SYSTEMTIME st; GetLocalTime(&st); sprintf(content, "%02d%02
linux drm 架构及linux drm 架构 之代码分析
转自: http://manpages.ubuntu.com/manpages/utopic/man7/drm-kms.7.html 根据自己的理解来转述一下: 摘要: DRM 是linux 下的