F#年度调查结果概述
本文要點
年度社區調查向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畢業論文,研究內容為上下文感知編程理論。
相關文章:
如果你也會C#,那不妨了解下F#(1):F# 數據類型
如果你也會C#,那不妨了解下F#(2):數值運算和流程控制語法
如果你也會C#,那不妨了解下F#(3):F#集合類型和其他核心類型
如果你也會C#,那不妨了解下F#(4):了解函數及常用函數
【送書活動】機器學習項目開發實戰
《機器學習項目開發實戰》送書活動結果公布
原文地址:http://www.infoq.com/cn/articles/fsharp-community-survey-2016
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的F#年度调查结果概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core 系列5 :使用 Nu
- 下一篇: 替代反射调用的几种方式及性能测试