从年到年,我做了4年的RPA开发人员。年底,我做的一个关键的决定,使我被选为UiPath年62位mvp之一。这个决定是停止跟上最新的RPA趋势,而是专注于掌握传统的软件开发。
然而,情况并非总是如此。在我作为RPA开发人员的头两年里,坚持只使用本地RPA工作流来自动化流程。我不是IT背景出身,所以我认为传统的编程和脚本不适合我,并将RPA视为和基于文本的编程不同的编程范式,并拒绝偏离它。RPA的强大和我学习速度使我深感震撼,这也让我看不到它的局限性。
RPA市场的规模每年都以数量级增长。今天的RPA平台比年强大得多。这使得作为一名RPA开发者,更倾向于“专攻”RPA,而不是脱离RPA。
为什么这样想是错误的?
一、基于GUI的自动化总归是一种妥协
从本质上讲,任何软件过程的自动化都涉及使用一系列命令将数据从一个地方移动到另一个地方。在过去的几十年里,程序员已经完善了使用恰当命名的命令行实现此目的的方法。为了将计算机的使用扩展到日常用户,我们创建了一个更直观的用户界面——有鼠标指针、按钮、文本框、触摸屏等等。
进入GUI-图形用户界面。我们现在已经习惯了GUI,以至于认为它们是理所当然的。然而,作为程序员,我们需要提醒自己,每当使用GUI时,计算机都会执行数字操作来满足我们的需求。每次您点击屏幕上的按钮时,计算机都会投入巨大的精力将这个手势转换为命令。它必须:
在屏幕上正确渲染按钮
跟踪鼠标指针的位置
注册按钮的点击
执行相应的命令。
或者,使用一行编程代码发出命令就像用计算机的母语与它交谈一样。这种算法具有信息损失小、稳定性强的特点。
大多数原生RPA自动化都是基于GUI的。让我们花点时间来理解一下,基于GUI的自动化包括指示机器人通过UI与另一个程序通信,这类似于强迫两个以英语为母语的人通过猜谜游戏进行交流。基于GUI的自动化总是一种妥协,因为总有一种更有效的方法在底层执行相同的任务。这就引出了我的第二个原因。
二、原生RPA流程在生产环境中很脆弱
很长一段时间,我都没有意识到基于GUI的自动化是多么脆弱。由于我在自己的计算机上自动化了每个过程,所以我无法预测在生产环境中运行它会有什么不同。然而,当我转到一个在生产环境中维护RPA流程的团队时,一切都变了。因为团队80%以上的时间都花在了修复损坏的流程上,使得我们几乎没有时间自动化新的流程。这种脆弱性主要源于生产环境总是与我们开发自动化的笔记本电脑和测试系统不一致。一个由个连续步骤组成的自动化流程的强度取决于它最弱的步骤。因此,只需对GUI进行最小的更改就可以使整个流程脱轨。
作为一名RPA开发人员,您自己也经常经历这种情况吧,我还没有看到一个RPA流程第一次就能在生产中完美地执行。然而,人们可能会认为这种情况正在改变,随着RPA技术(如智能选择器和计算机视觉)的进步,RPA过程现在可以更灵活地应对GUI中的变化。这就引出了第三个原因。
三、商品化
在前RPA时代,要使一个Web应用程序自动化,您需要在浏览器上检查网页,并在复杂的HTML和CSS中筛选,以找到一个可靠的选择器。使用RPA,开发人员只需单击元素来检索它的选择器。在下一次迭代中,我们就有了支持正则表达式并包含一些模糊逻辑的智能选择器。下一个飞跃是计算机视觉——RPA软件现在可以看着屏幕,像人类用户一样识别文本字段、单选按钮和复选框。
RPA平台现在使用这些方法的组合来识别选择器。但有一件事是清楚的——RPA平台越智能,开发人员就越笨。在4年的时间里,自动化Web界面所需的技能已经从对HTML和CSS的扎实理解到仅仅指向屏幕的一个区域。
随着RPA平台的迅速成熟,RPA工作的商品化也随之而来。RPA平台越容易实现自动化,使用该平台工作的员工所需的技能水平就越低。这种趋势类似于餐饮业的工业化。在过去,您需要雇佣一个厨师来经营餐馆。然而,工业化使您可以和一个中学辍学生一起经营一家快餐店。当然,厨师在当今世界仍然很有价值,但这只是因为他们提高了自己的手艺,不断地重塑自己。
在我早期的RPA职业生涯中,我的错误是没有认识到这些因素。如果可以,我希望自己早点开始采取以下措施:
一、像软件工程师一样思考
年12月,我读了BobC.Martin的《代码整洁之道》,它改变了我看待计算机编程的方式。阅读这本书使我能够从一个经验丰富的软件开发人员的角度来检查一段代码。我注意到一个人不仅要解决眼前的问题,还要为下游可能出现的二级和三级问题进行设计。我还意识到,从本质上讲,RPA开发与良好的旧软件开发并没有太大区别。此外,软件工程技术比RPA早几十年,已经解决了RPA开发人员才意识到的大多数问题。
除了阅读像《代码整洁之道》和《笨办法学Python3》这样的书之外,与软件工程师交谈他们是如何实现自动化的,也很有帮助。我经常向我的开发人员朋友解释我正在自动化的场景,并问他他将如何进行。这帮助我发现了基于GUI的自动化的极好的替代方案,这引出了我的第二个建议。
二、学习使用传统编程语言实现自动化
所有RPA平台都构建在传统编程框架之上。大多数RPA自动化是在net平台上完成的,因此在底层,它们使用c#或VisualBasic。从简单的工作流开始,并尝试通过使用底层的net语言绕过RPA平台。通过这种方式,您可以更深入地了解RPA软件是如何工作的。此外,您还会意识到,在某些情况下,几行代码可以实现与跨越监视器两个长度的复杂RPA工作流相同的最终结果。
在这里获得更多经验的另一种方法是为您最经常使用的RPA平台创建定制活动。这种经历让您对它的内部运作有了宝贵的见解。我推荐一个极好的学习Python自动化的资源是“AutomatetheBoringStuffwithPython”。
三、将RPA与传统软件集成
一旦您开始像软件工程师一样思考,并在您的工具包中添加一些编程技能,您就可以精心设计优雅的流程,将RPA平台的集中编排与传统编程的健壮性和效率结合起来。使用.net,您可以在大多数Windows应用程序上自动执行任务。您可以映射网络驱动器,集成dll,创建自定义活动,所有这些都将使您的RPA代码更加强大。要与SAP集成,请探索StefanSchnell的SAP脚本跟踪器及其神奇的工作原理。您可以通过构建CI-CD管道来自动化RPA部署。最后一个集成场景是我最感兴趣的探索场景,也是我对RPA社区最有价值的贡献。
我上面写的一些内容可能让人难以接受,RPA供应商和业内人士不太可能提供这种观点,而我自己也只有在离开RPA职业生涯,以全新的眼光回顾这个行业后,才能够清楚地看到这一点。
此外,我的建议是回到传统的软件开发而不是跟上最新的RPA趋势,这可能会被认为是过时的。然而,如果您打算把作为RPA开发人员的职业生涯看得更长远,那么您需要掌握那些经得起时间考验的老式结构。
我只希望我能早点意识到这一点。
作者:AnupamKrishnamurthy
来源: