La Real Academia Española define un acrónimo como:
Sigla cuya configuración permite su pronunciación como una palabra; p. ej., ovni: objeto volador no identificado; TIC, tecnologías de la información y la comunicación.
De hecho el nombre más común que se le da a la propia Academia es también un acrónimo: RAE :-)
Los acrónimos son palabras creadas a partir de las iniciales de otras palabras. En la actualidad están por todas partes, y un ámbito en el que proliferan al máximo es en el mundo técnico, donde somos especialmente dados a concretar y simplificar. De hecho, son tan comunes que existe un acrónimo para describir a los acrónimos, el mítico: TLA (Three Letter Acronym), o acrónimo de tres letras, que es el más común. Cuando veas por ahí TLA ya sabes a qué se refiere...
Aunque los hay a cientos, existen unos cuantos que son absolutamente indispensables y que deberíamos conocer si nos dedicamos al mundo del desarrollo de aplicaciones. Sin excusas.
Vamos a ver los más básicos a continuación:
1. GUI
Es la abreviatura de Graphic User Interface o interfaz gráfica de usuario.
Es cualquier artefacto gráfico que permite a los usuarios interaccionar con una aplicación usando iconos, botones, indicadores visuales, etc... en contraste con las interfaces más tradicionales basadas en texto, o las más avanzadas actualmente basadas en la voz o en la interacción mediante movimientos.
Por cierto, se pronuncia "güi", (como en "pingüino", es decir, la "u" no es muda, como en español).
2. WYSIWYG
Este se utiliza para describir cualquier sistema que permite crear algún contenido viendo al mismo tiempo cómo va a quedar cuando esté funcionando. El caso más habitual es un editor de texto enriquecido en el cual, a medida que escribimos, vemos exactamente cómo quedará el resultado final cuando lo vayamos a imprimir o convertir a un formato transportable. Un buen ejemplo sería un editor como Microsoft Word o Google Documents:
pero también pantallas en las que para editar solo hay que tocar elementos y cambiarlos, en las que estamos viendo el resultado al mismo tiempo que lo cambiamos.
Su significado es "What You See is What You Get" ("Lo que ves es lo que obtienes", en español), y se pronuncia "guaysigüij".
3. API
Se refiere a las interfaces de programación de aplicaciones o Application Programming Interfaces. Es cualquier conjunto de funciones y métodos que se exponen por parte de un programador para que lo utilicen otros programadores, bien referenciando directamente una biblioteca o bien exponiéndolo a través de algún protocolo (por ejemplo HTTP para acceder a través de internet), etc...
Una característica importante de una API es que es independiente de la implementación que haya debajo. Es decir, una API es como una caja negra para el programador que la usa, de modo que mientras no cambie la parte expuesta, lo que se haga por debajo y cómo se haga es indiferente.
De este modo, si creamos una API en un lenguaje (por ejemplo Java) y la exponemos a través de HTTP como API REST (otro bonito acrónimo algo más avanzado, que significa Representational State Transfer, no lo veremos hoy), si más adelante cambiamos el modo en que funciona o incluso la escribimos de nuevo desde cero con otro lenguaje de programación diferente, mientras no cambiemos la parte expuesta (o sea, las funciones y sus parámetros y el modo de acceder a éstas), a todos los efectos sigue siendo la misma API para los programadores que la utilicen.
4. IDE
Un Entorno Integrado de Desarrollo o IDE (del inglés Integrated Development Environment) es una aplicación para desarrollar aplicaciones y que va mucho más allá de lo que ofrece un simple editor. Ofrece muchas herramientas avanzadas para ayudarnos en nuestro trabajo, tales como depuradores, diseño visual, análisis de rendimiento, testeo de aplicaciones, herramientas de colaboración, inspectores de objetos y de clases, integración con otras herramientas...
Algunos IDE valen para trabajar en varios lenguajes y otros están enfocados a una plataforma concreta (como Java).
Los más conocidos son Visual Studio, Eclipse, Netbeans o IntelliJ IDEA.
Un IDE será tu mejor amigo en tu trabajo, así que escoge bien uno y aprende a sacarle partido a fondo.
5. SDK
Un SDK es un Kit de Desarrollo de Software (Software Development Kit). Se trata de un conjunto de APIs (ver antes), ejemplos de código y documentación que los fabricantes de software entregan a otros programadores para que puedan desarrollar para alguna plataforma.
Por regla general los SDKs se lanzan para un sistema operativo (Windows, iOS, Android...), una plataforma de desarrollo (como .NET, Java) o una consola de juegos (XBox), por poner ejemplos comunes.
Podríamos pensar en un SDK como el intermediario que pone un fabricante entre sus sistemas y las aplicaciones que crean terceros programadores. Si programas profesionalmente, tarde o temprano te tocará pelearte con alguno.
6. OOP o POO
Este es uno de los pocos acrónimos que se traducen y se usan en su versión en español. Se trata de la Programación Orientada a Objetos (POO) o en inglés Object Oriented Programming (OOP). Es necesario conocer ambos pues se usan habitualmente.
Se refiere a un paradigma de programación en el que el código se crea definiendo "objetos" que simulan objetos reales y su comportamiento e interaccionan con otros objetos.
Por ejemplo, en una aplicación de facturación habría una clase (un objeto patrón) que representaría a las facturas y otra clase que serviría para representar a las diferentes líneas de factura. Al crear una factura se crearía un objeto de tipo Factura a partir de la clase anterior, así como una serie de objetos de tipo LineaFactura para representar cada línea. Para calcular el importe de la factura se llamaría a un método del objeto que la representa (por ejemplo 'CalcularTotal' que se encargaría a su vez de llamar a un método de cada línea que calcularía de manera transparente el importe parcial teniendo en cuenta cantidades, impuestos, etc..., y que se encargaría de hacer la suma de todas ellas para dar el importe total.
La POO se basa en varios principios que todo lenguaje debe cumplir para trabajar con objetos, como son la encapsulación, la herencia y el polimorfismo.
La mayoría de los lenguajes de programación modernos incluyen la POO entre los paradigmas que soportan.
7. SCM o VCS
Ningún programador que se precie debería trabajar sin usar un sistema de control de código fuente o Source Control Management, también conocido por Version Control System (sistema de control de versiones). Verás por ahí que se utilizan indistintamente los dos términos, pero en ambos casos se refieren a lo mismo.
Se trata de un sistema que permite almacenar el código fuente de los programas así como cualquier otro archivo relacionado que utilicemos, y monitoriza y guarda todos los cambios y versiones diferentes de cada archivo que se hayan guardado explícitamente.
Se trata de una herramienta muy potente que es indispensable a la hora de colaborar con otros programadores en un mismo proyecto, pero que es también casi obligatoria aunque trabajemos solos. Gracias a su uso podemos volver a cualquier punto del pasado en nuestras aplicaciones, trazar los cambios hasta dar con aquel que ha hecho que algo falle, trabajar de manera separada en nuevas características sin que influyan en el producto principal hasta que estén terminadas, etc...
Si no dominas al menos uno, ya estás tardando. En cualquier empresa te lo pedirán, y si trabajas en solitario le podrás sacar igual mucho partido.
Los más conocidos son Git, Mercurial y Subversion. Los dos primeros son además sistemas distribuidos, esto quiere decir que es posible trabajar con ellos sin conexión a un repositorio central, y son más flexibles.
Git, creado por Linus Torvalds es sin duda el que se está llevando el gato al agua y el que más se está utilizando en todo el mundo, gracias entre otras cosas al proyecto GitHub, donde todo el mundo tiene el código abierto hoy en día.
8. TDD
Este término se refiere al desarrollo guiado por pruebas o Test Driven Development.
Un desarrollo guiado por pruebas implica testear/probar todo el código que escribes para asegurar que funciona, que cubre todos los casos y que no interfiere con otras partes de la aplicación que en principio puede que no hubieras tenido en cuenta.
Pero TDD va más allá de eso, ya que es una filosofía que implica que los desarrollos comienzan realmente con las pruebas. Es decir, un desarrollo TDD implicaría seguir, más o menos, estos pasos:
- Pensar en la funcionalidad que necesitamos para una función o una clase
- Crear el test que servirá para validar que está haciendo su trabajo, y que contemple todas las casuísticas. ¡Antes de escribir el código!
- Implementar la función o la clase.
- Pasar las pruebas. No damos el desarrollo por terminado hasta que las pase.
Aunque pueda parecer contraproducente seguir este proceso, hay muchos estudios que demuestran que a la larga es más eficiente que el método tradicional, ya que ayuda a diseñar mejor el código, tener en cuenta mejor todos los casos, y tener menos errores. Esto hace que el código sea más robusto y más fácil de mantener, y se ahorra tiempo porque hay menos errores que corregir, aumentando la calidad.
¿Los conocías todos? ¿Alguno básico que eches en falta? Coméntanos más abajo...