¿Qué es bootstrapping?

636

Sigo viendo "bootstrapping" mencionado en discusiones sobre desarrollo de aplicaciones. Parece generalizado e importante, pero aún no he encontrado una explicación pobre de lo que es realmente el bootstrapping; más bien, parece que se supone que todo el mundo sabe lo que significa. Yo no, sin embargo. Por lo que puedo imaginar, tiene algo que ver con las tareas de inicialización requeridas de una aplicación en el lanzamiento, pero podría estar completamente equivocado al respecto. ¿Alguien puede ayudarme a entender esta idea?

Alex Basson
fuente
8
Según Wikipedia, hay cuatro usos de la palabra "bootstrapping" con respecto a la informática: en.wikipedia.org/wiki/Bootstrapping#Computing
Thomas Owens
1
Acabo de actualizar la publicación de HeDinges con esto. Estaba buscando alguna aclaración sobre qué forma de bootstrapping estaba mirando Alex.
Thomas Owens
En el desarrollo de software se refiere al desarrollo de entornos de programación sucesivamente más complejos y más rápidos.
Lucky
En el desarrollo de software .NET, entiendo que se refiere a la configuración del entorno en el que se ejecutará la aplicación, como cualquier servicio que deba registrarse o cargarse.
Neo

Respuestas:

318

"Bootstrapping" viene del término "tirarte de tus propios bootstraps". Eso se puede obtener de Wikipedia .

En informática, un cargador de arranque es la primera pieza de código que se ejecuta cuando se inicia una máquina, y es responsable de cargar el resto del sistema operativo. En las computadoras modernas está almacenado en la ROM, pero recuerdo el proceso de arranque en el PDP-11, donde se introducían bits a través de los interruptores del panel frontal para cargar un segmento de disco en particular en la memoria y luego ejecutarlo. No hace falta decir que el cargador de arranque suele ser bastante pequeño.

"Bootstrapping" también se usa como un término para construir un sistema que se utiliza a sí mismo, o más correctamente, una versión predecesora. Por ejemplo, ANTLR versión 3 se escribe utilizando un analizador desarrollado en ANTLR versión 2.


fuente
8
Wow, casi me había olvidado de los interruptores del panel frontal en los PDP. ¡¡Gracias por los recuerdos!!
Jeff Hornby
77
Corrígeme si estoy equivocado. Aunque esta respuesta explica los detalles técnicos de lo que puede ser el bootstrapping, nunca respondió la pregunta original dentro del contexto de la pregunta.
jayscript
55
@jayscript - ¿Cómo elegirías responder esta pregunta? Es una expresión idiomática, y las expresiones idiomáticas generalmente son bien entendidas por el grupo social que las usa, e incomprensibles fuera de ella. Traté de responder con un ejemplo, que creo que es una de las pocas formas de intentar traducir el idioma.
3
@kdgregory No podría responder esta pregunta ya que vine aquí para buscar respuestas. Especulo que la palabra bootstrapping en sí misma es una metáfora de varios conceptos técnicos diferentes que están poco relacionados, lo que podría ser una fuente de confusión.
jayscript
2
PDP 11 ?! No me había dado cuenta de que teníamos gente vieja aquí. : P
John Red
255

Un ejemplo de bootstrapping se encuentra en algunos marcos web. Se llama index.php (el programa de arranque), y luego carga los marcos auxiliares, modelos, configuración, y luego carga el controlador y le pasa el control.

Como puede ver, es un archivo simple que inicia un proceso grande.

ryeguy
fuente
50
En términos de desarrollo web (que fue el contexto de la pregunta original), creo que esta es la mejor respuesta.
cartbeforehorse
Parece bastante relacionado con Laravel, pero Laravel todavía no estaba allí en 2009.
LppEdd
@Wajdan Ali No, esta no debería ser la respuesta aceptada. Esta es una vista microscópica de un nuevo uso del término bootstrapping, que algunos argumentan que en realidad es un mal uso de un término mucho anterior. "To bootstrap" se refiere a tirar de tus bootstraps, es decir, usar el poder de algo para aprovecharlo. Es el origen del término "para iniciar su computadora". El uso actual de pop en el desarrollo web no es el único (o el original) uso de la palabra. Muchas otras respuestas abordan esto apropiadamente.
Kallaste
3
@Kallaste, bien, pero esta es la respuesta que busqué y, según el contexto de la pregunta original ("desarrollo de aplicaciones"), parece ser la respuesta más apropiada como ya se señaló.
Bynary
@ aaron.bynum, no, la respuesta dada se aplica a los marcos de desarrollo web, y definitivamente no al desarrollo de aplicaciones. La respuesta es engañosa y defectuosa, ya que se basa en un malentendido común de lo que realmente es el bootstrapping y de dónde vino. Solo está difundiendo información errónea. Si eso es lo que viniste buscando, está bien, pero SO en su conjunto valora la información correcta. De ahí mi comentario.
Kallaste
51

Ver en el artículo de Wikipedia sobre bootstrapping .

Hay una sección y enlaces que explican lo que significa en Computación . Tiene cuatro usos diferentes en el campo.

Aquí hay algunas citas, pero para una explicación más profunda y significados alternativos, consulte los enlaces de arriba.

"... es una técnica mediante la cual un simple programa de computadora activa un sistema de programas más complicado".

"Un uso diferente del término bootstrapping es usar un compilador para compilarse, primero escribiendo una pequeña parte de un compilador de un nuevo lenguaje de programación en un lenguaje existente para compilar más programas del nuevo compilador escritos en el nuevo lenguaje".

HeDinges
fuente
66
¿Podría por favor citar o parafrasear para que los lectores no tengan que recorrer múltiples sitios web para obtener su respuesta?
Kurt W. Leucht
55
"Industria del software, el negocio único de vender productos de calidad inferior legalmente y cobrar por sus actualizaciones".
Stein Åsmul
Estaba buscando una respuesta Bootstrapping en el compilador . Esto fue útil.
Siraj Alam
49

El término "bootstrapping" generalmente se aplica a una situación en la que un sistema depende de sí mismo para comenzar, una especie de problema de huevo y gallina.

Por ejemplo:

  • ¿Cómo compilas un compilador de C escrito en C?
  • ¿Cómo iniciar un proceso de inicialización del sistema operativo si aún no lo tiene?
  • ¿Cómo se inicia un sistema distribuido (punto a punto) en el que los clientes dependen de sus pares conocidos actualmente para conocer nuevos pares en el sistema?

En ese caso, bootstrapping se refiere a una forma de romper la dependencia circular, generalmente con la ayuda de una entidad externa, p. Ej.

  • Puede usar otro compilador de C para compilar (bootstrap) su propio compilador, y luego puede usarlo para recompilarse
  • Utiliza un código separado que configura el proceso inicial sin depender de ninguna función proporcionada por el sistema operativo.
  • Utiliza una lista codificada de pares iniciales o una URL de seguimiento codificada que proporciona la lista de pares

etc.

Ivan Poliakov
fuente
44
Esto realmente llega al meollo de la pregunta. Donde las otras dos respuestas, te lo pierdas por completo.
Arturo Hernández
1
Siento que esta explicación fue la más relevante para el desarrollo de software en general. Realmente me trajo el concepto a casa
Vance Palacio
24

En el contexto del desarrollo de aplicaciones, el "arranque" generalmente aparece cuando se habla de software modular y / o auto-actualizable.

En lugar de que el usuario descargue la aplicación completa, incluidas las funciones que no necesita, y la descargue y actualice manualmente cada vez que haya una actualización, el usuario solo descarga e inicia un pequeño ejecutable "bootstrap", que a su vez descarga e instala esos partes de la aplicación que el usuario necesita. Además, el componente bootstrap puede buscar actualizaciones e instalarlas cada vez que se inicia.

Michael Borgwardt
fuente
44
Nunca escuché el término "bootstrapping" usado en ese contexto particular.
Bombe
Comúnmente utilizado en lo que respecta a las aplicaciones php (por ejemplo, usar Composer para lograr esto)
AturSams
15

Alex, es más o menos lo que hace tu computadora cuando se inicia. ('Arrancar' una computadora en realidad proviene de la palabra bootstrapping)

Inicialmente, se ejecuta el pequeño programa en su BIOS. Contiene suficiente código de máquina para cargar y ejecutar un programa más grande y complejo.

Ese segundo programa es probablemente algo como NTLDR (en Windows) o LILO (en Linux), que luego se ejecuta y puede cargar, luego ejecutar, el resto del sistema operativo.

davewasthere
fuente
2
Aunque leí todas las respuestas (que ampliaron bien el término y voté algunas), esta simple comparación de "arranque", también conocida como "bootstrapping", me dio la mejor motivación para leer todas las demás para conectar los puntos. En primer lugar, fue como explicar un tema complejo a un niño de 5 años y lo entienden. Gracias.
Chris22
14

Para completar, también es un método bastante importante (y relativamente nuevo) en estadística que utiliza remuestreo / simulación para inferir propiedades de población de una muestra. Tiene su propio artículo extenso de Wikipedia sobre bootstrapping (estadísticas) .

Dirk Eddelbuettel
fuente
1
¿Relativamente nuevo? Fue parte de mi educación estadística hace al menos 15 años.
Toon Krijthe
66
Es por eso que dije 'relativamente': los artículos iniciales de Efron son de principios de la década de 1980 en lugar de decir el comienzo de la literatura de robustez de la década de 1960.
Dirk Eddelbuettel
4

Arrancar el significado del diccionario es comenzar con recursos mínimos. En el contexto de un sistema operativo, el sistema operativo debería poder cargarse rápidamente una vez que la prueba de encendido automático (POST) determina que es seguro reactivar la CPU. El código de la correa de arranque se ejecutará desde el BIOS. BIOS es una ROM de pequeño tamaño. En general, es una instrucción de salto al conjunto de instrucciones que cargará el sistema operativo en la RAM. El destino del Jump es el sector de arranque en el disco duro. Una vez que el programa bios lo verifica, es un sector de arranque válido que contiene la dirección de inicio del sistema operativo almacenado, es decir, si es un MBR (registro de arranque maestro) válido o no. Si se trata de un MBR válido, el sistema operativo se copiará en la memoria (RAM) desde allí en el sistema operativo se encarga de la gestión de la memoria y el proceso.

Achoora
fuente
2

En mi humilde opinión, no hay una mejor explicación que el hecho de cómo se escribió el primer compilador?

En estos días, la carga del sistema operativo es el proceso más común denominado Bootstrapping

Ivanzinho
fuente
El enlace que dio en su respuesta fue realmente útil.
Siraj Alam
2

Bootstrapping tiene otro significado en el contexto del aprendizaje por refuerzo que puede ser útil para los desarrolladores, además de su uso en el desarrollo de software (la mayoría de las respuestas aquí, por ejemplo, por kdgregory ) y su uso en estadísticas como lo discutió Dirk Eddelbuettel .

De Sutton y Barto :

Widrow, Gupta y Maitra (1973) modificaron el algoritmo de Mínimo-Cuadrado Medio (LMS) de Widrow y Hoff (1960) para producir una regla de aprendizaje de refuerzo que podría aprender de las señales de éxito y fracaso en lugar de ejemplos de entrenamiento. Llamaron a esta forma de aprendizaje " adaptación de arranque selectivo " y la describieron como "aprender con un crítico" en lugar de "aprender con un maestro". Analizaron esta regla y mostraron cómo aprender a jugar al blackjack. Esta fue una incursión aislada en el aprendizaje de refuerzo por parte de Widrow, cuyas contribuciones al aprendizaje supervisado fueron mucho más influyentes.

El libro describe varios algoritmos de refuerzo donde el valor objetivo se basa en una aproximación previa como métodos de arranque:

Finalmente, observamos una última propiedad especial de los métodos DP [Programación dinámica]. Todos ellos actualizan las estimaciones de los valores de los estados en función de las estimaciones de los valores de los estados sucesores. Es decir, actualizan las estimaciones sobre la base de otras estimaciones. Llamamos a esta idea general bootstrapping . Muchos métodos de aprendizaje de refuerzo realizan bootstrapping, incluso aquellos que no requieren, como lo requiere DP, un modelo completo y preciso del entorno.

Tenga en cuenta que esto difiere de la agregación de bootstrap y la explosión de inteligencia que se menciona en la página de wikipedia sobre bootstrapping.

Escipión
fuente
1

En lo que respecta al uso del popular Bootstrap de Twitter, siento que este tipo de bootstrapping es la acción de integrar un componente modular en una aplicación web sin que la aplicación web tenga que reconocer que el componente modular existe hasta que lo necesite o lo haga referencia .

El desarrollador puede integrar sin problemas una copia predeterminada del tema CSS Twitter Bootstrap simplemente cargándola (haciendo referencia) en la aplicación web. Vuola! Entonces es posible que deba anular algunos de estos cambios, pero puede hacerlo de tal manera que el recurso / componente esté intacto y sea completamente reutilizable.

Este mismo concepto es cómo los desarrolladores web implementan las API jQuery, etc., pero los desarrolladores no lo expresan realmente como bootstrapping per se. Lo que hace es mejorar la flexibilidad y la reutilización al tiempo que permite el aislamiento de diferentes componentes / recursos de una aplicación para residir libremente, ya sea en el mismo servidor / s o posiblemente en un CDN.

NOTA: En el cómputo de las operaciones de arranque con el MBR y en UNIX requiere un gestor de arranque o administrador especial que es un pequeño programa en ROM que carga el sistema operativo en la RAM. Si lo piensa, el mismo concepto tiene lugar en la acción del cargador de arranque que comprueba el MBR y carga el sistema operativo en función de esta tabla, lo que ocurre sin que el sistema operativo tenga ninguna idea de que esto ocurre.

yardpenalty.com
fuente
0

Pertenezco a la generación que activó los interruptores para ingresar a un programa de arranque. A principios de la década de 1980, trabajé en un microordenador llamado Micro-78, desarrollado por Electronics Corporation of India Ltd (ECIL). Era una especie de clon de Altair 8800. Recuerdo claramente lo que sucede cuando se ingresó un pequeño programa de arranque usando los interruptores de palanca y se ejecutó presionando un botón. El programa lee un segundo programa de inicio contenido en la primera pista del disquete y lo sobrescribe de tal manera que el segundo programa de inicio comienza a ejecutarse para cargar un sistema operativo de disco. Creo que el término "bootstrap" se refiere a este proceso de la primera lectura del programa de arranque y sobrescribir el segundo programa de arranque en sí mismo, de una manera "empujando hacia arriba" con la funcionalidad adicional del segundo programa de arranque.

Murthy KVM
fuente
-3

Como un humilde principiante en el mundo de la programación, y hojeando todas las respuestas aquí después de ver que esta palabra se usaba mucho de maneras aparentemente ligeramente diferentes en diferentes lugares, encontré leyendo la página de Wikipedia sobre Bootstrapping (¡duh! No pensé en tampoco al principio) es muy informativo para comprender las diferencias en el uso de esta palabra. ¿Podría ser ...... en ocasiones extremadamente raras ...... Wikipedia podría incluso tener mejores explicaciones de ciertos términos que ... (redactado)? Sin embargo, ¿traerán puntos de representante en Wikipedia?

Para mí, parece que todos los significados tienen algo que ver: comenzar con algo lo más simple posible Cosa1, hacer algo un poco más complejo con esa Cosa2, y ahora puede usar Cosa2 para hacer algún tipo de tareas de manera más eficiente y rápida de lo que podría originalmente con Thing1. Luego repita de Thing2 a Thing 3 ad infinitum ...

Lo veo muy relacionado tanto con la evolución biológica como con 'Layers of Abstraction' (novatos como yo, ejem, Wikipedia, tos): la evolución de las computadoras de 1940 con interruptores, código de máquina, ensamblaje, C, Python, IAs que puedes dar todo tipo de instrucciones complejas para que les guste "hacer la cena% 4 ^% a mis requisitos predeterminados & ^ $% y limpiar el piso% $ £" @: ~ "en argot borracho inglés o dialecto tribal amazónico sin que ellos planteen una excepción '(para los novatos otra vez ... lo adivinaste): perdí muchos enlaces allí debido a la simple ignorancia.

Luego, en ciertos significados de software específicos: Significado1: Thing1 se usa para cargar la última versión de Thing2 (porque, por supuesto, Thing2 será más grande que Thing1, al igual que Thing3 será más grande que Thing2).

Significado2: Thing1 es un lenguaje de nivel inferior (más cercano a 1001011100 .... 011001 que print ("Hello", user.name)) usado para escribir un poco del idioma superior de Thing2, entonces este bit de Thing2 es solía expandir Thing2 en sí desde el nivel de vocabulario para bebés hacia el nivel de vocabulario para adultos (Thing2 comienza a ser procesado, o para usar el término técnico correcto 'compilado', por la versión para bebés de sí mismo (¡es un bebé inteligente!), mientras que la versión para bebés de Thing2 por supuesto, solo puede ser compilado por Thing1, porque no puede existir antes de que exista, ¡claro!), luego la versión secundaria de Thing2 compila la versión Surly Teenager de Thing2, en cuyo momento la comunidad de programación decide si los 'problemas' de Surly Teenager ( ¡Vale la pena dedicar suficiente tiempo a resolver el término de software y el término de metáfora!) para ser aceptado a largo plazo,o abandonarlos (no estoy seguro de dónde tomar la analogía aquí).

En caso afirmativo, Thing2 tiene 'Bootstrapped' (posiblemente algunas veces) desde la infancia hasta la edad adulta: "el niño es el padre del hombre" (Wordsworth, sugiera que no intente buscar la cita o el autor en Stack Overflow) .

Will Croxford
fuente