【双语】程序员——请学会交流

本贴最后更新于 2482 天前,其中的信息可能已经时异事殊

英文原文链接:https://henrikwarne.com/2017/05/28/developers-talk-to-people

Many software developers have a tendency to avoid talking to people. They would rather just rely on written communication in chats, email or issue tracker tickets. However, talking to people more can make them more effective as software developers. Here are some examples:

程序员大多都有同样的毛病就是不愿意与人交流,他们宁愿用通讯工具比如 email,提交工单也不远与人直接交流,但是在工作中主动与人交流会很大程度的提高我们的工作效率,下面举几个栗子来给大家解释一下:

Example 1. Suppose you are implementing a new feature. The ticket in the issue tracker describes how the new functionality should work. As you start working on it, you discover that implementing it exactly the way it is described will be difficult and take quite a bit of time. However, if the new feature it changed slightly, it fits right in with the existing code, so it would be possible to implement it much faster. At this point, many developers think to themselves: “they asked for the more complicated version, so that’s what I’ll implement”.

第一个栗子::假设你正在实现一个新的功能,需求文档里描述了该功能的内容,当你开始着手开发这个功能的时候,你发现这个功能非常的复杂而且会耗费你很长的时间。但是如果稍作修改,就可以重用之前的代码从而很快的完成这个功能,不过即使是如此,大多数程序员还是会认为:“他们可能是想让我开发一个更复杂的版本”。

Instead, talk to the product manager (or whoever requested the feature) and explain the trade-off you discovered (slightly changed feature would be much faster to implement). Ask if they still want it as originally described. The point isn’t that you should persuade them that the feature should be changed – the point is to let them know about the trade-off. Often they are not aware of it. Whether they change their mind or not, the discussion leads to better understanding for both of you.

相反,如果你去和你的项目经理(或者其他提出需求的人)讨论这个问题,让他们知道做这个简单的修改所带来的好处(可以更快的完成这个功能),问是否还是采用原来的设计,注意这里的重点不是让他们接受或者采纳你的想法,而是让他们知道这么做的好处,他们不会感到奇怪或者有什么不好的反应。不管最终他们是否采纳你的意见,这对你们双方进一步理解这个功能有很大的帮助。

Example 2. Recently, a tester was verifying some small changes I had made. He wrote down in the ticket the cases that worked, and some cases that didn’t work. The reason some cases didn’t work had to do with how I had deployed the new version of the software. I could have written down an explanation of that in the ticket. However, it takes time to explain something clearly in writing. So instead I walked over to him and explained what had happened. This way, he had the opportunity to ask more questions, and I had the opportunity to add more clarification without it ping-ponging back and forth as comments in the ticket.

第二个栗子: 最近一个测试人员给我提交了一些小的需要修改的问题,他描述了哪些功能可以正常执行,哪些功能不能。那些不能运行的功能是因为他不会去部署新的版本,我需要去告诉他怎么来部署,我完全可以写一个说明文档给他,但是我没有这么做,我直接跑去他面前跟他解释该如何去做,通过这种方式他有更多的机会问我更多的问题,我也不需要噼里啪啦的敲半天键盘来解释这件事了。

Even better, as we were talking about the ticket, I showed how I would check if the problem was due to the deployment or not. As I did that, he said “wait, what was that” – he had never used the command I used. So not only was the problem cleared up quickly, the tester learned a command he didn’t know about.

更赞的是,当我们在讨论这个问题时,我向他展示了我是怎么去检查并解决这个部署的问题的,当我展示时,他很好奇这个操作而且他从来没有接触过,所以除了解决了当前的问题,他还学会了以后再遇到这个问题该怎么去解决。

Example 3. The other day, I was going to add a feature that required knowing if another feature had been activated or not. The activation check had been a bit problematic before, so I wanted to clean it up a little in the process. So I thought about where to put the changed activation check. But before going ahead and implementing the solution, I mentioned to a colleague what I intended to do.

第三个栗子: 又有一天,我准备开发一个监控器去监控一个功能是否运行正常,之前的监控器有点问题,我准备在他的基础上去修改一下,替换一些新的代码进去,但在做这一切之前,我还是打算先去找同事讨论一下我的想法。

He immediately said “why don’t you put it there instead?”. Sure enough, his proposal was much better than mine – a better place to put it, and less impact overall on the code. So by just discussing for a few minutes, we found a better solution. I think of this as an informal design review, similar to a code review, but done before implementation, not after. I frequently try to discuss a change with a colleague before going ahead and doing it. Time and again I am grateful that I did. Many times we discover flaws, or better solutions, that I would never have thought of, no matter how hard I tried. So with a little bit of discussing, I end up with much better solutions.

我的同事立刻就回答我:“你为什么要替换这段代码?”果然,他有比我更好的思路,影响更少的代码。我跟他讨论了一会,得到了更好的解决方案。我想这就是_结对编程_(敏捷开发中的一种方式,我觉得这样翻译比较好接受,虽然可能不是很准确)的好处,就像一次代码回顾,但是是在代码实现之前进行的,不是之后。从那之后我每次要实现什么功能都要跟同事去进行讨论,慢慢的发现了其中巨大的好处,经常会发现一些缺陷,一些我根本想不到的更好的解决方案。不管我有多努力,一点点的讨论都能给我的工作带来很大的好处。

CONCLUSION

in a lot of cases, talking to developers, testers, product managers and other stake-holders is beneficial to both parties. It is usually also faster than written communication. Despite this, I see many developers that are a bit reluctant. If you are one of those developers, make an effort to talk more to people for a few weeks, and see if it makes a difference.

结论:

通过这些例子,不管是和程序员,测试人员,项目经理还是其他有关的人员进行交流和讨论,对双方都是有好处的,通常这种方式要比通讯软件效果要好的多。尽管如此还是有很多程序员不愿意去交流,如果你是这样的人,可以尝试几周,你会看到它给你的工作带来的变化。(注意这是在你没有影响其他人工作的前提之下哦,别人家正忙着呢去打扰别人,会引起反感)。

  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1705 回帖 • 1 关注
  • 双语
    2 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    132 引用 • 189 回帖
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    132 引用 • 1114 回帖 • 124 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 175 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 3 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 9 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 733 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 210 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    105 引用 • 127 回帖 • 382 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 642 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖 • 1 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 531 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 611 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 724 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 2 关注
  • gRpc
    11 引用 • 9 回帖 • 73 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 43 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 529 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 261 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 9 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖