前言
看了《程序员的修炼》三部曲,意识到一个人在任何领域内成长的快慢,跟他的思维方式有巨大的关系。资深人士,面对领域内的任何问题,能够通过一种直觉效应,迅速找到问题的突破口,并快速学习新知识,带领团队以最快速度解决。
这种直觉效应,是在正确的思维方式下,不断积累出来的内在能力。职场菜鸟,在经验不充足的时候,应该首先找到正确的思维方式,在正确的道路上行走,才能迅速到底目的地。
以下是从三部曲中摘录的经典,供大家体会!
注重实效
不要找借口,要找解决问题的方案。
遇到难题,很多时候我们最先给自己找借口逃避,而不是把精力花在想解决问题的办法上面。既然问题逃不掉,那一开始就不应该当一个把头埋在沙子里的鸵鸟。
破窗户理论。不要放任坏的,即使是微不足道的事情发生,它很有可能迅速爆发成很大的灾祸。
团队中有的人写代码有一些不好的习惯,比如为了贪图方便,直接使用魔数,而不是定义一个常量。如果这种坏习惯一开始就没有人说出来,后面系统中就会充满这样的魔数,这对系统后续的维护将是一场灾难。
怎样获取资源,先让自己掌握的资源具有足够的吸引力;怎样让事情持续性增长,不要被煮青蛙,时刻关注变化。
要找别人帮忙,首先你自己要有被别人利用的地方,想要收获,先要付出。
在完成需求的基础上,让软件变得更好,而不是追求极致。
不要过度设计。
让知识持续不断的更新,学习新的语言,阅读技术书籍,参加技术活动,解决技术问题等等。面对挑战。
有效的实践
don’t repeat yourself.
事不过三,过三则重构,这是《重构》这本书的观点。不要一直做事务性的工作,如果遇到两次相同的事务性工作,就要想办法用自动化的办法解决。
尽量让功能组件保持独立,少依赖与其他模块。
设计模式的原则之一:面向修改关闭,面向扩展开放。
快速制作出原型。搭建用户需要的外在模型,加一些测试数据,让功能尽快的跑起来。
产品要能快速试错,市场是瞬息万变的,机会稍纵即逝。
编程态度
始终将精力和注意放在要解决的问题上面,让整个团队的武器都指向问题的核心部位,其他的一切行为例如指责别人的错误,消极的态度,侥幸的心理,都是阻碍事情发展的,都是应该摒除的。
这是项目管理中一个很重要的实践,团队管理,心往一处想,劲往一处使,要解决核心问题。
要始终保持代码的整洁度,不要添加一些难以理解的代码。
除了自我要求,还要靠另外的手段保证代码的质量,比如Code Review。
团队讨论方案的时候,应该先从正面思考他人提出的方案,该方案能解决什么问题,有哪些值得借鉴的地方,其次再思考该方案疏忽了哪些问题,会有什么缺陷。在提出自己观点或者反驳他人观点的时候,一定是对事不对人。
考虑问题要全面,对事不对人。
有勇气提出质疑,有勇气主动承担责任。
态度比能力更重要!
学无止境
每天安排固定的时间学习一些新的技术,小步前进。
很多时候我容易急功近利,想一口吃成一个胖子。但是很多东西都是要循序渐进的,基础不打扎实,后面进阶会很困难。
经常进行技术分享,或者参加技术分享会议,倾听他人的见识以及分享自己知道的东西。
分享是最高层次的学习,只有真正学会了,才能有效的分享。
在学习新的技术的同时,要不断回头审视自己已经掌握的知识是不是已经不合时宜了,该丢掉的破铜烂铁果断丢弃掉,只保留那些对我们有用的东西,毕竟空间是有限的。
不要贪图知识,以解决问题为目标来学习,就能避免陷入无效学习的怪圈。
在接触任何一项不熟悉的事物的时候,面对自己的困惑,一定不要让困惑被似是而非所掩埋,要问为什么会是这样,并且努力找到满意的答案。
不要理所当然,要打破砂锅问到底。
目标驱动
对于业务方面的需求,开发人员最好和业务人员达成共识,而不是从技术实现的角度擅自做出决定。对于不属于自己职责范围内的事情,让更加擅长的人做出决定。
既要主动承担责任,又要善于借助他人的力量,术业有专攻,让专业的人做专业的事情。
不应该过度的设计,设计是指导编码的方向,而不是限制编码的条款。设计是计划,编码是实施计划。计划本身没有用,但制定计划的过程必不可少。
理论和实践一个都不能少,编码前规划,会避免很多无用功。
善于从各种成熟的技术框架和组件中辨别和挑选出对项目有真正作用的,不要重复的造轮子,不要重新开发那些已经具有良好实现的功能组件。
君子生非异也,善假于物也。假于物的前提是知道有该物,所以还是应该大量阅读书籍和源码。
始终让项目处于可发布可运行的状态,团队开发中保持代码的一致性。小步迭代前进。
持续集成,持续交付,持续部署。
频繁的集成,使用单元测试让小的功能组件可以正确运行,集成到大的系统之中,让整个系统也可以正常运行。
敏捷编码
让代码自己说明意图,而不过度依赖与文档和注释。
必要的文档和注释,更多是让代码自己说话,因为代码才是最有时效性的。
要动态的评估和权衡取舍,设计、性能、成本之间应该做出权衡,要找到最重要的方面。
快速迭代开发,每开发一个小的功能模块,进行一次快速的测试,保证每一个模块都能正常良好的运行。
保持简单,在能表达出所有功能需求的同时,能够在代码上保持简洁,不过分设计,不过早的优化。
高内聚性的设计,考虑到各个功能模块或组件的粒度,不能过小,也不能是大杂烩的无所不包。
敏捷调试
记录下错误,以及解决方案。
各个击破问题,隔离组件单独查找问题,而不是把组件放在整个系统环境下排查。
尽量处理异常,不能处理的异常则抛出给调用者,处理异常处尽量有日志记录。