写点什么

F#年度调查结果概述

  • 2016-08-25
  • 本文字数:4563 字

    阅读完需:约 15 分钟

本文要点

  • 年度社区调查向 600 多名开发人员了解了他们的 F#使用情况;
  • 在工作中,F#的最大好处包括正确性、让不合法状态不可达以及能够更轻松地解决复杂的问题;
  • 大多数 F#开发人员仍然使用 Windows 作为他们的开发平台之一,但使用 Mac 和 Linux 的已经增长到 33%;
  • F#不只是用于科学和计算——将 F#用于实用程序和工具的受访者最多(45%);
  • 排名前 3 的库和工具是 FAKE 构建系统、Paket 包管理器和类型提供库 F# Data。

四月份, fsharpWorks 组织了第二次 F#社区调查。2016 年,有超过 600 名开发人员完成了调查(比 2015 年多 15%)。该调查让我们可以深入地了解 F#社区的智慧。本文汇总了部分调查结果。

你也可以自己研究下包含所有33 个问题的完整调查结果,并在评论中把有趣的发现分享出来。

现在,F#已经存在多年了,但开发人员使用它的方式一直在变。在不同的领域,有许多新的开源库让F#变得更具吸引力。与早期使用者相比,当前用户所看重的方面也不同。

2016 年,开发人员在项目中选择 F#的原因有哪些?他们如何使用 F#?F#适合哪些应用领域?自去年以来,有什么新的趋势?未来最大的挑战有哪些?

谁是 F#开发人员

我喜欢我在 F#社区看到的一切。加入其中是一件独特的事情,一旦我决定迈出第一步,就觉得非常惬意。我只是希望,我们能够向那些尚未迈出第一步的人伸出橄榄枝。

调查对象一般是有经验的软件开发人员,64% 的受访者有 10 年的编程经验(语言不限)。有超过 81% 的 F#开发人员还使用 C#,但是,在受访者中,使用 F#编写客户端 Web 应用程序的人在增加(38% 的人还使用 JavaScript,而 9% 的人还使用 TypeScript)。

大多数 F#开发人员都有 Windows 背景,90% 的使用 Windows 作为他们的平台之一,但非 Windows F#用户的数量也在增加。特别地,25% 的 F#开发人员(还)使用 Mac,25% 的(还)使用 Linux。由于自去年开始出现了大量的跨平台 F#开发,所以下面我将回到跨平台 F#开发的主题。

工具、业务、Web 和数据

我经常听人们说,“F#只适合于计算,是吧?”我认为,那些人往往是被许多来自那个世界的例子给吓跑了。

在早期,F#作为一门适合于金融和计算密集型的语言而闻名。这可能源于早期知名的采用者,但当前的数字显示了不同的结果。

使用 F#开发实用程序和工具的受访者最多(占 45%)。这反映了一个事实,就是 F#自第一个版本开始就通过 REPL(读取-求值-打印-循环)支持交互式开发。若干受访者使用 F#和一种轻量级的编辑器,不怎么费力就可以完成小型的编码任务。

除了 REPL 环境之外,F#生态系统还有许多功能强大的库。特别是,随机测试库( FsCheck )和编写构建脚本的库( FAKE ),后者在最受欢迎工具列表中位置特别突出(后面会介绍)。在 F# for Fun and Profit 网站上,脚本开发、编写构建脚本和测试也是其中一种风险最低的 F#入门方式。

在实用工具之后,接下来的 4 个应用领域(介于 21% 到 17% 之间)涵盖了众多主题,包括数据分析、Web 应用程序和企业应用程序。

F#可以用于商业 / 非商业 Web 站点和应用程序(18% 和 14%),而 Web 主题出现在调查的其他回复里。Suave Web 服务器是最受欢迎的 F#库之一,Suave Music Store 教程作为一个受欢迎的 F#资源被提及,超过 38% 的 F#开发人员还使用 JavaScript。

F#在统计和数据分析领域仍然很受欢迎(21%)。 FsLab 包作为最受欢迎的库(虽然它没有进入前 5)多次被提及。许多 F#开发人员还熟悉更多的数据科学与分析工具 & 语言——19% 的受访者还使用 Python 编程,5% 的使用 R 语言,它可以通过 R 类型提供程序与 F#集成。

为什么 F#开发人员选择了 F#

[F#社区应该] 在真实的项目中更好地展示其优势,它的代码未必总是令人兴奋,但在普通业务功能中,F#的领域建模功能真得很出众。

据参与 F#调查的受访者报告,F#的最大优势和两个流行的 F#应用程序高度相关。在上一节的图表中,F#既用于算法密集型应用程序,也用于主流业务应用程序(均占受访者的 17%)。在算法密集型应用程序中,正确性至关重要,而主流业务应用程序则在很大程度上受益于 F#支持领域建模并让非法状态不可达。

F#的领域建模通过代数数据类型(又称为可区分联合)实现。在这两个版本的调查中,代数数据类型都是最受欢迎的 F#特性之一(65% 的开发人员把它们列为自己最喜欢的特性)。此外,F# for Fun and Profit 网站上有一份使用F#类型进行领域建模的说明。

一个在编写F#代码时可以感受到的好处是正确性。它可能和其它受欢迎的F#语言特性联系起来。默认不可变性是最突出的一个(有78% 的受访者将其列为自己最喜欢的特性),紧随其后的是类型引用(69%)和“管道语法(piping idiom)”(也是69%)。

不可变性和管道语法都是以一种严格的形式出现在C# LINQ 中。通常,IEnumerable 作为不可变类型,而F#管道操作符|> 的用途和C#中的方法链接类似。在F#中,这两个概念不只在集合处理时使用,更多的是在设计软件时使用。你可以阅读“函数式思维”系列文章来了解更多的原则。许多流行的库都是围绕管道语法构建的,包括 MBrace ,它使用该特性组合云计算和 XPlot ,后者使用管道操作符配置图表功能。

也许有些出人意料,虽然 F# Data (实现了可以操作 XML、JSON 和 CSV 格式的类型提供程序)是最受欢迎的库之一,但只有不到一半的受访者(45%)提到 F#类型提供程序是自己喜欢的特性。

跨平台和工具

F#社区最新的进展之一是接近实现完全的跨平台支持。如上所述,大多数 F#开发人员仍然使用 Windows 作为他们的其中一个开发平台,但使用 Mac 和 Linux 的开发人员数量在增加。将代码部署到 Linux 的开发人员比例由 21% 增长到了 33%,让 Linux 成为受欢迎程度仅次于 Windows 的第二部署目标。人们对这个领域的兴趣在增长。Alena Hall 的演讲《 Cassandra、Docker 和令人印象深刻的 F#》,成为第一届虚拟 F#大会 fsharpConf 上 15 个视频中收看最多的一个。这也是兴趣增长的一个证据。

另外一个 F#变得越来越跨平台和多样性的领域是工具。

这个问题不允许选择 2015 年的多个编辑器,因此,有点难以做出正确的比较。不过,越来越多的 F#开发人员不再将 Visual Studio 作为他们唯一的开发环境。最值得一提的是 Ionide 项目的流行。该项目实现了 Atom 编辑器和 VS Code(两个都是跨平台编辑器)的 F#插件。Ionide 仅仅推出大约 1 年的时间,就有 42% 的 F#开发人员已经使用了它(和上述两个编辑器的其中一个搭配使用)。Xamarin Studio 在 Mac 上提供了 F#支持,被 14% 的 F#开发人员使用,vim 和 Emacs(F#模式)也越来越流行。

功能强大的库和工具

F#可以方便地实现同.NET 生态系统的互操作,但为了充分利用 F#语言,社区创建了越来越多的工具和库。下面这个列表汇总了那些“让 F#开发人员与众不同”的库和工具。括号中的数字表示一个库被提及的次数,这是使用一个简单的 F#脚本从调查结果中提取的。你可以运行或改进这个脚本。

  • FAKE (86)和 Paket (74)是两个适合工具和实用程序领域的项目。FAKE 让你可以编写功能强大的构建脚本,完成从根据 RELEASE_NOTES.md 生成 AssemblyInfo 文件,到发布 NuGet 包等所有的一切事情。第二个项目 Paket 是一个基于 NuGet 的包管理器,它使用标准的 NuGet 工具解决了许多问题。它有一个单独的文件用来“锁定”版本,处理传递依赖,等等。FAKE 和 Paket 也都可以用于 C#项目,在 C#社区也日益流行。
  • F# Data (53)是一个类型提供程序库,它简化了 JSON、XML 和 CSV 格式数据的访问。该库从示例文档推断类型,因此,你可以访问自动完成的数据,而不必手动定义任何类型。虽然特定于 F#,但可以在一个较大的.NET 应用程序的 F#模块里使用该库。最近的一门 Pluralsight 课程涉及了这个主题。
  • F# PowerTools (34)和 Ionide (31)是每个 F#开发人员都需要了解的两个工具。F# PowerTools 是一个 Visual Studio 扩展。它改进了着色,添加了重构支持等特性。上文已经提到过的 Ionide 项目为 Atom 和 VS Code 添加了 F#支持。
  • 接下来三个在调查中得分比较高的项目是在三个 F#广泛应用的领域里解决了有趣问题的 F#库。 FsCheck (31)是一个随机测试库,让开发人员可以在测试过程中更轻松地覆盖一些不易觉察的特殊情况。该库也可以在 C#代码中使用。 Suave (31)是一个具有可组合 API 的轻量级 Web 服务器。 FParsec (24)是一个用于编写解析器的库,通常用于创建领域专属语言。

学习资源

在我见过的任何语言 / 库的教程中,教程 Suave Music Store 可能是最好的了。

除了一般的统计和受欢迎的库,F#调查还提了几个有关 F#学习和信息获取的问题。F#社区里有许多事情正在发生,但你需要知道去哪里进行了解!

  • 作为一个很棒的学习资源,教程 Suave Music Store 多次被提及。它展示了如何一步一步使用 Suave Web 服务器以函数式风格开发一个企业 Web 应用程序。
  • 至于 F#新闻跟踪,超过 60% 的 F#开发人员使用 Twitter,通过关注话题标签#fsharp 来了解正在发生的事情!第二个新闻源(58% 的受访者使用)是定期发布的 F#周报,该栏目由 Sergey Tihon 维护,每个星期一会发布 F#社区里最重要的新闻(自 2012 年 11 月至今!)
  • 该调查还提到了由新成立的 F#软件基金会所属的 F# Education 工作小组推出的几项活动,其中包括试验指导计划(将来有望再次组织)、 fsharpConf 虚拟会议和 F#巡讲项目

前瞻

F#语言有一个活跃的、充满热情的社区,它构建了受欢迎的开源工具和库,也对编译器本身的重大改进作出了贡献(参见 Elm-style 错误信息 Struct 记录,这里仅举两例)。这点不只在调查中的许多回答里得到了体现,还在外界的观点里得到了体现。

从技术上讲,我们希望F#在跨平台方面可以进行更多的开发。跨平台工具支持和应用的改进表明,这是社区正在积极开展的工作。除了mono(已经允许许多F#开发人员以Linux 作为目标平台)和Xamarin(面向iOS 和Android)之外,下一位跨平台游戏的玩家是微软的CoreCLR。微软的F#团队在研究面向CoreCLR 的开发,社区也在研究。我希望明年能够看到这个领域有许多事情发生。

至于应用,在从业务上说明F#的好处方面,还有许多工作可以做。这是 F#软件基金会可以施加影响的地方,无论是收集证据,还是编制可信赖的教育资料。

在“人人都喜欢F#”的公司里工作的人,其数量已经由2015 年的8% 上升到2016 年的14%,在仅仅一年的时间里,这是一个巨大的提升。不过,在工作中使用F#面临的一些问题仍然存在。特别地,公司担心F#开发人员的雇佣和培训。这是一个令人意外的点,因为调查显示,许多热情的F#开发人员目前并没有将F#作为他们的主要语言。在培训方面,F#顾问的数量在增加,其中包括 fsharpWorks 提供的 F#培训和研讨会。这表明,围绕 F#进行更好地交流可能是支持 F#在企业中应用的最重要的任务。同时,这也是 F#软件基金会及其不断增加的成员和赞助商可以产生巨大影响的领域。

关于作者

Tomas Petricek是一名 F#爱好者、会议演讲者和《现实世界的函数式编程》一书的作者。他是 fsharpWorks 的一名合伙人,主要为其提供培训和咨询服务。Tomas 为许多 F#开源库的开发作出了贡献,也作为微软研究院的订约人为语言本身的开发作出了贡献。他最近提交了自己的 PhD 毕业论文,研究内容为上下文感知编程理论。

查看英文原文: F# in Numbers: A Look at the Annual F# Survey Results

2016-08-25 19:112424
用户头像

发布了 1008 篇内容, 共 389.5 次阅读, 收获喜欢 344 次。

关注

评论

发布
暂无评论
发现更多内容

阿里P8架构师爆肝分享内部开源的JVM垃圾回收PDF文档,共23.3W字

做梦都在改BUG

Java JVM 垃圾回收

HummerRisk V1.0.0:架构全面升级,开启新篇章

HummerCloud

云原生安全

一名开发者眼中的TiDB与MySQL选择

TiDB 社区干货传送门

数据库架构选型

太强了!阿里技术官新产"Spring高级源码阅读指南",爆火全网

Java你猿哥

Java spring SSM框架 spring ioc spring aoc

全新适配鸿蒙生态,Cocos引擎助力3D应用开发

HarmonyOS开发者

HarmonyOS

Greptime 的 GitOps 实践

Greptime 格睿科技

k8s gitops IaC

人人自媒体的时代,程序员该如何利用好自己的优势?我记住了这些神器...

浅羽技术

工具 自媒体 写作技巧 三周年连更

【问题解决】解决 swagger2 默认地址失效

Java你猿哥

Java JAVA开发 swagger2 java项目

SpringBoot 集成 atomikos 实现分布式事务

做梦都在改BUG

EMQX Cloud BYOC版本发布:在您的云上体验全托管的MQTT消息服务

EMQ映云科技

物联网 IoT 云服务 mqtt 企业号 4 月 PK 榜

活久见,java8 lamdba Collectors.toMap()报NPE

做梦都在改BUG

【4.7-4.14】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

TiDB 6.1/6.5 在 Rocky Linux 8 中的部署升级与 PITR 初体验

TiDB 社区干货传送门

版本升级 安装 & 部署 备份 & 恢复 扩/缩容 6.x 实践

更安全、更低耗的微服务架构改造之道

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

华为19级大佬10年心血终成百页负载均衡高并发网关设计实战文档

做梦都在改BUG

Java 负载均衡 高并发 网关设计

被裁后,狂刷大牛分享的607页JUC源码分析笔记,立马拿蚂蚁offer

做梦都在改BUG

Java 高并发 JUC JCF 集合框架

业内首份!医疗数据安全政策汇编发布(附下载)

极盾科技

数据安全

高可靠多层板制造服务再获认可!华秋荣获创想三维优秀质量奖

华秋电子

从零学习SDK(6)调试和测试SDK的库

MobTech袤博科技

新手测试必学的 API 接口文档知识

Apifox

测试 入门 接口文档 API API 文档

得帆云DeMDM,业内首家基于低代码技术构建的主数据管理平台

得帆信息

低代码 数据治理 数据清洗 主数据管理 主数据管理平台

SLBR通过自校准的定位和背景细化来去除可见的水印

合合技术团队

人工智能 图像处理 水印消除

总结一下Redis的缓存雪崩、缓存击穿、缓存穿透

做梦都在改BUG

每日 Scrum 与站立会议:有什么区别?

码语者

Scrum

关键的Java JVM选项和参数

码语者

JVM

BAT必刷!GitHub顶级“2023并发编程全优笔记”晋升公司架构组!

Java你猿哥

Java 多线程 面经 SSM框架 多线程并发

Java中的异常处理详解(try、catch、finally、throw、throws) | 社区征文

共饮一杯无

Java 异常处理 三周年连更

精华!Redis 知识总结

会踢球的程序源

Java Java进阶 redis 底层原理

OpenHarmony社区运营报告(2023年3月)

OpenHarmony开发者

OpenHarmony

华秋PCB生产工艺 | 第十二道主流程之FQC

华秋电子

Netty框架详解:高性能网络编程的设计与实现

做梦都在改BUG

网络编程 Netty 高性能

F#年度调查结果概述_.NET_Tomas Petricek_InfoQ精选文章