代码整洁之道
简介:
本书是编程大师"Bob 大叔"40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更高台阶。
本书适合所有程序员阅读,也可供所有想成为具备职业素养的职场人士参考。
第二章:说"不"
专业人士敢于说明真相而不屈从于权势。
专业人士有勇气对他们的经理说"不"。
2.1 对抗角色
不论是项目经理还是程序员,都有其工作职责所在。你的经理要求你在明天之前完成登录页面,这是他在准求和捍卫的一个目标,是在尽他的工作职责。可是如果你明知道第二天之前不可能完成登录页面,而嘴上还说着"好的,我会试试的",那么便是你失职了。
这时候,尽职的唯一选择就是去说"不,着不可能"。
来看几段对话:
对话一:
P经理:"你在明天之前要完成那个登录页面,"
小M(程序员):"噢,喔!要那么快啊?那好吧,我会尽量试试。"
P经理:"好极了!谢谢。"
看似很和谐的对话,其实双方都不够专业。P经理以为你明天会完成,而你也许会真的尝试去完成预判一天时间根本无法完成的任务。
这样谈话避免了爆发冲突,但对解决问题没有丝毫帮助。
对话二:
P经理:"你在明天之前要完成那个登录页面,"
小M(程序员):"噢,抱歉经理,这么短时间完成不了的。"
P经理:"那你觉得什么时候能完成呢?"。
小M(程序员):"再过两周怎么样?"
P经理:(在他的本子上记了几笔)"好的,谢谢。"
这样对话确实轻松,但其中的问题也很严重,大家表现得极不专业。
双方都没尝试寻求最佳的可能结果。
对话三:
P经理:"小M,你在明天之前要完成那个登录页面。
"小M:"不,P经理,这个活要两周才能完成。"
P经理:"两周?架构师估计这只要3天,而你已经花了5天时间了!"
小M:"架构师们错了,P经理。他们是在接到产品销售需求前做的预估。我至少还需要10天才能做完。你没看到我在wiki上更新的预估吗?"
P经理:(表情严肃、沮丧得发抖)"小M,这可不行。客户明天就要来看demo了,我必须向他们展示个能用的登录页面。"
小M:"明天你需要登录页面的哪部分能用?"
P经理:"我要整个登录页面!必须要能登录。"
小M:"P经理,我可以给你做一个能登录的假页面。这个现在就已经可以。但是页面不会检查用户名和密码。如果你把密码忘记了,也还没办法发邮件告诉你。页面顶部也还不能像时代广场的大屏幕那样有新闻栏在滚动,帮助按钮和浮出说明都还不能用,它没法为你保存cookie以便下次登录,也不会设定任何权限限制。但你确实可以登录。你看这样可以吗?"
P经理:"我可以登录?"小M:"是的,可以登录。"
P经理:"好极了,小M,你真是个大救星。"(松了口气,说了声"太棒了!",走开了。)
在这个例子里,他们达成了最佳的可能结果。他们各表异议相互说"不",然后找到了双方都能接受的解决方案。
他们的表现是专业的。对话中虽稍有冲突,也有片刻不愉快发生,但如果双方坚持追求的目标不能完美切合时,这是比较理想的情况。
"为什么"没有事实重要。
为什么登录页面要那么长时间才能完成面对事实重要。
2.2高风险时刻
最要说"不"的是那些高风险的关键时刻。越是关键时刻,"不"字就越具价值。
作者在这里讲述一个故事,面临期限一定的项目任务,要在开始时候明确表示当前能否完成,如果不能完成要坚定地说"不"。
哪怕是一个关系生死存亡的项目,更要尊重事实说不。
2.3 要有团队精神
2.3.1 试试看
许诺"尝试",就意味着你承认自己之前未尽全力,承认自己还有余力可施。
许诺"尝试",意味着只要你再加把劲还是可以达成目标的;而且,这也是一种表示你将再接再厉去实现目标的承诺。因此,只要你许诺自己会去"尝试",你其实是在承诺你会确保成功。这样,压力就要由你自己来扛了。如果你的"尝试"没有达成预期的结果,那就表示你失败了。
如果你既没有新方案,又不准备改变自己的行为,如果事事仍然都按你承诺"尝试"之前的方法去做,那么,所谓的"尝试"指的又是什么呢?如果你此前并未有所保留,如果你没有新方案,如果你不会改变你的行为,如果你对自己原先的估计有充分的自信,那么,从本质上讲,承诺"尝试"就是一种不诚实的表现。你在说谎。你这么做的原因,可能是为了护住面子和避免冲突。
2.3.2 消极对抗
如果一列载货列车向大家冲来,而只有你一人有所察觉,你可以轻轻抽身退到轨道外,眼看其他人被车碾过,也可以大喊:"车!车来了!快离开!"
2.4 说"是"的成本
- 客户所要的任何一项功能,一旦写起来,总是远比它开始时所说的要复杂许多。
- 我们理解的好代码应该是什么样的呢?好代码应该可扩展,易于维护,应该易于修改,读起来应该有散文的韵味
- 这个故事得出的教训是,你的利益干系人,不论是外部客户还是内部管理层,知道如何让开发人员快快写出代码。但是,是高效地写出代码吗?不见得。是快速地写出代码吗?是的。他们是这么办到的。
2.5 如何写出好代码
专业人士常常会成为英雄人物,但这样的荣誉并非是他们所刻意追求的。他们之所以成为英雄人物,是因为他们出色地完成了任务,不但按时,而且符合预算。
而这不应该牺牲说"不"的机会而疯狂地写代码,完成任务,但是这样几乎没有时间去提升代码的质量,疯狂写代码仅仅是为了完成开发任务而已!如是,根本不可能写出好代码。
"有可能写出好代码吗?有可能坚守专业主义精神吗?"
我的回答是:"是的。但你要学会如何说'不'。"