本文要点
- 年度社区调查向 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
评论