Divide y vencerás

Una de las frases que siempre me acuerdo y que aprendí en la Universidad es la de “Divide y vencerás”.

Una frase para mi filosófica que se puede aplicar en muchos contexto de la vida pero hoy nos centraremos en el contexto de la programación.

Todo programador, aunque sea inconscientemente, aplica este concepto cuando está intentando resolver un problema grande y de difícil resolución como por ejemplo un proyecto o una aplicación Web grande.

Al estar programando una aplicación grande, por lógica tú mismo ya piensas en que parte harás primero, divides el trabajo en partes.

Divide-y-Venceras

La técnica divide y vencerás consiste en:

  • Descomponer un problema en un conjunto de subproblemas más pequeños.
  • Se resuelven estos subproblemas.
  • Se combinan las soluciones para obtener la solución para el problema original

Normalmente para resolver los subproblemas se utilizan llamadas recursivas al mismo algoritmo (aunque no necesariamente).

Si te fijas en proyectos grandes siempre suelen estar divididos en partes. En un gestor de contenidos como WordPress te darás cuenta que es una plataforma que tiene una buena base (seguramente desarrollada por partes) y que después tiene infinidad de complementos (plugins) que le aportan funcionalidad extra.

Si nos fijamos en cualquier plataforma ecommerce también sucede lo mismo. Por ejemplo, PrestaShop tiene también una muy buena base para construir tu tienda Online con más de 200 módulos de base pero luego existen miles de módulos que complementan esta base.

Cuando desarrollas tu página Web también tiendes a concentrarte en programar una página y luego las demás.

De cara a la programación, tendemos a usar la división del programa en módulos por ser una estrategia efectiva para resolver problemas complejos.

En este tipo de divisiones siempre existe una estructura superior que engloba a todos los módulos y cada módulo contribuye a un fin más amplio mediante el cumplimiento de una tarea concreta.

Existe independencia de funcionamiento entre módulos, lo cual no significa que no haya comunicación entre ellos o entre ellos y la estructura superior.

El hecho de que exista independencia de funcionamiento unido a que un módulo cumpla una tarea concreta, permiten su traslado o copia de organización en otra estructura con otro fin global, pero necesitada del proceso concreto que realiza el módulo.

La complejidad del módulo es siempre inferior a la del conjunto de módulos. Esto es importante en relación a la estructura mental de los humanos y está relacionado con el “trabajo por objetivos”. Dividir un gran problema en pequeños problemas se comprueba que lleva a:

  • Aumentar la probabilidad de éxito al concentrar la atención del programador y evitar su dispersión.
  • Aumentar la tranquilidad y confianza del programador, que ante problemas de magnitud excesiva tenderá a sentirse abrumado.

La complejidad intrínseca de un problema será la misma independientemente de cómo se aborde. En cambio, la probabilidad de éxito para un humano varía sustancialmente según sea la estrategia de resolución empleada.

La división por módulos facilita la organización y comprensión desde el punto de vista humano. Es nuevamente el factor humano el que nos anima a programar por módulos. Con esta organización nos resulta más fácil detectar errores, corregirlos y tener una visión de conjunto de la estructura y funcionamiento de los programas. De esta forma también se fomenta la escalabilidad del sistema.

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(23 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

3 respuestas a “Divide y vencerás”

  1. […] Otra vez he usado la filosofía de divide y vencerás. […]

  2. Antonio dice:

    la verdad es que este articulo me ha hecho pensar y tienes toda la razon. muchas gracias!

  3. Louisa dice:

    I don’t even know what to say, this made things so much eaesir!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ver más sobre