发布在即!企业 AIGC 应用程度测评,3 步定制专属评估报告。抢首批测评权益>>> 了解详情
写点什么

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:112158
用户头像

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

关注

评论

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

动态尺寸模型优化实践之Shape Constraint IR Part I

阿里云大数据AI技术

深度学习 编译器

QCA9882 wallys 802.11AC 802.11AN wifi QCA9882 Module Wireless AC/AN MiniPCIE Standard Card

wallys-wifi6

QCA9882

开源一夏 | 在 STM32L051 上使用 RT-Thread (二、无线温湿度传感器 之 CubeMX配置)

矜辰所致

开源 RT-Thread 8月月更 STM32L051

我和谷歌共成长——我的Google Play上车之路

云村的泊

8月月更

Solana上的结算协议龙头,Zebec潜力颇受看好

小哈区块

华为云构建云原生DevSecOps平台,保障软件供应链全流程安全可信

华为云开发者联盟

云计算 云原生 安全 后端 华为云

4步教你学会使用Linux-Audit工具

华为云开发者联盟

Linux 工具 安全 监控 开发

闲谈Serverless,价值和未来

白留明(Armin.Lionheart)

云计算 Serverless Faas

怎样评测对比报表工具的性能?

Bug终结者

Java sql SPL 8月月更

TiFlash 源码阅读(六)DeltaTree Index 的设计和实现分析

PingCAP

TiDB TiDB 源码解读

OpenHarmony轻量设备Hi3861芯片开发板启动流程分析

OpenHarmony开发者

OpenHarmony

微服务、网关、服务发现/注册的正确打开方式

Java全栈架构师

Java 程序员 架构 微服务 程序人生

乔布斯之后,下一代触控交互由一家中国公司重新定义

硬科技星球

全新物联网数据集成:Flow可视化编排&双向数据桥接

EMQ映云科技

物联网 IoT flow emqx 8月月更

开源的价值观与文化的传递

开源社

#开源

秒验丨Android端SDK API使用说明

MobTech袤博科技

android UI 秒验

【限时领奖】消息队列 MNS 训练营重磅来袭,边学习充电,边领充电宝~

阿里巴巴中间件

阿里云 云原生 消息队列 课程 MNS

C#/VB.NET 替换 PDF 文件上的现有图像

在下毛毛雨

C# .net PDF 替换图像

QCA9880 wallys 2×2 MIMO 802.11ac Mini PCIe 2,4GHz / 5GHz Designed for E

wallys-wifi6

数据结构——二叉树

工程师日月

8月月更

短视频直播app源码——软件系统开发方案

开源直播系统源码

软件开发 直播系统源码 短视频直播源码 短视频直播

融会贯通,并行不悖 | 2022年8月《中国数据库行业分析报告》精彩抢先看

墨天轮

数据库 greenplum MPP 国产数据库 HTAP

基于深度学习的细粒度分类研究及应用

之家技术

人工智能 深度学习 模型 图像 CVPR

加密市场的投资布局,Zebec实属价值洼地

西柚子

泄露了,22年阿里巴巴秋招内部面试资料,看完之后剑指offer

Java面试那些事儿

Java 编程 程序员 面试 架构师

面向大规模数据的云端管理,百度沧海存储产品解析

百度Geek说

人工智能 数据

2min速览:从设计、实现和优化角度浅谈Alluxio元数据同步

Alluxio

元数据 数据同步 Alluxio 大数据 开源 8月月更

.NET 6 SignalR websocket 入门(一)

辣么大

.net SignalR 8月月更

国产系统的不足或许可以靠小程序弥补

Geek_99967b

小程序

量化交易合约机器人系统开发策略分析

薇電13242772558

量化策略

10种有用的Linux Bash_Completion 命令示例

华为云开发者联盟

Linux 后端 开发

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