功能编程:一种古怪的玩具,会降低劳动生产率。 第二部分

今天,我们提请您注意有关所谓“功能”程序设计的危险的材料的持续翻译



成功是道路,而不是目标。



让我们承认,程序员是我们付出时间的报酬。 就像建筑商们已经在我家附近挖洞已有两年了(顺便说一句,他们正在建造一堵墙,也就是一条路)。

让我们寻找程序员的生产率公式。 在任何一家大型大型公司工作的人都知道成功的简单公式:

 = __ x __ 

fixed修正错误数量


人脑在编程中很难适应所谓的“应用程序状态”。 在某个时间点上,我们只能在短期记忆中存储大约五个元素。 编程中的“状态”通常是存储在内存中的数据。 在OOP中,这些是例如对象字段或变量。 在可变状态下工作与杂耍非常相似。 我的朋友很少能玩三个球,更不用说五个了。

OOP充分利用了这些弱点。 在OOP中,几乎任何东西都可以变异。 我感谢上级力量,因为OOP的创建者已经认真考虑了开发人员的生产力取决于什么! 在OOP中,所有可变状态也可以通过引用在程序的不同位置使用。 这意味着程序员不仅需要考虑他当前正在使用的对象的可变状态。 他需要记住与该对象交互的另外10-50个对象的可变状态! 这就像一次玩50个球。 这种状况也具有附加值。 这是对大脑的一项伟大运动。

误会吗 是的-在杂耍过程中,一些球掉了。 程序员可能会错过与50个对象的交互有关的一些小知识。 但是,坦率地说,谁在乎呢? 生产错误应由用户报告。 这就是大型严肃组织的工作方式。 然后将错误消息发送到JIRA日志(如您所知,这是一种严肃的企业级软件产品)。 甚至几年都不会过去,并且错误会得到纠正。 问题解决了!

主啊,我爱我的手机银行应用程序。 它非常实用,银行重视我的业务,​​并照顾我的个人数据。 错误只是可能(有人告诉我)!

所谓的“功能性”程序员不理解为什么隔离状态并使之不变。 这带来了降低程序复杂性并因此减少错误数量的悲惨后果。 如果代码库中的错误更少,这意味着程序员将不得不解决更少的问题。 开发公司将无法向客户收费以修复错误。 使用功能方法,在任何大型,严肃公司中工作的程序员在经理看来都是不好的,同时,也将极大地损害他们的职业机会。

of代码行数


程序员需要有机会向经理们展示他的工作成果,以及朝着目标迈进的成果。 表达程序员结果的最有效方法是什么? 当然,这就是他编写的代码行数! 如果我们都转向函数式编程,那么我们将使经理们大为不安,并对他们的工作效率产生严重的怀疑。 “声明式”方法导致编写更简洁的代码。 它的使用大大减少了程序中的代码行数。 我相信,采用声明式方法来实现相同的目标,与使用OOP相比,所需的代码少多达3-5倍,这是完全不能接受的。

换句话说,在向函数式编程的过渡中,在认真的企业管理人员眼中,我们的生产率将真正下降。 反过来,这将使我们的工作面临风险。 因此,远离“功能”编程是我们的最大利益。

同样的建议也适用于根据工作时间向客户收费的承包商。 这是他们的简单成功公式:

 __ = ____ = $$$$$$ 

当然,此成功公式也直接适用于按代码行数付费的认真承包商:

 if (1 == '1') {  doStuff(); } else {  //  } 

▍意大利面的代码是我们的面包和黄油


与函数式编程不同,OOP为我们提供了一致的方法来编写意大利面条式代码。 这对于开发人员的生产力极为有利。 编写意大利面条式代码意味着要花更多时间在编写代码上。 对于任何认真的面向对象的程序员来说,这都是直接的好处。 意大利面条不仅很好吃。 对于以OOP风格进行写作的人来说,这也是一个非常重要的概念。

OOP是送给严肃公司的承包商和员工的真正礼物。

防错部



您不应该害怕使用OOP。 我再说一遍-烦人的错误是您不应该担心的琐事。 在任何严肃的组织中,都有一个预防错误的部门(也称为用户支持部门),其主要任务是保护公司的开发人员免受恼怒的客户的侵害。 最后-如果客户端无法正确使用该应用程序-这仅仅是他的错。

开发人员不应被与他们的业务无关的事情所困扰,例如错误报告。 这有助于确保不浪费公司资源的状况。 结果,开发人员有机会安静地实现新的应用程序功能,并将所有精力都集中在创建企业类的面向对象抽象和应用复杂的设计模式上。

▍错误报告流程


通常,存在经过精心设计和精心计划的过程来保护组织的人力资源。 用户一旦遇到错误,通常会搜索客户支持部门的电话号码。 然后,向用户显示一个大型交互式电话菜单,其中包括各种选项。 通常,大约需要2-5分钟才能收听有关菜单的信息并选择所需的选项。 此步骤使您可以过滤掉持久性最低的客户。

然后通常会告诉客户该公司面临“异常多的呼叫”,并且“平均等待时间为56分钟”。 同时,他们通常会给客户带来不便深表歉意,并谈论他们如何看重客户及其业务。 在此步骤中,大多数客户决定不报告错误。 为了娱乐那些仍然敢于等待的人,他们通常会播放鼓舞人心的音乐。 此外,他们还提供了尝试新的出色应用程序的机会。 这是客户端遇到问题的应用程序。

在等待了56分钟的等待时间之后,呼叫将被转接到位于北美某处的呼叫中心。 这样的呼叫中心的员工通常会接受特殊的培训,使他们能够以强烈的印度或保加利亚口音讲话。 呼叫中心员工答复说,所涉及的应用程序不在其职责范围内,但是他很乐意将客户切换到另一个部门。

在另一个等待期(现在持续42分钟)之后,另一位呼叫中心员工在语音中充满了幸福感,告诉客户他遇到的错误实际上是应用程序的功能。 在此之后,建议客户端参考应用程序的帮助部分。 如果客户继续坚持认为自己正在处理错误,那么他们甚至可以提出支持请求。 客户甚至可以得到答案-本着“播放失败”的精神。

我希望您现在已经确信错误不是程序员应该关心的。 组织通常会采取认真的措施来保护开发人员免受不必要的时间浪费。

避免在面试中出现“初学者错误”



如果您正在积极寻找工作,请尽一切努力从简历中删除所有“功能性”废话。 否则,没人会认真对待你。 在现实世界中,没有人会花时间研究诸如“功能组成”,“纯度”,“单子”或“免疫”之类的儿童玩具。 您几乎不想成为局外人。 如果您开始谈论这样的事情,将使正在面试的人感到不舒服。 并且,如果潜在雇主公司的代表认为您比他聪明,那么您在该公司工作的机会将趋于零。

人力资源专家在大公司中招聘技术人员,此外,还接受强制性的强化培训。 这使他们可以放心地区分严肃的技术,例如Java和JavaScript。

确保您的简历中包含对表明您对大型公司重视的广泛技术知识的引用。 包括诸如“类”,“继承性”,“设计模式”,“依赖注入”,“ SOLID”,“抽象工厂”和“单身”之类的单词和短语。

当您被要求解决面试中经常出现的FizzBu​​zz问题时,请回想一下以下建议,即您需要事先准备好解决该问题的建议。 这是您展示在企业界重视的那些编程领域中积累的深厚知识的机会。 您应该从涉及设计模式和其他OOP技术使用的综合草案解决方案开始。 解决此问题的一个很好的起点可以是FizzBu​​zzEnterpriseEdition 。 许多申请人犯了与初学者相同的错误。 这个错误在于他们依赖诸如功能之类的有限技术。 在此之后,毫不奇怪,在面试之后,没有人打电话给他们写信。

函数式编程可能无法用于开发严肃的软件解决方案。



考虑了上述论点,认真而准确之后,现在任何人都可以清楚地看到,使用所谓的“函数式”编程不会带来任何好处。 很显然,必须不惜一切代价避免这种编程方法。

在过去的几年中,围绕“功能”编程产生了很多噪音。 但是,好消息是,程序员社区的这种短期兴趣已经消失了! 像Facebook和Microsoft这样的大市场参与者早就意识到功能编程的局限性以及面向对象的组织代码的绝对优势。 他们将工作重点放在新一代的面向对象的语言上,尤其是ReasonMLBosqueOOP 。 这样的语言将应用程序状态的可变性提升到了一个全新的水平,幸运的是,它们不支持像不变数据结构这样的无用的功能性废话。

摘要:众神的礼物



在这里,您可能对所谓的“功能”编程有哪些替代方案有疑问。 当然,这是面向对象的编程。 OOP由真正的编程之神发送给我们。 OOP是不可忽视的力量。 这是一个使程序员提高工作效率的大写工具。 多亏了OOP,您和您的团队将永远忙于业务(并且您不会失去工作)。 这是我在文章中详细讨论的OOP。
可能有(面向对象的)力量与您同在。 还有你的代码。 我是有力量的人。 所有人和平。

正如许多人可能已经猜到的那样,这是讽刺性的内容。 如果您是初学者,请不要将所有这些都牢记在心。

函数式编程很棒。 花一些时间探索这种编程范例,您会发现自己比许多团队成员都领先。

我希望您和我写的一样对阅读本文感兴趣。

亲爱的读者们! 您最不喜欢OOP的什么?

Source: https://habr.com/ru/post/zh-CN462485/


All Articles