¡Compartir es conocimiento!

Si anteriormente hablábamos de los principales lenguajes de programación, tanto de forma global como dentro del ámbito de la ingeniería, en este artículo enfrentaremos en un cara a cara a C y Java, el clásico Madrid – Barcelona de la programación.

La primera diferencia (y la más notable) es el tipo de programación entre un lenguaje y otro. En C escribimos código en lo que llamamos “programación imperativa”,  uno de los paradigmas más usados debido a que se programa de manera que se construye un algoritmo, para que la máquina codifique el procedimiento a realizar con cierto valor para transformarlo o para obtener otro. Parece que eso de los algoritmos no es algo nuevo, como otros se creen…

En Java, el paradigma predominante es, obviamente, la Programación Orientada a Objetos (POO). Este paradigma es el más común y el más extendido en la última década, ya que facilita la programación, acercándola al desarrollador; también se programan algoritmos debido a que el procesado matemático de Java es perfecto para la programación concurrente, es decir, puede ejecutar a la vez varios procedimientos o algoritmos mejorando así la eficiencia del programa. ¿Os imagináis cursar dos ingenierías a la vez de la manera más óptima?

Una pega generalizada en C es la carencia de soporte nativo para la programación multihilo. Esta carencia crea la necesidad de importar bibliotecas externas si queremos realizar un sistema multitarea. Este lenguaje se desarrolló para la implementación de Sistemas Operativos y es diferente a los lenguajes que conocemos; principalmente porque C tiene la sintaxis de un lenguaje de alto nivel, pero permite un control a muy bajo nivel.

tiempo ejecución java vs c programacion lenguajesJava fue desarrollado por Sun y adquirió mucho de C y C++, aunque perdió el control a más bajo nivel. Además, el Java Runtime Enviroment (JRE) permite que un programa en Java sea ejecutado en cualquier máquina sin tener en cuenta la arquitectura del procesador.  Algo así como comparar a un ingeniero del software frente a un ingeniero electrónico (o de hardware), lo que se ve frente VS lo que trabaja.

En C, el punto principal, para bien o para mal, está en el acceso a memoria. Este acceso se realiza mediante punteros que nos permiten gestionar DÓNDE y QUÉ se guarda en la memoria.. Éste método hace que tengamos una gestión personalizada de la memoria, lo que nos puede llevar a generar errores. Eso sí, los programas generados serán muy óptimos. Una de cal por una de arena. Java, al contrario, hace una administración automatizada de la memoria, por lo que el programador no tiene de qué preocuparse en cuanto a cómo gestionarla evitando así posibles errores que con C podríamos cometer al posicionar lo punteros. Este método se llama recolección de basura. Al compilar el código en Java, la JRE gestiona las variables y los objetos, cuándo se usan y dónde, optimizando así la memoria y los tiempos de ejecución.

¿Quién no ha olvidado alguna vez algo de tal asignatura porque no le va a servir más adelante? El día a día de los magis con las matemáticas.

recolector basura lenguaje programacion java

Otra de las características de C es la compilación; el proceso de compilación en C está compuesto de 3 fases:

  • La primera es el preprocesado, que consiste en sustituir todas las declaraciones ‘#include’ por el código real.
  • A continuación, viene la compilación: el compilador genera el código objeto, es decir, en ‘0s’ y ‘1s’.
  • Por último, el enlazado: cuando se crea el ejecutable final; se vinculan el código objeto con las bibliotecas del sistema. Sería equivalente a un curso entero esperando. Voilà, ya tenemos nuestro programa funcionando.

En Java, el código puede ser interpretado o compilado, ambos tienen pegas y beneficios.

Si el código va a ser compilado, se requerirá más tiempo para la compilación, pero posteriormente, las ejecuciones de dicho programa serán más rápidas. Por ende, si el código es interpretado, las ejecuciones serán lentas, pero no perderemos el tiempo en compilar el código. Esto es útil a medida que se desarrolla el código ya que para probarlo no hay necesidad de compilar y probar una y otra vez. Algo así como los parciales antes del final; probamos, pero sabemos que vamos a ir a Enero.

En cuanto a mí, personalmente no puedo decantarme entre uno y otro por que las utilidades que da uno, el otro no me las ofrece y viceversa.

Y vosotros, ¿En qué lenguaje de programación trabajáis? ¿Qué os aporta cada uno y por qué?

¡Compartir es conocimiento!

Manuel Cecilio

Mi nombre es Manuel Cecilio, soy de Sevilla y tengo 21 años. Actualmente curso Ingeniería Informática en la Universidad de Sevilla. Desde que tengo uso de razón, estoy rodeado de tecnología y eso marca mi día a día. Amante del software y del hardware, siempre a la última de la información tecnológica y pendiente de los avances científicos que nos repercuten directamente.

Mis artículos