<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>formación</title><link>https://devtia.com/</link><description>Llevamos empresas a la nueva era digital. Te ayudamos a mejorar tus procesos a través de las métricas.</description><language>es</language><pubDate>Sun, 19 Apr 2026 10:56:27 +0200</pubDate><lastBuildDate>Sun, 19 Apr 2026 10:56:27 +0200</lastBuildDate><generator>DEVTIA</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><ttl>3600</ttl><item><title>Prueba técnica: Criterios de evaluación</title><link>https://devtia.com/post/prueba-tecnica-criterios-de-evaluacion</link><description><![CDATA[<p>A continuaci&oacute;n queremos detallar c&oacute;mo valoramos la prueba t&eacute;cnica que realizamos en nuestro proceso de selecci&oacute;n.</p><p>Como candidatos nos ha tocado hacer multitud de pruebas, y nunca hemos recibido ning&uacute;n tipo de feedback, as&iacute; que ahora que nos toca a nosotros, creemos que es un buen momento para tratar a los dem&aacute;s como nos gustar&iacute;a que nos hubieran tratado.</p><p>Lo primero, esto no es un examen: es una opini&oacute;n. Algunos candidatos entran en controversia con nosotros, y esto es algo bastante desagradable. Por supuesto siempre estamos abiertos a que alguien nos explique algo, y muchas veces hemos aprendido cosas con las pruebas de los candidatos, pero entiende que es muy desagradable cuando un candidato quiere convencerte de algo que no es.</p><p>Al final, si crees que estamos equivocados, es posible, simplemente somos programadores como tu, y por supuesto a veces nos equivocamos.</p><h2>Candidato</h2><p>Una prueba t&eacute;cnica tiene que estar muy orientada al tipo de candidato que est&aacute;s buscando. No tiene mucho sentido hacer una prueba de algoritmia y patrones de dise&ntilde;o para un perfil que va a trabajar con wordpress.</p><p>En nuestro caso buscamos perfiles con varios a&ntilde;os de experiencia, con un conocimiento razonablemente bueno del framework con el que trabajamos, pero que todav&iacute;a tenga un buen margen de crecimiento junto a nosotros. Es decir buscamos a alguien que pueda ser productivo en un corto plazo, que pueda trabajar la mayor parte del tiempo de forma independiente, pero que el desarrollo profesional y el aprendizaje que puede adquirir con nosotros sea algo importante para &eacute;l.</p><h2>Descripci&oacute;n de la prueba</h2><p>Nuestra prueba es realmente sencilla. No voy a describirla aqu&iacute;, porque la cambiamos con cada proceso, pero b&aacute;sicamente pedimos que se instale un proyecto con symfony y que se programen un par de acciones, y alg&uacute;n comando. Todo ello sin dar ning&uacute;n tipo de instrucci&oacute;n acerca de c&oacute;mo hacerlo. Si acaso se insin&uacute;a ligeramente al candidato que sea creativo.</p><h2>Consejos iniciales</h2><div class="row"><div class="col-sm-8"><p>Siempre que te enfrentes a una prueba t&eacute;cnica deber&iacute;as leer el texto con calma al menos un par de veces y quiz&aacute;s una vez m&aacute;s una vez que has acabado.</p><p>No creer&aacute;s la cantidad de candidatos que olvidan realizar alguna parte.</p></div><div class="col-sm-4"><div class="reference"><p>Si tienes una hora para cortar un &aacute;rbol, deber&iacute;as dedicar la primera mitad para afilar tu hacha.</p></div></div></div><h2>Criterios de evaluaci&oacute;n</h2><p><img alt="Criterios de evaluaci&oacute;n" loading="lazy" src="/cache/thumb_1200_0400/uploads/content/image/image/d844c65025a3956a11f8981d40732b220e2f6014.jpg" title="Criterios de evaluaci&oacute;n loading="></p><p>Como ver&aacute;s en las cosas que evaluamos a continuaci&oacute;n. es una prueba tan sencilla en la que buscamos es que seas muy detallista en las peque&ntilde;as cosas.</p><p>Asignar&iacute;amos una puntuaci&oacute;n 1-10 para cada uno de los siguientes apartados, de forma que pudi&eacute;ramos valorar de forma justa y a la vez sencilla para nosotros. Los criterios de evaluaci&oacute;n no est&aacute;n en orden de importancia. Tampoco hacemos una media artimetica del resultado, simplemente es una gu&iacute;a para saber cuales son tus puntos fuertes y cuales son tus puntos debiles. El resultado de la prueba t&eacute;cnica, junto con la evaluaci&oacute;n personal que hagamos, ser&aacute; lo que nos ayude a decantarnos por uno u otro candidato.</p><div class="row"><div class="col-sm-4"><div class="reference mt-5"><p>El diablo est&aacute; en los detalles.</p></div></div><div class="col-sm-8"><h3>Ficheros INSTALL.md y README.md</h3><p>Son dos requisitos de la prueba. El primero debe contener las instrucciones de instalaci&oacute;n del proyecto y el segundo una breve explicaci&oacute;n de las decisiones que has tomado y por que.</p></div></div><p>El README.md es una de las partes m&aacute;s importantes de la prueba, ya que te da la oportunidad de explicar y justificar las decisiones que has tomado.</p><p>Pon atenci&oacute;n a las faltas de ortograf&iacute;a. No pasa nada, el que est&eacute; libre de pecado que tire la primera piedra, pero mi recomendaci&oacute;n es que si sueles cometer faltas de ortograf&iacute;a, lo pases por un corrector antes de enviarlo.</p><h3>Versiones</h3><p>Valoramos positivamente que utilices las &uacute;ltimas versiones disponibles, especialmente del lenguaje y del framework.</p><h3>Docker</h3><p>Valoramos positivamente que presentes tu prueba dentro de un contenedor.</p><h3>Coding Style</h3><p>Valoramos positivamente que presentes un coding style consistente y especialmente que lo definas expl&iacute;citamente de alguna forma, por ejemplo indicandolo en el README.md o incluyendo alg&uacute;n tipo de fichero de configuraci&oacute;n como .php-cs-fixer.dist.php indicando tus reglas de estilo.</p><h3>Alcance</h3><p>Como ya he dicho anteriormente. Aseg&uacute;rate de leer bien, lo que se pide. Muchos candidatos olvidan alguna peque&ntilde;a cosa. Es obvio que es un despiste. Pero no dice algo bueno de ti, que seas despistado en una prueba sencilla.</p><h3>Bundles</h3><p>Muchos candidatos utilizan bundles de la comunidad. Valoramos positivamente que puedas usar los bundles m&aacute;s conocidos. Nos indica que conoces el ecosistema.</p><h3>Comandos</h3><p>La prueba probablemente te pida que ejecutes un sencillo comando. Evaluaremos que hagas un uso eficaz de los comandos. Valoramos que el candidato demuestre que conoce c&oacute;mo funciona el componente configurando correctamente tanto los par&aacute;metros de entrada, como haciendo un uso correcto de la salida.</p><h3>Formularios</h3><p>Valoramos que el candidato demuestre que entiende bien c&oacute;mo funcionan, que sea capaz de crear un formulario y a&ntilde;adirle algunas validaciones.</p><h3>Doctrine</h3><p>Valoramos que el candidato entienda c&oacute;mo funciona doctrine. Declare entidades, repositorios y realice algunas queries sin cometer errores.</p><h3>Servicios</h3><p>Aunque la prueba no lo pide expresamente, se valora que el candidato trate de crear servicios y llevar la l&oacute;gica desde los controladores a estos.</p><h3>Assets / Frontend</h3><p>Se valora que el candidato haga un uso correcto de webpack o que incluya alg&uacute;n otro recurso de frontend.</p><h3>Pruebas</h3><p>Se valora que el candidato entregue una bater&iacute;a de pruebas de alg&uacute;n tipo, unitarias, funcionales y sea capaz de justificar en el README.md su elecci&oacute;n.</p><h2>&iquest;Qu&eacute; te ha parecido?</h2><p><img alt="&iquest;Qu&eacute; te ha parecido?" loading="lazy" src="/cache/thumb_1200_0600/uploads/content/image/image/7ecc9ad0cd5f24b7b50268654c9059b98035c48c.jpg" title="&iquest;Qu&eacute; te ha parecido?"></p><p>Por supuesto, queremos saber tu opini&oacute;n, &iquest;qu&eacute; te ha parecido la prueba y el proceso en general?, &iquest;hay algo que cambiar&iacute;as? &iquest;Crees que has tenido la oportunidad de demostrar tus capacidades? &iquest;Qu&eacute; te hubiera gustado poder hacer?</p>
]]></description><guid>https://devtia.com/post/prueba-tecnica-criterios-de-evaluacion</guid><pubDate>Fri, 04 Feb 2022 11:22:04 +0100</pubDate></item><item><title>empleo: backend developer php symfony remoto</title><link>https://devtia.com/post/backend-developer-php-symfony-remoto</link><description><![CDATA[<h2>&iquest;STRONGHOLD ASSET MANAGEMENT?</h2><p>Este es un anuncio para trabajar en: <a href="https://strongholdam.com/" target="_blank">STRONGHOLD ASSET MANAGEMENT</a>.</p><p>STRONGHOLD ASSET MANAGEMENT (SAM) es un fondo de inversi&oacute;n donde nos dedicamos a financiar operaciones de desarrollo inmobiliario. Es decir somos el socio capitalista para un promotor que quiere construir por ejemplo una promoci&oacute;n de chalets. SAM por lo tanto es una empresa a medio camino de una FINTECH y una PROPTECH. Puedes curiosear la web <a href="https://strongholdam.com/">https://strongholdam.com/</a> para entender un poco mejor qu&eacute; es lo que hacemos.</p><h2>Un poco de historia</h2><p>En torno al a&ntilde;o 2016 Matt Calner, nuestro socio director, lleg&oacute; a Madrid procedente de Londres, con la intenci&oacute;n de establecerse en Madrid. Seg&uacute;n sus propias palabras, la mejor ciudad del mundo.</p><p>Una vez aqu&iacute; se dio cuenta de que exist&iacute;a una posibilidad de negocio ya que hab&iacute;a dificultades para obtener financiaci&oacute;n inmobiliaria. Hab&iacute;a producto, hab&iacute;a mercado, pero el principal freno era la financiaci&oacute;n. Y con esta idea en la cabeza y esp&iacute;ritu emprendedor, se asoci&oacute; con algunos inversores, conocidos y amigos, y empezaron a hacer operaciones peque&ntilde;as, principalmente pr&eacute;stamos puente y reestructuraciones de deuda.</p><p>En el a&ntilde;o 2019 se fund&oacute; oficialmente SAM y en 2020 entr&oacute; como socio de referencia Goldman Sachs, <em>los que financian al FC Barcelona</em>, con una l&iacute;nea de cr&eacute;dito de 100 millones que ha ido incrementando con el paso del tiempo.</p><p>Dentro de este camino de maduraci&oacute;n de la compa&ntilde;&iacute;a, a mediados del a&ntilde;o 2020 nos contactan para desarrollar una plataforma que les ayude en su trabajo diario. Calculo de intereses, generaci&oacute;n de certificados, gesti&oacute;n documental, etc. Lo que ser&iacute;a un peque&ntilde;o proyecto de solo unos pocos meses nos llev&oacute; a finales del 2021 a incorporarnos a tiempo completo en la compa&ntilde;&iacute;a.</p><h3>Momento clave</h3><p>Durante el 2021, con una plantilla realmente peque&ntilde;a hemos sido capaces de financiar proyectos por un importe de m&aacute;s de 120 millones de euros y el objetivo es poder duplicar esa cifra cada a&ntilde;o. Creemos que es un momento clave para los objetivos de la compa&ntilde;&iacute;a, y queremos que nos ayudes a materializarlos.</p><h2>&iquest;Qu&eacute; cosas tenemos en mente?</h2><p>Estas entre otras cosas es lo que queremos hacer en el medio plazo.</p><ul><li>Continuar mejorando y optimizando las herramientas y procesos de la plataforma que ya tenemos.</li><li>Mejorar la inteligencia de negocio para ofrecer informaci&oacute;n &uacute;til en tiempo real.</li><li>Internacionalizar la compa&ntilde;&iacute;a.</li></ul><p>A nivel de IT nos gustar&iacute;a.</p><ul><li>Mejorar nuestras habilidades para producir c&oacute;digo cada vez m&aacute;s confiable, sostenido por una buena test suite, y que se pueda ampliar / modificar f&aacute;cilmente.</li><li>Innovar a&ntilde;adiendo nuevas piezas a nuestra infraestructura.</li></ul><h2>&iquest;Qu&eacute; vas a hacer?</h2><h3>En tus primeros d&iacute;as</h3><ul><li>Conocer a tus compa&ntilde;eros, familiarizarte con el entorno de trabajo y el c&oacute;digo que ya tenemos desarrollado.</li><li>Comenzar a asimilar toda la terminolog&iacute;a / conocimiento que necesitar&aacute;s para desarrollar tu trabajo.</li><li>Resolver algunas issues sencillas.</li></ul><h3>En algunas semanas</h3><ul><li>Resolver issues que requieran un mayor conocimiento del proyecto.</li><li>Gestionar tu trabajo diario, desde la toma de requisitos, hasta poner el c&oacute;digo en producci&oacute;n.</li></ul><h3>En algunos meses</h3><ul><li>Ayudar a definir y ejecutar la estrategia de IT, en base a los objetivos y necesidades de la compa&ntilde;&iacute;a. SAM es una empresa orientada a resultados.</li><li>Formar al equipo en aquello que creas que puedes aportar.</li></ul><h2>&iquest;Con que lo har&aacute;s?</h2><ul><li>La pieza principal de la arquitectura est&aacute; desarrollada en un monolito sobre Symfony 5.4 y PHP 8.1
	<ul><li>Nos preocupan los principios SOLID y el contenido del libro CLEAN CODE, aunque no somos talibanes.</li><li>Tenemos test funcionales ( smoke test ) + test unitarios, que se ejecutan adem&aacute;s de en local, en un entorno de integraci&oacute;n continua.</li></ul></li><li>Un poquito de javascript + bootstrap.</li><li>git + github.</li></ul><h2>&iquest;C&oacute;mo es el equipo?</h2><p>Ser&aacute;s el tercer compa&ntilde;ero de un peque&ntilde;o equipo de IT. Somos un equipo horizontal, aut&oacute;nomo y &aacute;gil. Tenemos total libertad para hacer lo que queramos.</p><h3>Alvaro Cebri&aacute;n</h3><p>Apasionado de la tecnolog&iacute;a y la inform&aacute;tica, le encanta probar todo tipo de tecnolog&iacute;as y lenguajes nuevos que van saliendo. Aunque a nivel profesional est&aacute; m&aacute;s enfocado en el desarrollo web, tambi&eacute;n le divierte programar mis aplicaciones de escritorio, en otros lenguajes como C o aplicaciones m&oacute;viles para Android.</p><ul><li><a href="https://www.linkedin.com/in/alvarocebriangarcia/">https://www.linkedin.com/in/alvarocebriangarcia/</a></li><li><a href="https://github.com/alvarocebrian">https://github.com/alvarocebrian</a></li></ul><h3>Daniel Gonz&aacute;lez</h3><p>Cree que nada es imposible si se hace con pasi&oacute;n y honestidad.</p><ul><li><a href="https://www.linkedin.com/in/desarrolla2/">https://www.linkedin.com/in/desarrolla2/</a></li><li><a href="https://github.com/desarrolla2">https://github.com/desarrolla2</a></li></ul><h2>&iquest;Qu&eacute; buscamos?</h2><h3>Indispensable</h3><ul><li>Experiencia consolidada en las todas o casi todas las siguientes tecnolog&iacute;as.
	<ul><li>PHP, Symfony, MySQL, Git, Linux, JavaScript, Bootstrap.</li></ul></li><li>S&oacute;lidos conocimientos de programaci&oacute;n.
	<ul><li>Principios SOLID, test unitarios y funcionales.</li></ul></li><li>Capacidad para entender y proponer soluciones a problemas de negocio. No nos pagan por resolver issues, nos pagan por ayudar a la compa&ntilde;&iacute;a a llegar al siguiente nivel.</li><li>Alto rendimiento en el d&iacute;a a d&iacute;a, somos un equipo peque&ntilde;o, pero muy productivo.</li></ul><h3>Interesante</h3><ul><li>Conocimientos en el mundo financiero y/o del mercado inmobiliario.</li><li>Anal&iacute;tica de datos.</li><li>Comunicaci&oacute;n en ingl&eacute;s.</li><li>Docker.</li></ul><h2>&iquest;Qu&eacute; ofrecemos?</h2><ul><li>Lo b&aacute;sico
	<ul><li>Contrato indefinido / 23 d&iacute;as de vacaciones / flexibilidad horaria.</li><li>100% remoto, o si lo prefieres puedes venir a nuestra oficina en Castellana 60, Madrid.</li><li>40k - 70k brutos anuales.</li></ul></li><li>Otros perks:
	<ul><li>Formaci&oacute;n continua.</li><li>Cheques restaurante / guarder&iacute;a / transporte / seguro m&eacute;dico.</li><li>Viaje anual de toda la compa&ntilde;ia. Viaje a una conferencia del equipo de IT.</li></ul></li></ul><h2>&iquest;Quieres participar?</h2><p>Si estas interesad@ &iexcl;Queremos crecer junt@s!.</p><p><a class="btn btn--red" href="/work-with-us/as-developer/" style="margin-top:20px">aplica aqu&iacute;</a></p>
]]></description><guid>https://devtia.com/post/backend-developer-php-symfony-remoto</guid><pubDate>Mon, 12 Jul 2021 10:29:29 +0200</pubDate></item><item><title>Symfony live 2021</title><link>https://devtia.com/post/seleccionados-para-dar-una-charla-en-la-conferencia-symfony-live-2021</link><description><![CDATA[<p><strong>Hemos sido seleccionados</strong> para dar una de las charlas de esta edici&oacute;n de la conferencia Symfony Live. Concretamente para la edici&oacute;n en <strong>castellano</strong>, edici&oacute;n que este a&ntilde;o ser&aacute; <strong>online</strong> y que tendr&aacute; lugar el d&iacute;a <strong>7 de Mayo</strong>.</p><p>Compartimos el cartel con gente tan importante en esta comunidad como: Fabien Potencier, Javier Eguiluz, Nicolas Grekas o Ryan Weaver. <strong>Es un honor compartir cartel con todos estos grandes desarrolladores</strong>. Puedes ver el panel completo en este <a href="https://live.symfony.com/2021-spain/schedule">enlace</a>.</p><p>Desde aqu&iacute; dar las <strong>gracias a la organizaci&oacute;n por confiar en nosotros</strong>. WE LOVE YOU!</p><h2>&iquest;Qu&eacute; es Symfony Live?</h2><div class="row"><div class="col-sm-8"><p><img alt="Symfony Live Spanish Edition 2021" loading="lazy" src="/cache/thumb_1200_0600/uploads/content/image/image/77d5e6b50a31a57ec9f055df960b8b6f280d7e83.png" title="Symfony Live Spanish Edition 2021"></p></div></div><p>Symfony Live es <strong>la conferencia oficial y la m&aacute;s importante en relaci&oacute;n con el framework Symfony</strong>. En ella se tratan temas relacionados con el framework, con el ecosistema php, con las tendencias en buenas pr&aacute;cticas en el &aacute;mbito del desarrollo de software.</p><p>Esta ser&aacute; una edici&oacute;n online, en la que se pierde una parte importante de la esencia de acudir a un evento, y es conocer y relacionarte con profesionales y empresas del sector.</p><p>Sin embargo al ser online tienes la ventaja de que el l&iacute;mite de asistentes no es el espacio disponible en la sala de conferencias, por lo que posiblemente la audiencia ser&aacute; mucho mayor. Adem&aacute;s las charlas quedar&aacute;n grabadas, por lo que los asistentes podr&aacute;n verlas de nuevo en cualquier momento.</p><h2>&iquest;De que vamos a hablar?</h2><p>Todav&iacute;a no hemos preparado la charla por lo que el contenido est&aacute; definido del todo, pero la charla tiene el t&iacute;tulo "<strong>refactoring with phpstorm</strong>", por lo tanto hablaremos de dos cosas que ya hemos profundizado bastante en este blog y en nuestro <a href="https://www.youtube.com/c/bestias_del_desarrollo/">canal de youtube</a> que es de <a href="/series/codigo-limpio">c&oacute;digo limpio</a>, y de edici&oacute;n con <a href="/series/maneja-intellij-idea-como-una-bestia">phpstorm</a>.</p><p>Dar una charla siempre es una oportunidad para aprender, por lo que de aqu&iacute; al 7 de mayo vamos a estar poni&eacute;ndonos a tope para mejorar estos contenidos y a&ntilde;adir nuevos, leyendo nuevos libros como por ejemplo el "<a href="https://amzn.to/2Rdugvy">Refactoring: Improving the Design of Existing Code</a>" de Martin Fowler, al que le ten&iacute;amos ganas.</p><p>Mezclando estos cuatro conceptos: <strong>symfony, clean code, refactoring</strong>, y por supuesto nuestro editor favorito, <strong>phpstorm</strong>, creo que nos <strong>puede quedar una charla m&aacute;s que interesante</strong>.</p><p>Estate atento al blog y al canal, por que probablemente publicaremos contenidos relacionados pr&oacute;ximamente.</p><h2>&iquest;Por qu&eacute; nos encanta participar en este tipo de eventos?</h2><p>Como ya hemos dicho dar una charla en un evento, especialmente cuando tiene mucha repercusi&oacute;n es una situaci&oacute;n que te pone al l&iacute;mite. De golpe est&aacute;s fuera de tu zona de confort, y vas a tener que enfrentar ante una audiencia de mucho nivel, que ha pagado por verte y que no se va a sentir feliz ante una charla de baja calidad.</p><p>Es por esto que debemos enfocar esto como una oportunidad para:</p><ol><li><strong>Seguir aprendiendo</strong>, y profundizando en el &aacute;mbito del contenido de la charla.</li><li>Demostrar que <strong>desde una empresa peque&ntilde;a</strong> como la nuestra y con unos recursos contenidos <strong>se pueden hacer cosas de mucho nivel</strong>.</li><li>Dar <strong>visibilidad a nuestra marca</strong>.</li></ol><p>Si todav&iacute;a no tienes tu entrada y quieres hacerte con ella, puedes conseguirla en este <a href="https://live.symfony.com/2021-spain/registration/">enlace</a>.</p><p>&iexcl;Nos vemos por all&iacute;!</p>
]]></description><guid>https://devtia.com/post/seleccionados-para-dar-una-charla-en-la-conferencia-symfony-live-2021</guid><pubDate>Fri, 09 Apr 2021 13:32:25 +0200</pubDate></item><item><title>Los dogmas en el desarrollo de software</title><link>https://devtia.com/post/los-dogmas-en-el-desarrollo-de-software</link><description><![CDATA[<p>Esta entrada es un alto en el camino, dentro de la serie que estamos realizando sobre <a href="/post/codigo-limpio-indice-de-contenidos">el libro Clean Code de Robert C Martin</a>.</p><p>La semana pasada publicamos una entrada sobre <a href="/post/codigo-limpio-deja-de-comentar">el uso de los comentarios</a>. En ella explic&aacute;bamos que siempre que puedas <strong>deber&iacute;as evitar el uso de comentarios</strong>.</p><p>Argument&aacute;bamos que cuando <strong>utilizas un comentario para explicar un c&oacute;digo que no se entiende con facilidad</strong>, no est&aacute;s mejorando tu c&oacute;digo, sino que <strong>est&aacute;s poniendo una piedra en tu camino</strong>. Tu c&oacute;digo sigue siendo igual de dif&iacute;cil de entender y adem&aacute;s ahora te tendr&aacute;s que ocupar de mantener esos comentarios actualizados. Lo cual no aporta valor a tu proyecto.</p><p>Muchas personas nos han escrito tanto por Linkedin, Twitter, Youtube y el grupo privado que tenemos en Telegram para tratar temas del canal.</p><p>Nos han indicado diferentes ejemplos en el que era muy dif&iacute;cil eliminar los comentarios o directamente no se pod&iacute;an. No quiero entrar aqu&iacute; a revisar cada uno de los ejemplos, pero tras revisarlo con el equipo, era evidente que eran buenos ejemplos. <strong>En esos casos, los comentarios si ayudaban a mejorar el c&oacute;digo</strong>.</p><p>Es por eso que quiero hablar un poco sobre los dogmas.</p><h2>Los dogmas en el desarrollo de software</h2><p><strong>Existen</strong> por supuesto <strong>muchos dogmas en el mundo del desarrollo de software</strong>, seguro que te suenan algunos de estos:</p><ol><li>Si no haces scrum estricto no haces scrum.</li><li>No se puede sacar adelante un proyecto sin pruebas autom&aacute;ticas.</li><li>En 2020 todo el mundo tiene que hacer DDD.</li></ol><p>Estas y otras muchas que se te ocurran las hemos escuchado todos cientos de veces.</p><h2>Poner un hombre en la luna</h2><p><img alt="Sin las mejores pr&aacute;cticas del momento actual fueron capaces de poner un hombre en la luna" loading="lazy" src="/cache/thumb_1200_0400/uploads/content/image/image/94e95d9b4b485726ede6d478ee0530679b4258dc.jpg" title="Sin las mejores pr&aacute;cticas del momento actual fueron capaces de poner un hombre en la luna"></p><p>Corr&iacute;a el a&ntilde;o 1957, estados unidos y la uni&oacute;n sovi&eacute;tica se encontraban enfrascados en mitad de la guerra fr&iacute;a, cuando los sovi&eacute;ticos pusieron por primera vez un sat&eacute;lite en &oacute;rbita, el sputnik. Esto supuso un gran varapalo para la sociedad americana, que crear&iacute;a la NASA. Hab&iacute;a comenzado la carrera espacial.</p><p>12 a&ntilde;os m&aacute;s tarde en cabo ca&ntilde;averal despega un cohete con tres astronautas y una misi&oacute;n: "poner un hombre en la luna". Los estados unidos tuvieron que hacer un gran esfuerzo en el desarrollo de la tecnolog&iacute;a inform&aacute;tica, ya que aquel cohete ten&iacute;a un computador capaz de guiarlo. Ese computador por supuesto ejecutaba software, y ese software fue programado 30 a&ntilde;os antes de que se publicara el manifiesto &aacute;gil.</p><p>Es decir que <strong>sin las consideradas mejores pr&aacute;cticas del momento actual, sin el framework de moda</strong>, este equipo de programadores <strong>fueron capaces de dise&ntilde;ar y programar un software que puso a un hombre en la luna</strong>.</p><h2>La flexibilidad y empat&iacute;a</h2><p><img alt="Lo m&aacute;s importante es tu capacidad para adaptarte a las necesidades de cada situaci&oacute;n" loading="lazy" src="/cache/thumb_1200_0400/uploads/content/image/image/018e8317157f988e9e8198640e24557ef4def4d5.jpg" title="Lo m&aacute;s importante es tu capacidad para adaptarte a las necesidades de cada situaci&oacute;n"></p><p><strong>Lo mejor es ser capaz de adaptarse a cada situaci&oacute;n</strong>, este es el &uacute;nico dogma que te tienes que grabar a fuego.</p><p><strong>Pensar que s&oacute;lo hay un camino</strong> para hacer las cosas bien es cuando menos <strong>una postura algo miope</strong>. Si alguien piensa que su metodolog&iacute;a / tecnolog&iacute;a / framework / loquesea es netamente superior a las todas las dem&aacute;s est&aacute; evidentemente equivocado.</p><p>Te voy a poner un ejemplo personal. La t&eacute;cnica del dise&ntilde;o dirigido por test (TDD) es una t&eacute;cnica que te ayuda a dise&ntilde;ar software escribiendo primero las pruebas y luego el c&oacute;digo de producci&oacute;n. Al hacerlo al rev&eacute;s, haciendo primero las pruebas, te ayuda a que pienses en tu dise&ntilde;o desde fuera hacia dentro, en lugar de como lo har&iacute;as habitualmente, desde dentro hacia afuera.</p><p>Yo estuve haciendo TDD durante aproximadamente un a&ntilde;o. Despu&eacute;s dej&eacute; de hacerlo. &iquest;Por qu&eacute;? Pues por dos motivos. Primero porque una vez que asimilas bien la metodolog&iacute;a, vas a ser capaz de pensar desde fuera hacia dentro sin necesidad de escribir primero el test y segundo porque en muchos proyectos el dise&ntilde;o no es algo crucial.</p><p>En mi opini&oacute;n <strong>tu criterio vale m&aacute;s que lo que alguien escribiera en un libro</strong> en la punta del mundo hace veinte a&ntilde;os.</p><h2>No dejes de aprender</h2><p>Que los dogmas no sean realmente dogmas, no es una excusa para no seguir aprendiendo o mejorando. En mi opini&oacute;n es tu responsabilidad como buen profesional ir mejorando cada vez tus capacidades.</p><p>Adem&aacute;s es una buena forma de disfrutar de nuestra profesi&oacute;n y por que no decirlo de ganar cada vez m&aacute;s dinero. No se paga igual de bien a alguien que programa en el lenguaje "a pelo" que a un "tope de gama" en la &uacute;ltima metodolog&iacute;a o framework de moda.</p><p>Te propongo algunos consejos para que no dejes de aprender.</p><p><strong>Busca un buen proyecto</strong> La forma m&aacute;s f&aacute;cil de seguir mejorando es dedicar ocho horas al d&iacute;a a mejorar, y para ello debes elegir tu puesto de trabajo en funci&oacute;n de donde m&aacute;s vayas a aprender. El dinero y otras ventajas deber&iacute;an pasar a un plano secundario. Da igual que ganes menos dinero el a&ntilde;o que viene, lo importante es cu&aacute;nto dinero vas a ganar el resto de tu vida.</p><p><strong>Sigue canales de youtube y podcast de la tem&aacute;tica</strong>. Una buena forma de seguir aprendiendo es este tipo de contenidos que suelen tener una alta calidad, y no requieren de demasiado esfuerzo, ya que puedes ver este video, mientras que vas en el tren de camino al trabajo o mientras esperas a un amigo.</p><p><strong>Asiste a conferencias y meetups</strong>. Es una forma f&aacute;cil de aprender y de conocer gente. Nunca vas a aprender sobre todo, pero si tienes el tel&eacute;fono del que sabe, tambi&eacute;n puede servir.</p><p><strong>Lee libros</strong> En comparaci&oacute;n con los anteriores es el que m&aacute;s esfuerzo o disciplina requiere, pero si no quieres que te den gato por liebre lo mejor es acudir a la fuente. Leer un libro al a&ntilde;o, puede marcar la diferencia.</p><p>No olvides apuntarte <a href="/academy/">a nuestra academia</a>, para recibir todas las semanas un nuevo video sobre desarrollo de software</p>
]]></description><guid>https://devtia.com/post/los-dogmas-en-el-desarrollo-de-software</guid><pubDate>Fri, 31 Jul 2020 15:08:18 +0200</pubDate></item><item><title>Código limpio: Deja de comentar</title><link>https://devtia.com/post/codigo-limpio-deja-de-comentar</link><description><![CDATA[<p>En esta entrada vamos a analizar cu&aacute;ndo y c&oacute;mo es conveniente el uso de comentarios durante la fase de desarrollo de software.</p><h2>bloques de c&oacute;digo</h2><p>Por regla general <strong>deber&iacute;as evitar el uso de comentarios</strong>. Los comentarios pueden parecer una herramienta muy &uacute;til ya que cuando estamos desarrollando puede que nos encontremos con que queremos explicar mejor c&oacute;mo funciona nuestro c&oacute;digo o por que hemos tomado una determinada decisi&oacute;n.</p><p>Pero cuando usamos un comentario de c&oacute;digo donde antes ten&iacute;amos un problema: que nuestro c&oacute;digo no era suficientemente sencillo de entender, ahora tenemos dos: nuestro c&oacute;digo sigue sin entenderse con facilidad, y ahora adem&aacute;s debo ocuparme de mantener los comentarios que he realizado.</p><p>Puedes pensar que mantener ese comentario no es mucho trabajo, pero que tal si esa energ&iacute;a qu&eacute; has gastado en mantener un comentario la hubieras gastado en <strong>hacer algo m&aacute;s productivo</strong>. &iquest;mejor, no?.</p><p>Vemos un ejemplo con el <code>TokenStorage</code> del componente <code>Security</code> de <code>Symfony</code>.</p><pre><code class="php">namespace Symfony\Component\Security\Core\Authentication\Token\Storage;

use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Contracts\Service\ResetInterface;

/**
 * TokenStorage contains a TokenInterface.
 */
class TokenStorage implements TokenStorageInterface, ResetInterface
{
    // ..
    public function setToken(TokenInterface $token = null)
    {
        if ($token) {
            // ensure any initializer is called
            $this-&gt;getToken();
        }

        $this-&gt;initializer = null;
        $this-&gt;token = $token;
    }
    //..
}</code></pre><p>El autor de este c&oacute;digo necesitaba hacer algunas llamadas antes de configurar el token. Se dio cuenta que que no era sencillo de entender y que otra persona que viniera detr&aacute;s probablemente no entender&iacute;a el motivo de esa llamada, asi que utiliz&oacute; un comentario para aclararlo todo. &iquest;Pero que te parece si hubiera hecho esto?</p><pre><code class="php">namespace Symfony\Component\Security\Core\Authentication\Token\Storage;

use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Contracts\Service\ResetInterface;

/**
 * TokenStorage contains a TokenInterface.
 */
class TokenStorage implements TokenStorageInterface, ResetInterface
{
    // ..
    public function setToken(TokenInterface $token = null)
    {
        if ($token) {
            $this-&gt;callInitializer();
        }

        $this-&gt;initializer = null;
        $this-&gt;token = $token;
    }

    private function callInitializer(): void
    {
        $this-&gt;getToken();
    }
    //..
}</code></pre><p>Como ves <strong>hemos eliminado el comentario y hemos mantenido e incluso mejorado la expresividad</strong>, ya que el c&oacute;digo es igual de expl&iacute;cito. Por lo tanto siempre que nos veamos en la necesidad de a&ntilde;adir comentarios, debemos plantearnos si podr&iacute;amos mejorar la expresividad de nuestro c&oacute;digo mejorando los nombres que estamos utilizando o extrayendo m&eacute;todos como en el ejemplo.</p><h2>DocBlock y documentaci&oacute;n autogenerada</h2><p>Algunos editores de texto a&ntilde;aden documentaci&oacute;n de forma m&aacute;s o menos autom&aacute;tica que permite indicar los tipos de los argumentos y del valor devuelto, as&iacute; como informaci&oacute;n adicional.</p><p>Veamos un ejemplo</p><pre><code class="php">    /**
     * get movements
     *
     * @return array
     */
    public function getMovements()
    {
        return $this-&gt;movements;
    }</code></pre><p>Este tipo de documentaci&oacute;n <strong>no aporta ning&uacute;n valor adicional</strong> ya que simplemente est&aacute; repitiendo lo mismo que ya dice el nombre de la funci&oacute;n. Quiz&aacute; esto ten&iacute;a sentido antes de la versi&oacute;n 7, para ayudar al IDE en el autocompletado. Pero a partir de esta versi&oacute;n es mucho mejor eliminar estos comentarios y utilizar el tipado nativo del lenguaje.</p><pre><code class="php">   public function getMovements(): array
    {
        return $this-&gt;movements;
    }</code></pre><h2>Usos permitidos</h2><p>Por supuesto el autor contempla algunos casos en los que s&iacute; estar&iacute;a permitido y justificado el uso de comentarios.</p><h3>Licencias y textos legales</h3><p>Es un uso completamente justificado el incluir la licencia y otros textos legales en el encabezado de nuestros ficheros. Adem&aacute;s esto no supone ning&uacute;n trabajo adicional, por que es habitual utilizar sistemas que se encargan de a&ntilde;adir estos comentarios de forma autom&aacute;tica, y adem&aacute;s los IDE suelen ocultarlos por lo que no molestan.</p><h3>APIs</h3><p>Si est&aacute;s construyendo una api y probablemente quieras generar la documentaci&oacute;n a trav&eacute;s de alg&uacute;n sistema autom&aacute;tico, s&iacute; estar&iacute;a justificado el incluir toda esta informaci&oacute;n adicional en tu c&oacute;digo.</p>
]]></description><guid>https://devtia.com/post/codigo-limpio-deja-de-comentar</guid><pubDate>Fri, 17 Jul 2020 14:46:07 +0200</pubDate></item><item><title>Código limpio: El malvado argumento booleano</title><link>https://devtia.com/post/codigo-limpio-el-malvado-argumento-booleano</link><description><![CDATA[<p>En la entrada anterior revisamos la importancia de elegir buenos argumentos. En esta entrada vamos a centrarnos en entender los motivos de un tipo de argumento concreto. El argumento booleano. Para ello analizamos este tipo de argumentos en el c&oacute;digo del componente <code>Config</code> y el componente <code>Crawler</code> de <code>Symfony</code>.</p><h2>Confunden al lector</h2><p>En general los argumentos booleanos confunden al lector. Veamos un ejemplo, con una clase del componente <code>Config</code>. Esta clase en concreto es la responsable de buscar un fichero de un determinado nombre en un array de paths definidos en los que se podr&iacute;a encontrar.</p><pre><code class="php">namespace Symfony\Component\Config;

/**
 * FileLocator uses an array of pre-defined paths to find files.
 */
class FileLocator implements FileLocatorInterface
{
    // ..
    public function locate(string $name, string $currentPath = null, bool $first = true)
    {
        // ..
    }
   // ..
}</code></pre><p>&iquest;Sabr&iacute;as decirme qu&eacute; hace exactamente el tercer argumento? Quiz&aacute; tengas la siguiente intuici&oacute;n, si le pasamos <code>true</code> probablemente devolver&aacute; la primera coincidencia, pero &iquest;qu&eacute; ocurre si le paso un <code>false?</code>. Si realmente quiero entender esta funci&oacute;n voy a necesitar ir al c&oacute;digo y leer que es lo que hace.</p><p>Una vez que ya nos hemos le&iacute;do el c&oacute;digo entendemos que el funcionamiento es el siguiente:</p><ul><li>si le paso un <code>true</code>, me devolver&aacute; la primera coincidencia</li><li>si le paso un <code>false</code> me devolver&aacute; todas.</li></ul><p>&iquest;No se lo pondr&iacute;amos mucho m&aacute;s f&aacute;cil al lector si somos expl&iacute;citos de esta forma?</p><pre><code class="php">namespace Symfony\Component\Config;

/**
 * FileLocator uses an array of pre-defined paths to find files.
 */
class FileLocator implements FileLocatorInterface
{
    // ..
    public function locateAll(string $name, string $currentPath = null)
    {
        // ..
    }

    public function locateFirst(string $name, string $currentPath = null)
    {
        // ..
    }
   // ..
}</code></pre><p>Como siempre esto no significa que debamos duplicar el c&oacute;digo, ya que probablemente podemos encontrar la forma de que uno llame a otro o utilizar funciones privadas m&aacute;s peque&ntilde;as, para evitar cualquier duplicidad.</p><h2>Hace dos cosas</h2><p>En muchas ocasiones un argumento booleano indica que la funci&oacute;n hace dos cosas diferentes. Como ya vimos en la entrada dedicada a funciones, estas deber&iacute;an hacer una &uacute;nica cosa y deber&iacute;an hacerla bien.</p><p>Veamos un ejemplo con el componente <code>DomCrawler</code> de <code>Symfony</code>. Este componente permite crear un cliente que simula ser un navegador y que se utiliza en pruebas funcionales y para tareas de scrapping.</p><p>La funci&oacute;n que vamos a ver se llama despu&eacute;s de haber ejecutado una query sobre un documento HTML <code>$message = $crawler-&gt;filterXPath('//body/p')-&gt;text();</code></p><pre><code class="php">namespace Symfony\Component\DomCrawler;

/**
 * Crawler eases navigation of a list of \DOMNode objects.
 */
class Crawler implements \Countable, \IteratorAggregate
{
    // ..
    /**
     * Returns the text of the first node of the list.
     *
     * Pass true as the second argument to normalize whitespaces.
     */
    public function text(string $default = null, bool $normalizeWhitespace = true)
    {
        // ..
    }
    // ..
}</code></pre><p>&iquest;No da la sensaci&oacute;n de que el segundo argumento responde a una necesidad del programador que a una decisi&oacute;n de dise&ntilde;o? &iquest;Qui&eacute;n realizar&iacute;a un dise&ntilde;o as&iacute;? Obviamente el siguiente ejemplo es mejor.</p><pre><code class="php">namespace Symfony\Component\DomCrawler;

/**
 * Crawler eases navigation of a list of \DOMNode objects.
 */
class Crawler implements \Countable, \IteratorAggregate
{
    // ..
    public function text(string $default = null)
    {
        // ..
    }

    public function normalizeWhitespace(string $text)
    {
        // ..
    }
    // ..
}</code></pre><p>Y una vez realizado este dise&ntilde;o, &iquest;no parece evidente que <code>normalizeWhitespace</code> deber&iacute;a ir en otra clase? esto lo veremos m&aacute;s adelante en la entrada dedicada a las clases.</p>
]]></description><guid>https://devtia.com/post/codigo-limpio-el-malvado-argumento-booleano</guid><pubDate>Sun, 12 Jul 2020 13:31:24 +0200</pubDate></item><item><title>Desarrollo a medida</title><link>https://devtia.com/post/desarrollo-a-medida</link><description><![CDATA[<p>El desarrollo de software a la medida es la soluci&oacute;n para cuando no es posible encontrar de una herramienta o aplicaci&oacute;n est&aacute;ndar que nos ayude a solventar nuestro problema.</p><h2>&iquest;Que tipos de desarrollos a medida existen?</h2><p>Un desarrollo a medida es un lienzo en blanco, donde tu tienes total control sobre el dise&ntilde;o y evoluci&oacute;n del software que est&aacute;s desarrollando.</p><p>Estos son algunos ejemplos de proyectos que pueden hacerse a medida:</p><div class="row mt-5"><div class="col-sm-3"><img alt="CRM" loading="lazy" src="/bundles/app/img/icon/crm.png" title="Plataforma de gesti&oacute;n de las relaciones con el cliente"></div><div class="col-sm-9"><h3 class="mt-0">CRM</h3><p>Una plataforma de gesti&oacute;n de la relaci&oacute;n con el cliente te permitir&aacute; llevar a tu equipo de ventas al siguiente nivel.</p><p>Su objetivo principal es la de la gesti&oacute;n de la empresa con el cliente, ya sea para organizar citas, emails, campa&ntilde;as de marketing o bases de datos en general. Tiene multitud de usos dependiendo del sector en el que trabajemos y de la finalidad que queremos conseguir con la herramienta.</p></div></div><div class="row mt-5"><div class="col-sm-9"><h3 class="mt-0">ERP</h3><p>Una plataforma de gesti&oacute;n empresarial te ayudar&aacute; optimizar tus procesos de producci&oacute;n ofreciendote asistencia en la toma de decisiones.</p><p>Su objetivo principal es la de la gesti&oacute;n de la base de datos de tu negocio a la que podr&aacute;s acceder en cualquier momento y en cualquier dispositivo. No perder&aacute;s tiempo en rellenar papeles, en que las cuentas no te cuadren o en no encontrar determinada informaci&oacute;n porque se ha traspapelado.</p></div><div class="col-sm-3"><img alt="ERP" loading="lazy" src="/bundles/app/img/icon/erp.png" title="Plataforma de gesti&oacute;n empresar&iacute;al"></div></div><div class="row mt-5 mb-5"><div class="col-sm-3"><img alt="LMS" loading="lazy" src="/bundles/app/img/icon/report.png" title="Plataforma de gesti&oacute;n de aprendizaje"></div><div class="col-sm-9"><h3>LMS</h3><p>Una plataforma de gesti&oacute;n de aprendizaje te permitir&aacute; gestionar de forma totalmente online todas las necesidades de tu centro de formaci&oacute;n.</p><p>Mejoramos la experiencia y facilitamos el aprendizaje de tus estudiantes a trav&eacute;s de nuestra tecnolog&iacute;a de formaci&oacute;n online.</p></div></div><p>Existen un proyecto a medida diferente para cada empresa, as&iacute; que no te preocupes si tu proyecto no encaja en ninguna de estos ejemplos.</p><h2>&iquest;C&oacute;mo es el proceso?</h2><p>Cada proyecto igual que cada empresa es totalmente diferente, pero estas deber&iacute;an ser las fases principales para el desarrollo de un proyecto a medida.</p><div class="row mt-5"><div class="col-sm-9"><h3 class="mt-0">An&aacute;lisis</h3><p>El primer paso siemre es que nos cuentes tu proyecto. Durante una o varias sesiones iremos tomando notas de cual es tu idea o cual es el problema que necesitas resolver. Mediante preguntas te iremos guiando para obtener la informaci&oacute;n que necesitamos saber.</p><p>Algunas preguntas que podemos hacerte son las siguientes:</p><ul><li>&iquest;Qu&eacute; es lo que esperas conseguir?</li><li>&iquest;Cuales son tus proyectos de referencia?</li><li>&iquest;De cuanto tiempo dispones?</li></ul></div><div class="col-sm-3"><img alt="An&aacute;lisis" loading="lazy" src="/bundles/app/img/icon/watch.png" title="An&aacute;lisis"></div></div><div class="row mt-5"><div class="col-sm-3"><img alt="Desarrollo" loading="lazy" src="/bundles/app/img/icon/automation.png" title="Desarrollo"></div><div class="col-sm-9"><h3 class="mt-0">Desarrollo</h3><p>En esta fase los diferentes requisitos son implementados en un proyecto de software, durante esta fase se requiere feedback e interacci&oacute;n continua por parte del cliente que en todo momento podr&aacute; y deber&aacute; comprobar la evoluci&oacute;n de su proyecto.</p><p>Es una fase a la que m&aacute;s tiempo y esfuerzo es necesario dedicar por ambas partes. Si quieres saber m&aacute;s en esta entrada explic&aacute;mos c&oacute;mo es nuestra metodolog&iacute;a <a href="/post/desarrollo-iterativo-e-incremental">iterativa e incremental</a>.</p></div></div><div class="row mt-5 mb-5"><div class="col-sm-9"><h3>Soporte y mantenimiento</h3><p>Esta etapa es la m&aacute;s larga ya que una vez que has decidido invertir en un desarrollo a medida, vas a querer amortizar esa inversi&oacute;n en un n&uacute;mero suficientemente grande de a&ntilde;os.</p><p>Muchas empresas se olvidan de que esta etapa es crucial, por eso nosotros tenemos dise&ntilde;ados procesos para poder acompa&ntilde;arte de la mejor manera posible durante esta etapa. No queremos que nos veas como un proveedor m&aacute;s, sino c&oacute;mo si fu&eacute;ramos la pata tecnol&oacute;gica de tu propio equipo.</p></div><div class="col-sm-3"><img alt="Soporte y mantenimiento" loading="lazy" src="/bundles/app/img/icon/interaction.png" title="Soporte y mantenimiento"></div></div><p>En esta entrada puedes ver c&oacute;mo es nuestra <a href="/post/nuestra-metodologia-de-trabajo">metodolog&iacute;a de trabajo.</a></p><h2>&iquest;Qui&eacute;n deber&iacute;a desarrollar un proyecto a medida?</h2><p>Deber&iacute;an plantearse la implantaci&oacute;n de un sistema de gesti&oacute;n empresarial todas aquellas empresas que respondan que si a alguna de estas preguntas.</p><ul><li>&iquest;Usas diferentes programas que no est&aacute;n conectados entre s&iacute;?</li><li>&iquest;Te gustar&iacute;a estandarizar y automatizar los procesos de tu empresa?</li><li>&iquest;Te gustar&iacute;a que tu persona fuera m&aacute;s eficiente y tener mayor control de lo que ocurre?</li></ul><h2>&iquest;Por que a medida?</h2><p>Estas son algunas de las razones por las que puede ser m&aacute;s conveniente desarrollar un proyecto a medida.</p><ul><li>No requiere pago de licencias, por lo que a medio plazo es m&aacute;s econ&oacute;mico.</li><li>Creado para tu negocio y adaptado a tus necesidades, adem&aacute;s crece y evoluciona seg&uacute;n evolucionan tus necesidades comerciales.</li><li>M&aacute;s sencillo e intuitivo, ya que est&aacute; dise&ntilde;ado para t&iacute;, a medida de tus productos y servicios.</li></ul><h2>&iquest;Por qu&eacute; con nosotros?</h2><p>Te vamos a dar 3 razones</p><ul><li><a href="/post/por-que-confian-en-nosotros">Por nuestra forma de trabajar</a></li><li><a href="/post/cuales-son-nuestros-valores">Por nuestros valores</a></li><li><a href="/post/como-cambian-las-empresas-cuando-trabajan-con-nosotros">Por la evoluci&oacute;n que tienen las empresas cuando trabajan con nosotros</a></li></ul><h2>Programa acelera pyme</h2><p>Hemos sido seleccionados como colaboradores oficiales del programa acelera pyme para el desarrollo e implantaci&oacute;n de projectos a medida.</p><p><img alt="Colaborador oficial del programa acelera pyme" loading="lazy" src="/cache/thumb_1200_0800/uploads/content/image/image/8806fc5d6f8fa004875d76cce24d498d9c658453.jpg" title="Colaborador oficial del programa acelera pyme"></p>
]]></description><guid>https://devtia.com/post/desarrollo-a-medida</guid><pubDate>Sat, 25 Apr 2020 17:50:44 +0200</pubDate></item><item><title>Código limpio: Argumentos</title><link>https://devtia.com/post/codigo-limpio-argumentos</link><description><![CDATA[<p>En esta entrada vamos a profundizar en la importancia que tienen los argumentos y ver algunas reglas para elegirlos y ordenarlos correctamente.</p><h2>N&uacute;mero de argumentos</h2><p>Seg&uacute;n el autor podr&iacute;amos clasificar las funciones o los m&eacute;todos seg&uacute;n el n&uacute;mero de argumentos posibles.</p><p><strong>Mon&aacute;dicaos</strong> tienen un s&oacute;lo argumento, son f&aacute;ciles de testear y f&aacute;ciles de entender. No hay lugar a dudas en cuanto a que es lo que hace y probablemente ser&aacute; bastante sencillo crear un test unitario para la misma. Siempre que podamos debemos basar nuestra api en este tipo de funciones.</p><p><strong>Di&aacute;dicos</strong> tienen dos argumentos. Siguen siendo relativamente f&aacute;ciles de entender, y probablemente seguir&aacute;n siendo f&aacute;ciles de testear.</p><p><strong>Triadicos </strong>son las que tienen tres argumentos, comienza a complicarse la forma de testear, aumenta la complejidad ciclom&aacute;tica o n&uacute;mero de "caminos" posibles dentro de la funci&oacute;n, y se complica recordar los argumentos y su orden. Este tipo de funciones deber&iacute;an evitarse si es posible.</p><p><b>Cuatro o m&aacute;s argumentos</b> Este tipo de funciones tienen todos los problemas que ya hemos comentado pero en mayor expotente. Veamos un ejemplo a continuaci&oacute;n la funci&oacute;n que ejecuta el filtro <code>localizeddate</code> de twig.</p><pre><code class="php">function twig_localized_date_filter(
    Twig_Environment $env,
    $date,
    $dateFormat = 'medium',
    $timeFormat = 'medium',
    $locale = null,
    $timezone = null,
    $format = null,
    $calendar = 'gregorian'
) {
    //..
}</code></pre><p>Habitualmente usamos esta funci&oacute;n de esta forma lo que la hace muy c&oacute;moda de usar</p><pre><code class="twig">{{ item.date|localizeddate }}
{{ item.date|localizeddate('short', 'none') }} {# el uso de las constantes es muy c&oacute;modo en el d&iacute;a a d&iacute;a. #}
</code></pre><p>El problema viene cuando queremos pasarle un formato personalizado. Es muy dificil de recordar cuales son los argumentos, y tenemos que ir a la documentaci&oacute;n para comprobarlo. Adem&aacute;s los primeros dos argumentos son ignorados lo que la vuelve un poco confusa.</p><pre><code class="twig">{{ item.date|localizeddate('none', 'none', null, null, 'MMMM y') }}
{{ item.date|localizeddate('full', 'full', null, null, 'MMMM y') }} {# ambas hacen lo mismo. #}</code></pre><p>&iquest;Que os parece si cambiamos esta funci&oacute;n por dos? En la primera usaremos las constantes definidas para <code>$dateFormat</code> y <code>$timeFormat</code> mientras que en la segunda usaremos un formato personalizado.</p><pre><code class="php">function twig_localized_date_filter(
    Twig_Environment $env,
    $date,
    $dateFormat = 'medium',
    $timeFormat = 'medium',
    $locale = null,
    $timezone = null,
    $calendar = 'gregorian'
) {
//..
}

function twig_localized_date_filter_by_format(
    Twig_Environment $env,
    $date,
    $customFormat = null,
    $locale = null,
    $timezone = null,
    $calendar = 'gregorian'
) {
//..
}</code></pre><p>Hemos reducido un poco el n&uacute;mero de argumentos y hemos facilitado su utilizaci&oacute;n, ya que el uso de la segunda funci&oacute;n quedar&iacute;a en algo parecido a esto.</p><p class="text-muted">Nota: Aunque todav&iacute;a son muchos argumentos el primero es injectado por <code>twig</code> asi que contar&iacute;a uno menos.</p><pre><code class="twig">{{ item.date|localizeddate('da_igual_lo_que_pongas', 'da_igual_lo_que_pongas', null, null, 'MMMM y') }} {# antes #}
  {{ item.date|localizeddate_by_format('MMMM y') }} {# mejor esta no? #}</code></pre><h2>Grupos de argumentos</h2><p>En el caso en el que tenemos una funci&oacute;n con un grupo de argumentos relacionados entre s&iacute;, <strong>podemos agruparlos todos ellos en una clase</strong> de forma que nuestro c&oacute;digo mejora en su legibilidad. Es lo que han hecho aqu&iacute;.</p><p>&iquest;Que os parece si crearamos una clase para almacenar la configuraci&oacute;n de la localizaci&oacute;n <code>$locale</code>, <code>$timezone</code>, <code>$calendar</code>. Es muy probable que este grupo de argumentos se repitan en otras funciones.</p><pre><code class="php">class Localization
{
    private $locale = null;
    private $timezone = null;
    private $calendar = 'gregorian';

    public function __construct($locale, $timezone, string $calendar)
    {
        $this-&gt;locale = $locale;
        $this-&gt;timezone = $timezone;
        $this-&gt;calendar = $calendar;
    }

}</code></pre><p>Con esto mejoramos mucho la legibilidad del c&oacute;digo, veamos c&oacute;mo quedar&iacute;an nuestras funciones anteriores</p><pre><code class="php">function twig_localized_date_filter(
    Twig_Environment $env,
    $date,
    $dateFormat = 'medium',
    $timeFormat = 'medium',
    $localization
) {
//..
}

function twig_localized_date_filter_by_format(
    Twig_Environment $env,
    $date,
    $customFormat = null,
    $localization
) {
//..
}</code></pre><h2>Orden de argumentos</h2><p>A partir de este punto todo lo que vamos a ver no aparece en el libro, pero si que hemos querido completarlo con algunos criterios adicionales. Deber&iacute;as tener en cuenta las siguientes condiciones a la hora de elegir el orden de los argumentos.</p><ul><li>Los m&aacute;s importantes primero.</li><li>Utiliza el contexto para que el lector sepa cual es el primer argumento.</li><li>Trata de agrupar por tipos.</li><li>Argumentos opcionales al final.</li></ul><h2>Nombres</h2><p>Los nombres de tus argumentos son parte de tu funci&oacute;n. Trata de que s&eacute;an lo m&aacute;s expec&iacute;ficos posibles, ayuda al lector a entender tu funci&oacute;n y lo que pueda esperar de ella, a trav&eacute;s de esos nombres. &iquest;Que te parece este cambio?</p><pre><code class="php">function twig_localized_date_filter(
    Twig_Environment $env,
    $dateTime, // $date no era fiel a la realidad, ya que en ese argumento no importa s&oacute;lo la fecha, si no tambi&eacute;n la hora.
    $dateFormat = 'medium',
    $timeFormat = 'medium',
    $localization
) {
//..
}</code></pre><h2>Tipado</h2><p>El &uacute;ltimo apartado que me gustar&iacute;a ver en esta entrada es el tipado. La regla es muy sencilla. Tipa siempre que puedas.</p><pre><code class="php">function twig_localized_date_filter(
    Twig_Environment $env,
    \DateTime $date,
    string $dateFormat = 'medium',
    string $timeFormat = 'medium',
    Localization $localization = null
) {
//..
}

function twig_localized_date_filter_by_format(
    Twig_Environment $env,
    \DateTime $date,
    string $customFormat,
    Localization $localization = null
) {
//..
}</code></pre><p>El tipado tambi&eacute;n forma parte de tu funci&oacute;n, quiz&aacute; no tengas claro que es exactamente <code>$localization</code>, pero el tipado te ayuda a entender que se trata de una clase.</p>
]]></description><guid>https://devtia.com/post/codigo-limpio-argumentos</guid><pubDate>Sat, 04 Jul 2020 09:56:47 +0200</pubDate></item><item><title>El plan de formación</title><link>https://devtia.com/post/el-plan-de-formacion</link><description><![CDATA[<p>En DEVTIA hay un concepto en el que creemos fervientemente como sin&oacute;nimo de buena cultura empresarial: <strong>la formaci&oacute;n</strong>. La empleabilidad de nuestro equipo es una de nuestras prioridades. Creemos que crear un buen sistema de formaci&oacute;n es esencial para acabar viendo resultados satisfactorios a largo plazo.</p><blockquote class="blockquote"><p class="mb-0">&ldquo;S&oacute;lo hay algo peor que formar a tus empleados y que se vayan. No formarlos y que se queden&rdquo;</p><cite title="Henry Ford.">Henry Ford.</cite></blockquote><p>Nos tomamos muy enserio el desarrollo profesional de toda nuestra plantilla, proporcion&aacute;ndoles espacios para actualizarse en sus respectivas materias. <strong>A continuaci&oacute;n, os explicamos en qu&eacute; se basa nuestro sistema de formaci&oacute;n y cu&aacute;les son sus claves principales</strong>.</p><h2>VENTAJAS DE FORMAR A NUESTRO EQUIPO</h2><p><strong>La formaci&oacute;n</strong> cuenta con numerosos beneficios que se ven reflejados en la plantilla, se logra que su conocimiento no se quede anticuado ni obsoleto y que pueda seguir rindiendo al m&aacute;ximo nivel seg&uacute;n las exigencias del mercado, adquiriendo las ense&ntilde;anzas m&aacute;s vanguardistas del sector. <strong>La empresa tambi&eacute;n se ver&aacute; beneficiada de esta formaci&oacute;n llegando a aumentar los beneficios y la productividad</strong>.</p><p>Seg&uacute;n nuestra experiencia, esta son las mayores ventajas de contar con una formaci&oacute;n estructurada en tu empresa:</p><ol><li><strong>Motivaci&oacute;n</strong>: el sector del desarrollo software se caracteriza por su baja permanencia laboral. Una buena formaci&oacute;n hace que el trabajador est&eacute; m&aacute;s motivado a permanecer en nuestra empresa y a elegirnos a pesar de otras tentativas ofertas.</li><li><strong>Reclutar talento</strong>: hay una atracci&oacute;n clara por parte de los trabajadores hacia empresas que posibilitan formaci&oacute;n continua que, sin duda, es una estrategia &oacute;ptima para reclutar y mantener a los mejores empleados.</li><li><strong>Calidad del trabajo</strong>: un trabajador que se encuentra form&aacute;ndose y aprendiendo continuamente se sentir&aacute; m&aacute;s realizado en su puesto de trabajo, lo que acabar&aacute; desembocando en un notable aumento de la productividad. La positividad desprendida por trabajadores que se encuentran satisfechos hace que se genere una corriente en la que todo el mundo quiere aprender, eso es contagioso y va en beneficio de la empresa.</li><li>Obtenci&oacute;n de una <strong>ventaja competitiva</strong>: la implantaci&oacute;n de un buen modelo de formaci&oacute;n har&aacute; que la empresa obtenga ciertas ventajas competitivas con respecto a empresas m&aacute;s tradicionales que no han optado por esta alternativa. Esto es important&iacute;simo dada la gran competitividad existente en el sector de desarrollo software.</li></ol><h2>NUESTRO PLAN DE FORMACI&Oacute;N</h2><p>Una parte de la responsabilidad del &eacute;xito de la formaci&oacute;n debe recaer en la empresa, pero los empleados tambi&eacute;n tienen la tarea de seguir aprendiendo por s&iacute; mismos. Nosotros ofrecemos una peque&ntilde;a ayuda, pero adem&aacute;s queremos que la plantilla tenga una actitud proactiva con respecto a su formaci&oacute;n.</p><p>Nuestro sistema se asienta en unas bases que cumplimos sistem&aacute;ticamente para obtener los mejores resultados posibles.</p><h3>Sistema continuado en el tiempo</h3><p>Creemos que para alcanzar el &eacute;xito el plan de formaci&oacute;n debe de ser <strong>sostenible y continuado en el tiempo</strong>, es decir, que no cuente con una duraci&oacute;n exacta, sino que se prolongue a lo largo de la evoluci&oacute;n y el crecimiento de la empresa y vaya encajando con las necesidades que la misma requiera.</p><p>La formaci&oacute;n no es solo el tiempo dedicado en una formaci&oacute;n reglada cuyo fin es obtener una certificaci&oacute;n o un t&iacute;tulo, <strong>nosotros consideramos formaci&oacute;n a todo proceso que el equipo realiza para mejorarse a s&iacute; mismo</strong> y esto puede incluir numerosas actividades: charlas, networking, realizaci&oacute;n de cursos, seminarios...</p><h3>Horario de la formaci&oacute;n</h3><p><img alt="Horario Formaci&oacute;n" src="/cache/thumb_1200_0200/uploads/content/image/image/253aa2ad8218533083373dd1c86f708f4e11a142.jpg" loading="lazy"></p><p>El tiempo establecido actualmente para la formaci&oacute;n en nuestra empresa es una hora semanal.</p><p><strong>Tenemos fijado un d&iacute;a y una hora, actualmente, los lunes a las 8:00 A.M</strong>. Aunque somos flexibles, procuramos respetar esa fecha para que la formaci&oacute;n no sea algo que se hace cuando no hay nada urgente.</p><p>Queremos que la formaci&oacute;n sea lo m&aacute;s llevadera posible, nada tediosa y que incluso pueda llegar a disfrutarse</p><h3>&iquest;Qu&eacute; hacemos durante este tiempo de formaci&oacute;n?</h3><p><strong>Si hay un responsable en el equipo</strong> que se quiere hacer cargo de la formaci&oacute;n:</p><p>lo primero que har&aacute; ser&aacute; reunir al equipo entero para discutir sobre qu&eacute; se va a profundizar en este tiempo. El equipo siempre va a estar m&aacute;s motivado con un tema que sea de inter&eacute;s com&uacute;n, <strong>elegido entre todos</strong>. El responsable ser&aacute; quien imparta los contenidos y coordinar&aacute; los debates que se te establezcan.</p><p>Lo malo de que haya un solo responsable y se delegue en &eacute;l todo el peso de la formaci&oacute;n es que pueden surgir imprevistos (no disponibilidad, enfermedad&hellip;) que entorpezcan la consecuci&oacute;n de los objetivos marcados.</p><p><strong>Este responsable potenciar&aacute; la realizaci&oacute;n de diversas actividades relacionadas con la revisi&oacute;n de c&oacute;digo</strong>, novedades del lenguaje software, nos familiarizar&aacute; con las mejores herramientas, veremos juntos charlas de expertos del sector elegidas por &eacute;l e incluso profundizar&aacute; en el framework empresarial.</p><p><strong>Si no hay responsable </strong>para realizar la formaci&oacute;n<strong>:</strong></p><p>Si no hay voluntarios para llevar el peso de la formaci&oacute;n, <strong>lo que hacemos es realizar cursos online sobre las mismas actividades</strong>, para ello utilizamos diversas plataformas de pago que ofrecen esta formaci&oacute;n con garant&iacute;as como pueden ser:</p><ul><li>Coursera</li><li>Udacity</li><li>LinkedIn learning</li><li>Symfony cast</li><li>CodelyTV</li></ul><p>Dedicamos los primeros 45 minutos aproximadamente a ver cursos online, que normalmente est&aacute;n divididos en peque&ntilde;os v&iacute;deos de 5 a 10 minutos, por lo que en esta hora que dedicamos a la formaci&oacute;n nos da tiempo a visualizar 3 o 4 lecciones, y teniendo algo de tiempo entre los videos para ir comentandolos.</p><p>Los minutos restantes los dedicamos para debatir y discutir juntos en qu&eacute; estamos de acuerdo y en qu&eacute; no o c&oacute;mo nos puede servir o c&oacute;mo aplicar lo que hemos aprendido a nuestros proyectos.</p><p>Las ventajas de esta opci&oacute;n son claras, no dependemos de que nadie prepare nada, simplemente necesitamos tener programado una lista con una serie de contenidos que sean relevantes para nuestra actividad y que podamos ir adaptando a las necesidades de nuestra empresa.</p>
]]></description><guid>https://devtia.com/post/el-plan-de-formacion</guid><pubDate>Wed, 26 Feb 2020 22:19:43 +0100</pubDate></item><item><title>¿Qué es un LMS?</title><link>https://devtia.com/post/que-es-un-lms</link><description><![CDATA[<p>Las instituciones y empresas de &iacute;ndole formativa han ido evolucionando hac&iacute;a un terreno m&aacute;s tecnol&oacute;gico con el paso del tiempo, incluyendo progresivamente herramientas para aumentar la eficiencia de determinados procesos y la comodidad tanto del empleado como del alumno.</p><p>En el &aacute;mbito de la educaci&oacute;n, las herramientas que han transformado todo este proceso son las llamadas plataformas LMS. Este t&eacute;rmino sigue generando confusi&oacute;n y no acaba de quedar del todo claro para la amplia mayor&iacute;a de gestores de empresas formativas.</p><p>Aqu&iacute; te explicamos todo lo que necesitas saber sobre este tipo de herramientas.</p><h2>&iquest;Qu&eacute; es una plataforma LMS?</h2><p><img alt="25aae635aaafe7f88ea242309cfaca11b22d97bb.jpg" src="/cache/thumb_1200_0200/uploads/content/image/image/25aae635aaafe7f88ea242309cfaca11b22d97bb.jpg" loading="lazy"></p><p>Si alguna vez has participado en un curso, m&aacute;ster, grado o cualquier tipo de ense&ntilde;anza online, probablemente hayas trabajado a trav&eacute;s de una plataforma LMS.</p><p>LMS es el acr&oacute;nimo de <strong>Learning Management System </strong>(Sistema de Gesti&oacute;n del Aprendizaje). Estos sistemas son softwares que permiten a las instituciones o empresas formativas <strong>crear, administrar y evaluar todos los contenidos necesarios dentro de un contexto de e-learning</strong>. Este sistema ayuda a la empresa u organizaci&oacute;n a proveer la informaci&oacute;n necesaria para el desarrollo de la actividad profesional y formativa.</p><p>Estos sistemas engloban tanto a altos directivos de la empresa, como a trabajadores y alumnado que est&aacute;n realizando cualquier tipo de formaci&oacute;n.</p><h2>Beneficios de un LMS</h2><p><img alt="f0f8de88a7b16f4c97369779aa0a0b88ac514b37.jpg" src="/cache/thumb_1200_0200/uploads/content/image/image/f0f8de88a7b16f4c97369779aa0a0b88ac514b37.jpg" loading="lazy"></p><h3>Personalizaci&oacute;n</h3><p>Permiten <strong>una gran flexibilidad en cuanto al dise&ntilde;o de sus funcionalidades, dependiendo de la empresa y del tipo de formaci&oacute;n que ofrezca</strong>, la herramienta se construir&aacute; de una manera u otra para que funcione lo m&aacute;s eficientemente posible.</p><p>Por ejemplo, una empresa que se dedica a la formaci&oacute;n online de conductores, no necesitar&aacute; las mismas funcionalidades que una universidad privada que quiere desarrollar un sistema de e-learning completo. Por ello es importante que la empresa que desarrolle la plataforma LMS la haga a medida para que la personalizaci&oacute;n sea efectiva.</p><h3>Comunicaci&oacute;n</h3><p>Los sistemas LMS facilitan la comunicaci&oacute;n con el equipo gestor, lo cual acaba traduci&eacute;ndose en un aumento de la colaboraci&oacute;n, la confianza y el buen clima. Tambi&eacute;n incrementa la comunicaci&oacute;n entre profesorado y alumnado que pueden comunicarse a trav&eacute;s de mensajes del chat, usando video o im&aacute;genes, subiendo archivos, lo que hace que el di&aacute;logo entre ellos sea mucho m&aacute;s fluido y cercano a trav&eacute;s de un LMS que sin &eacute;l.</p><h3>Centralizaci&oacute;n</h3><p>Centralizar la amplia mayor&iacute;a de los procesos existentes en una misma herramienta hace que aumente considerablemente la eficacia en la gesti&oacute;n.</p><p>Por ejemplo, procesos que antes iban por separado como las pre inscripciones o matr&iacute;culas de un determinado curso, ahora se encuentran recogidos en un mismo espacio, sabiendo a la perfecci&oacute;n qui&eacute;n ha hecho qu&eacute;, c&oacute;mo lo ha hecho y cu&aacute;ndo lo ha hecho lo que se traduce en un aumento de la rapidez y la eficiencia de respuesta de cara al p&uacute;blico.</p><h3>Control</h3><p>Al poder contar con toda la informaci&oacute;n condensada en un mismo programa, <strong>la actividad de los estudiantes, profesores y del equipo gestor quedar&aacute; fielmente reflejada</strong> en ella. De esta manera las empresas podr&aacute;n evaluar cuando sea necesario el desempe&ntilde;o de su plantilla tanto individual como colectivamente, adem&aacute;s de saber si la formaci&oacute;n recibida est&aacute; siendo la adecuada y est&aacute; contentando a las personas que se encuentran dentro del programa formativo.</p><p>Todo queda almacenado en una gran base de datos que contendr&aacute; cualquier tipo de informaci&oacute;n relevante para el desarrollo de la actividad.</p><h3>Acceso desde cualquier dispositivo y lugar</h3><p>Tanto estudiantes como personal laboral podr&aacute;n acceder a la herramienta de e-learning cuando quieran y desde donde crean conveniente, compaginando sus estudios o trabajo con las obligaciones de su d&iacute;a a d&iacute;a. De hecho, esta es una de las principales razones por la que se elige este tipo de formaci&oacute;n.</p><p>Al ser la LMS una plataforma totalmente responsive, ser&aacute; posible acceder a ella no solo desde un ordenador sino desde cualquier tipo de dispositivo.</p><h3>Monitorizaci&oacute;n</h3><p>El acceso instant&aacute;neo a<strong> reportes personalizados y avanzados</strong> permiten una evaluaci&oacute;n f&aacute;cil y precisa de los progresos obtenidos por la empresa en determinados periodos de tiempo, haciendo simple su interpretaci&oacute;n.</p><h2>&iquest;Le conviene a tu empresa formativa contratar un LMS?</h2><p><img alt="47624bc72572f314ee4458061bcc8d5a5e5c79c7.jpg" src="/cache/thumb_1200_0200/uploads/content/image/image/47624bc72572f314ee4458061bcc8d5a5e5c79c7.jpg" loading="lazy"></p><p>Si eres una empresa que se dedica a la formaci&oacute;n de terceros, pero esta formaci&oacute;n se realiza de manera 100% presencial, probablemente creas que no necesitas implementar un LMS. Sin embargo, desde Devtia te recomendamos que vayas incluyendo progresivamente contenido online, ya que hoy en d&iacute;a quienes contratan estos servicios otorgan importancia a un contenido de apoyo online, aunque el curso sea presencial y no se base en el e-learning.</p><p>Si tu empresa compagina la formaci&oacute;n presencial con la online, lo correcto ser&iacute;a <strong>que te plantees seriamente la opci&oacute;n de implementar un buen LMS</strong>, ya que con &eacute;l se pueden mejorar procesos y adem&aacute;s de aportar un valor a&ntilde;adido a tu negocio servir&aacute; de soporte a la parte presencial.</p><p>Si te dedicas o quieres dedicarte a la formaci&oacute;n completamente online o que se base en el e-learning, <strong>&iquest;a qu&eacute; esperas para implementar un LMS?</strong></p>
]]></description><guid>https://devtia.com/post/que-es-un-lms</guid><pubDate>Tue, 31 Dec 2019 11:26:00 +0100</pubDate></item></channel></rss>