力之源泉在于理解。
理解的重要性
从与主管、客户、产品经理和项目经理沟通的角度来说,需要能够理解他们说话的语境和背景,从而推敲其真正的意图;需要理解他人的需要和意图;表达只有在理解的基础上进行才是有效和有份量的;这里的理解指“自然语言层面的”。
从熟悉业务和产品的角度来说,需要能够理解现实中的事物、事务以及相互的关联,并简明扼要地绘制出来;这里的理解指“分析语言层面的”。
从开发程序的角度而言,需要对所要处理的事物的性质和规则有深入的了解,能够理解抽象的概念、模型和设计思路。这里的理解是“计算语言层面的”。
在实际工作中,需要在有限的时间内处理潮涌而来的大量事务,理解不断涌现的各种新的思想和技术以及新的发现,在必要时作出恰当的反应和行动,包括优先处理重要紧要的事情、需求和项目,适当的忽略和放弃。这即对一个人的理解和表达能力提出了“速度”和“敏捷度”的高要求。
软件开发的核心基本能力是理解和表达事物的能力。 纵观软件开发活动,无非是在持续不断地理解话语、理解事物、理解事务、理解软件设计与实现、表达自己的观点、完成所学所能中完成的。
对于初级工程师来说,执行力和具体做事情会很重要;对于高级工程师,设计规划和把事情想清楚更为重要。
理解软件
- 分而治之。复杂任务往往是由简单任务通过多层次组合而形成的;将复杂任务进行分解,分解到每个子任务都在能力掌控范围内。
- 系统思考。 仅仅理解复杂事物的子部分还不够,需要以系统思考的视角,去理解事物组成部分的关联,事物存在的支撑机制。见树亦见林。
- 抽象模型。 将事物赋予概念,对事物关联建立简要的模型进行处理。对事物的理解从具象的形式到抽象的意义。比如圆形意味着阻抗低;锁意味着隐私;房子意味着庇护;门意味着可授权的入口;盆意味着开放性容纳等。
- 科学规律:学习和探索事物的性质和运行规则集合。比如数学性质;物理学定律;适当的缓存能提升效率。
分而治之 - 系统思考 - 抽象模型 - 科学规律 , 是逐步往上,从部分看到全景,从具体深入抽象,从理论到实际的方法总论。
日常工作
软件开发
软件开发的首要任务是深入理解业务。从用户角度来看,是场景、需求、功能与体验;从系统设计角度来看,是模块、接口与交互; 从底层实现角度来看,是流程、规则、数据、影响范围。
软件开发讲究模块化、分而治之,很多开发者可能只管理一小部分,但用系统思考的视角看到各模块交互的全景图是非常重要的。
项目掌控
通常是指互联网企业中存在的多项目并行情况。比如一个项目在提测中,一个在预发中,两个在开发中,涉及的点也比较多,还有两个正在全力赶过来。如何提升多项目的掌控力呢?
从项目经理的角度来看,每个模块的职责在于: 1. 完成预先评估的任务和工作,为整体流程和功能质量提供保障; 2. 在适当可接受的时间范围内完成,保障项目进度,减少延期时间。
优先级与预先评估。仔细查看各项目的联调、提测、预发、上线时间,确定优先级,错开时间;留出缓冲余地。此时,并不涉及实际开发,而是涉及到评估。 评估意味着:1. 需求理解; 2. 现有实现; 3. 改动点评估; 4. 任务拆分与工作量评估; 5. 时间评估。 评估性的活动,与编程是同等有挑战的事情。
充分开发自测。 要提升联调效率,要充分评估到改动点和开发自测,否则联调和提测的问题找上门来,一样让人吃不消。比较理想的情况是,自己的改动点都在掌控之中,只要部署好了,关注项目进度即可。
时间管理。 为改动点比较大的项目安排整段的时间,专注地解决问题。减少不必要的任务间切换。
申请资源。 再能干的人,多个项目同时挤压过来,也是很可能扛不住的。要及时申请资源,并说明充足理由。 很多事情,需要在做之前就想好。
交流沟通
深入理解事理,下足功夫,准备充分,有说服力;
语气和方式委婉柔和。
换位思考。从对方的处境考虑问题,理解对方的立场和视角。
心境
- 适当地运动、休息和饮食,保证健康的身体状况;
- 放开心灵,观察和探索整个的世界,深入细致地去理解和分析事物。
- 克服急于求成的心理,把事情想清楚再行动。