个人Silverlight项目选用F#还是C#?

3
我将要开始为我所在的大学学生组织开发一个丰富的互联网应用程序项目。我将是唯一的程序员,使用哪些技术完全由我决定。我已经决定选择Silverlight,但我不确定是否要使用C#还是F#。以下是我考虑的一些问题:
C#: - 我已经知道并且已经在工作中广泛使用了Silverlight。我没有F#和很少的通用FP经验。 - 有些人说面向对象编程范式对于复杂状态UI更有效。 - 维护:我还要在学校待三年,但是如果这个应用程序仍然在使用,他们可能会更容易地找到其他人来维护它,如果我使用更常见的语言。 - 在“现实世界”中,C#经验可能更有价值。
F#: - 主要原因是我想学习新的东西。函数式编程语言似乎非常酷(我经常使用C#的FP功能,并认为它们是C#3.0最大的改进)。如果我使用F#,我认为我会更有乐趣,但是我是否过分乐观地认为时间和努力成本可能不会超过好处了呢?

“维护”这个要点听起来最多只是“乐观”的描述……一个学生项目能够存活超过三年并需要维护者的频率有多高呢?我认为这不应该是你最初考虑的标准之一。如果两年后,这个应用程序仍然运行良好,那么我会开始考虑维护的交接,但现在还不需要。 - Brian
@Brian 这个应用程序将帮助计划和管理从1950年代以来每年都发生的活动。我认为假设它在未来三年仍然会被使用是合理的。 - Brennan Vincent
我会做的,但只有时间能证明。 :) - Brian
“假设”可能是使用错误的词。我认为提前准备好考虑到三年后它仍然有可能被使用是不过分的。你说得对,是否属实只能时间来证明 :) - Brennan Vincent
6个回答

11

我认为,当你是学生时,应该尽可能地涉猎多个领域。

你接触的语言越多,就越能理解在某种特定语言中做事情的"最佳"方法。

至于在"实际工作中",经验更有价值这一点。就我个人而言,只有在考虑潜在候选人时才会真正考虑到商业经验。在工作和获得报酬时使用某种语言的经验与在学习/研究中使用该语言的经验是非常不同的。你在学习中所做的事情是为了获得技能和知识,而你在商业环境中所做的事情则是让你在解决现实生活中的问题方面获得经验。

底线是...趁你还能玩耍的时候去尝试新鲜事物吧!


1
这需要更多的强调:在你还能的时候,玩一下酷炫的东西吧! - sbk
谢谢 - 你们已经说服我选择 F# :) - Brennan Vincent

4
因为您希望创建一些有用的东西,超越您作为维护者的任期,我建议你使用C#来写大部分代码。如果您想要尝试新技术,可以将不直接与UI交互的、定义清晰的组件剥离出来,并在一个单独的F#程序集中编写。
过去我曾经用类似的方式开源过一个项目。我的基本UI逻辑(在这种情况下是M-V-VM的V-VM部分)用C#编写,因为它非常适合WPF技术。然后,我将Model本身的某些面向功能的组件打包成一个独立的F#程序集进行编写,只是为了对语言有一些有限的接触。
这并不是一个全身投入学习新技术的方法,所以我可能没有像预期的那样学到更多知识。但如果只是用F#完成整个项目,我也没有学到如何友好地将F#功能暴露给更广泛的 .Net世界。
无论如何,在这种情况下,关键是让您享受自己所做的事情,玩得愉快。 :)

3

您可以制作F#业务逻辑项目(dll)。

然后在C#中创建用户界面。在用户界面项目中,您可以添加对F#库的引用。

一般情况下,这是一个很好的解决方案,特别是在使用Silverlight时:F#的强大之处在于(函数式)编程,但目前C#将拥有更好的工具支持。


1

我知道这不在你的列表中,但如果你有兴趣学习新东西,你可以考虑GWT - 你用Java编写客户端(从C#转过来应该很容易),然后编译器将客户端转换为JavaScript。它应该比Silverlight更具跨平台兼容性,而且它是技术融合的一个有趣例子(CSS、JavaScript和Java在不久的将来都不会消失)。


1
我点赞了你的回答,因为这是一个值得考虑的很酷的事情,尽管我可能会继续使用Silverlight。我宁愿积累更多的Silverlight经验,而不是学习一个全新框架的怪癖和不一致性,我认为这比学习一门新语言 less 有趣。 - Brennan Vincent
好的。虽然现在不需要,但将来可以考虑一下——特别是当我开始使用“本地接口”(使用内联JavaScript支持Java对象,这些对象又转换为JavaScript)时,它真的改变了我对编程的看法。此外,函数式语言让我头疼。 :) - Curtis
1
使用 WebSharper 编写 Web 应用程序也有类似的方法,它是基于 F# 的框架,可以从 F# 代码生成 Javascript/Html 等。(http://www.intellifactory.com/products/wsp/Samples.aspx) - Mark H
1
Silverlight 是一种技术,F# 是一种语言。JavaScript 是另一种语言。像 jQuery 这样的 JavaScript 客户端库有很多优秀的选择。使用 JavaScript 和好的库,你可以制作出几乎和 Silverlight 一样丰富的客户端。通常最好不要使用从一种语言转换到另一种语言的转换工具(因为你会错过原始语言特定的功能,而且原始语言通常是为了某个目的而设计的)。如果 Silverlight 是一个选项,我认为这是一个不错的选择。 - Tuomas Hietanen
@Tuomas - WebSharper已经包含了像jQuery和YUI这样的库绑定。您可以使用几乎所有JavaScript的功能,但实现起来更简单。为了获得巨大的生产力提升,可以牺牲“最佳实践”,并且还有许多其他优点 - 例如静态类型检查,如果您编写纯JS,则无法使用。 - Mark H
1
我可以推荐一段关于Javascript的David Crockford视频... 其中一个链接在这里:http://live.visitmix.com/MIX10/Sessions/EX39 - Tuomas Hietanen

1

我刚在伦敦F#用户组会议上做了一个关于使用F#编程反应式Silverlight应用程序的演讲。演讲录像(和示例)在这里可用, 所以你可以看一下。

以下是你可以考虑的几个要点:

  • 我认为F#有一些非常好的特性,使得编写这种类型的应用程序比C#更加优雅(例如,你可以将程序很好地建模为状态机,并直接在代码中进行编码)。

  • F#仍然相对较新,但我相信,在三年后找到熟悉F#的人会比今天容易得多(而且找到对学习新事物感兴趣的年轻学生应该更容易 :-))。

  • 我惊讶地发现,在伦敦地区已经有相当大的需求寻找优秀的F#程序员。这在不同的地方可能会有所不同,但我认为F#正在成为某些工作的“必备”技能。


0
我假设这将在内部网络环境中使用。否则,由于市场渗透率,我会质疑Silverlight的选择是否真的是最佳选择。 我想提出的第二点是,对于大多数Web开发人员来说,真正关键的技能之一是Javascript。(现在,这将是带有类似JQuery的库来操作DOM,简化AJAX等的Javascript。)除非应用程序特别复杂,否则考虑以DHTML + Javascript作为起点,并且只有在它证明太过于复杂时才考虑其他技术。 然而,如果您决定走Silverlight路线,那么C#无疑是最有可能得到支持的语言。如果您还在学习,那么它也是具有最佳文档的路线。F#有一些优秀的文档,但不幸的是远不及C#的文档丰富。 您简要提到了时间和成本承诺。除非您对函数式编程非常熟悉,否则由于不熟悉和参考文献数量的原因,F#可能需要更长时间。 虽然掌握多种编程语言的知识无疑是好的,但对大多数雇主来说,更有价值的是对他们所选择的语言有坚实的理解-因此过度多样化可能会错过这一点。当寻求学习不熟悉的编程语言时,从解决Project Euler问题之类的事情开始可能是更好的起点,而不是直接用新语言进行重大项目。如果您从C#开始,可以创建一个F#项目,该项目实现了更适合其重点的函数,并从C#中引用它,以在不自动投入大量额外时间的情况下尝试其水域。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接