说话很难。与非程序员交流的论文

程序员对于棘手的问题有不同的说法。可能是我最喜欢的选择:“计算机科学中有两个难题:缓存失效,命名和每单位错误。”

我编写软件的时间足以应付这些问题。同时,我从业务方面发言,并向客户解释我们产品的技术部分,因此我经常遇到非程序员。最重要的是正确传达想法或概念,以使他人理解。

这是非常困难的。

与所有专业领域一样,程序员也开发了自己的术语来快速传递概念。

技术瓣


行话非常重要。如果我和我的同事选择一种算法来解决特定问题,我们可以说:“第一个选择O(n^2)从一开始就O(n log n)花费最少的开销,第二个选择已被淘汰,但是安装和配置昂贵

这句话说明了很多,应该针对哪些场景使用算法以及如何在后台实现它们:

  • 选项A非常适合输入量少的系统。
  • 选项B非常适合处理大量输入数据,在此过程中,性能的提高将抵消安装和配置系统的高昂成本。
  • 如果打算循环使用该算法,则应选择第一个选项,以避免昂贵的安装和配置代码。
  • 也许我们可以减少使用缓存安装选项B的成本。
  • 在选项A中,可能会将输入数据的每个元素与所有其他元素进行比较(例如for x in inputs { for y in inputs { if some_condition(x, y) { ... }}})。
  • 选项B可能首先创建一棵树,然后执行线性搜索,然后在该树中进行搜索。

如您所见,我们仅需使用正确的术语就可以在一句话中传达多段信息。

在这种情况下,我指的是用于检测碰撞(即两个或多个对象之间的相交)的算法。第一个检查输入数据的所有可能组合,而第二个检查使用象限树二进制空间分区仅检查关闭元素。

但是,如果您与编程世界之外的人(例如,机械或电气工程师,经理,市场人员)进行会谈,则此技术行话只会侮辱和迷惑人们,而不会传递任何有价值的信息。

这就是我所说的Technoleth,程序员的卑鄙。

坦白地说,其他地区的人们通常不需要这些细节和术语,而且它们确实不在乎。

例如,您正在解释一个惊人的新功能,该功能查找从A到B的最短路径,生成导航网格并应用A * search

在任何情况下,您都不需要像上一句话那样描述新功能。而是说这样的话:“我们计算了一堆可能的路径,然后应用游戏行业中使用的智能算法来找到最佳路线

不管我们在这里使用A *搜索(与Dijkstra算法还是宽度搜索不同)。没关系,在游戏中,*搜索不仅用于移动角色。对话者足以知道您可以找到从A到B的好方法,并且我们使用已经在其他领域进行过测试的可靠工具。


显示您的意思并没有什么害处...

我碰巧观察到,更有经验的程序员如何使用技术术语来展示优势,展示其不可思议的智慧并确立统治地位。真烦人。

不要搞错了,有时在某些情况下,有足够能力的对话者会问:“这很困难,为什么不只写X?”  -并且您必须证明您是这里的专家,但他不知道他在说什么...,但是您仍然可以采用不同的方式来做。

不要尝试使用technolepet来满足您的自我,它会排斥人们并羞辱我们的职业。

尊重


因此,我们逐步进行到下一点...不要忘记尊重。

与我一起工作的许多人确实很聪明,并且是各自领域的专家,但不一定有足够的知识和经验来创建信息系统。

在解释一个复杂的问题时,通常最好简化概念。但是,不要屈尊。

我提到的软件工程师经常回答:当“正常”人询问此功能的工作方式时,“这很复杂”。好像代码非常复杂,没有20年的编程经验就无法理解。

不要这样。

最佳答案:“如果您稍微简化一些事情,那么首先我们做X,然后我们做Y,最后我们做Z,但是我们需要牢记许多边界情况(也许可以解释一两个),但是本质就是这样您的同事很聪明,没有技术术语,很有能力了解您。

另一个真正有用的技巧是使用非程序员作为平台,例如橡皮鸭。如果您正在处理一个复杂的问题,请简单地向他解释您的解决方案,并询问您是否可以提供更好的选择。

我们公司在CNC领域工作,也就是说,它与现实世界有关(例如,当您尝试对切口的宽度进行补偿时)。工程师真的很擅长分析与物理和几何相关的问题。

拟人化,夸张和类比


人是社会人。我们被编程为了解关系并喜欢类比,以将新概念与现有概念联系起来。与他人交谈时,可以使用这些技巧来帮助您理解复杂的主题。

假设您的公司有一个在线采购系统。营销人员希望了解从在线订购到包裹交付的整个链条,以便更好地回答客户的问题。我可以这样说:

, . www.example.com, «» ( -, ).

(-). , () . , , , (, ).

( ), , . , , ( — , ), .

( ) . , , .

所有这些听起来有点可笑,并且该示例远非牵强,但我可以保证,与带有“ Web服务器”,“事件体系结构”和“ Apache Kafka”等术语的大型网络图相比,这是一个更容易理解的解释(请参阅technolepte部分)

另一个例子。如果您试图向局外人解释路径搜索算法的工作原理,那么您就不会说“访问的路径被赋予了更大的权重”,而是说“该算法确实不想沿着已经经过的路径走。”

这是一个细微的差异,但是我们正在对算法进行拟人化。我们说他“真的想制造X”或“尽力避免Y”。通常,这可以帮助人们理解

与示例有用的类比(如果适用)。您可能已经注意到本文中有很多示例。我讲的不是抽象的解释,而是讲一些有助于解释论文的具体故事。这不是意外。

画美丽的图画


听起来有些老套,但有时候一张图片真的值一千个字。

几个月前,我正在收音机上看一门课程,附近的那个女孩不记得要在这个16×2的小型LCD菜单上按下哪个按钮。

我问她是否可以画图。

她以为我是个聪明人,嘲笑她。

但是我不是在开玩笑。

取而代之的是,我找到了一张纸,我们共同做出了这样的事情:



程序员立即从自动机理论中识别出状态图。我不为女孩所知,我将基本的计算机科学技术引入了她的大脑,并介绍了如何在引擎盖下对该收音机的界面进行编程。

但是她(以及现阶段的其他所有人)对科学一无所知。他们获得了可用于导航用户界面的地图。

为来自另一个地区的人改编一个复杂的概念时,会感到很奇怪。尤其是当他们可以确定地图确实是一个错误时:您需要按住“取消”按钮返回到“空闲”状态,因为按此按钮通常会使您返回“主菜单”。

我的书桌上总是有一个很大的笔记本,上面有空白纸。通常,我会在思考过程中写下待办事项清单或一些图纸,但通常有助于解释。在对话中进行绘画的能力有助于验证路线,并确保您具有与相同想法相同的波长(双关语意)。

我将$ FEATURE加快了十倍


假设您做了一些性能调整,现在某些代码可以更快地工作。如何向非程序员或看不见源代码的人解释这一点?

一方面,关于上周您做了什么的问题,您可以告诉这个人真相:“我添加了缓存lookup_something ()以加快常规搜索的速度,并将算法从detect_collisions()c转换O(n^2)O(n log n),但是很有可能他们什么都不懂(请参阅technolept) 。

您也可以说您“提高了生产力”,但这听起来像是一个借口,经理会考虑他为什么雇用您。

开发人员经常说:“我将$ FEATURE的费用提高了十倍。”(或其他任意数字),这是有限的。这样的短语可以让您享受到乡亲们的一堆祝贺,但是通常这有点...误导。

在大多数情况下,您实际上改善了几个功能的性能,但是如果这些功能不是性能瓶颈,那么很有可能没人会看到任何区别。

注意。如果您熟悉阿姆达尔定律,那么提高并非瓶颈功能的性能就好比为本质上一致的任务使用更多的CPU内核。

问题还在于:您将生产率提高了十倍做了什么?这是一个令人惊讶的特定数字,您的源代码是否重复执行了几次?还是他请求数据(例如,从硬件或某个第三方站点)的速度比应有的速度慢十倍?甚至这也使我怀疑您的能力,因为您要么(初步)猜测了初始轮询速度,要么仍然通过使用轮询而不是更有效的事件体系结构来牺牲性能。

在我看来,最好在准确性和可理解性之间找到中间立场。如果您进行了更改以提高代码片段的算法复杂度(例如,将功能detect_collisions()从切换O(n^2)O(n log n)),那么您可以说:“现在,功能X可以在合理的时间内扩展到大量输入,但是以前没有

说“我不知道”是很正常的...


...并继续这样:“ ...但是如果您给我五分钟,我可以告诉您”

我经常看到这个。人们害怕表现出无知,因此他们保持沉默,折磨或发明某些东西。

例如,如果经理来找您问:“客户要求功能X,这可能吗?而且需要多长时间?”

在十分之九的情况下,诚实的答案是“我不知道”,但这并不能真正帮助经理确定时间。他之所以向您求助,是因为您是相关领域的专家,并且最愿意给出答案。

有些人尝试猜测或作弊(例如,“是的,我们会在两到三周内完成”)),但从长远来看,这种方法通常行不通。在最好的情况下,您将延迟数周,而在最坏的情况下,请花费数月的时间才发现此功能无法与当前应用程序体系结构一起使用。

这是失去同事和上司尊敬的好方法。

另一方面,“不确定,但请给5-10分钟,我会回答”这句话立即显示了几件事:

  • 您准备承认您并不了解所有内容(也就是说,不是自恋的自我主义者)。
  • 您对自己的话语负责,不想给出不正确的答案。
  • 您尊重这个人,足以花费您的一部分时间来回答他的问题。
  • 你是个好人:)。

(并且您有足够的时间来解决)。

它类似于一个古老的寓言

通常,其他人并不希望您了解他们所熟悉的一切。相反,他们希望您拥有研究问题并将答案转化为他们可以理解的术语的工具。

老工程师退休了,几周后“大机器”崩溃了,这对于公司的收入非常重要。经理无法使机器重新工作,因此公司邀请老工程师担任独立顾问。

他同意。到达工厂后,他看着“大机器”,拿着大锤击中了它。此后,汽车开始工作。老工程师离开了,公司又开始赚钱了。

第二天,经理从老工程师那里收到了5,000美元的发票。经理很生气,拒绝付款。老工程师保证这是一个合理的价格。经理反驳说,如果这是一个公平的价格,那么您可以要求提供帐户的详细信息。

一个新的详细帐户如下所示:

锤子:5美元

知道用锤子敲打汽车的位置:4995美元

任何人都可以在Google上查询任何问题。但是只有软件工程师才知道要使用哪些关键字以及如何解释结果。

发现


通常,我会在我的博客上发布纯技术文章,其中包含大量代码,但有时记住该代码之外还有其他东西会很有用。

程序员(并非没有理由)被视为社交和沟通能力较弱的人。但是我们工作的很大一部分需要有效的沟通。希望我的经验能对您有所帮助。

有些人可能认为这是“办公室政治”,是对他人观点的操纵。这是我要回答的:

嗯,是。但这不适用于大多数人际交往吗?

心理学只是帮助程序员与非程序员说相同的语言,并共同努力实现一个共同的目标。

Source: https://habr.com/ru/post/undefined/


All Articles