".NET" no es un idioma. Tal vez sea Python vs. C# o Python/Django vs C#/ASP.NET (o elija cualquier "webwork" que desee; hay muchas, muchas soluciones diferentes para Python y ".NET" y para elegir Django o MVC2 del bate) limitar severamente mejores opciones viables). Como en contra de la Python vs" .NET ': Hay IronPython (Python 'en .NET')
yo consideraría: desarrollador comodidad con un lenguaje y, si son iguales en Python y'. NET ", entonces consideraría los tiempos de respuesta para el desarrollo y elegiría el idioma /" webwork "que minimizara esto (una vez más, no tiene que ser restricciones previas).
Mientras la unidad/integración de pruebas es una necesidad para cualquier proyecto [importante], considero que un lenguaje de tipos estáticos (C#/F #) puede reducir en gran medida el número de "estúpidos errores" relativos a los tipos.
abrir el campo de juego :-)
Editar para hacer comentarios:
idiomas Entonces usted está comparando.
En cuyo caso, C# es un lenguaje tónico estático imperativo muy aburrido con Single-Inheritance/Interface Class-Based OO (pero unos pocos trucos más que Java, que es francamente stone-age). Esto es el mismo tipo básico de OO que Python tiene y excluye el bit estático/dinámico, ambos idiomas están fuertemente tipados (la mecánica es diferente, pero el resultado final es bastante similar en el espectro de idioma). En realidad, python tiene MI, pero parece menos aceptado en python que el uso de la palabra clave 'lambda' y dado que python está tipeado dinámicamente, no hay soporte en tiempo de compilación para determinar contratos de interfaz/tipo (hay, sin embargo, algunos módulos que trata de proporcionar esto).
Si puede aprender/conocer Python, entonces puede aprender/conocer C#. No es un cambio de paradigma. Algunas palabras clave aquí, llaves ahí, necesitan decir de qué tipo te refieres, una biblioteca base diferente ... un entorno diferente (tienes que luchar contra algunos para obtener un REPL, pero es factible en VS.) Cómo les gusta/aprende usarlo es otra historia. Mientras antes llamaba al imperativo de C#, es agradable ver la adición de algunas características "funcionales" como extensiones LINQ/IEnumerables y cierres sin delegados, incluso si la sintaxis básica de C# es muy procesal, una vez más, bastante al igual que python (para-expresiones, funciones anidadas, división de declaración/expresión).
Si bien la nueva 'dinámica' hace difuminar la línea (hay muy pocas veces un buen uso para él - en cerca de todos los mismos lugares uno podría haber tenido que recurrir a la reflexión en las versiones anteriores de C# - esto no es' t cierto, pero el punto es que generalmente es "la manera incorrecta", excepto en los pocos casos en los que simplemente resulta ser "la mejor/única manera"), "var" no. Es decir, el tipo de variable 'var' es conocido en tiempo de compilación y no tiene nada que ver con el tipado dinámico; es todo tipo de inferencia. Algunos lenguajes como F #/SML y Haskell tienen mucha, mucho más poderosa inferencia de tipo eliminando la necesidad de "todas esas declaraciones de tipo feo" (aunque anotar explícitamente los tipos o conjuntos permitidos puede hacer que el intento sea más claro) mientras se preserva el tipado estático.
Personalmente, todo a un lado, yo usaría un lenguaje de tipos estáticos. No digo C# (¡y definitivamente no digo Java!), Pero los lenguajes tipados estáticos pueden empujar los errores de tipo a la parte superior y requieren contratos explícitos por adelantado (esta es una gran, gran ganancia para mí). Si bien te pierdes algunos trucos dinámicos, casi siempre hay una mejor manera de realizar la misma acción en el idioma de destino: solo tienes que pensar en términos de ese idioma y usar un destornillador para un tornillo y un martillo para una uña. P.ej. no espere traer el código de Python confiando en el uso (ab) de local() o global() en C# tal como está.
En el "lado negativo", la mayoría de los lenguajes estáticos (C# aquí) requieren una compilación explícita primero (pero esto no es tan malo ya que hace ensamblajes bonitos) y herramientas como "REPL" no son tomados como ciudadanos de primera clase (es un ciudadano de primera clase en F #/VS2010). Además, si tiene una biblioteca esencial para Python/C# (y no está disponible en el otro idioma), ese puede ser un factor decisivo sobre por qué elegir un idioma sobre el otro.
¿Está desarrollando un sitio web o una aplicación web? Porque creo que las herramientas como GWT son mucho más adecuadas para "aplicaciones". –
Gracias por la sugerencia Matt! Estamos desarrollando una aplicación web con ajax, procesamiento asincrónico, etc. Por ejemplo, los usuarios ingresan algunas configuraciones para poner en cola operaciones intensas computacionalmente (que luego implican consultar las tablas en el DB) y comienzan a correr con los resultados presentados a medida que están disponibles . Hay muchas, muchas páginas diferentes, widgets, etc. Es cierto que no invertimos demasiado tiempo en explorar GWT, ya que es muy similar a lo que tenemos actualmente. En este punto, estamos buscando avanzar y estamos enfocados en Python vs.Net – Zugwalt
".NET" no es un idioma. Tal vez sea Python vs. C# o Python/Django vs C#/ASP.NET (o elija cualquier "webwork" que desee, hay muchas, muchas soluciones diferentes para Python y ".NET") - Hay IronPython [http: //ironpython.net/] (Python "en .NET") –