我的组织目前提供的web应用程序主要基于SQL Server 2005/2008后端、Java模型/控制器框架和基于ColdFusion的视图.在内部探索和小型项目将 Select 范围缩小到Python和C#/之间之后,我们决定转换到一个更新的框架.网

首先,我要说的是,这些语言有很多共同点,但也有很多不同之处——我希望你们能理解它们的主要差异.

Example tradeoff/differentiator I am looking for:

虽然使用Python似乎可以用更少的代码完成更多工作,并且更具创造性,但由于.NET更具 struct 化,因此可能更容易理解和修改其他人编写的代码.

Some extra information that may be useful:

我们的工程团队大约有20人,我们以5-7人的小团队工作,我们经常轮换人员进出.我们处理别人编写的代码和编写新代码一样多.

对于Python,我们将采用Django路由,而对于.NET,我们将采用MVC2.我们的服务器是运行IIS的Windows服务器.

我们喜欢ColdFusion的一些地方包括它非常容易处理查询,而且我们可以将修复程序"热部署"到我们的Web服务器上,而不必重启它们或中断任何人使用它们.


我已经阅读了涉及这两种语言的其他一些X与Y线程,发现它们非常有帮助,但我想让Python直接与.Net正面交锋.提前感谢你让我利用你的经验来回答这个难题!

推荐答案

".NET"不是一种语言.也许是Python对C#或Python/Django对C#/ASP.NET(或者 Select 任何你想要的"webwork";Python和".NET"都有很多不同的解决方案, Select bat的Django或MVC2可能会严重限制更好的可行选项).作为Python与".NET"的对比:有IronPython个(Python"in.NET")

我会考虑:Developer comfort使用一种语言,如果它们在Python和".NET"中相等,那么我会考虑开发周转时间,并 Select 将这一点最小化的语言/"网络工作"(同样,它不需要是以前的限制).

虽然单元/集成测试对于任何[大型]项目都是必须的,但我发现statically typed language(C#/F#)可以减少与类型相关的"愚蠢错误"的数量.

开放竞争环境:-)

Edit for comment:

那么你只是在比较语言.

在这种情况下,C#是一种非常枯燥的命令式静态类型语言,具有基于单一继承/接口类的OO(但有一些比Java更巧妙的技巧,Java只是一个彻头彻尾的石器时代).这是the same basic type of OO as Python has,不包括静态/动态位both languages are strongly typed(机制不同,但最终结果在语言谱中非常相似).实际上,python有MI,但在python中,使用'lambda'关键字似乎不太被接受,而且由于python是动态类型化的,因此没有编译时支持确定接口/类型契约(然而,有些模块试图提供这种功能).

这不是范式的转变.这里的一些关键字,那里的大括号,需要说明你指的是什么类型,那里是一个不同的基库……不同的环境(您必须进行一些斗争才能获得REPL,但这在VS中是可行的.)开发人员如何喜欢/学习/使用它则是另一回事.虽然我以前确实调用了C#命令性,但是很高兴看到添加了一些"类似函数"的特性,比如LINQ/IEnumerable扩展和不带委托的闭包,即使基本的C#语法非常过程化,也很像python(for表达式、嵌套函数、语句/表达式分割).

虽然新的"动态"确实模糊了界限(它很少有很好的用处--在以前的C#版本中可能不得不退回到反射的几乎所有相同的地方--这不是真的,但问题是它通常是"错误的方式",除非在少数情况下恰好是"最好的/唯一的方式"),"var"不是这样的.也就是说,"var"变量的类型是known at compile-timehas nothing to do with dynamic typing;它都是类型推断.一些语言,如F#/sml和haskell,在保留静电类型的同时,拥有强大得多的类型推断,消除了"所有那些难看的类型声明"的需要(尽管显式注释允许的类型或类型集可以使意图更清晰).

就我个人而言,everything else aside,我会使用静态类型的语言.我说的不是C#(我绝对不是说Java!),而是statically typed languages can push type errors to the top and require up-front explicit contracts(这对我来说是一个很大的胜利).虽然你确实错过了一些巧妙的动态技巧,但几乎总是有更好的方法来用目标语言执行同样的动作--你只需从目标语言的Angular 考虑,用螺丝刀装螺丝,用锤子装钉子.例如,不要期望将依赖于(Ab)使用local()或global()的Python代码原样带入C#.

"不利的一面"是,大多数静态类型语言(这里是C#)都需要显式编译优先(但这并不是很糟糕,因为它可以制作漂亮的程序集),而且像"REPL"这样的工具不会被视为一等公民(它在F#/VS2010中是一等公民).此外,如果您有一个适用于Python/C#的必需库(并且不支持另一种语言),这可能是为什么 Select 一种语言而不是另一种语言的决定性因素.

Django相关问答推荐

Django ORM Groupby

Django OneToOneFieldto抽象对象

如何在Django表单中传递self.请求数据?

django 无法识别实现自定义后端

使用 Pytest 在 Django 中编写测试用例时如何加载特定目录中的所有固定装置

如何根据反向外键相关模型的字段过滤 QuerySet?

Django删除查询集的最后五个以外的所有内容

django - 如何在验证之前处理/清理字段

jinja2模板引擎中的这个-是做什么的?

带有 Django 和 Python 的 Atlassian Bamboo - 可能吗?

django Datefield 到 Unix 时间戳

如何在 Django 中执行批量插入?

PyCharm 代码判断提示找不到模板文件,如何解决?

Django 发送邮箱

django - 使用 get_or_create 自动创建用户时设置用户权限

'function' 对象没有属性 'as_view'

访问 django 管理模板中的对象

django sql 查询如何使用不区分大小写的同时包含?

Django中reverse()和reverse_lazy()的区别

Django 将多个模型传递给一个模板