Development

  • 3 tendencias emergentes que marcarán el futuro de la programación

    La tecnología avanza a pasos agigantados y, de repente, lo que era lo más común deja de serlo. Te quedas fuera, desfasado. Por ello es importante estar atento a la hora de detectar las tendencias que nos llevarán al futuro del desarrollo software. No hablamos de modas o de los lenguajes que más marketing hacen. Hablamos de lo que realmente están haciendo y aprendiendo los programadores, así como las tecnologías que, aunque minoritarias a día de hoy, serán los estándares de facto del futuro.

    Basándonos en el estudio realizado por la plataforma educativa de O’Reilly, hemos analizado los resultados y conclusiones del informe. Una combinación de términos de búsquedas y temas que los desarrolladores están explorando y demandando activamente, lo que da un consistente indicador de los temas cuya tendencia ascendente en popularidad merece echar un vistazo.

    En el radar de O’Reilly se encuentran 3 tendencias claves, que más adelante analizaremos:

    • El fuerte crecimiento de temas relacionados con el cloud. Ya no se trata solamente de llevar una aplicación a la nube sino de su arquitectura y como sistemas cada vez más complejos y enormes han empujado a los microservicios, apoyándose, en la orquestación de servicios mediante Kubernetes.

    • El Blockchain que para algunos sigue sonando al hype de las criptomonedas, tiene una gran cantidad de usos donde desarrollar aplicaciones distribuidas sin depender de una autoridad central. No solo transacciones monetarias, sino contratos inteligente o verificaciones de autoridad.

    • Python, Java y JavaScript siguen dominando y parece que cada año revalidan su relevancia gracias a su ecosistema en constante evolución. También empiezan a sonar fuerte: Rust o Go como lenguajes modernos que ayuden a ser más productivos a los desarrolladores a la vez que permiten un alto rendimiento y escalabilidad.

     
     
    1366 2000
     Top de términos en la plataforma educativa de O'Reilly

     

    La siguiente arquitectura ya está aquí: Docker + Kubernetes

    No se trata solo de llevar a la nube las aplicaciones sino aislar cada aplicación en microservicios

    Pocas startups no están construidas a día de hoy basándose en microservicios, usando contenedores Docker para desplegar y escalar servicios orquestando esta arquitectura cada vez más grande usando Kubernetes. El foco queda claro que está en la escalabilidad y la descomposición de cada problema particular en un servicio especializado.

    1366 2000
     
     
     

    Debido a la flexibilidad que necesita una organización, llevamos años viendo com Amazon Web Services, Google Cloud o Microsoft Azure no paran de crecer. Los tres grandes actores del mercado se llevan gran parte de la tarta del cloud empresarial. El primero de todo, AWS sigue siendo el rey con cada vez más servicios concretos a un problema especifico, pero la migración de grandes compañías hacia la nube de Google Cloud abre camino a otro competidor importante.

    Docker no es ningún recién llegado. Forma parte fundamental de esta arquitectura que permite descomponer y modular cada servicio en la nube. Y por otro lado, se busca ayudar a la productividad del desarrollador aislando al máximo esos microservicios en su propio entorno, con solo sus propias dependencias y configuraciones que no entren en conflicto con el resto de servicios. Además que, un factor fundamental en esta arquitectura es la integración continua y el desarrollo continuo: lo que significa que nosotros podemos desarrollar nuevo código, crear una nueva build, empaquetarla y crear una imagen de Docker para ser desplegada a produción con la mínima fricción.

    Todo este gran número de microservicios, ejecutándose en algunos casos en centenares o miles de contenedores justifican un claro enfoque en herramientas que sean capaces de orquestar toda esa nube de recursos como Kubernetes. Desde que fuera liberado como proyecto open-source por Google, Kubernetes representa el ingrediente esencial para escalar productos a nivel global con total confianza y estabilidad. El estándar de factor queda claramente representado en Docker + Kubernetes.

     

    Blockchain madurando poco a poco para ser la base que revolucionará internet

    Probablemente la confusión entre Blockchain y criptomonedas sigue estando presente. Pero cabe recordar el origen del blockchain, un sistema distribuido, donde no necesitemos una entidad centralizada para realizar operaciones. La posibilidad de crear contratos inteligentes muestra el potencial tremendo de estas plataformas que no sólo revolucionará las finanzas sino también internet.

    Teniendo una gran base de datos distribuida donde toda la información está almacenada en bloques, los cuales son inmutables, es decir, nadie puede modificarla, abre un amplio abanico de posibilidades de desarrollo poco exploradas a día de hoy.

    smartcontract
    Smartcontracts usando Blockchain

     

    Entre las tecnologías relacionadas nos encontramos con Ethereum, no confundir con la criptomoneda Ether. Con ello podemos crear esos smart contract como piezas de código autocontenidas que definan acuerdos entre múltiples partes dentro del blockchain. Más concretamente, uno de los lenguajes a tener en cuenta es Solidity con un sintaxis similar a JavaScript y C con lo que podemos desplegar esas pequeñas entidades de código EVM (Ethereum Virtual Machine). Y tampoco podemos olvidarnos de Bitcoin o la influencia de blockchain como elemento de seguridad y sincronización en IoT.

    El principal foco es construir APIs que accedan al blockchain, crear algoritmos de consenso para verificar la información y mantener la red de blockchain sincronizadas. Un incipiente ecosistema por construir con algunas herramientas ya presentes que no hay que dejar escapar.

    Python, Java y JavaScript continúan su dominio apoyados en el Machine Learning

    Año tras año vemos a estos tres lenguajes en el top de cada ranking que se crea sobre tendencias y usos. Vamos a analizar la explicación no sólo viven de que históricamente tienen un amplio ecosistema y cuota de mercado ganada sino como las nueva tendencias se apoyan en estos tres lenguajes.

    Machine Learning es una de las tecnologías que más apoyo recibe de la comunidad de Python. Muchas de las librerías que se utilizan en Data Science tienen su base en Python. También la apuesta de Google por TensorFlow cuya API está basada en interfaces Python ha ayudado al interés por este lenguaje con bastante veteranía y solidez demostrada a la hora de analizar y extraer datos de grandes cantidades de información.

    tensorflow
     
    El stack técnico de Tensor Flow

     

    Tenemos también algunos ejemplos como PyTorch, una librería para computer vision y procesamiento de lenguaje natural que ha escalado relevancia junto con otra librería como scikit-learn.

    Java sigue siendo uno de los lenguajes claves en el de desarrollo de aplicaciones a gran escala, escoltado por Scala y Kotlin aprovechándose de la JVM. Así todos los avances de en soluciones Big Data siguen confiando en Java. Nos encontramos con tecnologías ampliamente utilizadas como Spark o Kafka.

    Y, por último, JavaScript sigue siendo el rey dentro del ecosistema web. Con un crecimiento menor que el resto pero que tiene en framework como Angular, React o Vue, a este último le dedicamos un post especial hablando de las principales razones para usarlo.

    Entre los otros lenguajes que se han colado en el ranking de O’Reilly están Go debido a su combinación de sintaxis fácil, gran soporte de concurrencia y una activa comunidad de desarrolladores, apoyada por Google. Aunque tampoco podemos olvidar de Rust, un lenguaje de sistemas muy cercano al rendimiento que provee C, seguro, con un eficiente uso de memoria, soporte de concurrencia nativa y una sintaxis moderna.

     

    Fuente: https://www.genbeta.com/desarrollo/3-tendencias-emergentes-que-marcaran-futuro-programacion

  • 6 cosas que discutir con su desarrollador web antes de iniciar un proyecto

    Así que estás diseñando un nuevo sitio web o tienda en línea, y necesitas un desarrollador web. Es posible que los necesite para desarrollar un sitio desde cero. O tal vez simplemente los necesita para trabajar con algunos ajustes, cambios, problemas o funcionalidad adicional.

    De cualquier manera, su relación con su desarrollador web puede ser difícil de administrar. Soy un desarrollador, así que sé que hay tantas, tantas maneras en que la relación puede fracasar:

    • Plazos perdidos
    • Falta de comunicación
    • Comunicación lenta
    • Sin comunicacion
    • Desarrollador promete demasiado
    • Desarrollador bajo entrega
    • Desarrollador desaparece
    • Alcance poco definido
    • Falta de protocolo para pequeños supuestos / decisiones
    • Errores o problemas no se solucionan

    Prácticamente todos los diseñadores con los que trabajo han compartido una historia de terror relacionada con una de esas cosas. Con el fin de evitar convertirme en una historia de terror, he desarrollado una lista práctica de elementos de discusión previos al inicio para ayudarnos a evitar este tipo de problemas.

    Antes de entrar en esto, seamos claros: esto no es un remedio para todas las relaciones entre diseñadores y desarrolladores. Al final del día, sigue siendo una relación humana, es complicada. Pero he descubierto que una conversación abierta sobre estos elementos puede iniciar un proyecto con el pie derecho.

    1. ¿Cómo nos comunicaremos?

    ¿Cómo te comunicarás mientras trabajas en el proyecto? ¿Flojo? ¿Llamadas telefónicas? ¿Textos? Correos electrónicos? Software de mensajería privada? Igual de importante: ¿ Con qué frecuencia se comunicará? ¿Todos los días? ¿Una vez por semana? En el kickoff, y luego no otra vez hasta QA? Si está haciendo un registro diario, ¿será un correo electrónico de dos oraciones o una llamada telefónica de 15 minutos? ¿Cuál es el plan en caso de emergencias?

    Más comunicación no siempre es mejor comunicación

    No hay respuestas incorrectas aquí, siempre y cuando establezca expectativas al comienzo. Pero recuerde: más comunicación no siempre es mejor comunicación.

    Por qué esto importa

    Desea tener una buena relación con su desarrollador, y para lograrlo, necesita un modo de comunicación establecido. Por lo general, una llamada telefónica es útil para desarrollar una conexión personal inicial y para asegurarse de que sea una buena personalidad.

    Durante el desarrollo, trabaje para lograr un equilibrio entre registrar demasiado y muy poco. Demasiado y tu eres micro-gestor. Demasiado poco y el desarrollador podría no mantenerse en el camino. Es mejor establecer las expectativas en la parte superior y atenerse a ellas.

    2. ¿Cómo manejará el proyecto?

    ¿Dónde están los archivos y las credenciales de inicio de sesión que necesitará el desarrollador? ¿Dónde realizará el seguimiento de las tareas, los hitos y los plazos? ¿Qué software utilizarás? ¿Campamento base? Trello? Asana? ¿Una hoja de cálculo o Google Doc? Básicamente, define el hub central para todo lo relacionado con el proyecto.

    Por qué esto importa

    Durante el proyecto, la gestión y la comunicación de su proyecto deben ser centralizadas y rastreables. Se puede perder mucho tiempo en la búsqueda de archivos, registros, actualizaciones, progreso, preguntas, decisiones, etc. Es por eso que es importante establecer dónde el desarrollador puede encontrar todo lo que necesita.

    3. ¿Quién toma las decisiones?

    ¿Eres tú quien toma la decisión final sobre el proyecto? ¿Hay un equipo de UI / UX involucrado? ¿Hay alguien más que tenga una opinión sobre las decisiones? ¿Hay un equipo de marketing o un gerente que quiera tomar en cuenta las decisiones? ¿Hay alguien más aparte de usted que va a orientar directamente al desarrollador? ¿Cuándo entra el cliente y cuántas decisiones toma el cliente? ¿El cliente tendrá comunicación directa con el desarrollador?

    Por qué esto importa

    No desea dar marcha atrás en el desarrollo, o hacer que su desarrollador vuelva a trabajar. Para evitar eso, es importante que cada parte interesada esté al tanto de todas las decisiones relevantes, y que cada decisión se registre en una única ubicación central.

    4. ¿Cómo debe el desarrollador manejar las suposiciones y las pequeñas decisiones?

    ¿Cuánta libertad tiene el desarrollador al interpretar diseños? ¿Deberían construir el sitio web de píxeles perfectos de acuerdo con los diseños, o deberían hacer pequeños supuestos sobre la consistencia y la reutilización de las secciones? Si ha diseñado un sitio receptivo, ¿ha diseñado para todos los puntos de interrupción? ¿Ha proporcionado notas sobre animaciones, transiciones y efectos de desplazamiento? ¿Has diseñado estados de validación para campos? (es decir, las ventanas emergentes: "Contraseña no válida" o "Nombre de usuario no existe".) Si no lo ha hecho, ¿el desarrollador es libre de tomar decisiones o sugerencias?

    Por qué esto importa

    Muy a menudo, los diseñadores se sienten insatisfechos cuando un sitio web no se corresponde con los diseños, o, a la inversa, cuando el sitio sigue muy de cerca los diseños, en detrimento de su rendimiento o la línea de tiempo del proyecto. Al principio, define el nivel de detalle deseado. Lo hace para un proceso de control de calidad mucho más suave.

    5. ¿Cuál es la línea de tiempo?

    ¿Cuál es la fecha límite difícil para el proyecto y cuál es la fecha límite blanda? ¿Se está produciendo un gran éxito de prensa para el cual se debe lanzar el sitio? Si la fecha límite es ambiciosa, ¿hay una manera de lanzarlo en fases? ¿Cuál es la expectativa de responder a los cambios rápidos? ¿Una semana de vuelta? ¿Menos de una hora?

    Por qué esto importa

    realmente no ayuda a crear plazos duros artificiales... la honestidad es la mejor política

    Si hay un plazo límite, haga que el desarrollador lo sepa y asegúrese de dejar tiempo para realizar las pruebas adecuadas. Después de que se inicie el sitio, sepa que la mayoría de los desarrolladores no pueden estar disponibles a todas horas para realizar cambios. Esperar a que un desarrollador haga una solución puede ser frustrante, pero incluso las solicitudes pequeñas requieren mantener el control de la versión, iniciar el entorno de desarrollo, conectarse al servidor, implementar en el sitio de producción, etc. Determine con anticipación durante cuánto tiempo espera que se realicen correcciones y cambios Tomar y hacer un balance del nivel de prioridad de cada tarea.

    Además, realmente no ayuda a crear plazos duros artificiales. Solo sea transparente con su desarrollador y confíe en ellos para que lo entreguen en consecuencia. Una vez más, estás construyendo una relación, aquí. La honestidad es la mejor política.

    6. ¿Cuál es la estructura del alcance, el contrato y la estructura de pago?

    ¿Cuál es el costo del proyecto? ¿Cuál es el punto de referencia para el final del proyecto? ¿Qué se incluye en el alcance del proyecto? ¿Cuándo sale el pago? ¿Está contratando al desarrollador para que haga el proyecto a una tarifa fija o por hora?

    Por qué esto importa

    Lo último que desea es que un desarrollador obtenga un sitio al 95% del camino y no inicie el proyecto debido a una discrepancia en el alcance / contrato / pago.

    Conclusión

    En general, establecer las expectativas y la comunicación son las cosas críticas aquí. Puede parecer un poco tonto discutir cómo se hablarán entre ellos durante un proyecto, especialmente si ya tiene una buena relación. Pero siempre es bueno establecer expectativas antes de tiempo, para que no termines dentro de tu propia historia de terror.

     

    Fuente: https://www.webdesignerdepot.com/2019/03/6-things-to-discuss-with-your-web-developer-before-kickoff/