En el campo de batalla: C y Java

Estos dos lenguajes de programación han logrado acaparar la gran y mayor parte de los programadores de todo el mundo. ¿Pero qué diferencias podríamos denotar entre ellos?

La finalidad de este articulo es definir algunas diferencias, ventajas y desventajas de C y Java, ya que los dos son unos lenguajes que se han tomado casi la totalidad del terreno del ámbito.

En primer lugar, la batalla se produce porque Java es programación orientada a objetos, a diferencia de C que es de programación estructurada. Un punto para Java, ya que la POO «es lo de ahora».

Ya estaríamos con el estilo de programación. Ahora viene lo fuerte, y una de las razones de por qué C es el motivo del vivir de muchos: C es mucho más rápido.

C es un lenguaje rápido y compilado, lo contrario de los que son interpretados. Claro eso sí que al agregar rapidez, agregamos también dificultad en su uso. Y Java es un lenguaje, medio compilado, medio interpretado. A qué me refiero, me refiero a que Java necesita una compilación previa para poder ejecutarse en su intérprete: JVM (Java Virtual Machine: Máquina Virtual de Java).

Y gracias a lo anterior, entramos a otro tema. Java es extremadamente portable, necesita ser escrito solo una vez para correr en cualquier máquina (de ahí su lema: Write once, run everywhere, o sea, Escribe una vez, corre donde sea, o algo así), ya que no es el programa el que se adapta a la arquitectura ni al sistema, sino el intérprete. A su vez, C no permite esto a menos que escribamos en ANSI C (C estándar), cosa que muy poco probable si estamos haciendo un programa con interfaz gráfica o con algo de complejidad.

Otro punto: Java es más seguro. Si te das cuenta, nunca hemos escuchado hablar de virus escrito en Java. Sería estúpido decir aquello porque Java revisa la seguridad en tiempo de compilación. Cualquier indicio de inseguridad (referencias mal hechas, operaciones peligrosas, etc.) en tu programa se traducirá en un error. La potencia de C es la que le da su peligrosidad, el acceso libre a la memoria, y otros factores que lo hacen el lenguaje más potente después de Assembler.

Quizá sea Java un poco menos complicado para los novatos por su no uso de punteros. Aquí entramos en tema de pesadilla para algunos 😉 . Los punteros (o referencias) se deben utilizar con cuidado (en C claro) ya que dan un acceso ilimitado a lo que es la memoria y disco duro del computador. Es por ello la capacidad de crear código malicioso con este lenguaje.

Otra cosa, C es en realidad un lenguaje de bajo nivel (más entendible para la máquina) con instrucciones de alto nivel (más comprensible por humanos), o sea, no muy complicado de aprender para que sea de bajo nivel. En cambio, Java posee pocas instrucciones de bajo nivel, con poco acceso al sistema y menor gestión de memoria que con C, o sea, más fácil pero menos control.

¡AH! Claro, la sintaxis. Obviamente serán distintas unas de otras por el método de programación que utilizan (C=estructurada, JAVA= orientada a objetos) pero aun así haremos una comparación (o review).

Haremos el infaltable «Hola Mundo».

C

Fichero: holamundo.c
#include < stdio.h >
int main(){
printf("Hola mundo");
return 0;
}

Java

Fichero: holamundo.java
public class holamundo{
public static void main(String[] args){
System.out.println("Hola mundo");
}
}

Entonces, podríamos concluir en:

Java: Ventajas:

  • «Escribe una vez, corre por cualquier lado».
  • Seguridad.
  • Robustez.
  • Recolector de basura (elimina referencias en desuso).
  • Quizá facilidad de aprendizaje a los que sepan C++.
  • Soporta distintas codificaciones (caracteres especiales y orientales).

Java: Desventajas:

  • Lenguaje interpretado.
  • Lentitud frente a un programa equivalente en C o C++.
  • Se necesita el intérprete para poder usar tu programa (me daría lata tener que instalar el JRE.
  • Necesitas un compilador pesado y quizá un IDE pesado (opcional)…
  • Si has estado viviendo en el mundo de la programación estructurada, puede que te cueste pasar a la POO.

Por otra parte:

C: Ventajas

  • Rapidez.
  • Potencia.
  • Acceso completo al sistema.
  • Lenguaje de bajo nivel con instrucciones de alto nivel.
  • Sin necesidad de intérpretes por ser compilado.
  • Existen muchos tutoriales y ayudas en Internet por su tiempo y difusión entre los programadores.
  • Mayor control sobre el programa.
  • Además muchos, pero MUCHOS programas que tienen licencia GNU (o sea que puedes descargar los fuentes, editarlos, y modificarlos a tu gusto) están programados en C, incluyendo la práctica totalidad del S.O. Linux.

C: Desventajas:

  • Sin recolector de basura (tú mismo debes cerrar las refencias que no uses más)
  • Más control = Más dificultad
  • Las rutinas de bajo nivel no son portables.

Aquí hemos hecho un review de lo que son estos dos populares lenguajes de programación, pero es cosa tuya cual usarás y cual aprenderás.

7 responses to “En el campo de batalla: C y Java”

  1. daily says :

    hola quiero saver mas sobre las desventajas y ventajas de java en otros lenguajes y en diferencia de poo

  2. carlos says :

    bueno, es verdad que c no es un lenguaje orientado a objetos,pero entonces donde dejamos a c++??
    porque c++ heredo muchas de las carateristias de c y ademas implemento la poo.
    quisiera saber laas venajas desventajas de c++ sobre java.
    yo estoy estudiando c++ y podia decir una ventaja de c++ sobre java y es la construcion de sistemas embebidos.
    saludes.

  3. Rkan says :

    Buena lectura.

  4. yenfri says :

    ANALIZANDO UN POCO MAS Y RECONOCIENDO QUE C ES UN LENGUAJE PELIGROSO,PERO SU EFICIENCIA ES INALCANZABLE,SI NOS DETEMOS A INVESTIGAR UN 80% DE LAS HERRAMIENTAS QUE UTLIZAMOS A DIARIO ESTAN HECHAS EN C O TIENEN ALGO DE C.

  5. Eduardo Medina says :

    Decir que Java es un lenguaje interpretado me parece un poco temerario. Interpretado está, pero a través de un Bytecode pseudocompilado que es interpretado por la máquina virtual, pero a mi cuando me dices lenguaje interpretado pienso en PHP o SQL, que no generan ningún tipo de binario ejecutable.

    Aunque reconozco que C es mucho más potente, yo he elegido Java porque soy un defensor de interoperabilidad entre plataformas y creo que Java ofrece justamente lo que busco, una tecnología totalmente independiente de la plataforma y programando bajo openJDK garantizo la independencia total entre GNU/Linux, Windows y OS X.

  6. ricardo says :

    Muy buena info, estoy en la carrera ing. en sistemas computacionales y actualmente vemos programación en Java, ahora me siento motivado también a aprender el lenguaje C.

  7. manuel jesús retamozo arrue says :

    excelente post, muy claro.
    saludos desde peru.

Deja un comentario