BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

F#年度调查结果概述

| 作者 Tomas Petricek 关注 0 他的粉丝 ,译者 谢丽 关注 11 他的粉丝 发布于 2016年8月26日. 估计阅读时间: 15 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

本文要点

  • 年度社区调查向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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

F#可以看作是.Net上的Scala by 孙 奇辉

F#的在工作上的好处,同样适用于Scala !

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT