Sí, pero ten en cuenta que una vez que lo aprendas, te darás cuenta de que otros lenguajes carecen de tantas características inherentes a C #, y que C # no es ampliamente aceptado en todas partes, te sentirás frustrado cuando tengas que cambiar. Por ejemplo:
Async / Await: la programación reactiva está integrada en C #, sigue siendo un concepto novedoso para los desarrolladores de Java / C ++ / Objective-C / Swift. Construir un sistema completo alrededor de async / wait es mucho más ágil que, por ejemplo, en Java actualmente.
Variables implícitas: otros lenguajes JVM lo han recogido (Kotlin / Scala / Groovy) y C ++ 11, pero Java sigue siendo terco.
- ¿Cuál es el procedimiento real para desarrollar una aplicación de Android?
- ¿Cómo construyo una aplicación de banca móvil (especificaciones técnicas e información para obtener del banco)? ¿Cuáles son las especificaciones técnicas o la documentación de dicha aplicación? ¿Puedo hacerlo con RoR?
- ¿Cuál es la mejor aplicación móvil para administrar clientes potenciales del negocio del automóvil?
- ¿Qué tan difícil y costoso sería tomar un juego de computadora de los 90 y hacerlo compatible como una aplicación móvil?
- ¿Debería preocuparme que las palabras / temas inusuales en las conversaciones que tengo a través de varias aplicaciones (por ejemplo, WhatsApp) y cerca de mi teléfono (incluido Siri) se correlacionen extrañamente con anuncios nunca antes vistos que aparecen en otras aplicaciones telefónicas?
Genéricos, por ejemplo:
interfaz pública IMergeOperations
{
Actualización de tareas (tecla T);
Insertar tarea (tecla T);
Tarea Eliminar (tecla T);
}
donde T puede ser un modelo ORM (Entity Framework). Los protocolos rápidos no son tan robustos como C #, los javas están bien, pero solo se aplican en tiempo de compilación. Sin embargo, las plantillas de C ++ son posiblemente más poderosas.
Entity Framework: no he encontrado otro ORM tan poderoso. Aunque SQLAlchemy de Python está cerca (pero el problema con Python es la falta de bondad fuertemente tipada y compilada estáticamente).
Técnicas MVVM: sí, esto es particularmente doloroso. Una vez que se da cuenta de la belleza de crear potentes aplicaciones MVVM en XAML con modelos de vista, modelos y servicios inyectados de dependencia, tener que trabajar con Interface Builder y StoryBoard de Apple y tratar con todo su sistema de salida es un paso atrás. El xml de Google es un poco menos doloroso, pero nada superará la experiencia XAML.
LINQ: Java 8 tiene lambdas, pero las versiones anteriores de Java son dolorosas para los desarrolladores de C # bien versados. Las lambdas de C ++ 11 carecen de la naturaleza elegante de C #, así como de Python. Ruby está bien, pero LINQ se basa en la sintaxis enumerable de Ruby. Swift está ahí, pero falta Objective-C.
Principios de diseño SÓLIDOS: inyección de dependencia … verificación (los constructores para sus clases toman interfaces para una prueba de unidad fácil). Principio de segregación de interfaz … compruebe (¡rompa las interfaces enormes!). En, digamos, JavaScript, es difícil descifrar el principio de segregación de la interfaz (razón por la cual TypeScript es tan sexy). En una nota al margen, Angular 2 se está desarrollando en TypeScript por una razón, y TypeScript es extremadamente similar a C #.
Dicho esto, me he mudado a Java durante los últimos dos años, primero peleando con Java 8 durante un año antes de descubrir y enamorarme de Kotlin. El principal problema con C # ahora es que todavía está fuertemente vinculado a Windows. Lo están moviendo más para que sea una plataforma abierta de tipo Java (de código abierto, incluido Xamarin para desarrollo móvil), pero todavía hay mucho camino por recorrer.