Si hay dos formas de abordar una tarea, ¿cómo debería uno elegir entre ellas?

11

Tengo un caso de uso específico, y he encontrado 3 formas de hacerlo a través de Internet, que se definen para casos de uso vagos. Estoy mirando a estos tres preguntándome cuál aplicar.

Tiendo a sentarme allí sin saber qué hacer, luego sin hacer nada ... ¿Hay una buena manera de elegir? ¿Debería probarlos todos?

Para ser más específico para algún contexto, estoy tratando de hacer un juego de mesa muy liviano donde necesito una parte de la pantalla en la que pueda rotar la cuadrícula del juego de mesa, acercarla y mover piezas en esta cuadrícula . No tenía idea de cómo hacer esto, pero encontré cosas en línea como Core Animation, Core Graphics, Sprite Kit, y vi argumentos a favor y en contra de ellos; por ejemplo, el kit Sprite es de alto nivel, pero mantiene la velocidad de cuadros en 60, que es un desperdicio de batería cuando nada se mueve realmente en la pantalla. Core Animation era una API de nivel inferior, que se opone a la orientación de Apple de "tomar el nivel más alto de abstracción". No quiero aprender 3 cosas para usar 1. ¿Hay alguna manera de elegir y deshacerme?

Dejo esto como una pregunta bastante vaga a propósito, ya que creo que se aplica en todo el área del software.

Skidushe
fuente

Respuestas:

16

Realiza un análisis de costo / beneficio en cada uno de los enfoques, y elige el enfoque que tiene la relación beneficio / costo general más alta.

En el caso de las bibliotecas de la competencia que realizan esencialmente la misma función, la mejor, más fácil y rápida forma de realizar ese análisis es colocar pequeños prototipos utilizando cada biblioteca. Cuál preferir debería quedar abundantemente claro.

Posibles consideraciones de costo / beneficio para las bibliotecas:

  • Mantenibilidad
  • Facilidad de uso
  • Documentación adecuada.
  • Curva de aprendizaje
  • Rendimiento global
  • Comprar contra construir

... etc. Tenga en cuenta que muchas de estas consideraciones pueden ser algo subjetivas.

No importa si es un hobby o una carrera. Utilizará (y debería) utilizar el mismo proceso si decide continuar sus exploraciones en una carrera real.

Estrategia alternativa de toma de decisiones: elija la que más le guste.

Robert Harvey
fuente
44
En caso de libs e implementaciones de terceros, agregaría: soporte de la comunidad , versiones estables (no betas, candidatos de lanzamiento o instantáneas) , documentación en el balance
Laiv
66
Obligatorio xkcd: xkcd.com/1445
Sebastian Redl
15

Como una adición a la excelente respuesta de Robert Harvey, aquí mis 2 centavos:

Elija el enfoque que parece ser el menor esfuerzo para comenzar, pero asegúrese de mantener la puerta abierta para cambiar a un enfoque diferente cuando resulte que la solución que eligió primero tiene demasiados problemas. Y si sospecha que hay ciertos problemas en ciertas áreas de su escenario de uso, asegúrese de implementar esas áreas primero, de modo que obtenga comentarios anticipados, antes de que sea demasiado tarde para revertir su decisión inicial.

Lo bien que esto funcione depende en gran medida del caso. Por ejemplo, si necesita una biblioteca simple para acceder a un dispositivo externo o cierto formato de archivo, asegúrese de encapsular todo el acceso a la biblioteca en una capa de su aplicación. Sin embargo, en caso de que no esté seguro sobre qué marco elegir o qué lenguaje de programación elegir, un análisis exhaustivo de costo / beneficio es probablemente todo lo que puede hacer.

A veces es mejor simplemente tomar una decisión, incluso si es solo la segunda mejor opción, siempre y cuando realmente lo haga.

Doc Brown
fuente