我的组织目前主要基于Server 2005/2008后端、Java模型/控制器框架和基于ColdFusion的视图交付一个web应用程序。我们决定过渡到一个新的框架,经过内部探索和小型项目之后,选择范围缩小到Python和C#/.NET之间。
我首先要说的是,--我意识到这两种技术都会发挥很大的作用--我正在寻找关键的区别(以及相关的利弊)--这些语言有很多共同之处,而不是很多--我在寻找你对它们的关键区别的看法。
我正在寻找的示例折衷/微分器:
虽然您似乎可以用较少的代码完成更多的任务,并且使用Python更有创意,但是由于.NET更结构化,所以更容易理解和修改其他人编写的代码。
一些可能有用的额外信息:
我们的工程团队规模约为20人,我们以5-7人组成的小组工作,我们经常轮换人员进出。我们编写的代码和我们编写的新代码一样多。
对于python,我们将选择Django路由,而对于.NET,我们将使用MVC2。我们的服务器是运行IIS的windows服务器。
我们喜欢ColdFusion的一些东西包括,它非常容易处理查询,并且我们可以“热部署”修复到我们的网络服务器,而不必重新启动它们或打断任何人在它们上。
我读过涉及这两种语言的其他一些‘ve线程,发现它们非常有用,但我想直接将Python直接与.Net对立起来。提前感谢你让我为这个难题吸取你的经验!
发布于 2010-08-06 02:41:46
".NET“不是一种语言。也许是Pythonvs.C#或Python对C#/ASP.NET (或者选择任何您想要的"webwork“;Python和".NET”都有很多不同的解决方案,选择bat的Django或MVC2可能会严重限制更好的可行选项)。作为Python .“.NET”的对立面:有IronPython (.NET中的Python)
我会考虑:开发人员对一种语言感到满意,如果它们在Python和".NET“中相等,那么我将考虑开发的周转时间,并选择将其最小化的语言/”webwork“(同样,它不必是以前的约束)。
虽然单元/集成测试对于任何大型项目来说都是必须的,但我发现静态类型语言(C#/F#)可以大大减少与类型相关的“愚蠢错误”的数量。
开放竞争环境:-)
评论:编辑:
那你只是在比较语言。
在这种情况下,C#是一种非常无聊的命令式静态类型化语言,具有基于单继承/接口类的面向对象(但是比Java更巧妙的技巧,后者完全是石器时代)。这是Python所具有的基本OO类型,排除了静态/动态位,这两种语言都是强类型的(机制不同,但最终结果在语言谱中非常相似)。实际上,python有MI,但在python中使用'lambda‘关键字似乎不那么被接受,而且由于python是动态键入的,因此没有编译时支持来确定接口/类型契约(但是,有些模块试图提供这种支持)。
--如果你能学习/知道Python,那么你就可以学习/知道C#。--这不是一个范式的转变。这里的一些关键词,大括号,需要说明你指的是哪种类型,一个不同的基库.不同的环境(为了获得REPL,您必须与一些人斗争,但在VS中是可行的)。开发人员如何喜欢/学习/使用它则是另一回事了。虽然我以前确实调用过C#命令,但很高兴看到添加了一些“类似于函数”的特性,如LINQ/IEnumerable扩展和闭包--没有委托,即使基本的C#语法是非常过程的--再一次,类似于python (for-表达式、嵌套函数、语句/表达式划分)。
虽然新的'dynamic‘确实模糊了这条线(在几乎所有相同的地方,人们可能不得不回到以前的C#版本中,但这并不是真的,但关键是它通常是“错误的方式”,除非它恰好是“最好的/唯一的方式”),而'var’则不是这样。也就是说,“var”变量的类型是在编译时已知的,与动态类型无关;它都是类型推断。有些语言,如F#/SML和Haskell,有更强大得多的类型推断,消除了对“所有那些丑陋类型声明”的需求(尽管显式注释允许的类型或类型集可以使意图更加明确),同时保留静态类型。
就我个人而言,除了其他事情之外,我还会使用静态类型的语言。我不是说C# (我肯定也不是说!),但是静态类型化语言可以将类型错误推到顶端,并需要预先明确的契约(这对我来说是一个巨大的胜利)。虽然你确实错过了一些巧妙的动态技巧,但在目标语言中,几乎总是有一个更好的方法来执行同样的动作--你只需要用这种语言来思考,用螺丝刀做螺丝钉,用锤子做钉子。例如,不要指望将依赖于本地()或全局()的(Ab)使用的Python代码按原样引入C#。
在“反面”方面,大多数静态类型化语言(这里的C#)需要一个显式的编译优先(但这并不糟糕,因为它可以生成漂亮的程序集),并且像"REPL“这样的工具不被视为一流公民(在F#/ is 2010中它是头等公民)。另外,如果您有一个Python/C#的基本库(它在另一种语言中不可用),那么这可能是决定为什么选择一种语言而不是另一种语言的一个因素。
发布于 2013-05-22 23:04:22
关于这一点,我在Quora上写了一个非常全面的答案:Python与C#相比如何?
TL;DR
发布于 2014-02-27 17:57:22
我还建议,在进行这些操作之前,我们必须比较运行时,而不是局限于语言特性。Python通过解释器CPython运行,其中C#在默认实现中运行在CLR上。
多任务在任何大型项目中都是非常重要的;.NET可以通过线程轻松地处理这一问题。它还可以从IIS (ASP.NET)中的工作进程中获益。CPython不提供真正的线程处理功能,因为GIL.是每个线程在执行任何代码之前必须获得的锁,对于真正的多任务处理,您必须使用多个进程。
当我们在单工作进程上的IIS上托管ASP.NET应用程序时,ASP.NET仍然可以利用线程在不同的核上同时服务多个web请求,其中CPython依赖于多个工作进程来实现不同核上的并行计算。
所有这些都引出了一个大问题,我们将如何在windows上托管Python/Django应用程序。我们都知道,windows上的分叉过程比Linux要昂贵得多。因此,理想的情况是托管Python/Django应用程序;最好的环境应该是Linux,而不是windows。
如果您选择Python,开发和托管Python的合适环境是Linux...and (如果您像我一样来自windows ),选择Python将引入Linux的新的学习曲线,因为well...although现在并不难。
https://stackoverflow.com/questions/3420594
复制相似问题