Mostrando entradas con la etiqueta índice TIOBE. Mostrar todas las entradas
Mostrando entradas con la etiqueta índice TIOBE. Mostrar todas las entradas

sábado, 19 de octubre de 2013

Java... o cuando la seguridad no determina lo que debemos proteger

Hablando de seguridad, el lenguaje de programación Java (y su correspondiente máquina virtual) ha estado por años en el ojo de la tormenta, con un incremento sustancial en el número de vulnerabilidades reportadas, así como aquellas consideradas de alto riesgo (que reportan un puntaje de 7.0 o mayor, según el sistema CVSS). Bajo este escenario, dos preguntas saltan a la mente de un investigador/especialista de seguridad: (1) es seguro utilizar este lenguaje de programación al desarrollar aplicaciones, especialmente para aquellas que son utilizadas a través de una red o el Internet? (2) es el incremento en vulnerabilidades el resultado del creciente interes de atacantes, debido a la popularidad de Java?

Veamos las estadísticas. Desde 2008, se han encontrado 384 vulnerabilidades al lenguaje Java. En comparación, sólo se reportaron 51 de 2001 a 2007. Aún más preocupante, el número de vulnerabilidades de alto riesgo pasó de 22 (2001 a 2007) a 213 (desde 2008). La situación se ha tornado tan preocupante que US CERT, la entidad de los EEUU encargada de diseminar información sobre problemas de seguridad entre organizaciones no militares, ha recomendado deshabilitar Java en los navegadores web, incluso después de haber instalado la versión más reciente del lenguaje. Y empresas como Apple incluso decidieron deshabilitar Java de forma remota entre todos sus usuarios.

Fuente: cvedetails.com (Octubre 2013)

Las respuestas a las dos preguntas del primer párrafo ciertamente están relacionadas. El incremento en vulnerabilidades reportadas puede atribuirse parcialmente a la creciente popularidad de Java. Y esta situación podría claramente alejar a muchas organizaciones a utilizar el lenguaje, al considerarlo peligroso ...pero la situación es otra.

La popularidad de Java parece estar tan fuerte como nunca. El sitio web langpop.com que estudia diversos sitios relacionados con lenguajes de programación (como portales de anuncios de trabajo para programadores y repositorios de programas/código fuente), coloca a Java como el segundo lenguaje de programación más popular, detras tan sólo del lenguaje C. Curiosamente este último lenguaje también es conocido por sus problemas de seguridad, particularmente por el tema de desbordamiento de pilas o búfers.

El índice TIOBE sobre popularidad de lenguajes de programación, que existe hace más de 30 años y se actualiza mensualmente, también colocó a Java en el segundo lugar en su evaluación de Octubre 2013. De acuerdo a TIOBE, Java sólo ha ocupado las primeras dos posiciones por los últimos 11 años, como se muestra en la figura de abajo.

Fuente: tiobe.com (Octubre, 2013)

En la era del web, redes sociales, miles de millones de usuarios y 'Big Data', Java se ha convertido en un fuerte candidato a la hora de seleccionar un lenguaje de programacion. Su capacidad para producir aplicaciones que cumplan con los requisitos de escalabilidad y rendimiento necesarios en esta era, es difícil de alcanzar con otros lenguajes. La flexibilidad que ofrece por medio de su máquina virtual (JVM) para ejecutar los programas Java en múltiples plataformas y el hecho de que existen versiones código libre de la plataforma Java, hace la decisión aún más sencilla para los programadores a la hora de seleccionar.

Grandes compañías como Google, Facebook, LinkedIn, Twitter y Square, utilizan Java como parte de su estrategia para producir aplicaciones y servicios que les permita crecer y ajustarse a las demandas del creciente mercado que encuentran en Internet. Un reciente artículo de la revista de tecnología Wired, incluso habla de la segunda llegada o advenimiento de Java en la era del web. Aunque esto nos parece un poco exagerado, Java nunca desapareció, si es cierto que el lenguaje está ayudando a que empresas puedan cumplir con los exigentes requisitos de esta era.

Entonces, volviendo al tema de seguridad, que hacer con un lenguaje extremadamente popular y ventajoso pero que se encuentra en el ojo de la tormenta, por sus inherentes problemas de seguridad? La situación con Java es un ejemplo más de las limitaciones con las que contamos los especialistas de seguridad. Es iluso pensar que sólo nosotros debemos definir los requisitos y restricciones sobre las cuales diseñar y construir aplicaciones y sistemas. Somos parte de un conjunto de actores que definen estos requisitos, lo que produce un escenario usualmente complicado y no siempre claro para nuestros objetivos de seguridad. Sin embargo, y es de esperarse, que debemos actuar y ser efectivos bajo este escenario. Porque si algo es claro, es que parte de nuestro trabajo es manejar y asegurar aplicaciones escritas en Java.

sábado, 24 de julio de 2010

Qué lenguaje de programación debo aprender? En julio es Java

Toda persona que trabaja y/o estudia en el área de computación ha evaluado aprender algún lenguaje de programación. Aunque para algunos ha sido fácil la decisión (el proyecto o curso en que trabajabas tomó la decisión por tí), para otros se puede convertir en toda una experiencia religiosa. Algo así como si tuvieras que decidir entre ser cristiano o musulmán (nada malo en escoger uno o el otro, simplemente que hay que escoger). Así que la pregunta es, cuál lenguaje debo escoger si quiero aprender a programar?

La respuesta correcta es cualquiera, pero con una observación importante. Puedes escoger cualquier lenguaje pero debes aprenderlo bien. O sea, a profundidad. Este ha sido uno de los mejores consejos de tecnología que me han dado (gracias Rob!) ya que es muy probable que todo lo que uno quiere o necesita hacer, se puede lograr con cualquiera de los lenguajes más populares. El problema es que no siempre uno aprende todo lo necesario para resolver la mayoría de las tareas que uno enfrenta. Por esta razón es que cuando decidas aprender un lenguaje, explora todas las opciones que te ofrece. En ocasiones esto significa aprender más sobre las librerías o paquetes disponibles o las funciones o estructuras de datos que permite utilizar un lenguaje.

Una buena razón de aprender bien un lenguaje de programación es que varios de los conceptos utilizados (propiedades) al desarrollar el lenguaje, son también utilizados en otros lenguajes. Esto facilita que cuando desees aprender otro lenguaje, la transición sea más sencilla que si no supieras ningún lenguaje. Como ejemplo, tienes los lenguajes orientados a objetos como Java, C++ e incluso lenguajes scripting como Python.

Ok, pero que ocurre si alguien quiere una respuesta más sencilla a la presentada arriba? Que tal si la persona que quiere aprender sobre programacion desea que le indiquen un lenguaje y que no tenga que tomar la decisión religiosa por su cuenta? Entonces tengo dos comentarios. Primero, el lenguaje de programación a aprender dependerá del área en donde trabajes o desees trabajar. Por ejemplo, si eres o deseas trabajar en el área de tecnologías Web, entonces te conviene aprender lenguajes como Java, Javascript, C# o PHP. Si eres más un administrador de sistemas, es posible que debas prestarle atención a lenguajes tipo scripting como Perl o Python.

El segundo comentario es que puedes darle una ojeada al índice de programación TIOBE. Este índice está basado en la popularidad de los distintos lenguajes de programación. Para calcularlo, se utiliza los buscadores Web como Google, MSN y Yahoo! y es una manera de medir la popularidad de los lenguajes. Los autores han publicado mensualmente este índice desde el año 2001. Abajo aparece el resultado para este mes, julio 2010.

Fuente: tiobe.com

Aunque los resultados no necesariamente sorprenderán a muchos (Java, C y C++ son los tres más populares), es interesante ver las tendencias y cambios que varios de estos lenguajes reportan en distintos meses. En la tabla de arriba, la columna 5 indica el índice del lenguaje, seguido por el cambio en comparación a un año atrás y la columna 7 indica la categoría del lenguaje. Un lenguaje categoría A es considerado "mainstream" o de uso popular. La definición completa del índice, así como de las categorías, la puedes encontrar aquí.

Al final, el índice TIOBE tampoco responde a la pregunta original sobre el tipo de lenguaje que uno debe aprender. Pero como buenos ingenieros si provee luces sobre cuán populares pueden ser los lenguajes (de acuerdo a lo que indica solamente el Internet, o la parte de él que revisan los buscadores) y nos da números, lo que nos permite pensar y decidir analíticamente. Y eso le puede dar paz a uno... al menos si eres ingeniero. :)