language agnostic - ¿Por qué los programadores novatos parecen huir de las bibliotecas?
language-agnostic (30)
He notado muchas preguntas aquí de nuevos programadores que se pueden resolver utilizando bibliotecas. Cuando se sugiere una biblioteca, a menudo responden "No quiero usar la biblioteca X" ¿Es la curva de aprendizaje? o? ¡Sólo curioso!
Algunas personas, cuando se enfrentan a un problema, piensan: "Lo sé, usaré una biblioteca". Ahora tienen dos problemas.
En serio, esta es una forma razonable para que un novato, ya abrumado por un nuevo lenguaje, entorno de programación, paradigmas, pulsaciones de teclado, etc., reaccione a la sugerencia de usar una biblioteca. Si tiene una solución, pero no funciona, hay muchas fuentes potenciales de error; La clasificación a través de ellos es un desafío. Agregar a ellos puede parecer irracional.
"Usar una biblioteca" significa encontrar la biblioteca, descargarla, instalarla en su proyecto y llamar a la función necesaria. No es difícil, si está acostumbrado a ello (y no hay políticas corporativas en su contra, y tiene motivos para confiar en el proveedor, y la biblioteca en sí tiene dependencias mínimas, etc.). Pero si todo es nuevo para usted, cuando hace una pregunta de programación y recupera una respuesta de configuración del sistema , puede parecer inútil (incluso si no lo es, de hecho).
Algunas bibliotecas de código abierto tienen errores o no son tan eficientes como otras.
Bueno, el propósito del novato podría ser más resolver el problema que implementar una solución. Quizás lo que realmente quieren hacer es descubrir cómo resolver el problema. Quiero decir, si todavía están en gran medida en la fase de aprendizaje, es muy posible que no quieran que se les entreguen respuestas fáciles.
Casi siempre es porque su profesor les ha dicho que no pueden.
A veces es solo porque quieren aprenderlo ellos mismos, pero yo diría que es raro.
Creo que hay que invertir mucho tiempo en comprender el propósito de la biblioteca; sí, una curva de aprendizaje, pero es más que los programadores novatos probablemente no saben lo que necesitan hasta que tengan mucha más experiencia.
Creo que los problemas más fundamentales se pueden reconocer como un impedimento para el uso de las bibliotecas existentes.
- Parte de esto como "programadores novatos" es la falta de exposición a las bibliotecas. Si no sabes que existen, ¿cómo sabes usarlas?
- Número de opciones disponibles. Digamos que estoy realmente interesado en aprender más sobre MVC, pero si tengo que elegir entre cakephp y smarty y zend y ... bueno, puedes ver rápidamente cómo funcionan los engranajes para descubrir una manera de lograr el objetivo sin invertir tiempo en experimentar. . Eche un vistazo a Freshmeat o SourceForge para obtener una mejor comprensión de la enorme selección de bibliotecas disponibles.
- Soporte cuestionable combinado con documentación incompleta / obsoleta para las bibliotecas. ¿Quiero usar esta herramienta que puede que ya no funcione o que pueda abandonarse en el futuro? Es probable que un proyecto evolucione, y también lo hará para el proyecto de una biblioteca. ¿Su utilidad durará toda la vida útil de mi proyecto o se me pedirá que vuelva a hacer este trabajo?
Creo que los profesores quieren que se adhieran a lo básico. Cuando me gradué de la escuela de pregrado, conocía C ++, Java y algunos otros idiomas, pero no tenía ni idea de las bibliotecas y los marcos que se utilizan en las empresas. Era como si supieras java ... sí ... puedes escribir un servlet ... no.
Cuando aún estás aprendiendo los entresijos de un nuevo idioma, también tener que aprender a usar una biblioteca de terceros puede parecer demasiado trabajo. Además, las bibliotecas tienden a estar mal documentadas, o al menos tienen documentación que parece totalmente opaca para un programador nuevo.
Entonces, al tratar de resolver el problema X, decir "usar una biblioteca" puede sonar muy parecido a "resolver el problema Y LUEGO el problema x".
(Además, sus profesores les dijeron que no lo hicieran. Me las arreglé para llegar hasta el final, aunque mi licenciatura en C ++ no sabía que existía el STL.
Cuando intentas aprender a hacer cosas, cada vez que se logra algo "mágicamente" al llamar AwesomeClass.doAwesomeStuff (), terminas cediendo una parte del control. Cuando es "nuevo" y no sabe qué está regalando o por qué puede ser inquietante. Este fue mi golpe principal contra Rails cuando lo estaba aprendiendo por primera vez. Tantas cosas simplemente "funcionaron" y no sabía por qué sin buscar en una gran cantidad de fuentes de Rails (que generalmente no tenía tiempo para hacer).
Al menos, esa es mi opinión.
El uso de bibliotecas es probablemente una de las peores cosas que puede hacer un programador de aprendizaje . En lugar de aprender a codificar, están aprendiendo a usar API específicas que otras personas implementaron. No estoy diciendo que todos los programadores deben entender cada cosa que usan, pero los programadores que conocen los entresijos de una computadora (lógica digital, ensamblaje de códigos de operación, etc.) generalmente tienen una ventaja sobre las personas que han comenzado con algo como Java Swing y solo están juntando bibliotecas.
En producción, esta es una cuestión diferente, por supuesto. Pero creo que el mejor curso de educación es "hacer todo" una vez, al menos. Escribir mi propio marco de aplicaciones web desde cero realmente mejoró mis habilidades de programación y habilidades abstractas. No significa que usaré ese marco si alguien me contrata para crear una aplicación, pero conozco las fortalezas, debilidades y razones detrás de las cosas que usan los marcos "gigantes", y me puede ayudar a elegir un marco particular. Para una situación particular.
El uso de una biblioteca requiere que usted entienda el diseño relativamente complejo de la biblioteca, algo que los nuevos programadores podrían no haber dominado porque todo lo que han escrito es un código simple / de procedimiento / de un solo propósito. Por ejemplo, para un programador experimentado, los patrones de diseño estándar como el método de plantilla, el observador y el comando parecen bastante obvios, pero para un novato todo parece magia y / o complejidad innecesaria. Para mí, el punto de inflexión fue cuando tuve la suficiente habilidad para asimilar patrones de diseño y escribir algunos códigos reutilizables básicos.
En mi opinión, otro factor es que las bibliotecas adicionales agregan complejidad. Los programas tienden a ser más difíciles de entender, más difíciles de mantener y tener más errores cuando se vuelven más complejos. Creo que lo que hace que los programadores especialmente nuevos se alejen de las bibliotecas es que agregar código de biblioteca aumenta la complejidad más que agregar su propio código, simplemente porque entender cómo funciona la biblioteca aún está fuera de su alcance. Así que parece ser un problema tanto de habilidad como de psicología.
Es la curva de aprendizaje.
Estoy seguro de que hay muchas razones por las cuales el novato no quiere usar la nueva biblioteca. Pero, ¿no sería esta una buena oportunidad, si tiene tiempo suficiente, para mostrarles cuál es la ventaja de usar la biblioteca? Con las personas con las que trabajo, generalmente daré un ejemplo de por qué algo es mejor que su enfoque. Les ayuda a aprender y madurar como programador.
Ha pasado mucho tiempo, pero cuando salí de la universidad, no sabía nada de bibliotecas. Esto fue en los días de mainframes y mini-computadoras. Nuestra universidad tenía un VAX y los gerentes estaban paranoicos con respecto a los estudiantes que pirateaban el sistema, por lo que ni siquiera nos permitían ver los manuales de la biblioteca. Entonces, cuando salí de la universidad por primera vez, ni siquiera pensé en que hubiera bibliotecas disponibles.
La mayoría de los puntos se cubrieron (para mí, el principal es la curva de aprendizaje), pero creo que otro tiene una parte:
Porque aprender sobre una biblioteca es menos emocionante que codificar la misma funcionalidad.
La misma razón que hacen los desarrolladores más experimentados -
Debido a que a menudo puede ser tan difícil aprender a usar una biblioteca como escribir la parte que necesita usted mismo. Y al menos entonces puedes entender cómo funciona cuando no hace lo que esperas.
Un desarrollador experimentado solo tiene experiencia en comprender cómo usar las bibliotecas, por lo que es más probable que lo considere. Un desarrollador inexperto es una cosa más que aprender ...
Las bibliotecas a menudo vienen con la sobrecarga de aprender algunas API y su paradigma. Puede complicarse bastante rápidamente, y pude comprender fácilmente que los principiantes prefieren algo un poco más en su zona de confort. Desde mi experiencia, me parece que la mayoría de las bibliotecas y los marcos de trabajo parecen hacer un gran trabajo abstrayendo una rutina tediosa, pero cuando necesito extender esta funcionalidad o usarla de una forma que no sea la intención, puede ser un puñado.
Creo que es una de esas cosas donde "la práctica hace perfecto".
Más bibliotecas = menos horas facturables.
Muchos nuevos programadores siguen trabajando a un nivel muy bajo de abstracción, aprendiendo el oficio. Eso es algo que todos tienen que pasar. Se tarda un poco en "subir la pila" por así decirlo.
Una vez que los programadores se dan cuenta de que pasan la mayor parte del tiempo resolviendo los mismos problemas que alguien más ya hizo, y el objetivo es obtener un "valor comercial", entonces realmente pueden apreciar el valor que aporta una buena biblioteca.
No creo que esto sea necesariamente algo malo. Usar bibliotecas es genial; ahorra tiempo, esfuerzo, errores, etc. Sin embargo, aprendes muy poco en el proceso, y para los nuevos programadores, el objetivo es el aprendizaje. Para responder a la pregunta, creo que tienden a alejarse de las bibliotecas simplemente porque no están acostumbradas a usarlas y quizás no saben que existen.
Para los demonios de la velocidad, rara vez utilizan bibliotecas de terceros y los nuevos programadores generalmente buscan apretar cada vez más la velocidad de su código. Creo que si no tienen control sobre su código, no pueden obtener el rendimiento que están buscando. Al menos por eso evité las bibliotecas cuando empecé a programar.
Recuerdo haber programado mi primer DAL y evité todas las demás bibliotecas gratuitas en la web porque quería que mi código funcionara a la máxima velocidad. Más tarde, descubrí que generalmente no es el código que es el bttleneck en realidad es la base de datos.
Para muchas bibliotecas mal documentadas que se implementan de manera flexible o en lenguajes que no le permiten controlar la contención y la visibilidad, puede ser bastante difícil adivinar cómo se debe usar la biblioteca.
Después de usarlo por un tiempo, te has acostumbrado a las peculiaridades o has leído otro código fuente que te enseñó la manera correcta; pero hasta entonces puede ser bastante irritante usar una biblioteca mal diseñada / diseñada. (o incluso uno bien diseñado que no está terriblemente bien documentado).
Si no tiene el código fuente de la biblioteca, ese es otro problema: no tiene control sobre la capacidad de mantener su programa funcionando. Esto es mucho más raro en estos días, pero todavía sucede en el caso de una biblioteca comprada.
Porque es divertido.
Porque parte de la maduración como desarrollador es aprender a identificar rápidamente problemas que pueden resolverse en una biblioteca o en una solución existente y que requieren atención personal.
Recuerdo alejarme de varias bibliotecas simplemente porque quería ver si podía crear mi propio algoritmo. No quería simplemente rendirme y dejar que alguien haga el trabajo por mí, sino que quería aprender de mis errores. Una vez que encontré una solución con la que estaba feliz, busqué en las bibliotecas.
Así que para mí era simplemente querer ver si podía hacerlo.
Respuesta de un noob: "No estoy seguro de cómo usar las bibliotecas o incluso cómo acceder a ellas o cómo funciona"
Siempre tengo la necesidad de hacerlo yo mismo, pero a veces puedo ver mis propias limitaciones. Recientemente descargué una biblioteca para crear documentos PDF, pero es casi la única vez que puedo recordar.
Al menos para mí, (tratar de) hacer cosas por mí mismo, es mi forma de aprender.
Mi impresión es que muchos programadores novatos no lo considerarían como su propio trabajo si usaran las bibliotecas de otros.
Soy programador, no psicólogo! :)
Fue hace mucho, mucho tiempo para mí, pero fue porque quería aprender y experimentar. No quería usar algo que no entendía, así que si pensaba que no entendía la biblioteca y podía programarla yo mismo, intenté no usarla. También podría haber un poco de miedo; la programación le da una sensación de control, y usar una biblioteca es como regalar este control.
Sucede que los noobs usan Libs sin saberlo , pero cuando deben importar / agregar uno que está bastante menos documentado, existe el temor de que no se conozca . Eso sucede principalmente para los compilados langs!
En el IRT interpretado (o compilado), principalmente cuando hay una consola, tal miedo es casi inexistente ; ya que puede requerir y ver si falla, llame a un método y vea qué devuelve.
Las consolas son herramientas de valentía!