Zug*_*alt 55 .net python sql-server django asp.net-mvc-2
我的组织目前主要基于SQL Server 2005/2008后端,Java模型/控制器框架和基于ColdFusion的视图提供Web应用程序.我们决定转换到一个更新的框架,在内部探索和迷你项目缩小了Python和C#/ .NET之间的选择之后.
首先我要说的是,我意识到这两种技术都会很有效,并且正在寻找关键的差异化因素(以及相关的优缺点) 这些语言有很多共同之处,而且很多都没有 - 我正在寻找你的需求关于他们的关键差异.
示例权衡/差异化我正在寻找:
虽然看起来你可以用更少的代码完成更多的工作,并且在Python中更具创造性,但由于.NET结构更加结构化,因此接管其他人所写的代码可能更容易理解和修改.
一些可能有用的额外信息:
我们的工程团队大约有20个,我们在5-7个小团队中工作,我们经常轮流进出人员.我们处理代码,其他人写的代码和编写新代码一样多.
使用python,我们将使用Django路由,使用.NET,我们将使用MVC2.我们的服务器是运行IIS的Windows服务器.
我们喜欢ColdFusion的一些内容包括它非常容易使用查询,我们可以"修改"热修复到我们的Web服务器,而无需重新启动或中断任何人.
我已经阅读了涉及这两种语言的其他一些X和Y线程并发现它们非常有用,但是想直接将Python与.Net直接对抗.在此先感谢您让我体验这个难题!
小智 42
".NET"不是一种语言.也许它是Python vs. C#或Python/Django vs C#/ ASP.NET(或者选择你想要的任何"webwork"; Python和".NET"有很多很多不同的解决方案,并且可以选择蝙蝠的Django或MVC2严重限制更好的可行选择).作为Python与".NET"的对立:有IronPython(Python中的".NET")
我会考虑:开发人员对语言的熟悉,如果它们在Python和".NET"中相同,那么我会考虑开发的周转时间并选择最小化这种语言/"webwork"(再次,它不需要是先前的约束).
虽然单元/集成测试是任何[大型]项目必须的,但我发现静态类型语言(C#/ F#)可以大大减少与类型相关的"愚蠢错误".
打开比赛场地:-)
编辑评论:
然后你只是比较语言.
在这种情况下,C#是一种非常无聊的命令式静态类型语言,具有基于单继承/接口类的OO(但是比Java更简洁一些,这只是彻头彻尾的石器时代).这与Python具有相同的基本类型的OO并且不包括静态/动态位,两种语言都是强类型的(机制是不同的,但最终结果在语言频谱中非常相似).实际上,python有MI,但是在python中似乎不太接受'lambda'关键字的使用,并且因为python是动态类型的,所以没有编译时支持来确定接口/类型契约(但是,有一些模块,试着提供这个).
如果您可以学习/了解Python,那么您可以学习/了解C#.这不是一种范式转变.这里的一些关键词,括号那里,需要说明你的意思是什么类型,不同的基础库......不同的环境(你必须争取一些才能到达REPL,但它在VS中是可行的.)开发人员如何/学习/使用它是另一个故事.虽然之前我确实调用了C#命令,但很高兴看到添加一些"类似功能"的功能,例如LINQ/IEnumerable扩展和闭包 - 无代理,即使基本的C#语法非常程序化 - 再次,漂亮很像python(for-expressions,嵌套函数,语句/表达式除).
虽然新的"动态"确实模糊了这条线(很少有一个很好的用途 - 在几乎所有相同的地方,人们可能不得不回到之前的C#版本的反射 - 这不是真的,但是关键是它通常是"错误的方式",除了在少数情况下恰好恰好是"最好/唯一的方式"),'var'不是.也就是说,"VAR"变量的类型是在编译时已知的和无关与动态类型 ; 这是所有类型推断.像F#/ SML和Haskell这样的语言有更多,更强大的类型推断消除了对"所有那些丑陋的类型声明"的需要(尽管显式地注释允许的类型或类型集可以使意图更清晰),同时保留静态类型.
就个人而言,除了其他一切,我会使用静态类型的语言.我不是说C#(我绝对不是说Java!),但是静态类型的语言可以将类型错误推到顶部并需要预先明确的合同(这对我来说是一个巨大的,巨大的胜利).虽然你确实错过了一些简洁的动态技巧,但几乎总有一种更好的方法可以用目标语言执行相同的操作 - 你只需要考虑那种语言并使用螺丝刀拧紧螺丝和锤子钉子.例如,不要期望将Python代码依赖于(ab)使用local()或global()到C#as-is.
在"低端",大多数静态类型语言(这里是C#)需要一个显式的编译优先(但这并不是因为它制作漂亮的程序集)并且像"REPL"这样的工具不是第一个 - 班级公民(它是F#/ VS2010中的一等公民).此外,如果您有一个Python/C#的基本库(并且它不能用其他语言提供),那么这可能是决定为什么选择一种语言而不是另一种语言的决定性因素.
Ale*_*nin 30
我在Quora上写了一个非常全面的答案:Python与C#相比如何?
TL; DR
答案很大,但(希望)非常全面.我在C#/ .NET上编程了将近10年,所以我知道它非常好.我现在在Quora上用Python编程约7个月,所以我希望我知道它很好.
Python是以下方面的赢家:易学,跨平台开发,开源库的可用性
- C#是赢家:标准库,语言功能,开发过程和工具,性能,语言演变速度
- 大致均匀:语法(Python在可读性方面更好,C#具有更一致的语法),采用.
我还建议我们必须比较运行时而不是限制语言功能才能进行此类操作.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 ......如果你像我一样来自windows,选择Python会引入新的Linux学习曲线......虽然现在不是很难...
| 归档时间: |
|
| 查看次数: |
82739 次 |
| 最近记录: |