¿Por qué algunas personas odian C #?

  • Es un lenguaje administrado y, por lo tanto, tiene una sobrecarga de rendimiento debido a las características del lenguaje administrado (incluida la reflexión).
  • Es Microsoft y se basa en gran medida en las tecnologías de Microsoft que pueden ser complicadas y desalentadoras cuando se intenta realizar tareas simples.
  • Por razones políticas: durante mucho tiempo, los desarrolladores de código abierto lo temían porque Microsoft podía en cualquier momento reclamar la propiedad de las API. Esto ya no es una razón, ya que Microsoft creó públicamente una “promesa de desarrollador” con vinculación legal en la que dicen que no demandarán a los usuarios de las API y otras cosas (lo digo así porque no estoy seguro exactamente de lo que lanzaron , pero los desarrolladores estaban bastante contentos).
  • Mono, la alternativa de código abierto, no es tan bueno (bastante lento, de hecho) y está poniéndose al día con los desarrolladores de Microsoft .NET Framework.
  • Al igual que con Java, los desarrolladores de C # pueden ser bastante descuidados y crear software sobre-diseñado. La filosofía del lenguaje lo alienta, y he visto demasiados ejemplos para cuestionar esta razón. Por ejemplo, muy pocos programadores de C # piensan en el consumo de memoria.

Puede haber otras razones también. Este fue mi razonamiento hasta que encontré que C # era un lenguaje espléndido y expresivo, y muy productivo también. Todavía no me gusta mucho el marco de trabajo de Microsoft, pero el espacio de nombres del sistema está bastante bien pensado y las extensiones de LINQ también son bastante buenas.

Desarrollador de C # todos los días. Realmente me gusta C #. Pero, puedo pensar en algunas razones por las que a la gente no le gustaría C #.

1) No hay un gran soporte para las bibliotecas científicas de código abierto. Python y Java parecen tener bibliotecas mucho mejores para científicos que C #. Siento que en cualquier momento quiero hacer algo que suene simple, pero tiene cierta complejidad, ya que Python ya tiene una opción lista para usar, mientras que necesito encontrar algo en C #. Como desarrollador web es una ocurrencia extraña, pero surge lo suficiente como para que sea notablemente una debilidad del lenguaje. Sé que hay opciones para portar conjuntos de herramientas usando IronPython / JuggerNET / etc; El no trabajar fácilmente fuera de la caja es mi punto de envidia.

2) No se enseña en la universidad. Este es un problema de huevo y gallina con la razón # 1. Los niños no están saliendo de la universidad con ningún entrenamiento en C # y probablemente no lo estén usando para sus proyectos paralelos porque sus amigos programadores quieren usar PHP, Ruby o Python. Microsoft está tratando de cambiar esto con DreamSpark, pero está años atrás y me imagino que no muchos profesores se están cayendo sobre sí mismos para enseñar .NET. C ++ y Java no son necesariamente lenguajes “geniales” en este momento, pero al menos obtienen algo de amor en el sistema universitario.

3) Una forma muy detallada de manejar solicitudes / respuestas HTTP. Estoy de acuerdo con la forma en que .NET maneja las solicitudes HTTP, pero puede ser muy detallado . Sé que es la forma en que el lenguaje trata filosóficamente con la construcción de una solicitud, pero si la solicitud no necesita hacer nada complicado, hay algo que decir para un idioma que puede golpear rápidamente una expresión básica de CURL y manejar la respuesta. en menos líneas.

La razón número 1 por la que la gente odia C # es porque es una tecnología de MS.
Aparte de eso, es probablemente el lenguaje administrado más sofisticado que existe, muy por delante de Java.

Visual Basic fue uno de los idiomas más populares en el mercado durante mucho tiempo, comenzando desde mucho antes de que fuera comprado por Microsoft. Para su público objetivo, hizo exactamente lo que se necesitaba: se podían crear interfaces gráficas de usuario simples sin saber nada sobre computadoras, y prácticamente no había curva de aprendizaje.

Entonces, un día, Microsoft simplemente decidió que Visual Basic dejaría de existir. Lo que podían hacer, porque poseían el idioma y creaban el único compilador. Después de las protestas masivas de desarrolladores y clientes corporativos, se llegó a un compromiso y se creó un nuevo lenguaje llamado Visual Basic .NET.

Este ciertamente no es el único ejemplo. En varios momentos de su historia, hicieron lo mismo con los TSR de MS-DOS, FoxPro, Access y OS / 2. En los casos en que se encuentra un agujero de seguridad en una biblioteca en particular, a menudo envían una actualización del sistema que solo establece un bit de cierre en toda la DLL, lo que hace que el software heredado no sea operativo incluso si no se basó en esa característica en particular. .

Por supuesto, esto no tiene nada especial que ver con Microsoft; es simplemente una consecuencia de tener estándares de facto propiedad de una empresa en particular. Existirán mientras los costos de apoyarlos estén por debajo de los ingresos que aportan, y luego desaparecerán para siempre, dejando a los clientes con una base de código heredada bajo la lluvia.

En consecuencia, una perspectiva histórica sugeriría que, en el momento en que la amenaza de Java comience a disminuir, es probable que Microsoft desapruebe C # y deje de publicar compiladores, etc. ¿Quién sabe a qué se mudarán después de eso? Ciertamente, no parece ser una opción acertada utilizar un lenguaje de este tipo para un proyecto sin una puesta de sol muy estrecha y específica.

Una cosa que extraño mucho cuando me mudé a C # desde Java es el acceso a la documentación detallada directamente desde IDE. El documento en línea es bastante completo y los ejemplos son realmente útiles, pero sería mejor si pudiéramos acceder a él en un modo fuera de línea (y más rápido).

Soy un desarrollador web autodidacta y recientemente se me pidió que escribiera una aplicación Windows Form con C #, que nunca antes había usado.

Al principio, no me gustaba mucho el lenguaje. Como aprendí a programar en el lenguaje web PHP de alto nivel y ultra indulgente, me irritó mucho el hecho de que tenía que especificar los tipos variables de entradas y salidas de funciones y que muchos Las pequeñas cosas romperían mi programa.

Sin embargo, tres meses después y después de la finalización de mi proyecto, realmente aprendí a apreciar el idioma. Es mucho más flexible de lo que pensaba y los tipos de variables requeridos ayudan a mantener todo en contexto y funcionando cuando los proyectos se vuelven expansivos.

Sin embargo, todavía tengo un par de quejas, que probablemente se deben a mi todavía limitada experiencia con el idioma:

  1. Con las aplicaciones de Windows, es difícil / no está bien documentado sobre cómo sobrescribir la funcionalidad incorporada de los controles.
  2. No soy especialmente aficionado a Visual Studio. (Lo sé, probablemente haya otro IDE que pueda usar, simplemente no lo he investigado).

Mi opinión sobre C # es que gran parte de la estructura del lenguaje es innecesaria. Recodifiqué un poco de VB. Estoy trabajando en C # (con suerte correctamente) como una forma rápida de resaltar lo que percibo como incorrecto en el idioma.

Soportes, más corchetes y punto y coma. No hay suficiente indicación de por qué cualquier estructura está terminando. Anidado If/While/For/Next/End While/End If en VB son simples y fáciles de identificar, y cuando está en la cúspide de Intellisense, evita el anidado “¿Qué?” De Doom.

Las secciones más grandes de código en VB me parecen más limpias debido a la falta de desorden de idiomas.

No odio C # en sí mismo, pero no me gusta para los tipos de programación que hago.

Código VB:

  Si firstrun entonces
	 Dim todayString As String = IO.Path.Combine (Settings.DefPath, "ACQ-Results_" & Now.ToString ("yyMMdd"))
	 Si My.Computer.FileSystem.DirectoryExists (todayString) entonces
		 OpenFile47.InitialDirectory = todayString
	 Más
		 OpenFile47.InitialDirectory = Settings.DefPath
	 Terminara si
 Más
	 OpenFile47.InitialDirectory = lastdirectory
 Terminara si

Código C #:

Observe los corchetes alrededor de tirantes y puntos y comas y llaves que son necesarios debido a si / if / else / else.

  si
 {
	 string todayString = IO.Path.Combine (Settings.DefPath, "ACQ-Results_" + Now.ToString ("yyMMdd"));
	 if (My.Computer.FileSystem.DirectoryExists (todayString))
	 {
		 OpenFile47.InitialDirectory = todayString;
	 }
	 más 
	 {
		 OpenFile47.InitialDirectory = Settings.DefPath;
	 }
 }
 más
 {
	 OpenFile47.InitialDirectory = lastdirectory;
 }

En general, me gusta C # como lenguaje, a pesar de su sintaxis. Lo uso todo el día casi todos los días. Es bastante expresivo y poderoso. Una de las cosas que no me gusta de C # es su falta de herencia de método estático. Originalmente, proveniente de Smalltalk, me parece que tiene que hacer mucha gimnasia para transmitir e implementar algunos conceptos simples que se realizan mejor a través de la herencia de métodos estáticos.

Las cosas que no les gustan no tienen nada que ver con el editor.