{"id":21,"date":"2015-02-17T19:24:39","date_gmt":"2015-02-17T19:24:39","guid":{"rendered":"https:\/\/possibleapp.com\/blog\/?p=21"},"modified":"2015-04-09T19:15:43","modified_gmt":"2015-04-09T19:15:43","slug":"tu-codigo-es-mucho-mas-paja-que-trigo","status":"publish","type":"post","link":"https:\/\/possibleapp.com\/blog\/2015\/02\/tu-codigo-es-mucho-mas-paja-que-trigo\/","title":{"rendered":"Tu c\u00f3digo es mucho m\u00e1s paja que trigo."},"content":{"rendered":"<p style=\"text-align: left;\"><strong>Una investigaci\u00f3n reciente halla que la funcionalidad principal de un programa es encapsulado por s\u00f3lo una peque\u00f1a fracci\u00f3n de su c\u00f3digo.<\/strong><\/p>\n<p style=\"text-align: left;\"><!--more--><\/p>\n<p style=\"text-align: left;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-23\" src=\"https:\/\/possibleapp.com\/blog\/wp-content\/uploads\/2015\/02\/bigstock-Html-Web-Code-76478039-300x200.jpg\" alt=\"bigstock-Html-Web-Code-76478039\" width=\"300\" height=\"200\" srcset=\"https:\/\/possibleapp.com\/blog\/wp-content\/uploads\/2015\/02\/bigstock-Html-Web-Code-76478039-300x200.jpg 300w, https:\/\/possibleapp.com\/blog\/wp-content\/uploads\/2015\/02\/bigstock-Html-Web-Code-76478039.jpg 613w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p style=\"text-align: left;\">\n<p style=\"text-align: left;\">Si eres un desarrollador de software y alguien te pregunta \u00bfqu\u00e9 porcentaje del c\u00f3digo que escribes representa la funcionalidad real frente a la cantidad que est\u00e1 de relleno, lo innecesario o el c\u00f3digo requerido por el lenguaje para que este pueda funcionar? \u00bf95%? \u00bf75%? \u00bf50%? No importa lo has adivinado, es probable que est\u00e9s lejos porque la nueva investigaci\u00f3n ha descubierto que s\u00f3lo el 5% del c\u00f3digo escrito capta la funcionalidad b\u00e1sica que realmente ofrece.\u00a0En un nuevo documento titulado \u00a0<a href=\"http:\/\/arxiv.org\/pdf\/1502.01410v1.pdf\"><em>A Study of \u201cWheat\u201d and \u201cChaff\u201d in Source Code<\/em><\/a> (<em>Un Estudio de \u00abtrigo\u00bb y \u00abpaja\u00bb en el c\u00f3digo fuente<\/em>), los investigadores de la Universidad de California, Davis, Universidad del Sudeste de China, y el University College de Londres han lanzado la teor\u00eda de que, al igual que con los lenguajes naturales, algunos lenguajes y \u00a0probablemente, la mayor\u00eda del c\u00f3digo escrito no es necesario para transmitir lo que en realidad hace.\u00a0Comparando los m\u00e9todos de programaci\u00f3n para tallos de trigo, los autores sostuvieron que algunas partes del c\u00f3digo son el \u00abtrigo\u00bb, que representa el n\u00facleo sem\u00e1ntico de una funci\u00f3n, mientras que todo lo dem\u00e1s es la \u00abpaja\u00bb.\u00a0Los autores afirman que el trigo de una funci\u00f3n puede ser encapsulado por peque\u00f1os conjuntos de palabras clave, que llamaron el \u00absubconjunto distintivo m\u00ednimo\u00bb o MINSET. El MINSET se puede derivar al romper un m\u00e9todo bajo en lexemas (es decir, el c\u00f3digo delimitado por el espacio o puntuaci\u00f3n), desechando lo que no es importante para el comportamiento de la funci\u00f3n y el mapeo de las restantes palabras clave. Esas palabras clave continuaci\u00f3n constituyen el MINSET.\u00a0Para probar su teor\u00eda de que los MINSETs de funciones son, de hecho, un peque\u00f1o porcentaje del c\u00f3digo escrito, en el verano de 2012 los investigadores descargaron 1000 de los proyectos de Java m\u00e1s populares de Apache, Eclipse, GitHub, y SourceForge. Desde los que llegaban a 100 millones de l\u00edneas de c\u00f3digo Java quitando los m\u00e9todos simples (aquellos con menos de 50 tokens). Eso dej\u00f3 a poco menos de 1,9 millones de m\u00e9todos distintos, de los que a continuaci\u00f3n muestrearon aleatoriamente 10.000 y determinaron sus MINSETs. El c\u00f3digo y los datos utilizados en el estudio est\u00e1n disponibles para su descarga desde Bitbucket.\u00a0Estas son sus principales conclusiones:<\/p>\n<p style=\"text-align: left;\">\u00b7\u00a0<strong>Los MINSETS son sorprendentemente peque\u00f1os<\/strong>. El tama\u00f1o medio del MINSET de un m\u00e9todo fue 1.55 palabras clave y el m\u00e1s grande consisti\u00f3 en 6.<\/p>\n<p style=\"text-align: left;\">\u00b7\u00a0<strong>El tama\u00f1o de los MINSET no aument\u00f3 con el tama\u00f1o del m\u00e9todo.<\/strong> Al observar s\u00f3lo a los 1.000 m\u00e9todos m\u00e1s grandes, el promedio y el tama\u00f1o m\u00e1ximo del MINSET en realidad disminuyo a 1, 12 y 4, respectivamente. Esto indica, seg\u00fan los autores, que \u00abLos MINSETs son peque\u00f1os y potencialmente eficaces \u00edndices de informaci\u00f3n \u00fanico, incluso para los m\u00e9todos anormalmente grandes.\u00bb<\/p>\n<p style=\"text-align: left;\">\u00b7 \u00a0<strong>La mayor parte del c\u00f3digo es paja.<\/strong> En promedio, s\u00f3lo el 4,6% de los lexemas \u00fanicos en un m\u00e9todo conforman el MINSET. Es decir, m\u00e1s del 95% del c\u00f3digo es improductivo.\u00a0Un par de puntos importantes a tener en cuenta aqu\u00ed. En primer lugar, el propio MINSET no es ejecutable; es simplemente el subconjunto m\u00e1s peque\u00f1o del c\u00f3digo que caracteriza la funcionalidad b\u00e1sica. Los otros 95% del c\u00f3digo (la paja) se requiere para que funcione, as\u00ed que no es in\u00fatil. En segundo lugar, mientras que este estudio s\u00f3lo observ\u00f3 a c\u00f3digo Java, los autores esperan que estos hallazgos sean v\u00e1lidos para otros lenguajes, especialmente C y C++, debido a las similitudes de los lenguajes.<\/p>\n<p style=\"text-align: left;\">\u00bfCu\u00e1les son las implicaciones de este trabajo? Los investigadores mencionan una serie de posibles aplicaciones de MINSETs:<\/p>\n<p style=\"text-align: left;\">\u00b7\u00a0\u00a0<strong>Mejorar de la b\u00fasqueda de c\u00f3digo<\/strong> \u2013 Los MINSETs podr\u00edan utilizarse para clasificar los resultados de b\u00fasqueda de c\u00f3digo basado en la semejanza con una consulta.<\/p>\n<p style=\"text-align: left;\">\u00b7\u00a0\u00a0<strong>IDEs m\u00e1s inteligentes<\/strong> \u2013 Los IDEs que cuentan con una base de datos indexada de MINSETs podr\u00eda proponer un c\u00f3digo similar, apoyar la finalizaci\u00f3n de c\u00f3digo autom\u00e1tico y acelerar la depuraci\u00f3n.<\/p>\n<p style=\"text-align: left;\">\u00b7\u00a0<strong>Las formas alternativas de programaci\u00f3n<\/strong> \u2013 Los MINSETs podr\u00edan ser utilizados para apoyar la programaci\u00f3n basada en palabras clave, es decir, la creaci\u00f3n de c\u00f3digo utilizable a partir de un peque\u00f1o conjunto de palabras clave.<\/p>\n<p style=\"text-align: left;\"><strong>\u00bfQui\u00e9n sab\u00eda que los programadores y los agricultores ten\u00edan tanto en com\u00fan?<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una investigaci\u00f3n reciente halla que la funcionalidad principal de un programa es encapsulado por s\u00f3lo una peque\u00f1a fracci\u00f3n de su c\u00f3digo.<\/p>\n","protected":false},"author":1,"featured_media":33,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[3],"tags":[],"class_list":["post-21","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-curiosidades"],"_links":{"self":[{"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/posts\/21","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/comments?post=21"}],"version-history":[{"count":8,"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions"}],"predecessor-version":[{"id":89,"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions\/89"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/media\/33"}],"wp:attachment":[{"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/media?parent=21"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/categories?post=21"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/tags?post=21"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}