¿Qué tan común es para un equipo escribir todo internamente? [cerrado]

53

En una entrevista reciente, le pregunté a los entrevistadores "¿cómo evalúa las nuevas tecnologías y bibliotecas (como SignalR) y las pone en práctica?". Dijeron que no, que en su lugar escriben todo ellos mismos para no tener que depender de nadie más.

La empresa no trabaja para el gobierno o los contratistas de defensa ni en ningún proyecto crítico para la seguridad ni nada de eso. Eran solo una empresa promedio de desarrollo de software de tamaño mediano.

Mi pregunta es: ¿qué tan común es que los equipos escriban todo ellos mismos? ¿Debería preocuparme los equipos que lo hacen?

Editar: la mayoría de las respuestas han dicho que esto es algo de lo que preocuparse. ¿Sería una segunda entrevista un momento apropiado para pedirles que aclaren / repitan su posición al escribir todo en casa?

Andy Hunt
fuente
58
Enorme bandera roja. Aléjese con calma y no haga movimientos bruscos.
tdammers
16
No creo que esto sea tan ridículo como la gente dice ... Recientemente he perdido una cantidad increíble de tiempo arreglando bibliotecas abandonadas para nuevas versiones de framework, nuevas versiones de bibliotecas con cambios severos que no fueron documentados e incluso grandes brechas en marcos significativos como jQuery que los hacen no aptos para su propósito. La gente no se esfuerza lo suficiente para decidir si los componentes de terceros agregarán una gran sobrecarga de mantenimiento y, a menudo, terminan con una pica de infierno de dependencia de spaghetti que no se puede mantener.
Danny Tuppeny
44
NuGet es increíble, pero hace que sea muy fácil hacer esto. Instalé una biblioteca de ayuda trivial de NuGet recientemente, y atrajo a Castle y todo tipo de basura hinchada. Seguro; una prohibición total es extraña, pero no es más estúpido que permitir que cada desarrollador y su perro tomen cosas al azar sin pensarlo realmente.
Danny Tuppeny
13
¿Todo? ¿Eso incluye sus propios navegadores, sistemas operativos y compiladores? De lo contrario, se están engañando a sí mismos.
Muhammad Alkarouri
44
Por supuesto, es tan ridículo como la gente dice. El hecho de que a) es posible elegir la biblioteca incorrecta para el trabajo yb) hay situaciones en las que ninguna biblioteca de terceros disponible satisfará mejor sus necesidades que la propia: no significa que la política general de nunca usar a terceros Las bibliotecas son correctas.
user16764

Respuestas:

76

Una actitud de nunca usar bibliotecas de terceros es absurda. Escribir todo usted mismo es un uso horrible del tiempo de su empresa, a menos que exista un requisito comercial estricto de que cada línea de la base de código haya sido escrita por un empleado de la empresa, pero ese es un escenario inusual, especialmente para una empresa del sector privado como has descrito

Una respuesta más racional y exhaustiva puede haber sido que solo usarían bibliotecas de terceros que:

  • Satisfacer las necesidades del código que de otro modo escribirían ellos mismos
  • Estaban disponibles bajo una licencia compatible con el modelo de negocio de la compañía.
  • Pruebas incluidas
  • Pasó una revisión de código

Si se cumplieron esos criterios (y en mi experiencia, la revisión del código es muy flexible, especialmente en presencia de buenas pruebas), ya no está "confiando en nadie más", sino en los existentes, disponibles y preferiblemente robustos. código.

Si el código es de código abierto, en el peor de los casos, la biblioteca de terceros queda sin mantenimiento. ¿Pero a quién le importa? ¡Las pruebas demuestran que la biblioteca es adecuada para sus necesidades!

Además, una aversión a las bibliotecas de terceros establecidas dificulta seriamente la productividad del programador. Digamos que la compañía estaba escribiendo aplicaciones web y se negó a usar (por ejemplo) jQuery, por lo que escribió su propia biblioteca alternativa de navegador cruzado para simplificar la manipulación del DOM. Con casi certeza podemos suponer que su implementación:

  • Tendrá una API ajena a los desarrolladores que ya están familiarizados con jQuery
  • No estará tan bien documentado como jQuery
  • No tendrá resultados relevantes de Google cuando encuentre problemas al usar la biblioteca
  • No será tan probado en el campo como jQuery

Todos esos puntos son barreras importantes para la productividad del programador. ¿Cómo puede una empresa darse el lujo de renunciar a una productividad como esa?


Ha actualizado su pregunta para preguntar si es apropiado mencionarla en una segunda entrevista. Absolutamente lo es.

Tal vez malinterpretaste la respuesta de tu entrevistador en la primera entrevista, o tal vez el entrevistador simplemente explicó incorrectamente la posición de la compañía y un nuevo entrevistador puede aclararlo.

Si explica que le preocupa su posición en las bibliotecas externas, hay al menos dos resultados posibles:

  • Están abiertos al cambio, y su preocupación por su proceso lo hace ver mejor que otros candidatos.
  • No están abiertos al cambio y piensan en usted como "el tipo de desarrollador que no queremos contratar". No importa, de todos modos ese no es el tipo de lugar donde quieres trabajar.
Mark Rushakoff
fuente
1
+1 pero creo que te referías al sector privado , no al sector público .
MarkJ
66
"Si el código es de código abierto, en el peor de los casos, la biblioteca de terceros queda sin mantenimiento. ¿Pero a quién le importa? ¡Las pruebas demuestran que la biblioteca es adecuada para sus necesidades!" También tiene el código fuente, que lo coloca en la posición de tener lo que está usando ahora y poder actualizarlo para satisfacer cualquier necesidad futura. (Sí, acostumbrarse a una base de código "alienígena" lleva tiempo, pero también lo hace rodar el suyo).
un CVn
34

Eso parece increíblemente poco competitivo. He trabajado en tiendas que decidieron omitir las bibliotecas de código abierto estándar como Hibernate y rodar las suyas propias debido a alguna característica faltante "crítica". Al final, el software fue increíblemente costoso de construir y mantener. Por supuesto, los gastos de la biblioteca interna se subestimaron enormemente. Y aunque se escribió la biblioteca interna, las bibliotecas estándar avanzaron rápidamente, agregando nuevas características que no estaban disponibles en la biblioteca interna. Al final, el trabajo que tomaría una hora usando una biblioteca estándar en su lugar tomó dos días. Y fue malo para las carreras de los desarrolladores, ya que el mundo pasó de largo. Evitaría una tienda como esa. Me gusta entregar, y no tengo la paciencia para volver a escribir cuando podría reutilizar.

Kevin Cline
fuente
2
Dado que los desarrolladores ya no tenían habilidades relevantes para otros trabajos, ¡el dinero de la compañía perdido en el tiempo de desarrollo extendido se ahorró al no tener que reemplazar a los miembros del equipo que salen! #stratgey
Michael Paulukonis
@Michael: Las únicas personas que pudieron retener fueron las personas que estuvieron presentes en la decisión original de crear marcos internos. Los nuevos empleados tendieron a irse después de aproximadamente un año.
Kevin Cline
</itwasaweakjoke>
Michael Paulukonis
+1 Si la característica que falta es realmente, verdaderamente crucial: modifique la biblioteca de código abierto y contribuya con la característica a la fuente principal. Brinda un gran valor comercial, hace que todos se sientan bien y es excelente para los CV de todos porque ahora han hecho una contribución de código abierto.
MarkJ
@ Mark J: pero si el cambio es rechazado, alguien tendrá un ego magullado.
Kevin Cline
20

La tienda tiene una enfermedad llamada No inventado aquí . Es una buena razón para terminar la entrevista en el acto y partir de inmediato. Esto solo se puede curar con una limpieza de la casa de arriba hacia abajo que es muy poco probable que ocurra.

Para responder a su pregunta, lamentablemente es mucho más común de lo que podría pensar y definitivamente es una razón para preocuparse.

Dan Pichelman
fuente
15

Sí, definitivamente, ¡preocúpate! Eso apesta a arrogancia y (perdón por ser duro) estupidez. Cualquier programador con medio cerebro usará una biblioteca como signalR en lugar de escribirlo usted mismo. No tiene sentido perder el tiempo resolviendo un problema que ya se ha resuelto. Posiblemente, primero trataría de encontrar más información; es posible que te hayan entendido mal (¡aunque podría ser difícil si las entrevistas han terminado!

Rocklan
fuente
11

Tengo un par de amigos que han trabajado (brevemente) en casas de software con el síndrome no inventado aquí . Entonces la mentalidad está ahí afuera.

Una observación que ambos hicieron fue en torno a la cultura que el enfoque fomentó en los equipos de desarrollo. Ambos terminaron trabajando con personas que eran bastante insulares en términos de su perspectiva sobre el desarrollo de software, y personas que realmente no estaban motivadas para aprender cosas nuevas y presionar por la calidad. Independientemente de la etapa en la que se encuentre en su carrera, siempre le gustaría trabajar en algún lugar donde tenga la oportunidad de aprender cosas nuevas de sus compañeros. Sin embargo, este tipo de entorno generalmente no se encuentra en lugares que deseen rodar todo por sí mismos.

avik
fuente
¡+1 una de las principales razones por las que me mudé de mi empleador anterior!
Antony Scott
5

No es común donde vivo, y conozco muchas compañías a pesar de mis colegas. Me atrevería a decir que es un inmediato "no gracias" de mi parte.

No regurgitaré los puntos buenos ya hechos, pero agregaré una cosa.

Acaban de hacer la contratación mucho más difícil.

  • Todos los nuevos empleados tienen una curva de aprendizaje aún más pronunciada que solo la parte principal del software / dominio
  • Los mejores candidatos se desanimarán, ya que no querrán que sus habilidades no se usen.
  • No es probable que las personas se queden mucho tiempo una vez que se dan cuenta de lo malo que es no usar sus herramientas favoritas, y la rotación del personal es costosa

Ahora, por supuesto, habrá personas a las que les gustará el desafío, pero creo que estarían en minoría.

E igualmente, habrá algunas compañías que operan en "escala de Internet", Amazon, Facebook, etc., donde tienen necesidades personalizadas locas, pero nuevamente son minoría.

ozz
fuente
4

No creo que una compañía de software pueda sobrevivir hoy sin depender de un software de terceros y / o de código abierto, y para seguir siendo competitivas, por supuesto, necesitan realizar un seguimiento activo de las nuevas tecnologías. Sin embargo, a menudo hay buenas razones para adoptar al menos una visión bastante defensiva.

Como ejemplo, si vende software y afirma brindar asistencia las 24 horas, los 7 días de la semana y también es legalmente responsable de que su software funcione correctamente, entonces debe tener una idea muy precisa de lo que sucederá si hay un problema con su software en, por ejemplo, una fábrica donde 1 hora de inactividad de producción puede costar varios millones de dólares, y luego ocurre un error grave en la biblioteca de código abierto que estaba utilizando. Créame, realizará evaluaciones muy exhaustivas del software en cuestión.

Sin embargo, por lo que ha escrito, este escenario no parece ser el meollo del asunto.

Thomas
fuente
4

Si usted es una empresa basada en tecnología de cierto tamaño, parece que va a desarrollar cada vez más su propia tecnología, por ejemplo: Google desarrolla mucho, si no la mayoría, si no todo, su software, mientras que la mayoría de ellos son de código abierto. en la búsqueda de convertirlo en un estándar de la industria.

Para las empresas más pequeñas, parecería una pérdida total de tiempo cuando intentan enviar un producto específico con su propia lógica de negocios, y en mi experiencia no he visto que las pequeñas y medianas empresas lo hagan.

Se vuelve más complejo cuando se habla de una base de código altamente especializada, por ejemplo: algoritmos de cifrado: algunas personas tienen una comprensión básica de cómo funcionan, pero las partes complejas de implementar realmente una solución parecerían dispararse en el pie a menos que contrate a un criptógrafo especializado en tales cosas.

Algunas compañías permiten libertad para crear sus propios proyectos de código abierto, lo que parece más apropiado.

Yo personalmente no iría a un lugar con tanta cultura.

Itai Sagi
fuente
1

Lo que tienes es una muy buena oportunidad para ir a la segunda entrevista y hacerles algunas preguntas difíciles. No sé qué hace la compañía, por lo que es difícil decir por qué parece una elección extraña. Puede usar el comentario de @Daniel Pryden con respecto al uso de Google de bibliotecas de terceros.

Cualquier pieza de software que use, ya sea internamente o de un tercero, tiene ventajas y desventajas. No usar una herramienta porque no es interna, incluso si es la mejor herramienta para el trabajo muestra una cierta mentalidad cerrada y eso nunca fomentará la innovación y la creatividad.

Sin embargo, tal vez, solo tú eres la persona que introduce ese cambio. Buena suerte con todo.

Daniel Hollinrake
fuente
-3

Por supuesto que deberías alejarte. No lo he visto mencionado aquí, pero la razón más importante para dejar de lado el trabajo es porque no ganarás mucho en habilidades transferibles.

Imagínese en su próxima entrevista cuando le pregunten con qué tecnologías trabajó y solo puede mencionar C ++. Eso suena como un nivel de posgrado.

Martin Konecny
fuente
"No he visto que se mencione aquí" , ¿miró otras respuestas, por ejemplo, esta ?
mosquito
3
¿No ganarás mucho en habilidades? Eso es ridículo. Eso solo es cierto si ve la programación como jugar con bloques de Lego, apilando componentes juntos. Si tiene que 'reinventar' una biblioteca, aprenderá muchísimo sobre un tema en particular.
GrandmasterB
@GrandmasterB Tienes razón, permíteme aclararte: muchos lugares te preguntan con qué herramientas trabajaste. Sus posibilidades de pasar desapercibido son mucho mayores si otros candidatos pueden comenzar a trabajar mientras usted tiene que aprender desde cero.
Martin Konecny
-9

Las grandes empresas escriben todo por sí mismas.

Hay varias ventajas en escribirlo usted mismo:

  1. Usted tiene la garantía de poseer el software usted mismo
  2. Puede calcular correctamente las cantidades de trabajo que se utilizaron para crearlo
  3. Es posible repetir sus pasos incluso si la próxima vez las bibliotecas no están disponibles
  4. Reduce tu hinchazón requerida
  5. No estás repitiendo lo que otros ya han hecho
  6. Tienes garantizado tener suficientes personas para mantenerlo
  7. Puedes modificar cada parte del software
  8. El tamaño del software está limitado por la cantidad de recursos que tiene

Así es como se rompe cada uno de los puntos si usa la biblioteca de alguien más:

  1. Alguien más posee la lib
  2. No sabes cuánto esfuerzo se hizo para crear la biblioteca
  3. Es imposible crear su próxima versión del producto en una nueva plataforma ya que las mismas bibliotecas ya no están disponibles
  4. La capacidad de implementar el requisito depende de si la lib lo implementó hace años
  5. Alguien más también usa la misma lib, obteniendo las mismas limitaciones y características
  6. Como no creó las bibliotecas, no tiene suficientes personas para mantener todo el software en su producto
  7. Las bibliotecas son binarios, no modificables. Incluso si la fuente está disponible, no tiene suficientes personas para modificar esa gran cantidad de código.
  8. Mantener el código que creó + las bibliotecas es un esfuerzo mayor de lo que estimó originalmente
tp1
fuente
77
¿No sería la extensión lógica de estos argumentos también escribir su propio compilador (probablemente para su propio idioma), ejecutar este software en su propio sistema operativo y probablemente también construir su propio HW?
Timday
44
1: Sí, y puedo pagar una tarifa por usarlo (sin gastar dinero para construirlo de manera diferente). 2: Si no lo estoy construyendo, no me importa. 3: En los negocios, las plataformas tardan en cambiar. Mantenerse a la vanguardia rara vez es un requisito. Pero un buen software se movió fácilmente. 4: no es cierto. Simplemente transfieres la hinchazón de externa a interna. 5: No tiene sentido. 6: No es cierto. 7: Verdadero, pero significa que debe desviar a sus preciados programadores (la parte más costosa de un proyecto) del trabajo real a la corrección de errores en algo que podría mantenerse en otro lugar. 8: Eso es algo malo.
Martin York
55
Muchas grandes empresas hacen un uso extensivo del código fuente abierto en varias formas (incluidas las librerías), a menudo mejorando / contribuyendo a los proyectos relevantes. Los puntos son en su mayoría irrelevantes o incorrectos.
Matt
77
@ tp1: Trabajo para Google y puedo asegurarle que Google utiliza mucho las bibliotecas de terceros cuando satisfacen nuestras necesidades. Muchas veces Google tiene necesidades que son únicas o en una escala diferente de muchas otras compañías de software, por lo que, por una razón u otra, Google a menudo desarrollará cosas internamente. Pero Google también usa una gran cantidad de bibliotecas de código abierto y / o muchas bibliotecas internas de código abierto, por lo que no todo es interno. La mayoría de sus puntos ya no se aplican para el software de código abierto, ya que al tener la fuente se asegura de que siempre pueda depurarla y corregirla si es necesario.
Daniel Pryden
55
"No, el valor proviene de la implementación precisa de los requisitos. Si se creó antes de que se conocieran los requisitos, no puede implementar con precisión esos requisitos exactos". Pista: Si crees que este argumento tiene algún mérito, entonces no has entendido la separación de las preocupaciones.
user16764