¿Soy un mal programador si uso bibliotecas o marcos de terceros?

Una vez conocí a alguien que se negó a usar la biblioteca C ++ STL. Más bien desplegó sus propias listas vinculadas y estructuras de datos, diciendo que la suya estaba más optimizada. En realidad, el STL está bastante optimizado, con tantas personas que lo usan y, lo que es más, ya que es continuamente compatible, es más estable.

Si estás en la fase de aprendizaje , rueda el tuyo. Descubra cómo hacer un marco MVC, intente un motor de juego 3D desde cero, implemente pagos de PayPal y cree su propio carrito de compras. Cuando el objetivo es aprender, es flojo tomar atajos. También le da una mayor apreciación de cómo funcionan esos otros marcos y de que realmente existen.

Si su objetivo es hacer el trabajo , use marcos, complementos, paquetes, etc. Sus clientes desean una solución estable y funcional que se haga a tiempo, no su orgullo. Como regla general para mí, trato de obtener paquetes para las cosas que conozco, para poder depurarlo si algo sale mal o no funciona correctamente. Es decir, antes de obtener un marco de comercio electrónico, trataría de construir uno por mi cuenta (o al menos leerlo o pasar por tutoriales). Esto se debe a que ningún marco o paquete de terceros es perfecto; definitivamente necesitará ajustarlo, personalizarlo o depurarlo en algún momento, por lo que saber cómo hacer bricolaje sigue siendo importante. La excepción es para las cajas negras que tomarían mucho tiempo o un gran esfuerzo para aprender, como servicios de PNL, IA, búsqueda de caminos, gráficos de escenas, etc.

Además, poder trabajar con frameworks de terceros / API REST se está convirtiendo cada vez más en una necesidad en el mundo interconectado, con muchos productos disponibles como servicios. Tendrás que concentrarte en tus valores empresariales centrales en lugar de construir todo tú mismo.

Por último, considere también que uno de los indicadores de un gran programador es la capacidad de leer y usar el código de otros. Me he encontrado con programadores que insistieron rotundamente en hacer todo ellos mismos porque no quieren solucionar los problemas del código o los marcos de otras personas, porque es demasiado molesto. A medida que los productos se vuelven más complicados, esa ya no es una opción (a menos que sean pautas corporativas o requisitos del cliente, entonces esperamos que estén pagando una prima).

En mi opinión, no, para nada. En todo caso, el uso de bibliotecas de terceros, bajo ciertas circunstancias, puede ser la opción más inteligente. La expresión “no reinventar la rueda” realmente se aplica aquí. ¿Por qué pasarías tiempo y esfuerzo resolviendo problemas que otros ya han resuelto?

Sin embargo, su preocupación no es totalmente injustificada. El uso de bibliotecas de terceros es definitivamente un tema muy debatido (de todos modos, en los círculos de ingeniería). Las bibliotecas pueden ser poco confiables, abandonadas por sus autores o tener problemas de seguridad. Es imperativo que cuando elija uno, sepa cómo hacerlo de manera segura e inteligente.

Considere estas ventajas y desventajas, ya que (con suerte) lo ayudarán a evaluar cuándo y cuándo no usar bibliotecas de terceros para su proyecto.

VENTAJAS DE LAS BIBLIOTECAS DE TERCEROS

Ahorrar tiempo:

El beneficio más importante de usar bibliotecas de terceros es que le ahorra tiempo ya que no necesita desarrollar la funcionalidad que proporciona la biblioteca. En su lugar, puede centrarse en la lógica empresarial central de su aplicación: las características que realmente importan. Claro, aún necesitará pasar un tiempo leyendo la documentación de la biblioteca y entendiendo cómo integrarla, pero generalmente esto es solo una fracción del tiempo que se necesitaría para desarrollar y probar su funcionalidad desde cero.

Usar código previamente probado:

Sobre el tema de las pruebas, otra ventaja de usar una biblioteca es la ‘prueba de uso’. Se ha utilizado una biblioteca popular en múltiples entornos y casos de uso. El ciclo de retroalimentación a partir de esto habrá dado como resultado que se informen y solucionen errores. Por lo tanto, el uso de una biblioteca de terceros comprobada no debería poner en peligro la calidad y la estabilidad general de su aplicación.

Usar código modular:

Otro beneficio que obtiene al trabajar con bibliotecas de terceros es que lo alienta a trabajar y escribir código modular. El código de la biblioteca se mantiene naturalmente separado del resto del código de su aplicación, y la comunicación se lleva a cabo a través de límites bien definidos (la API de la biblioteca). Si, en cambio, opta por desarrollar una función usted mismo, puede ser difícil desacoplarla del código de la aplicación. Los autores de una biblioteca bien construida tienden a operar en un nivel de abstracción diferente, uno que conduce a un código más limpio y genérico.

Desafortunadamente, el código modular no siempre significa código desacoplado. Lo que nos lleva a las desventajas de las bibliotecas de terceros.

DESVENTAJAS DE LAS BIBLIOTECAS DE TERCEROS

Dependencia:

Confiar en una biblioteca de terceros significa que su código está vinculado a esa biblioteca. Si en algún momento, se ve obligado a cambiar de biblioteca, es posible que su código tenga que sufrir cambios significativos para adaptarlo a la nueva biblioteca. Por supuesto, hay formas de mitigar esto mediante el uso de una fachada (contenedor) para la biblioteca. De esta manera, su código no llama directamente a la biblioteca, sino una abstracción.

Falta de apoyo:

Otro posible riesgo es que una biblioteca pueda ser abandonada por su autor. Esto es especialmente problemático en plataformas como Android, donde las nuevas versiones salen con frecuencia. Una biblioteca necesitará mantenimiento continuo para garantizar la compatibilidad con la última versión del SDK. Si eso no sucede, la biblioteca puede no funcionar de manera óptima (o en absoluto) en dispositivos más nuevos.

Uso excesivo

El uso de demasiadas bibliotecas también puede causar problemas, como conflictos de dependencia, que son difíciles de identificar y solucionar.

Un número excesivo de bibliotecas hinchará su aplicación al aumentar su tamaño y consumo de memoria. A su vez, esto afectará negativamente el rendimiento de su aplicación. En el caso de Android, puede contribuir a alcanzar el límite de 64k métodos.

Temas de seguridad:

Por último, pero no menos importante, el uso de bibliotecas de terceros puede plantear algunas preocupaciones de seguridad, ya que las vulnerabilidades en las bibliotecas de código abierto son cada vez más objetivos para los piratas informáticos.

Entonces, ¿cómo elijo la biblioteca correcta?

Si bien es importante comprender ampliamente los pros y los contras de este ecosistema, cada biblioteca es única y debe evaluarse según sus propios méritos (o falta de ellos). Para ayudar, he incluido el proceso evaluativo que uso cuando hago esto. Una vez que tenga una biblioteca candidata, hágase las siguientes preguntas para ver si es adecuada para sus necesidades:

¿Qué tan popular es la biblioteca?

Muchas plataformas de desarrollo, como Github, tienen evaluación de crowdsourcing incorporada. Comience por verificar cuántas estrellas tiene su biblioteca candidata. Luego verifique el número y la gravedad de los problemas reportados para esa biblioteca. Cuando un número significativo de desarrolladores confía en una biblioteca, es un buen indicador de calidad.

Algunas de las bibliotecas más grandes también pueden tener una comunidad activa involucrada en su mantenimiento y crecimiento. Compruebe Stackoverflow para esto, pero tenga en cuenta que esto no siempre está directamente relacionado con la calidad. ¡Algunas grandes bibliotecas de nicho tendrán poco en el camino de una comunidad! Una comunidad activa es muy útil para solucionar problemas.

¿Qué tan confiable es el autor?

Al hacer una verificación de antecedentes del autor, minimiza el riesgo de quedar atrapado en una biblioteca con errores o abandonada. ¿Están activos en Github? ¿Han lanzado múltiples bibliotecas? ¿Responden a problemas, resuelven errores y aceptan solicitudes de extracción?

Si una biblioteca está siendo apoyada activamente por su autor, es una buena señal de que se mantendrá estable, a largo plazo, a través de actualizaciones de plataformas y marcos.

¿Qué tan bien escrita está la biblioteca?

Revise brevemente el código e intente evaluar qué tan bien estructurado está. Por lo general, los buenos autores documentan bien. ¿Incluye un archivo README completo y actualizado?

Una biblioteca bien documentada ayudará a que la integración sea fluida y sin esfuerzo. La buena calidad del código probablemente significará una biblioteca estable y de rendimiento, con pocos errores.

¿La biblioteca cumple con sus requisitos específicos?

Si la biblioteca no cubre todos sus requisitos, puede terminar teniendo que modificarla (más tiempo invertido) o usarla de una manera que no fue diseñada (por ejemplo, empleando un truco que podría romperse en una versión futura de la biblioteca).

Por otro lado, una biblioteca que ofrece cientos de características que son superfluas para sus necesidades probablemente tampoco sea una buena opción. Sea fiel a sus requisitos y siga buscando hasta encontrar la biblioteca correcta, o, en el peor de los casos, ¡escriba la suya!

¿La biblioteca tiene la licencia correcta?

Otro factor que puede afectar su decisión es la concesión de licencias, ya que el uso de bibliotecas puede limitarse en función del uso. Por ejemplo, es posible que haya restricciones si tiene la intención de lanzar su producto comercialmente. Así que asegúrese de cumplir con los términos específicos de cada biblioteca que haya integrado en su aplicación.

¿La biblioteca es de código abierto?

Sin acceso al código de la biblioteca, no puede evaluar su calidad o rendimiento, ni puede depurar. Sin mencionar que la falta de transparencia plantea un riesgo de seguridad.

¿Se recomienda la biblioteca?

La mayoría de las plataformas tienen una serie de bibliotecas ‘de facto’ comúnmente utilizadas por la comunidad de desarrollo. Por ejemplo, en Android, esto incluiría Retrofit, Butterknife, Picasso / Glide y RxJava. Estas bibliotecas son de alta calidad, bien mantenidas y documentadas.

Si bien su uso es ciertamente de bajo riesgo, no siga ciegamente el paquete. En cambio, haga su propia investigación, comprenda por qué son tan populares y verifique qué limitaciones tienen. Tal como lo haría con cualquier otra biblioteca.

¿Se usará esta biblioteca para las funciones principales?

Debe conservar el control total sobre el código de sus funciones principales. Las bibliotecas suelen hacer compensaciones para poder cubrir un amplio espectro de casos de uso. Al usar las bibliotecas para sus funciones principales, está haciendo estas mismas compensaciones.

Por ejemplo, si la carga de imágenes es fundamental para su negocio, las bibliotecas de carga de imágenes existentes podrían no ser la mejor opción. Al usar uno, puede comprometer el rendimiento, o peor, las características. Es posible que la biblioteca no pueda trabajar con ciertos tipos de imágenes deseadas, o puede que desee utilizar un mecanismo de almacenamiento en caché que no ofrece la biblioteca.

Si bien las preguntas anteriores son aplicables a la mayoría de las situaciones, siempre debe tener en cuenta los parámetros específicos de su industria o plataforma de programación. Por ejemplo, si está trabajando en criptografía, debe tener mucho cuidado al escribir su propio algoritmo (a menos que tenga un doctorado en el campo, por supuesto). Crypto es muy difícil de corregir, y las apuestas son a menudo muy altas, por lo que recomendaría confiar en las bibliotecas probadas existentes.

¡LO SIENTO QUE ME LLEVÉ!

No escuches a los que odian. Las bibliotecas no son intrínsecamente malas y usarlas no te convierte en un programador perezoso. Cuando se eligen de manera metódica e inteligente, son una excelente herramienta para ahorrar tiempo.

“La mejor línea de código es la línea que no escribiste”. ~ Yo

A los clientes no les importa lo difícil que fue, qué cosas nuevas y geniales aprendiste. Los clientes se preocupan por:

  • Funcionalidad
  • Costo
  • Tiempo de finalización.

Por lo general, mejora todos estos mediante el uso de bibliotecas.

Tenga en cuenta que esto no se aplica en una situación académica . Si bien es necesario enseñar a los aspirantes a estudiantes de ciencias de la computación, “escribir todo usted mismo” también enseña hábitos que son perjudiciales en un entorno profesional.

Edición 1: oración final aclarada

No, eres más bien un programador inteligente. Esto es realmente una preocupación con respecto al aprendizaje frente a la productividad. Durante la etapa inicial de tu carrera Aunque es bueno crear tu propia perspectiva de aprendizaje, pero eventualmente no tiene sentido. Esto es como ascender en la jerarquía: primero trabajas tu mismo y luego gestionas la coordinación entre los componentes creados por diferentes personas. Si se apega a la idea de construir todo usted mismo, hay un límite que puede hacer, pero si solo ensambla las unidades reutilizables ya creadas, se puede construir una aplicación mucho más grande en un tiempo mínimo. Después de 10 años de mi carrera, solo me preocupa la productividad. Una vez que mejora la productividad, siempre sigue algún tipo de aprendizaje.

Las bibliotecas y los marcos ayudan a mejorar su productividad. Por eso son tan frecuentes. Con el tiempo, comienza a aprender cuándo le conviene usar Vanilla JS, por ejemplo, en lugar de una biblioteca o confiar en un marco como Jquery.

Todavía estoy resolviendo esto en gran medida. Es por eso que hago preguntas a los desarrolladores más experimentados y leo detenidamente y trato de entender las respuestas en Stack Overflow. Los grupos de Meetup también son beneficiosos.

Por ahora parece que está aprovechando su conocimiento actual para maximizar su productividad. Si tiene preguntas sobre la forma más eficiente de hacer algo, utilice los recursos antes mencionados (o Quora) haciendo preguntas específicas, preferiblemente con ejemplos de código.

No, eres un programador ingenioso.

¿Por qué querrías “reinventar la rueda”? Es más eficiente usar un marco ya desarrollado que crear uno completamente nuevo solo para un par de proyectos.

La misma ideología se puede ver en todas partes. Por ejemplo, echemos un vistazo a Pokemon Go !. Niantic no creó completamente un nuevo mapa y servicio de ubicación solo para ese juego, así como Igress. En cambio, utilizaron la API de Google Maps, ya que ya existía.

Por supuesto, es bueno entender cómo desarrollar un marco usted mismo. Si no sabe cómo hacerlo, puede intentar crear uno. Esto le dará un conocimiento más profundo sobre el funcionamiento de la programación y más experiencia. Además, si está utilizando el mismo marco para muchos proyectos diferentes, puede valer la pena crear uno propio.

Entonces, no, usar otro marco no te convierte en un mal programador, sino más bien ingenioso y eficiente. Solo recuerde, ¡siempre otorgue crédito cuando sea necesario!

Si saca su teléfono y entra en la configuración, debería poder encontrar una sección de ‘Licencias de código abierto’ que enumere cientos, si no miles de bibliotecas y marcos de terceros que se han unido para hacer que ese teléfono haga lo suyo.

Muchos ‘buenos programadores’ usan bibliotecas porque ser un buen programador significa saber cómo evitar hacer más trabajo del que tienes que hacer.

Dependiendo de lo que la biblioteca le permita hacer, tal vez valga la pena ver si puede sustituirla por su PROPIA biblioteca, aunque no sea por otra razón que desarrollar sus habilidades. Pero cuando se trata de eso, el tiempo es a menudo la esencia, entonces, ¿por qué pasar el tiempo codificando la funcionalidad y reinventando la rueda?

Veamos esto enfocándose en una biblioteca específica para mayor claridad.

“¿Soy un mal programador si uso OpenSSL en lugar de escribir mi propio código de cifrado?”

Entonces mira ¿Por qué no deberíamos rodar los nuestros?

Si bien se centró específicamente en el cifrado, el argumento es válido para casi cualquier biblioteca decente. Otras personas han gastado mucho tiempo y dinero en hacer bien esa biblioteca.

Duplicar sus esfuerzos es (a) arrogante (suponiendo que puede hacerlo mejor) y (b) ineficiente.

Definitivamente una pregunta rara de la OMI. Simplemente no hay forma de que un programador escriba todo por sí mismo, especialmente cuando se trata de un gran proyecto.

Digamos que puede terminar un proyecto en n semanas con algunas bibliotecas o marcos de terceros, pero decide escribir todo usted mismo, luego necesita aprender muchas cosas que no están directamente relacionadas con su proyecto y escribir esas cosas.

Déjame adivinar, será como semanas kn y k es una constante bastante grande.

Como de costumbre, depende. 🙂

  • ¿ Entiendes lo que está haciendo la biblioteca / marco, cómo lo está haciendo y por qué lo está haciendo de esa manera?
  • ¿Entiendes cuáles son los pros y los contras de cómo está haciendo su trabajo? ¿ Mitigaste las desventajas lo mejor que pudiste y dejaste en claro las que quedan? ¿Incluidas las desventajas legales , como los requisitos de código abierto, la responsabilidad derivada de su error, etc.?
  • ¿Buscó en otras bibliotecas / marcos y eligió el más adecuado?
  • ¿ Pensó en lo que se necesitaría para implementar la funcionalidad usted mismo y tomó una decisión racional informada de que sería mejor usar una biblioteca / marco de terceros?

Si es así, felicidades, no solo no eres un mal programador (al menos, no basado en esa evidencia), has hecho un excelente trabajo de ser un programador pragmático . Este es exactamente el tipo de intercambio que hacen los programadores todo el tiempo, decidiendo si (y cómo) resolver un problema, comprar una solución, solucionar el problema, decidir que no vale la pena resolver el problema, etc.

Si, en la otra uña, examinó el problema, no solicitó ayuda, no buscó explicaciones, se sintió abrumado por el tamaño o la complejidad de la tarea, buscó algo que lo hiciera, lo agarró, Lo golpeé y decidí seguirlo porque parecía funcionar, entonces , sí, eres un mal programador.

Depende de tu objetivo final. Si es para aprender, creo que es una buena idea implementar el código de la función usted mismo. Pero si su objetivo es el desarrollo comercial o de productos, entonces el uso de bibliotecas es la mejor opción.

Al final, se convertirá en un buen ensamblador de bibliotecas y obtendrá ganancias de esto, pero es posible que no pueda resolver eficientemente un desafío de programación por sí mismo cuando el uso de bibliotecas está prohibido.

No, no lo eres. No hay absolutamente nada de malo en usar bibliotecas de terceros. De hecho, es lo más inteligente.

Considere esto: uno de los aspectos definitorios de un buen programador es hacer las cosas de manera oportuna. Esto significaría que cada minuto ahorrado al escribir código es oro.

El beneficio de usar una biblioteca es que haría todo el trabajo pesado por usted mientras escribe líneas mínimas de código. Así no tendrás que volver a inventar la rueda.

Lo único que debe asegurarse al usar bibliotecas de terceros es que no compromete la seguridad y sigue las buenas prácticas y está listo para comenzar.

Eres un programador inteligente. La regla 1 de programación es construir sobre el trabajo de otros. Solo asegúrate de que, en caso de pellizco, puedas crear el tuyo porque el genérico no funciona lo suficientemente bien. Descubrirá que esto es cierto mucho cuando se trabaja en código incrustado y el espacio es muy importante y la velocidad es esencial.

En esta era de rápido desarrollo donde el tiempo importa, no, no realmente.

Sin embargo, está bien aprender para saber qué está sucediendo detrás, así que ahora cuándo o cuándo no usarlos.

Depende. Yo uso JQuery, que es una biblioteca de terceros. Por lo demás, no uso ningún framework o biblioteca.

Los marcos y / o bibliotecas también requieren que aprendas cosas específicas para que los métodos / funciones, etc. funcionen.

¿Quizás solo estás siendo flojo? 😉

Confía en mí, NO hay un mal programador. El uso de bibliotecas de terceros es una forma más inteligente y fácil de escribir su propia aplicación, y no sé qué está mal allí …

More Interesting

Si tengo un sitio web receptivo existente codificado principalmente en html5, CSS y Java (sin php), ¿cómo puedo agregar un blog de wordpress al sitio sin convertirlo en un tema de wp? ¿Hay buena documentación sobre esto? Solo quiero que la sección del blog sea wp.

Estoy tratando de seguir una carrera en desarrollo web front-end. Ya estudié HTML y CSS. ¿Es un buen camino para aprender Dreamweaver y WordPress?

Quiero ser desarrollador web y más en el lado del servidor 'python, django'. Tengo curiosidad por saber cuánto html / css debería saber, ¿puedo usar plantillas listas o tengo que ser un experto en html / css?

Estoy planeando crear un sitio web que tenga más información sobre paquetes de viaje. ¿Debo ir por Ruby on Rails o WordPress?

He construido un servidor a partir de una computadora portátil vieja y ahora tengo hambre de más. Quiero comprar un servidor físico para alojar efectivamente 2/3 servidores de alta potencia. ¿Dónde puedo comprar uno por alrededor de 350 USD?

¿Vale la pena aprender MEAN stack para el desarrollo web (tengo 20 años)?

Sé HTML, CSS, JS, JQUERY, PHP y MySQL. ¿Debo registrar un campo de código gratuito?

Quiero comenzar un sitio web de una sola página para vender mi libro electrónico. ¿Con qué compañía / plan de alojamiento debo ir?

Si construyo una aplicación de red social, ¿dónde y cómo almaceno los usuarios y las contraseñas?

Quiero comenzar con el desarrollo web, como principiante, ¿qué idioma debo aprender?

Soy un desarrollador de UI / front-end con una experiencia total de 5 años. ¿Cómo puedo solicitar en el extranjero?

Estoy diseñando un menú de navegación. ¿Algún consejo o truco que lo haga increíble? ¡Gracias!

Estoy comenzando un portal de videos en el cual los usuarios suben videos. Quiero un reproductor de video web con tecnología de velocidad de bits adaptable. ¿Cuál es la mejor tecnología y reproductor para usarlo en cualquier dispositivo como YouTube? ¿Cual será el costo?

¿Cuándo usas una pila LAMP versus una pila MEAN?

¿Cómo debo comenzar en el campo de desarrollo de backend?