Revista de la Facultad de Ingenierías y Tecnologías de la Información y Comunicación. Año 3, Volumen 2, Número 6, Julio–Diciembre2019Tecnología Vital Julio– Diciembre 201945Keywords: Design Patterns, Design Patterns In Costa Rica, Creational patterns, structural patterns, patterns of behavior. I.INTRODUCCIÓN Un patrón de diseño se puede definir como un boceto, base o esqueleto que se utiliza para resolver problemas comunes o recurrentes en el proceso de desarrollo de software. Constituye muchas veces una práctica común de solución ante comportamientos predecibles y comprobados. A manera de resumen, un patrón de diseño resuelve problemas de diseño en desarrollo de aplicaciones informáticas, el cual, debe haber comprobado su efectividad resolviendo dichos problemas y demuestre que puede ser reutilizable. Los problemas que resuelve un patrón de diseño deben ser similares, pero pueden ser diferentes sus contextos. Costa Rica ha sido catalogada como un país de alta tecnología y con talento humano calificado en el área de las TICs. El sector de las tecnologías de información constituye para el país un nicho importante de exportación, tanto de soluciones informáticas como de talento humano. También reviste importancia el establecimiento de empresas de base tecnológica en varias zonas de Costa Rica. Con ello impulsan el empleo, el desarrollo tecnológico y los ingresos financieros estatales. Todo esto conlleva a crear un escenario que las universidades, responsables de la formación del talento humano, deban determinar las buenas prácticas que estas empresas están aplicando a sus soluciones para luego implementarlas en las mallas curriculares de las carreras tecnológicas. Materiales y métodos o Metodología Se utilizó investigación de tipo descriptiva donde se aplicaron instrumentos para la recolección de datos como por ejemplo, encuesta en línea diseñada en Limeware, estos fueron analizados e interpretados con el fin de obtener los resultados y así poder determinar qué tan utilizados son los patrones de diseño y las metodologías ágiles en la industria del software en Costa Rica y con esta información poder determinar la necesidad de actualizar los planes de estudio en las carreras afines. Resultados y discusión Con una muestra de más de 20 empresas de desarrollo de software en nuestro país, los resultados en cuanto a dónde nos encontramos con el uso de estas metodologías de trabajo son bastante interesantes y concluyentes y algunos de los datos arrojados los queremos compartir en este artículo. El 80% de los encuestados confirmaron la presencia del uso de patrones de diseños en los proyectos que lideran en sus empresas y un 20% confirmó que no emplean estas técnicas en el desarrollo de software. Elaboramos una lista de patrones de diseño que se emplean y que están disponibles en la actualidad y le preguntamos a los encuestados cuáles han utilizado en los diferentes proyectos que han desarrollado en sus negocios. El siguiente gráfico muestra los resultados arrojando conclusiones muy interesantes: Revista de la Facultad de Ingenierías y Tecnologías de la Información y Comunicación. Año 3, Volumen 2, Número 6, Julio–Diciembre2019Tecnología Vital Julio– Diciembre 201946Figura 1 – Patrones de diseño y su uso en la actualidad en Costa Rica Fuente: Autor •El 23% de los encuestados afirma que el patrón de diseño que más se utiliza en sus proyectos de desarrollo es el modelo MVC. •El 14% utiliza el patrón Singleton. •Factory Method es utilizado por el 11% de los encuestados •El 7% utiliza el patrón Prototype. •Abstract Factory y Composite es utilizado por un 5% de los encuestados. •Con 4% se encuentran los modelos Adapter, Decorator, Facade, Proxy, Iterator, Mediator, Observer, State. •Al final de la lista se observa Bridge, Builder, Command y Visitor con un 2% en su uso. Algunos otros patrones mencionados en la encuesta y que obtuvieron cero votos en su empleo en proyectos de desarrollo de software en Costa Rica son: Flyweight, Chain of Responsibility, Interpreter, Memento, Strategy y Template Method. A partir de este momento es cuando comienza a surgir la verdadera necesidad de incluir el tema de patrones de diseño en nuestra carrera, ya que como se puede observar, su uso es bastante amplio y uno de los retos que esto conlleva es el de elegir cuidadosamente los patrones que podemos hacer parte de nuestro currículo de estudio, siendo evidente MVC, Singleton, Factory Method y Prototype son opciones que en definitiva deberían de incluirse. Para los profesionales de desarrollo de software en nuestro país, especialmente para los encargados de estos departamentos en las empresas encuestadas, los beneficios reales de su uso se resumen en la siguiente tabla: Revista de la Facultad de Ingenierías y Tecnologías de la Información y Comunicación. Año 3, Volumen 2, Número 6, Julio–Diciembre2019Tecnología Vital Julio– Diciembre 201947Tabla 1 - Opiniones acerca del beneficio que representa el manejo de patrones de diseño en proyectos de desarrollo de software Muy altoAltoAceptableBajoSin respuestaEl diseño sea más comprensible para otros programadores 40%35%5%0.00%20%Ayudan a estandarizar el código 50%25%5%0.00%20%Mejor adaptados a solucionar retos como “comunicación del conocimiento de arquitecturas entre diseñadores" 30%40%10%0.00%20%Acomodando un nuevo paradigma de diseño o estilo arquitectónico 20%50%10%0.00%20%Resuelve objetivos no funcionales tales como la reutilización, portabilidad, y extensibilidad 35%40%5%0.00%20%Evita errores y dificultades del diseño, que ha sido aprendido tradicionalmente solamente a través de la experiencia 35%40%5%0.00%20%A pesar de que anteriormente dimos algunas ventajas en el uso de patrones, esta consulta arroja los siguientes beneficios de acuerdo con los profesionales encuestados: 1.Los diseños son más comprensibles para otros programadores que deban trabajar en el proyecto en algún momento dado. 2.En definitiva, ayudan a estandarizar el código, lo cual es una buena práctica en el desarrollo de aplicaciones de software. 3.Dan un valor agregado en términos de comunicación y retroalimentación entre compañeros de equipo de trabajo.4.Es un marco de trabajo que puede incrementar la productividad en los proyectos de desarrollo de software. 5.Pueden ayudar en la reutilización de código al existir por ejemplo estandarización, además de la portabilidad de los proyectos ya existentes. 6.Todo lo anterior también impacta de forma positiva en las técnicas de desarrollo empleadas, evitando o reduciendo errores tradicionales de acuerdo con las empresas participantes. ¿De qué depende el uso de patrones de diseño? Antes la consulta de qué define el uso de patrones de diseño en la empresa, los resultados arrojan variedad de datos. Por ejemplo, un 33% indican que ya es parte de Revista de la Facultad de Ingenierías y Tecnologías de la Información y Comunicación. Año 3, Volumen 2, Número 6, Julio–Diciembre2019Tecnología Vital Julio– Diciembre 201948los estándares de programación que manejan a nivel de empresa, mientras que un 30% mencionan que dependerá del administrador del proyecto o del equipo de trabajo, por otro lado, el 27% lo limita al tipo de proyecto por desarrollar y el restante 10% deja la responsabilidad a la experiencia del programador. Esto es un indicador importante para nosotros, ya que podemos observar la importancia de que el profesional en desarrollo de software cuente con el conocimiento necesario en estas herramientas para que el mismo pueda ser incluido como parte del equipo de trabajo en un proyecto de este tipo y que, además, basado en su experiencia pueda proponer su uso en proyectos venideros, específicamente en ese nicho de mercado donde no emplean del todo este tipo de patrones en sus proyectos. También se le consultó a los encuestados, qué criterios emplearon o emplean a la hora de elegir cuál patrón de diseño utilizar en cada uno de los proyectos, siendo los resultados obtenidos los siguientes: Tabla 2 – Pautas a la hora de seleccionar el patrón de diseño por utilizar Observar como el patrón de diseño resuelve los problemas de diseño 50% Revisar las secciones de “Objetivos” 17% Estudiar la interrelación entre los diferentes patrones 33% Fuente: Autor ¿Por qué la falta de uso de patrones de diseño? También fue objeto de estudio entender el por qué una empresa de desarrollo de software en nuestro país no emplea el uso de patrones de diseño en sus proyectos y los resultados no podemos dejar de considerarlos en nuestro esfuerzo por mejorar la calidad en el perfil de los profesionales que formamos. Las justificaciones del por qué la falta de uso se enumera a continuación: •Desconocimiento de la existencia y funcionalidad de los patrones de diseño. •Falta de capacitación. •No se ajusta a los estándares de la empresa. •No le ven ningún valor agregado. Importante considerar el desconocimiento que existe de estas herramientas, aquí es donde se abre una posibilidad única para cada uno de nuestros profesionales, proponer el uso de los patrones de diseño y proponerlos en proyectos de mejora, esto le permitirá al profesional tener visibilidad ante sus compañeros y superiores, la oportunidad de crecimiento es indudable y el beneficio de la empresa en cuanto a tiempo, dinero, calidad e imagen será considerable, así que todos ganan y es nuestro deber brindar estas herramientas a nuestra comunidad estudiantil. Estas empresas no cierran las puertas al uso de patrones, pero saben que su inclusión requiere tiempo ya que habría que entrenar al personal existente, contratar profesionales que ya posean el conocimiento y la experiencia en el uso de patrones y gradualmente comenzar a incluirlos en proyectos nuevos. Un dato alarmante y que nos motiva a atacar este problema desde nuestra trinchera, es que un 88% de los encuestados manifiesta que el gran problema es la falta de formación en el uso de los patrones de diseño en los profesionales de desarrollo de software de nuestro país, un dato abrumador y que nos abre los ojos. ¿Quién es el responsable en la formación en el uso de patrones de diseño? Revista de la Facultad de Ingenierías y Tecnologías de la Información y Comunicación. Año 3, Volumen 2, Número 6, Julio–Diciembre2019Tecnología Vital Julio– Diciembre 201949Cuando nos dimos a la tarea de identificar en quién recae la responsabilidad en el desarrollo del conocimiento para el uso de patrones de diseño, pudimos constatar que es una responsabilidad compartida, veamos: Figura 2 – ¿Quién es el responsable de formar en el uso de patrones de diseño? Fuente: Autor Al final depende de todos y esto tiene mucho sentido. Los que trabajamos en desarrollo de software, tenemos claro de la inmensa variedad de herramientas y soluciones que existen. Es irreal pretender ser un desarrollador de software que domine todos los lenguajes de programación, así como todos los motores de bases de datos, marcos de trabajo y en este caso todas las herramientas de patrones de diseño y es aquí cuando muchas veces la búsqueda de una oportunidad laboral se convierte en toda una pesadilla o una gran frustración debido a la variedad de requisitos que en ocasiones piden las empresas. Nuestro deber como formadores de futuros profesionales es imperante y muy relevante ya que somos nosotros los que tenemos que sembrar esa semilla y educar en aquello que consideramos de mayor demanda en el mercado, pero de igual manera esto no garantiza que el profesional tenga las competencias o el perfil que se busca en una organización X, sin embargo, el estudiante al conocer del tema podrá investigar por su propia cuenta o recibir el entrenamiento que se considere necesario por parte del empleador, así que el esfuerzo es conjunto, sin embargo asumimos con mucha responsabilidad el papel que jugamos en este proceso. A la hora de consultar si existe la apertura de incluir patrones de diseño en futuros proyectos, obtuvimos un contundente y afirmativo 100%, lo que quiere decir que existe el interés en mejorar los procesos de desarrollo y conocer de esta metodología de trabajo. II.CONCLUSIONES La investigación arroja muchas conclusiones interesantes que hemos compartido a lo largo de este artículo, sin embargo, a manera de resumen, las podemos enumerar a continuación: 1.Existe una amplia aceptación y necesidad en el uso de los patrones de diseño en la mayoría de las empresas de desarrollo de software en nuestro país, no es algo que sea desconocido y por el contrario es parte del perfil del profesional que se busca hoy en día. 2.La variedad de herramientas de patrones de diseño que se emplean es amplia, no se limita al uso de unos cuantos patrones, lo que se traduce en un reto directo ya que la demanda exige conocimiento en diferentes marcos de trabajo. 3.Un sector de la industria desconoce la existencia de los patrones de diseño o simplemente no han querido incursionar en el uso de los mismos, tal vez por resistencia al cambio o por costumbre, es importante entonces educar y llevar la propuesta de inclusión de técnicas de desarrollo como éstas y explicar los beneficios que se cuentan por muchos a la hora de emplearlos. 4.Sin duda alguna para nosotros como casa de estudio, es un deber incluir el estudio Revista de la Facultad de Ingenierías y Tecnologías de la Información y Comunicación. Año 3, Volumen 2, Número 6, Julio–Diciembre2019Tecnología Vital Julio– Diciembre 201950de patrones de diseño en nuestros programas curriculares, por lo que hemos considerado proponer la modificación de algunos cursos a nivel de bachillerato y de licenciatura. Sabemos que la responsabilidad es enorme, pero estamos dispuestos a ofrecer estas herramientas a nuestros estudiantes. 5.Existe una falta de documentación que también arrojó el estudio, ya que algunos empleadores manifestaron la falta de documentación a la hora de diseñar y crear patrones de diseño para sus proyectos, por lo tanto, esto se asocia a la necesidad de enseñar la importancia de la documentación, máxime que hay que considerar que el uso de patrones esto lo es todo. Lo que sigue Compartir los resultados de este estudio y llevarlo a oídos de la mayoría de las personas interesadas, ya que entendemos la responsabilidad de formar profesionales competentes en un mercado que crece cada día. Costa Rica será siempre un referente en cuanto a calidad profesional y evidentemente todo comienza en la época de formación. Tomamos la bandera y seremos los primeros en llevar estos resultados a la sociedad y asumimos de igual manera el reto de incluir este tema en nuestros planes de estudio, teniendo muy presente que no será sencillo y demandará un esfuerzo significativo, pero felices de dejar esta huella es nuestros futuros profesionales. ReferenciasBertoli, M. (2017) Node.js Design Patterns -React Design Patterns and Best Practices: Build easy to scale modular applications using the most powerful components and design patterns. Birmingham, UK: Pack Ciasciaro, M. y Mammino, L. (2016) Node.js Design Patterns -SecondEdition: Master best practices to build modular and scalable server-side web applications. Uk: Pack Freeman, A. (2017) Pro ASP .NET Core MVC 2 – 7th Edition. UK: Apress Hernández, J. (2016, 05 de diciembre). Los Patrones de Diseño Hoy: Patrones Creacionales. Recuperado de http://blog.koalite.com/2016/12/los-patrones-de-diseno-hoy-patrones-creacionales/Hernández, J. (2016, 12 de diciembre). Los Patrones de Diseño Hoy: Patrones Estructurales Recuperado de http://blog.koalite.com/2016/12/los-patrones-de-diseno-hoy-patrones-estructurales/Interaction Design Foundation (2019, february 13). 10 Great Sites for UI Design Patterns. Recuperado de https://www.interaction-design.org/literature/article/10-great-sites-for-ui-designpatternsKack, A. (2015) Designing with Objects -First Edition. Canada: Wiley Leiva, A. (2016). Patrones de diseño de software. Recuperado de https://devexperto.com/patrones-de-diseno-software/Malik, F. (2018, July 19). Strategy Software Design Pattern. Recuperado de https://medium.com/fintechexplained/strategy-design-pattern-a1f643617d5c Pickering, H. (2016) Inclusive Design Patterns. USA: Smashing Magazine Rajput, D. (2017) Spring 5 Design Patterns: Master efficient application development with patterns such as proxy, singleton, the template method, and more. UK: Packt Publishing Refactoring Guru. (2019). Memento. Recuperado de https://refactoring.guru/designpatterns/mementoSource Making (2019). Chain of Responsibility. Recuperado de Revista de la Facultad de Ingenierías y Tecnologías de la Información y Comunicación. Año 3, Volumen 2, Número 6, Julio–Diciembre2019Tecnología Vital Julio– Diciembre 201951https://sourcemaking.com/design_patterns/chain_of_responsibilitySzczukocki, D. (2018, October 26). Interpreter Design Pattern in Java. Recuperado de https://www.baeldung.com/java-interpreter-patternTedeschi, N. (2008, 13 de octubre). ¿Qué es un Patrón de Diseño? Recuperado de https://msdn.microsoft.com/es-es/library/bb972240.aspx?f=255&MSPPError= 2147217396