Java vs C# (Debate/Duda)

Joey

Hola,

Tengo una pequeña lucha interna con la programación. No es algo a lo que me gustaría dedicarme en el futuro, pero sí que creo que en mi sector (telecomunicaciones) está muy bien valorado y que a día de hoy, me falta ampliar conocimientos. Hasta la fecha, en lo que más he trabajado ha sido en C++ y Matlab, pero también conozco C (aunque no lo uso casi), he tocado un poquito de Python y poco más.

Bien... en las últimas entrevistas me acaban pidiendo saber Java o C#. El aquí presente ha trabajado POO con C++, pero no ha tocado ninguno de los lenguajes anteriores. Entonces, visto lo visto me quiero centrar en uno, pero tengo dudas... ¿cuál es más "rentable"? Tengo entendido que son bastante parecidos, entonces, me gustaría que gente que tenga experiencia en ellos me contara un poquito más. :D

Mi intención es este verano ponerme a aprender uno de los dos, así que pros y contras son bien recibidos por aquí. Y por supuesto, si conocéis algún libro ameno (del tipo abarcar un gran proyecto desde 0) para alguno de los lenguajes, soy todo oídos.

Muchas gracias :)

eXtreM3

Si tienes opción de elegir, huye de Java y no dudes en ir a por C#, las ventajas son infinitas.

1 respuesta
Soltrac

Si sabes programar en C++ de verdad (el cual creo que no es tu caso por la pregunta que haces)...Java y C# son como pasarte el modo fácil de un juego.

Mi consejo, se aprende a programar, no se aprenden lenguajes. Pero como se que no me vas a hacer caso, yo llevo 8 años trabajando casi en exclusivo en C# y para mi es un amor.

1 respuesta
Kaiserlau

prueba los dos, el que mas te guste.. lo desechas.

1 respuesta
BLZKZ

yo después de probar ambos, en igualdad de condiciones C#, me gusta más (algo personal). Ahora, java hay curro hasta en la sopa (de c# hay muchisimo, sobre todo asp, pero menos que de java)

1 respuesta
Joey

#3

Soy teleco, tengo base de programación, pero no puedo decir que domino C++ entero. Se abordar cierta complejidad de problemas, pero evidentemente me queda mucho que aprender. La idea es aprender otro tipo de sintaxis y saber reutilizar esos conocimientos en C# o Java. Así que claro que te haré caso jaja, como decía mi profesor: a programar se aprende programando :) Gracias por tu respuesta!

#2 #5

Gracias, ya sois la mayoría de este thread los que preferís C#. La verdad es que pensaba que Java era más querido, pero me estáis convenciendo a echarle el ojo seriamente a C#.

1 respuesta
Lecherito

Java querido? xDDD

Sinceramente no creo que sea tan malo como la gente piensa pero la mala fama le viene de lejos.

HeXaN

#6 Te recomiendo que, a parte de aprender la sintaxis de un lenguaje (lo cual es trivial), te leas el "Object-Oriented Design Heuristics" para saber hacer código de calidad.

1 respuesta
Scottie

#4 por que desechar el que mas te guste? :P

1 respuesta
Kaiserlau

#9 xq la vida es dura

1
B

Yo te recomiendo el libro "La colmena" de Camilo José Cela. Ahora en serio, si quieres pasarte la vida haciendo horas como un cabrón y cobrando lo mínimo con Java o C# triunfarás, pero si quieres cobrar decentemente búscate un lenguaje con un nicho de mercado con demanda y poca oferta.

1 respuesta
NotToBit

#1 Son los dos muy parecidos en lo básico, si sabes programar en uno, vas a saber programar en el otro "a grandes rasgos".
A mi personalmente me gusta más C#, aunque tengo muchísima más experiencia a cuestas en Java. Digamos que es como si Java fuese una versión más simple de C#, con menos opciones y que la verdad trabaja un peor en algunas cosas (como la parametrización). Además, a pesar de que Java tiene un origen anterior, lleva ya unos años llendo bastante por detrás de C# (no metieron funcional hasta java 8, hace unos 2 años).

En C#, por ejemplo, puedes: pasar parámetros por referencia, pasar "parámetros de retorno", usar propiedades, asignar valores por defecto a los parámetros, manejo de desbordamiento (checked y unchecked), uso de delegados (una especie de punteros función, ésto igual java 8 ya lo tiene, no me he peleado con él todavía),...

Luego tiene muchas cosas que es muy muy raro que vayas a usar nunca, como la sobrecarga de operadores, pero bueno, están ahí. Y detalles como la forma que tiene Java de trabajar con clases y métodos parametrizados (hace una comprobación en tiempo de compilación y luego cambia el tipado por Object, por lo qeu no optimiza ese trozo de código), que chirrían un poco.

Al final, sin entrar en detalles de cuál está mejor hecho o mejor optimizado, sólo desde la "sensación" de trabajar con uno u otro, C# me da más herramientas con las que trabajar (algunas bastante útiles) y al cambiar a Java me siento un poco como si me estuviesen obligando a trabajar con una mano atada a la espalda. Por eso yo te recomedaría C#, pero también te digo que al final tampoco es tan grave usar Java.

Salvo que vayas a usar mapeadores de bases de datos relacionales a objetos. Entonces huye de Java. Entity Framework y LinQ son una puta bendición.

2 2 respuestas
Saiko9

es la misma mierda, si sabes c++ ya estas ready.

Joey

#8

No lo conocía, le echaré un ojo, gracias.

#11

Bueno, a priori "no pretendo destacar" como quien dice, si no formarme en otro ámbito en el cual no lo estoy y que veo que en mi terreno lo demandan mucho. No concibo orientar mi carrera a la programación ni mucho menos (no es mi terreno), pero sí, tener conocimientos suficientes para abordar un problema si se me plantea.

Este verano se me presenta difícil en cuanto trabajo del sector, entonces, quiero aprovecharlo para aprender otro lenguaje. Igualmente, soy todo oídos para los lenguajes que me dices :P

#12

Muchas gracias, algo así buscaba. :D Desde luego que cada post que ponéis, me hacéis decidirme más a por C#. De hecho voy a empezar a buscar información para ir recopilandola e intentar hacerme yo mismo un proyecto o algo similar.

Josekron

Con Java tomaron en su día algunas decisiones en favor de mantener la compatibilidad que no gustaron a todo el mundo, es por ello que se puede decir que C# está mejor hecho. Pero vamos, salvo que quieras profundizar (y no se consigue en un verano) las diferencias en lo básico son mínimas.

Si no nos centramos solo en el lenguaje, me quedo con Java y todo su ecosistema de largo. Hay mucho más donde elegir y encontrar un nicho en el que te sientas a gusto.

En cuanto a #1, para un teleco me parece más interesante meterle caña a Python antes que a Java o C#, siempre sin olvidar C++. Casi la totalidad de las ofertas de trabajo con Java/C# es desarrollo web.

cabron

Pues hombre, es que la situación que planteas, dices que quieres estar preparado por si te surge algo, pero es que dependiendo de que en trabajes, te surgirá en C#, en Java, o en otro lenguaje diferente...

C# se usa principalmente para programar con tecnologías de Microsoft, olvídate de todo el humo que te intenten vender con Mono y la migración de .net a linux, hay cosas sí, pero sigue siendo un uso pequeño si lo comparas con el grueso de aplicaciones que se desarrollan con C#, que es todo windows.

Java tiene un uso más extendido y está metido en más cosas, principalmente por que salió antes y por que C# al principio era solo para Windows.

Aunque con las dos cosas vas a encontrar trabajo a patadas, con Java hay más, de todas formas mucho de ese trabajo que hay extra en Java, son aplicaciones empresariales de gestión de datos, que si eres teleco pues probablemente no sea tu objetivo acabar en ese tipo de proyectos.

1 respuesta
Lecherito

#12 Me estás diciendo que pasar "parámetros de retorno" es una ventaja? Lol

1 respuesta
NotToBit

#17 Depende de si me estás diciendo que no sabes diferenciar entre "opciones" y "ventajas".

1 respuesta
zoeshadow

Creo que no estáis teniendo en cuenta una cosa que es casi mas importante que el lenguaje de programación en sí y esa es la cultura alrededor del lenguaje.

Yo trabajo en una empresa que trabajamos con Java principalmente, y ahora estamos en un proyecto que tiene unos servicios hechos en C# y otros en Java, y he de decir que a pesar de que los lenguajes son muy parecidos, el resultado final es radicalmente distinto.

En Java tendemos mucho a hacer sobrearquitectura, además se está empezando a abusar de las anotaciones, se hace demasiado enfasis lo que dicen herramientas como Sonar y un largo etc...

Al final esto produce código jodidamente enrevesado que será muy clean code y todo lo que quieras, pero que es un dolor de mantener....

En cambio en .NET veo mucho más pragmatismo, si funciona, funciona, si para trazar las respuestas de servicios tenemos que añadir dos llamadas a métodos las llamamos en vez de hacer una anotación que lo haga mágicamente pues se hace...

Igual es cosa de la gente con la que me he encontrado y no es así en todos los sitios, pero he de decir que con todos los que he coincidido en uno y otro lenguaje cumplen el patrón.

1 2 respuestas
Lecherito

#18 Es como ir a la armería para comprar un arma para cazar y como opción te dicen que te puedes suicidar, no tiene sentido.

#19 Entonces tendéis a hacer sobrearquitectura, abusar de anotaciones y hacer caso ciego a herramientas como Sonar y es problema del lenguaje?

1 respuesta
zoeshadow

#20 Es problema de la cultura que rodea al lenguaje, es algo que he visto a en varías empresas que trabajan con Java, y que inevitablemente acaba estando ligado al lenguaje en si...

Igual que antes era horrible el desarrollo en Java por los frameworks que existian para el lenguaje, es problema del lenguaje? no.. pero era un problema que tenias SIEMPRE que trabajabas con Java...

1 1 respuesta
Lecherito

#21 Es que me estás hablando como si no tuvieras libertad para hacer las cosas.

Y no nos confundamos, es obvio que C# tiene más cosas que Java, no estoy diciendo lo contrario.

NotToBit

De verdad que parece que siempre que se comenta tranquilamente una preferencia entre Java o C#, o se habla de programación en general, tiene que venir alguien que se aburre a convertirlo en un concurso de medirse las pollas.

#19 Sí que es verdad que últimamente parece que se abusa tanto de las anotaciones que han pasado de ser una comodidad a un incordio (en algunos casos). Con tanto contenedor de IoC algunos proyectos parecen simuladores de orientación a aspectos y hay gente a la que parece que le arden las manos si tiene que usar un fichero de configuración del contenedor. O Android, que parece que se están dedicando a extender el lenguaje a base de anotaciones (y sin parecerlo).

1 respuesta
Josekron

Yo creo que mucha gente tiene una opinión equivocada de Java por culpa de las cárnicas: proyectos legados por donde han pasado miles de personas, Spring y otros frameworks metidos con calzador y dando gracias si al menos usa Java 1.6.

Hoy en día el estándar Java-JavaEE está al mismo nivel o más que las demás alternativas, e incluso no es necesario utilizar Spring. Obviamente hay que diseñar una buena arquitectura antes de ponerse a picar a lo loco porque no somos picacódigos. Si se ha seguido buenas prácticas desde el principio, la mantenibilidad y escalabilidad que proporciona no la tiene ninguna otra alternativa. De hecho si Java destaca en algo es precisamente en esto.

Como dice #16 C# al final equivale a usar tecnologías Microsoft. Con .NET lo están haciendo muy bien pero te sigues teniendo que casar con ellos si o si porque proporcionan las mejores herramientas y estas funcionan mejor con sus sistemas. Yo prefiero la libertad que me proporciona Java y su ecosistema para elegir las herramientas, frameworks, lenguajes, etc con los que me siento más a gusto.

De todas formas creo que el tema se está desviando bastante, no creo que a #1 le interese el desarrollo enfocado a web. Sigo pensando que lo mejor es seguir dándole duro a C++ y como alternativa Python.

1
Lecherito

#23 Jaque mate ateos.

MTX_Anubis

A mi me ecanta como la gente confunde java con la JVM, pero vamos, más allá de esto, decir que java es mantenible y escalable es que no ha tocado otro puto lenguaje en su vida.

La escalabilidad no está asociada al lenguaje y la mantenibilidad, si, con una sola herencia, sin mixins y funciones de primer orden hasta hace bien poquito, estáticos por doquier, mal diseño de jdk y en especial sus collections (ridiculamente sobrediseñado y se pasan unos cuantos principios de la poo por los huevos) y un sistema de concurrencia basado en locks y en compartir estados es mantenible por mis cojones. Que dediques un 30% del código a captura de excepciones y al tratado de nulls es lo mas inteligente que ha habido en el diseño de un lenguaje en la historia. Todos los putos avances que a habido en el lenguaje java en la 1.7, la 1.8 y los que habrá en la 1.9 y 1.10 los van a meter porque ya existen en otros lenguajes de la jvm, pero es que encima lo peor de todo es que lo copian mal. Mirate los futures, optional y demás, mirate los de scala y luego los de java, adivina cuales fueron primero y luego preguntante que clase de mono descerebrado ha copiado esa mierda tan mal.

Así que dime, para que coño programar en algo obsoleto que te obliga a escribir código de forma estúpida y que arrastra unos genericos de mierda (los peores de cualquier lenguaje que los soporta) cuando tienes alternativas en la jvm mucho mejores como kotlin, scala, fantom o ceylon (meto scala ahí porque, aunque despues de 4 años desarrollando en scala me parece absurdamente complejo, sigue siendo mejor que java) y eso ya sin entrar en la jvm que también le estoy cogiendo bastante asco.

Y ya cuando te vas fuera de la jvm tienes tantas alternativas que no sé como coño alguien siquiera sopesa aprender java.

1 2 respuestas
HeXaN

#26 Coño, qué rabia más intensa.

3
eXtreM3

Y así niños, es como se cierra un hilo.

Josekron

#26 Supongo que tu mensaje va por mí ya que he sido el único que ha mencionado esas dos palabras mágicas. Podrías mencionarme para darme por aludido y poder responderte.

Cuando hablé de escalabilidad y mantenibilidad, me refería en todo momento a proyectos web con JavaEE y no a Java como lenguaje, ya que más arriba mencionaron la plataforma de Microsoft. Y cuando hablo de Java y su "ecosistema" creo que también se sobreentiende que me refiero a la JVM con sus alternativas (scala, groovy, etc). No sabía que tenía que ser completamente exacto con mis palabras.

Yo llevo poco más de un año con Scala y se necesitan años de experiencia para dominarlo, como bien sabrás.

Usuarios habituales

  • Josekron
  • eXtreM3
  • Lecherito
  • NotToBit
  • zoeshadow
  • Joey
  • Kaiserlau