Esneyder Amin Palacios Mena

Desarrollador de software, Ingeniero de sistemas y

co-founder de @hackdo y @quibdojs

Desarrollo de

software

con código limpio

¿ Que es el desarrollo de software ?

 

Proceso de:

  1. Planear
    • Requerimientos y funcionalidades.
  2. Programar
    • ​​Definición de herramientas y tecnologías.
    • Software libre ?
  3. Documentar
    • Documentación técnica del sistema.
    • UML.
  4. Probar
    • Testing automatizado.
  5. Depurar
    • Detectar y eliminar posible errores o vulnerabilidades.

Con el objetivo solucionar un problema mediante software.

Impacto de software

https://myactivity.google.com/myactivity

¿ Qué problemas tenemos en el contexto local ?

¿ Podemos resolverlos con software ?

Desarrollo según su contexto

  • Movil

  • Web

  • I.A

  • IOT

  • ....

La calidad del código importa

Código espagueti

  • Confuso

  • Ilegible

  • Inmantenible

  • Propenso a errores

¿ Por que escribimos mal el código ?

  • Falta de tiempo

  • No aplicamos buenas practicas

    • ​No usamos una guía de estilos.

    • No usamos ninguna herramienta de liting.

    • No implementamos testing.

  • No tenemos buenos hábitos

    • No usar control de versiones.

    • No leemos a profundidad la documentación.

    • No tenemos destreza con nuestra herramienta de desarrollo.

Código limpio

  • Robusto

  • Mantenible

  • Legible

  • Expresivo

  • Joy (Placer)

Nombres con significado

// javascript
let m = [
 "Enero"
 "Febrero",
 "Marzo",
 "Abril",
 "Mayo",
 "Junio",
 "Julio",
 "Agosto",
 "Septiembre",
 "Octubre", 
 "Noviembre", 
 "Diciembre"
];// meses del año

let a = m[(new Date).getMonth()];// mes actual
if(a === "Enero" || a === "Febrero" || a === "Marzo") {
  /*
   es verano 
   .....
  */
}
  • ¿ Es intuitivo ?

  • ¿ Puede leerse sin comentarios ?

  • ¿ Genera dudas ?

// javascript
const FECHA = new Date();
const mesesDelAño = [
 "Enero"
 "Febrero",
 "Marzo",
 "Abril",
 "Mayo",
 "Junio",
 "Julio",
 "Agosto",
 "Septiembre",
 "Octubre", 
 "Noviembre", 
 "Diciembre"
];

let mesActual = mesesDelAño[FECHA.getMonth()];
let esVerano = mesActual === "Enero" || mesActual === "Febrero" || mesActual === "Marzo";

if(esVerano) {
  /*
   .....
  */
}

Alto nivel abstracción 

# python
import np as numpy

matrix_one = np.matrix([
    [0, 10, 0],
    [1,  2, 3],
    [5,  8, 9]
])

matrix_two = np.matrix([
    [2, 9, 3],
    [8, 6, 4],
    [5, 6, 6]    
])

product = matrix_one @ matrix_two
print(product)

Funciones que hacen una sola cosa

#include <iostream>
int suma(int sumando_uno, int sumando_dos) {
  int producto = sumando_uno + sumando_dos;
   producto++;
  return producto;
}

int main() {
  std::cout << suma(2, 3) << std::endl;
  return 0;
};

Funciones mentirosas

#include <iostream>
int suma(int sumando_uno, int sumando_dos) {
  return sumando_uno + sumando_dos;
}

int main() {
  int producto = suma(2, 3);
  producto++;
  std::cout << producto << std::endl;
  return 0;
};

Pocos parámetros

#include <iostream>
void actualizar_usuario(int edad, std::string nombre, std::string apellidos, std::string cc /*.....*/) {
  /*.....*/
}

actualizar_usuario(23, "Esneyder", "Palacios Mena", "21212323");
#include <iostream>
struct usuario {
  int edad;
  std::string nombre;
  std::string apellidos;
  std::string cc;
};

void actualizar_usuario(usuario actualizacion) {
  /*...*/
}

usuario actualizacion = {
   apellidos: "Palacios Mena",
   cc: "21231212121",
   edad: 23,
   nombre: "Esneyder"
}

actualizar_usuario(actualizacion);

Máximo 20 lineas

Modularidad

y

desacoplamiento

/*Home page*/
import React from 'react';
import MyButton from '../components/buttons/Mybutton';

function hacerAlgo() {
 /*...*/
}

function render() {
    return <>
       <h1>Hola mundo</h1>
       {
        /*....*/
       }
       <MyButton onClick={ hacerAlgo }/> 
    </>
}
/*Login*/
import React from 'react';
import MyButton from '../components/buttons/Mybutton';

function intentarLogin() {
 /*...*/
}

function render() {
    return <>
       <h1>Login</h1>
       {
        /*....*/
       }
       <MyButton onClick={ intentarLogin }/> 
    </>
}

Recomendaciones

  • Patrones de diseño

  • Arquitectura de software

  • Testing

  • Metodologías ágiles

Esneyder Amin Palacios Mena

Desarrollador de software, Ingeniero de sistemas y

co-founder de @hackdo y @quibdojs

Made with Slides.com