【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论

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

5年Java经验不会源码被拒,苦学这些Spring源码笔记后,面试不再慌

Java架构之路

Java 程序员 架构 面试 编程语言

“区块链新闻编辑部”: 从“云媒体”到“链媒体”的现实跨越

CECBC

区块链技术

内存数据库解析与主流产品对比(一)

星环科技

数据库 大数据

一文读懂Java动态代理

潘大壮

Java jdk 动态代理

产品训练营--第二期作业

曦语

产品训练营

厌倦了EXCEL想玩点新花样?教你利用Python做数据筛选(下)

智分析

Python

《程序员修炼之道》- 务实的哲学(3)

石云升

读书笔记 程序员 28天写作 批判性思维 完成好过完美

关注直播 走近滴滴夜莺K8S监控组件

滴滴云

k8s 滴滴技术 监控告警 滴滴夜莺

一周信创舆情观察(1.18~1.24)

统小信uos

译文《全新首发JDK 16全部新特性》

潘大壮

Java jdk JVM

数据库恢复子系统的常见技术和方案对比(一)

星环科技

数据库 大数据

一个 3 年 Java 程序员 5 家大厂的面试总结(已拿Offer)

Java架构之路

Java 程序员 架构 面试 编程语言

kotlin高阶函数let、with、apply、run、also使用场景

陈吉米

kotlin

新思科技发布《美国不良软件质量成本:2020年报告》

InfoQ_434670063458

软件质量 新思科技

拍乐云 Flutter SDK 全新发布,跨平台音视频开发更easy

拍乐云Pano

flutter 音视频 WebRTC RTC

阿里四年技术 TL 的得失总结:如何做好技术 Team Leader

阿里巴巴云原生

云计算 项目管理 程序员 微服务 云原生

30天消化MyBatis源码解析笔记,吊打面试官,offer接到手软

Java架构之路

Java 程序员 架构 面试 编程语言

数据库恢复子系统的常见技术和方案对比(二)

星环科技

数据库 大数据

Redis核心剖析:为什么这么“快”的秘密

Java架构师迁哥

从零开始学习Git

ITCamel

git

译文《最常见的10种Java异常问题》

潘大壮

Java 异常 java异常处理 Exception

内存数据库解析与主流产品对比(三)

星环科技

数据库 大数据

抽奖助手利益相关方

千竹

内存数据库解析与主流产品对比(二)

星环科技

数据库

Flink 学习路线总结

大数据学习指南

大数据 flink

Elasticsearch 基于脚本进行 partial update

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

10 个 JavaScript 简洁代码小技巧(文末彩蛋)

零和幺

JavaScript 大前端 CleanCode

Alibaba最新产物手册宝典:分布式核心原理解析,简直是Java程序员福音!

996小迁

Java 架构 面试 分布式

区区一个SpringBoot问题就干趴下了?我却凭着这套“神级PDF文档”吊打面试官

Java 编程 面试 微服务

【推荐收藏!】Gradle 与 Android 构建入门

百度Geek说

研发工具 andiod

智能汽车为什么新势力有胜算(28天写作 Day20/28)

mtfelix

28天写作 新能源汽车 智能汽车 造车新势力

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