函数式编程吗?不麻烦,这是一个愚蠢的玩具

也许你听说过所谓的“功能”编程。也许你甚至怀疑你应该试一试。

简短的回答是地狱不!

函数式编程充满缺陷,不适合实际项目,会使你的生产力下降。为什么?请继续往下读!

函数式编程是无法满足复杂的企业需求

图片由肖恩·波洛克Unsplash

真实的企业软件要求一组复杂的严格和强制要求有关预期的嵌入式抽象的软件解决方案。换句话说,面向对象编程使程序员利用多个抽象机制,充分满足企业要求的复杂需求。

那是一口,但忍受我!事情会变得清澈。

所谓的“功能”编程没有适当的抽象机制,因为它是基于数学(这显然不如和没有应用在现实世界中除了学术界)。不同于OOP,函数式编程并没有试图满足众多企业要求的严格和复杂的需求。

这个代码片段演示了函数式编程的普遍问题:

如果这让你生气,你不孤独!

函数式编程并没有试图正确抽象和封装的功能,通常是所要求的任何严重的企业。

没有一个自尊的软件工程师会写这样的东西!如果是,那么他们应该立即解雇任何严重的大型企业,以防止进一步的损失。在下一节中,我们将看一个适当的抽象OOP程序。

功能软件解决方案不是不会过时

图片由karataraPexels

这已经不是什么秘密,任何专业和自重的软件工程师的首要职责是编写不会过时的代码满足复杂的业务需求。

与上面的灾难性的功能代码片段相比,让我们看看一个适当的抽象OOP程序。它做同样的事情,但在一个抽象的和一个不会过时的方法:

正如您可以看到的,这所有的核心功能正确的抽象。这段代码是固体

不要让简单傻瓜你!它完全满足所有的复杂的业务需求,通常会要求任何严重的大型企业。

这个健壮的解决方案是完全不会过时,妥善利用企业级依赖注入。

严重的管理需求严重的特点

图片由rawpixel.comPexels

希望现在开发团队已经完成复杂的业务需求与代码抽象,提出的企业。开发人员资源现在应该重点转向实现由项目经理定义的特性。

任何真实的企业产品经理知道,只有新特性提供真正的商业价值。他们不应该被允许把资源浪费在浪费时间像单元测试和重构。

很明显,所谓的“功能”编程是有缺陷的,它使多余的不必要的重构和单元测试容易。反过来,这将作为分散开发团队——他们可能会不小心把时间浪费在那些无用的活动,而不是提供新功能。

这个例子清楚地演示了函数式编程的自卑——这使得重构太容易了:

如果这样的重构从它的简单性使你畏缩,然后你并不孤独!前6行代码重构,只有七行代码之后?你一定是在开玩笑!

让我们对比它与一个合适的面向对象的代码的重构:

这是正确的编程是什么样子!9行代码之前,22。有更多的力气就能重构,这将使企业开发人员资源三思而后行从事重构等浪费活动。

声明代码的谬论

图片由塞巴斯蒂安·赫尔曼Unsplash

所谓的“功能”程序员错误引以为豪的书面声明代码。那没什么值得骄傲的,只不过这样的代码创建了一个错觉的生产力。

任何开发人员的核心责任应该由思考适当的严格的面向对象的抽象(如任何严重的大型企业还要求)。

让我们看看正确抽象OOP代码:

请在第20行集中在强制循环。忽略了小样板OOP代码,与手头的任务无关。它必须包括为了使代码示例遵循严格的抽象需求设定的严重的企业。

声明式代码,另一方面,过于简洁,和错误使开发人员专注于重要的事情越少,业务逻辑。对比上述强劲的企业解决方案下“声明”代码的一个片段:

SELECT *从用户那里国家= '美国';

SQL每次都让我畏缩,因为被声明。为什么SQL ?为什么他们不能有开发人员利用适当的企业级抽象和写正常的面向对象的代码?尤其是当我们已经有这些工具。这是令人兴奋的。

现实世界建模

图片由朱莉安娜KozoskiUnsplash

面向对象编程是天才。与“功能性”编程,它完美地模仿现实世界先进技术继承,多态,封装。

任何自重的软件开发人员都应该每天利用继承实现代码的可重用性。如前所述,继承现实世界完美的模型。例如,猫总是继承它们的属性和行为从一个抽象的现实世界的动物。生命起源于海洋几十亿年前。因此所有的哺乳动物(包括猫)继承了原始的属性鱼,喜欢garfield.fishHead,他们的方法garfield.swimgarfield.layCaviar。难怪猫享受洗澡和游泳!人类实际上是相同的,我们可以很容易地开始铺设鱼子酱如果我们想!

我们的程序应该遵循类似的代码组织分级方法。函数式编程错误rid这样神奇的代码的开发人员共享结构受现实世界。这有深远的影响,尤其是在严重而复杂的企业软件。

函数应该被绑定到对象

图片由PawełCzerwińskiUnsplash

这只是常识,也完美的现实世界的模型。你买的笔记本在章节带有一个内置的“写方法”。这种方法被称为每当你打算把事情写下来。你可能没有意识到这一点,但你也有方法.eat(蔬菜),dobetway娱乐官网HomeWork。这只是常识,怎么你妈妈能让你吃你的蔬菜和你完成你的家庭作业吗?betway娱乐官网当然,她用来直接调用这些方法!

没有工作可以做在现实世界中没有雇佣一个专用的经理协调任务。年轻人可能需要一个经理来满足他们的基本的人类需要,你知道,“netflix-n-chill”之类的东西。谁来协调整个过程,毕竟?如果他们很聪明,他们会雇佣多个管理者,就像OOP建议。

在现实世界中,创造新的东西,也需要有一个专门的降温工厂。莱奥纳多拥有一个MonaLisaFactory,特朗普建立一个秘密WallFactory。俄罗斯曾经有过一个CommunismFactory现在,主要是维护它CorruptionFactory克里姆林宫,隐藏在深处的地下城。

可以清楚地看到,这只是另一个钉在棺材“功能性”,因为它没有试图在现实世界模型。函数允许存在独立于对象,这是错误的。函数式编程,很明显,不适合任何严重的实际编码。

函数式编程没有提供成长的机会

图片由以利亚冰雹Unsplash

首先,软件工程师应该关注不断改善和发展。大量的知识必须通过一个软件工程师为了真正掌握面向对象编程。

首先,他们必须学习先进的OOP技术想继承,抽象、封装和多态性。然后他们应该熟悉多种设计模式(如单例),并开始利用他们的代码。有大约30可以学到基本的设计模式。理想情况下,在这一点上,开发人员应该开始利用各种企业级抽象技术在他们的代码。

下一步是熟悉的技术领域驱动设计和学习分解的庞然大物。还建议学习适当的重构工具,像Resharper,因为OOP代码重构也是不小的。

至少需要20 - 30年与OOP取得好。即使在那时大多数人有30年的OOP经验还没有真正掌握它。学习路径是粗糙的,充满了不确定性。一生的学习等待OOP开发人员,令人兴奋的是,如何?

可怜的函数式程序员呢?不幸的是,没有太多要学。我亲自教一些初级开发人员在JavaScript函数式编程,和他们成为了很好的大约半年。他们只是不得不理解一些基本概念,然后很快学会应用它们。终身学习的兴奋在哪儿?我不羡慕他们。

成功是一个旅程,不是目的地

图片由Anastase MaragosUnsplash

让我们承认,我们的程序员正在支付时间。就像建筑工人一直挖洞离我家不远的在过去的两年里(顺便说一句他们构建w̶̶̶̶l路)。

我们定义了程序员的工作效率。每个人都曾在任何严重的大型企业知道成功的简单的公式:

生产力= lines_of_code x bugs_fixed

错误修复

人类的大脑是不善于处理状态,我们只能持有大约五项工作记忆在给定的时间。在编程通常是指任何数据在内存中——例如字段/ OOP中的变量。使用可变状态非常类似于杂耍。我不知道太多的人谁能兼顾三个球,更不用说5。

OOP很好地利用这个弱点。在OOP几乎一切都是可变的。感谢上帝,OOP重视开发人员的生产力的问题!在OOP的所有可变状态也是共享的参考!这意味着你不仅要考虑可变状态的对象,目前正在与你,你也要考虑10 - 50的可变状态与之交互的其他对象!这类似于试图逃避50球的同时,同样也有好处,作为一个很好的锻炼我们的脑力。

错误吗?是的,最终我们将会下降的一些球杂耍。我们可能会错过一些小型的细节这50对象之间的交互。但是谁在乎,真的吗?错误应该由客户在生产,这是任何严重的大型企业是如何运作的。然后虫子进入JIRA积压(严重的企业级软件)。几年后的错误将是固定的。问题解决了!

上帝,我喜欢用我手机银行应用程序。它非常先进,银行值我的生意,他们认真对待我的隐私。错误只是特性(告诉我)!

所谓的“功能”编程错误隔离状态,使状态不可变的。这有一个不幸的后果降低复杂度,从而减少错误的数量。bug更少的代码意味着我们将有更少的bug修复。承包商无法保持充电为这些bug修复他们的客户。开发人员在任何严重的大型企业将开始看坏眼睛的经理,而严重危害他们的组织中成功的机会。

行代码

我们还应该能够显示连续的发展为我们的管理。和最有效的方法是什么进展吗?行代码,当然!我们都变成了函数式编程时,我们会管理非常不满和怀疑。“声明”代码会使代码更加简洁,和行代码将大幅减少。3 - 5倍更少的代码来实现同样的目标,这是不可接受的!

换句话说,我们的生产力将会暴跌,面对严重的企业管理,和我们的工作再次将岌岌可危。符合我们的最佳利益远离“功能性”编程。

同样的建议也适用于承包商收取客户的工作时间。这是成功的一个简单的公式:

lines_of_code = time_to_write = $ $ $ pure_profit $ $ $

这个公式的成功,当然,也直接适用于严重的软件承包商得到行代码:

如果(1 = = ' 1 '){
doStuff ();
其他}{
/ /纯利润
}

意大利面条是我们的面包和黄油

与函数式编程,OOP给我们提供了一个一致的方式写意大利面条式代码——一个真正的开发人员的生产力的福音。意大利面条式代码相当于更多的以小时计费,这转化为纯粹的利润严重OOP工程师。意大利面不仅味道鲜美,是面包和黄油OOP的程序员!

面向对象是一个真正有利于承包商严重的企业和员工。

缺陷预防部门

图片由Icons8团队Unsplash

你不应该害怕使用OOP。再一次,那些讨厌的错误是没有什么可担心的!任何严重企业整个缺陷预防部门(又名客户支持),其主要职责是保护他们的开发人员资源从愤怒的客户。客户的错,他们不能正确地使用这个应用程序,毕竟。

开发人员不应该打扰bug报告等无关紧要的事情。这将确保所有的企业资源浪费,并允许开发人员专注于新功能而实现利用适当的企业级面向对象的抽象和复杂的设计模式。

错误报告过程

一个精心设计和严格的过程通常是保护企业资源到位。一旦一个客户遇到了一个错误,他们通常在网上寻找客户支持电话号码。然后客户提出了一个先进的和交互式电话菜单组成的各种选项。通常需要两到五分钟听菜单并选择正确的选项。最持久的顾客通常在这一步下降。

然后客户通常是告知公司正在经历一个“出人意料的大量电话”,这“是56分钟的平均等待时间”。他们通常为给您带来的不便表示道歉,提及他们客户的商业价值。大多数的顾客通常会决定不报告错误在这一步。保持客户招待,鼓舞人心的音乐通常被打。他们还告诉检查出很棒的新应用。应用程序,客户是有困难的。

56分钟的等待结束后,调用被路由到一个呼叫中心位于美洲北部的某个地方。美国当地的员工通常经过严格的培训,使他们用浓重的印度或保加利亚口音说话。代理提到问题中的应用不是他的责任但快乐地将客户转移到另一个部门。

42分钟的等待,一个代理高兴地告诉客户,这个bug实际上是一个功能,并建议用户通过的帮助部分应用程序。如果客户仍在持续,代理可能创建一个支持的机票和客户甚至可以听到回来!错误不能被复制。

我希望现在你确信,担心错误不是一个开发人员的工作。严重的措施通常是由企业实施保护他们的开发人员资源。

避免新秀面试错误

图片由奥斯汀DistelUnsplash

如果你正在积极寻找工作,然后把一些精力移除所有的“功能性”废话从你的简历或没有人会认真对待你。没有人在真正的企业世界是训练有素的幼稚的“函数组合”、“纯洁”,“单体”或“不变性”。你不想看起来像一个局外人。谈论这样的事情会让你的面试官显得愚蠢,并将完全消灭你成功的机会。

企业技术招聘人员也经过强制性的严格训练,这使他们能够正确区分严重的技术(如Java和JavaScript。

一定要撒的话在你的简历,展示你的广博的知识的各种严格的企业级抽象技术像类,继承,设计模式,依赖注入,固体,抽象工厂,单例。

当被问及实现古典FizzBuzz面试问题在白板上,确保你准备充分。这是你的机会,光泽和演示你的严格的企业级系统设计能力。第一步是充分设计解决方案时使用适当的OOP设计模式和严格的企业级抽象技术。FizzBuzzEnterpriseEdition是一个很好的起点。许多犯新手的错误依赖劣质设计技术等功能。难怪他们从来没有听到从潜在的雇主。

函数式编程不可能被用来构建严重的软件解决方案

图片由马库斯SpiskeUnsplash

考虑到所有的严肃和严格的参数上面,现在可以清楚地看到,没有什么好之一的这个所谓的“功能性”编程。很明显应该不惜一切代价避免。

所谓的“功能”编程是一个时尚的最后几年。很好,这是已经消失!大鱼像Facebook和微软早就意识到函数式编程的局限性和面向对象方法的明显优势代码组织。他们将资源向新一代的面向对象语言,即ReasonOLBosqueOOP。这些语言使国家可变性一个全新的水平,幸运的是没有支持无用的功能不可变的数据结构。

神的恩惠

图像中欢迎和感谢您的访问!ツPixabay

所以你可能会问什么是替代所谓的“功能性”编程吗?面向对象编程,傻!这是独一的真神赋予我们的编程。OOP是一个不容小觑的力量。的终极工具开发人员的生产力,总是会让你和你的队友忙(使用)。

(面向对象)力与你同在。和你的代码。我的力量。和平。

更深入的解释,检查出我的其他文章面向对象编程,上帝的恩惠

PS >你们大多数人已经猜到了,这个职位是一个讽刺。所有的新开发人员——不重视这个,FP是伟大的!投入一些时间学习函数式编程,你将大部分同行的前面。
我希望您喜欢读这篇文章尽可能多的乐趣!

- - -

- - -

得到了媒介的应用betway娱乐官网

一个按钮“App Store下载”说,如果点击它会使你的iOS应用程序商店
说一个按钮上,谷歌玩,如果点击它会使你的谷歌商店
Baidu