¿Debo construir mi propia biblioteca o usar la biblioteca de otras personas?

La mayoría de los desarrolladores experimentados habrán escrito, con el tiempo, tal vez una pequeña colección o biblioteca de varios métodos de utilidad que los ayuden con sus proyectos.

Escribir una biblioteca específica con la intención de publicar de modo que una amplia gama de usuarios en una amplia gama de aplicaciones puedan beneficiarse de su biblioteca generalmente no garantiza el esfuerzo. Este tipo de proyectos son proyectos en sí mismos y el desafío es hacerlos eficientes e implementables por casi cualquier persona que busque ese tipo de solución. Esto es algo que puede considerarse después de recopilar mucha experiencia y trabajar con el código y las implementaciones de muchas personas.

Sin embargo, para sus propósitos en el desarrollo de un proyecto de chat con autenticación, apostaría a todos mis chips que estas implementaciones se han reinventado y reinventado una y otra vez, en todo el mundo, porque no son tan complejas. Es más fácil y rápido crear una solución para estas aplicaciones nuevas que escribir una biblioteca para todos. Hay demasiadas plataformas y demasiadas preguntas de diseño.

Como eres un programador junior, creo que ganarías más escribiendo tu propio proyecto desde cero. La experiencia valdrá más para ti que el resultado final en sí. En el camino, se quedará atrapado muchas veces, especialmente cuando se trata de los temas generales en los que estará incursionando: bases de datos, seguridad, comunicación, interfaz de usuario no importa. Hazlo. Escríbelo todo. Y no te rindas. En mi último año en la universidad tuvimos que escribir una aplicación de chat en red y mi compañero y yo la resolvimos en muy poco tiempo. Sobre todo, fue divertido.

Para un inicio, a menos que su producto principal esté construyendo exactamente esa biblioteca, seguramente debería usar algo más que sepa que se mantiene y que ya está en uso en otros entornos de producción.

Como una startup que desea enfocar, es fácil caer en la falacia de ‘esto es simple, puedo hacerlo yo mismo tan rápido como aprendo a usar una biblioteca existente’.

Los problemas con este enfoque son:

  • Estás ignorando la mayor parte del trabajo que te costará la mayor parte del tiempo: Mantenimiento (ver Diseño de software, en dos frases)
  • Todas las cosas simples que decidiste hacer tú mismo suman. Esto estaría bien en otros entornos, pero te garantizo que si te apasiona tu producto principal, te arrepentirás de cada momento que no pasaste trabajando en él.
  • La mayoría de las características de la mayoría de las bibliotecas no las necesitará, hasta que las necesite … y luego no tendrá tiempo para rediseñar su propia biblioteca y terminará con muchas herramientas por debajo del promedio
  • Si depende de una API externa, esta API cambiará con el tiempo, use las bibliotecas oficiales si están disponibles

Esta no es una versión de todas las bibliotecas / software internos y hay excepciones en las que controlar todo el código es útil (por ejemplo, licencias, seguridad, secreto, memoria, rendimiento, etc.).

Si desea dedicar tiempo a algo que no es su producto directamente, ¡debe (debe) desarrollar sus propias herramientas! (No estoy hablando de herramientas de gestión de proyectos aquí)
Si está creando algo único, es probable que no encuentre ninguna herramienta en el mercado que maximice su productividad al nivel que debería estar.
Esperar hasta que crezca para crear herramientas es una mala inversión, porque las hará después del tiempo que más lo necesita y para ese momento su equipo también ha crecido con el conjunto de herramientas incorrecto (y todos sabemos que cambiar el flujo de trabajo de un equipo es difícil) !).

Para resumir, escriba sus propias bibliotecas si:

  • Son su producto o parte de las características principales que está vendiendo (la autenticación puede ser parte del producto pero puede no ser el producto)
  • Tiene una razón comercial sólida a medio / largo plazo para controlar y mantener esa parte del código
  • Desea aprender cómo hacerlo usted mismo, incluso si nunca lo usa en la producción (tal vez para proyectos de mascotas)
  • Su equipo es grande, su negocio está prosperando y puede invertir en un software más personalizado y optimizado en todos los niveles.
  • Trabajas en la industria de los juegos para el propietario de una plataforma 🙂

¡Que te diviertas!

Konstantin y Lee hicieron grandes puntos. Para aprender, es una experiencia valiosa escribir la tuya. Pero, para la producción, a menos que esté familiarizado con una amplia gama de algoritmos ultraeficientes [Karatsuba, Dijkstra, Karger, basados ​​en matrices …], debe usar libs de terceros, especialmente si se usan ampliamente o tienen una eficacia probada muchas veces. No es tan probable que pueda hacerlo mejor [si puede, su nombre aparecerá en una lista similar algún día]. Además, las bibliotecas de terceros ahorran mucho tiempo y frustraciones.

Ya sabes, cuando necesitas luz, no tienes en tus manos hacer una bombilla. Simplemente tome uno y “impleméntelo”, suponiendo que sepa cuál necesita. No debe sentirse mal por usar productos ya inventados. No reinventes la rueda.

Además de lo que ya se ha dicho, yo diría que las bibliotecas de propósito general son solo eso, de propósito general, y por lo tanto, son muy buenas en muchas cosas. Si tiene muchos problemas generales que resolver, use bibliotecas.
Si tiene un problema específico para el que desea una solución, puede ser más rápido y más eficiente resolverlo. Puede hacer suposiciones más estrictas sobre problemas específicos únicos para usted y, por lo tanto, puede encontrar soluciones “mejores” (como quiera definirlas).

En pocas palabras, ambos. Si realmente quieres entender cómo funcionan las cosas, construir tus propias bibliotecas es genial, porque te estás esforzando para entender cómo se hacen las cosas. En el mundo real, como desarrollador real, inevitablemente tendrá que usar bibliotecas de terceros, ya sea para ahorrar tiempo y líneas de código, o porque la compañía para la que trabaja ya tiene una biblioteca bien establecida para su nicho. Si solo está escribiendo código para aprender, elija un proyecto y use algunas cosas de terceros para hacer algo de eso. Las bibliotecas de otras personas a veces están muy mal documentadas, algo a lo que solo tienes que acostumbrarte, y cuanto antes lo hagas, mejor.

Para aprender, use el suyo.
Para la producción: use el trabajo de otras personas.

PD
Enlace útil: 7 tareas de codificación que probablemente no deberías escribir