我们如何与客户沟通?理科生和技术人员可能在沟通技巧方面有所欠缺。
那么我们如何理解和掌握沟通的原则和技巧呢?我发现TCP网络交互模型很好的描述了沟通的原则和要点。下面我们就从TCP来讲沟通的过程。
TCP的客户端就像客户(甲方),TCP的服务端就如同乙方。网络上有一句话:做靠谱的人,凡事有交代,件件有着落,事事有回应。这正是TCP网络模型。
及时反馈
TCP的任何一端发送消息给对方,对方在收到消息后,就会立即回复一个ACK消息。表示消息已经收到。而不要让对方尝试“丢包重传”。
Time-out
网络通信中向对方发送一个请求消息,常常会设置一个超时,如果在一定时间内,对方没有返回结果(不是ACK),将会重新发送该请求。
在工作中,有一些任务需要其他人协助完成,如申请某种资源,然后等待对方通知资源可用。有些时候,可能迟迟没有收到通知,如果我们不使用Time-out跟踪,则可能使得此资源申请变成了障碍。
异步和非阻塞
我们的工作应该是异步的,可中断的方式进行。我们在回应对方的需求的同时,我方应该根据已知信息和经验推断开始准备下一步的工作。不要“戳一下动一下”。
在一件长任务的执行中,需要有一些中断点,在收到一些临时任务(或者是上级询问进度等),可以放到工作堆栈上(backlog),在当前工作阶段完成点(中断点),再来处理这些临时任务,之后从中断点恢复之前的工作。至于你想用什么工具来帮助你更好的管理这一过程,就在于你的偏好和选择。
当一件工作任务完成,或者需要进一步讨论的时候,我们会想对端发消息,告诉对方执行结果,或者进一步讨论的内容。这个过程就如同TCP的业务消息的交互过程。
IO线程和任务调度
客户的需求在收到以后,我们需要立即安排相应的人员进行处理。这个过程就类似于TCP 监听者(listener)对new connection的指派,或者IO线程在收到消息后dispatch给worker thread,尽量不要让IO线程被其他长任务阻塞。而暂时需要挂起的任务,可以设置一个定时器或者触发器,在适当的时间跳出了进行重新分派。
对于管理者(或者team leader)需要做好及时分派的工作,不能让工作任务堆积在自己手里,形成瓶颈,使得team的吞吐量太低。
备注
早两年写了上面一些内容,一直放在草稿箱里。先丢出来吧,后面有时间再完善。
(接下来还会讲。工欲善其事,必先利其器,我们如何解决工作中的问题
培养好习惯,表扬,鼓励,规则的重要性,我们如何教育孩子)