我没有考虑其他陷阱吗?
实际上,我看到人们犯的主要错误是试图强迫使用F#来解决问题,因为这是该工作的错误工具。
还是有人愿意反驳我提到的陷阱?
在某种程度上,它们显然都是有效的关注点,但是我想问到什么程度。
例如,您说每个人都必须学习F#才能使用F#代码。尽管是正确的,但实际上这并不是什么大问题。学习F#并不比学习WPF,Silverlight或TPL重要。我现在正在教大约30个开发人员如何在伦敦的客户中使用F#,大约有十几名开发人员在短短几周后就全职使用F#代码,他们刚刚交付了他们的第一个产品(按时交付,预算内! )仅用了几个月就几乎完全用F#编写了。实际上,他们在Silverlight方面比F#遇到更多技术困难,并且他们发现Silverlight的技术支持比F#差得多。
您指的是相对较少的可用F#程序员,但是同样,考虑到拾取F#的难易程度,我认为这不是重要的问题。我怀疑您是否需要雇用很多(如果有)。我的客户有两个F#专家,可为100多位程序员提供服务,我们的工作是播种和监督F#的使用。
您的第三个也是最后一个关注点是社区支持的减少,针对C#解决方案的Google搜索与F#和第三方工具的支持。再次,我在实践中没有发现这些问题。我通过电子邮件向fsbugs发送了有关F#中的计量单位的评论,并在24小时内收到了研究人员的答复,该研究人员发明了它,并详细解释了我的解释为什么错误以及它为什么起作用。我从安德斯·海斯伯格(Anders Hejlsberg)那里得不到;-)。我一直在Google寻求解决方案,并发现它们都是用C#,VB甚至IronPython编写的,但是在使用F#行业的三年中,只能回忆起一个将解决方案转换为F#并不容易的实例。实际上,我最近将数据序列化程序C#示例从MSDN转换为F#,它的长度缩短了5倍。最后,我们提到了NUnit等工具中的F#支持 已经使用F#中的NUnit了一段时间了。这些是.NET工具,而不是C#工具。
案例研究:我现在的客户不仅使用NUnit进行单元测试,而且他们在NUnit之上的F#中构建了TickSpec,作为SpecFlow for BDD的技术上更好的替代品。作者向我展示了TickSpec只是SpecFlow的很小一部分,并提供了更多功能。此外,一些没有F#经验(而且我相信也没有函数式编程经验)的开发人员已经选择了它,并开始在无关的项目中使用它而没有问题,这恰恰是因为F#+ TickSpec使解决他们的问题变得更加容易。问题。
FWIW,我为我的客户免费提供了F#.NET Journal的站点订阅,许多学习F#的开发人员都对此表示失望。
HTH!