明确自己想要什么,因为专业主义不但象征着荣誉与骄傲,而且要明确责任和义务。既然你想当专业主义,就要承受它所应当的责任。而专业主义的精髓在于将公司利益视同个人利益,即你出发的角度应该是从专业的角度去看待问题,从公司的角度去获取利益。
既然要有专业主义,你就得为你的代码而承担责任,对例行程序进行测试,毕竟专业人士写的代码,一旦发现错误,你就得为你的代码错误承担责任而不是推卸。所谓专业人士,就是能对自己犯下的错误负责的人
希波拉克底誓言:
对知识传授者心存感激;
为服务对象谋利益,做自己有能力做的事;
绝不利用职业便利做缺德乃至违法的事情;
严格保守秘密,即尊重个人隐私、谨护商业秘密。
没有人能写出完美的软件,但并不代表你不需要对这份不完美不负责。所以作为一个专业人士,要练习的第一件事就是“道歉”。并尽量保证下次不会再犯。失误率永远不可能等于零,但你有责任让它无限接近零。
所有软件项目的根本指导原则是,软件要易于修改。
描述如何创建灵活可维护的结构的软件设计原则和模式,专业开发人员会牢记这些原则和模式,并在开发软件时认真遵循。如果希望自己的软件灵活可变,那就应该时常改它。
想要证明软件易于修改,唯一的办法就是做些实际的修改。如果发现无法改动,说明需要改进设计,以便后续修改简单。
为什么大多数开发不敢不断修改他的代码,因为害怕改坏代码导致其他功能无法使用。因此,你需要一套覆盖了全部代码的自动化测试。
雇主付出了金钱,你就必须付出你的时间和精力。你可以在其余的时间学习。一周有168小时,996算的话就72小时,再留56小时给睡眠,那还剩40小时呢?
当然工作就该在上班的时间内完成,不改再带回家,剩下的时间,你也该为自己的职业发展工作而努力。
作为一名专业开发者,你需要不断扩展领域的知识面,过去产生的理念,已经过时了,但不代表着我们不需要了解它,毕竟前人留下的宝贵经验,在今天也依旧富有价值。正如桑塔亚纳的诅咒:“不能铭记过去的人,注定要重蹈覆辙。”
下面列出每个专业软件开发人员必须精通的事项:
软件行业的飞速改变,意味着软件开发人员必须坚持广泛学习才不至于落伍。
练习,指的是在日常工作之余专门练习技能,以期待自我提升。常用的一个技巧是做一些简单的练习来训练自己的手指和大脑。以保证自己的习惯。
学习的第二个最佳方法就是与人合作。尝试与他人一起编程,一起练习,一起设计,一起计划。这样可以从彼此身上学到很多懂西,而且能在更短的时间内更高质量的完成更多工作。当然独处的时间也很重要。
教学相长,想要迅速牢固地掌握某些事实和观念,最好的办法就是与你负责指导人交流这些内容。同样,让新人融入团队的最好办法就是和他们坐在一起,向他们传授工作要诀。专业人士会视辅导新人为己任,他们不会放任未经辅导的新手恣意妄为。
每个专业软件开发人员都有义务了解自己开发的解决方案所对应的业务领域。开始一个新领域的项目时,你应该先读一两本该领域相关的书,要就该领域的基础架构与基本知识作为客户和用户访谈,了解他们的原则和价值理念。
雇主的问题就是你的问题,你必须弄明白这些问题,并寻求最佳的解决方案。每次开发系统,都应该站在雇主的角度来思考,确保开发的功能能真正满足雇主的需要。
编程是一种创造性活动,也是极其自负的行为。很多专业人士都会对自己写的代码表现的过于自信,自己风险评估出错的时候,可能会一笑了之,而对别犯错就会横加贬损。因此专业人士要要清楚自己的自负,要始终保持着谦逊的态度。
尤达:能就是能,不能就是不能,不要说“试试看”。
专业人士敢于说明真相而不屈从于权势。专业人士有勇气对他们的经理说“不”。
面对艰难决定,直面不同角色的冲突是最好的办法。
提供太多细节,只会招致更多的微观管理
最要说“不”的是那些高风险的危险时刻。越是关键时刻,“不”字就越具有价值。
具备团队精神,意味着格尽职守,意味着党其他队员遭遇困境时你要援手相助。有团队精神的人会频繁与大家交流,会关心队友,会竭力做到尽职尽责。
健康的团队都会努力寻求给他人以肯定的答复。运作良好的团队的经理和开发人员会相互协商,直到达成共同认可的行动方案。
口头上说。心里认真。付诸行动。
做出承诺,包含三个步骤:
我将在…之前…
做出承诺或许听起来令人有点海派,但他能帮助程序员解决在沟通中可能发生的不少问题。
表达自己的不确定感+坚守原则
专业人士不需要对所有请求都回答“是”。不过他们应该努力寻找创新的方法,尽可能做到有求必应。当专业人士给出肯定回答时,他们会使用正式承诺,以确保各方能明白无误地理解承诺的内容。
在心烦意乱的状态下工作,只会造成严重的浪费。如果感到疲劳或者心烦意乱,千万不要编码,要找到一种方法来消除干扰,让心绪平静下来。
奉献精神和职业素养,更多意义上指要遵循纪律原则而非成为长时间工作的工作狂。要确保自己已经将睡眠,健康和生活方式调整到最佳状况,这样才能做到在每天的8小时工作时间内全力以赴。
关键所在是要学会如何关闭自己的后台进程,或至少要能够降低其优先级,这样焦虑就不会造成持续的干扰。专业开发人员应该善于合理分配个人时间,以确保工作时间段尽可能富有成效。
流态区,即在程序员在编写代码时会进入的一种意识高度专注但思维视野却会收拢到狭窄的状态。在这种状态下,他们会感到效率极高。然而在这种状态下,为了追求所谓的速度,理性思考的能力会下降。
结对编程,两个程序员在一个计算机上共同工作。其最大的好处在于,结对中的任一方都不可能进入流态区。
音乐有助于你编写代码,也会消耗一部分宝贵的脑力资源,因人而异。
真实的情况是,音乐正带领他们进入流态区。
结对是用以应对中断的一种好方法,结对搭档能够维护住中断处的上下文。
另一种方法便是TDD。失败的测试能够帮助你维护住编码进度的上下文。
礼貌地表现出乐于助人的态度才是专业的态度。
造成阻塞的因素:睡眠,焦虑,恐惧和沮丧
解决方法:找一个搭档结对编程
创造力会激发创造力
调试时间和编码时间一样昂贵,重视调试过程。
管理延迟的诀窍,便是早期检测和保持透明
使用三个考虑到多种因素的期限:乐观预估,标称预估,悲观预估
不应该采用额外加班加点工作的方案,除非以下3个条件能够满足:
TDD绝不仅仅是一种用于缩短编码周期的简单技巧。
首先声明以下几点:
循环不断重复:写一些测试代码,然后再写一些产品代码。
TDD是专业人士的选择。它是一项能够提升代码确定性,给程序员鼓励,降低代码缺陷率,优化文档和设计的原则。
保龄球:http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata
素因子:http://butunclebob.com/ArticleS.UncleBob.ThePrimeFactorsKata
职业程序员会重视与团队及业务部门的沟通,确保这种沟通的准确,流畅。
开发方与业务方之间最常见的沟通是关于需求的。
避免过早精细化的办法就是尽可能地推迟精细化。但也会造成另外一个问题:迟来的模糊性。
专业开发人员必须确认,需求中没有任何不确定因素。
验收测试就是在接受正式发布之前由用户执行的程序。是业务方写给业务方的。它们是正式的需求文档,描述了业务方认为系统应该如何运行。
QA也是团队的一部分。QA在团队中要扮演的是需求规约定义者(specifier)和特性描述者(characterizer)
关于会议有两条真理:
会议室必需的
会议浪费了大量的时间
如果你收到会议邀请,务必确保出席会议可以给自己目前的工作带来切实且显著的成效,否则不必参与。
如果会议让人厌烦,就离席
我们之所以愿意承担开会的高额成本,是因为有时候确实需要所有参与者坐在一起,来实现某个目标。为了合理使用与会者的时间,会议应当有清晰的议程,确定每个议题所花的时间,以及明确的目标。
开早会的时候,所有参会者站着,到场人依次回答:
在会议召开前必须完成两项任务:评估可选择人物的开发时间,确定这些人物的业务价值。
迭代回顾和Demo展示
如果争论必须解决,就应当要求争论各方在5分钟时间内向大家摆明问题,然后大家投票。这样,整个会议花的时间不会超过15分钟。
编程是需要持续投入精力和注意力的智力活动。
恢复注意力点数的方法:
番茄工作法:设定25分钟。倒计时期间内不要让任何事情干扰你的工作。25分钟到了以后,停下手上的工作,转去处理25分钟内遇到的其他事情,之后休息5分钟。然后再把定时器设定为25分钟,开始一个新的番茄时间段。每完成4个番茄时间段时间,休息30分钟左右。
专业开发人员会评估每个任务的优先级,排除个人的爱好和需要,按照真实的紧急程度来执行任务。
专业开发人员不会执拗于不容放弃也无法绕开的主意。他们会保持开放的头脑来听取其他意见,所以即使走到尽头,他们仍然有其他选择。
慎重的态度和积累的经验有助于避免避开泥潭,但无法彻底避开每一处泥潭。
不同的人对预估有不同的看法。业务方觉得预估就是承诺。开发方认为预估就是猜测。
计划评审技术(PERT,Program Evaluation and Review Technique),即对预估的计算方法。
O:乐观预估
N:标称预估
P:悲观预估
μ:任务的期望完成时间
δ:任务的概率分布的标准差
μ =(O+4N+P)/6
δ =(P-O)/6
德尔菲法:一组人集合起来,讨论某项任务,预估完成时间,然后重复“讨论-预估”的过程,直到意见统一。
大数定律:把大任务分成许多小任务,分开预估再加总,结果会比单独评估大任务要准确很多
在压力下保持冷静的最好方式,便是规避会导致压力的处境。当无法回避时则勇敢直面压力。
遵守这些纪律原则是避免陷入危机的最好途径。
专业程序员的首要职责是满足雇主的需求,让业务免于陷入困顿,让公司可以长久发展下去。
程序员之间通常很难密切合作,这就会带来一些问题:
有些时候,单独工作是正确的。但是一般来说,和其他人密切协作、在大部分时间段中结对工作,是最好的做法。