Me refiero a explicarle al no programador qué es la programación. Me aseguré de buscar preguntas similares antes de crear esta, pero las pocas que encontré parecían esquivar la pregunta, y específicamente me gustaría ver algunas metáforas o analogías. Personalmente, me resulta más fácil explicarle algo técnico a alguien mediante el uso de metáforas o analogías.
La razón por la que estoy interesado en esto es porque muchas personas encuentran el trabajo de un programador a diario, pero si le preguntas a la persona promedio qué es o hace un programador, realmente no lo saben. Esto lleva a ciertas situaciones de malentendido (ej. "[...] ¡pero pensé que eras bueno con las computadoras!")
Realmente me gustaría encontrar el mejor por ahí. Me gustaría poder explicar fácilmente a alguien de qué se trata mi elección de carrera. Por supuesto, al menos la idea general.
Personalmente no tengo uno sólido, pero lo he pensado durante mucho tiempo y por lo general he gravitado hacia la metáfora del 'lenguaje', donde conocemos un lenguaje que las computadoras entienden y, por lo tanto, podemos decirle a las computadoras qué hacer, o "enseñarles", para resolver nuestros problemas.
Por ejemplo:
Imagine que en una realidad alternativa, existen robots humanoides con inteligencia artificial, y algunas personas pueden comunicarse con ellos a través de un idioma común, que es una variación del inglés. Estas personas que pueden comunicarse con los robots pueden enseñarles cómo resolver ciertos problemas o hacer ciertas tareas, como hacer nuestras tareas.
Bueno, aunque todavía no existen robots como ese, los programadores de nuestro tiempo son como esas personas, pero en lugar de comunicarse con los robots, se comunican con las computadoras. Los programadores "enseñan" a las computadoras cómo realizar ciertas tareas o resolver ciertos problemas mediante el software que crean utilizando este "lenguaje común".
Los programadores y este "lenguaje común" son los que nos brindan cosas como correo electrónico, sitios web, videojuegos, procesadores de texto, teléfonos inteligentes ( para decirlo simplemente ) y muchas otras cosas que usamos a diario.
No me refiero a poner la programación en el trono ni nada, es la mejor metáfora que se me ocurrió.
Estoy seguro de que alguien encontrará algún problema con este, probablemente sea un poco artificial, pero de nuevo por eso estoy haciendo esta pregunta.
fuente
Respuestas:
Es como tener que escribir instrucciones detalladas paso a paso sobre cómo conducir en algún lugar. Pero generalmente tiene que agregar planes de contingencia para cosas como "qué pasa si hay un embotellamiento" o "qué pasa si un camión se descompone en el carril de giro".
Y a veces hay que sumergirse aún más y explicar las reglas de la carretera, como por qué lado conducir o qué hacer en un semáforo en rojo. Y a veces incluso necesita explicar con precisión cómo funciona el volante o el pedal del acelerador.
Y, por lo general, una vez que tiene todo lo que se describe con todo detalle, el cliente dice "eso es perfecto, excepto que debe funcionar para alguien que conduce un aerodeslizador"
fuente
Escribo instrucciones muy, muy detalladas para una máquina muy, muy tonta.
fuente
Utilizo la metáfora "Escribimos recetas de tejer ", que es amiga de la abuela.
Razón fundamental:
if
declaraciones y matemáticas y bucles.fuente
No es una buena analogía, pero cuando la gente me dice que arregle su máquina, digo: "Soy el tipo que diseña los autos. ¡No soy el mecánico!"
fuente
Cuando era niño, leía una muy buena descripción de la programación: es como decirle a un robot cómo hacer una tarea común y cotidiana, como ir a la escuela. Entonces puedes decirle "¡Ve a la escuela!", Pero no sabe cómo. Entonces le dices que "salga, gire a la izquierda, siga caminando hasta llegar a la escuela, gire a la izquierda, entre y siéntese". ¡Pero hay un camino en el camino! Por lo tanto, debe decirle que "pare en el camino, verifique que no haya tráfico, cruce el camino y siga caminando" en algún lugar en el medio. ¿Y las puertas? Entonces agrega "verifique si la puerta de la escuela está abierta. Si no lo está, ábrala". ahí. Eventualmente, tienes un programa que puede decirle a tu robot cómo llegar a la escuela por sí mismo.
Esto encaja perfectamente con Logo, donde le das instrucciones a la tortuga exactamente de esta manera para crear formas complejas.
fuente
La programación es como una caja de bombones . A veces encuentras lo que estás buscando de inmediato, pero la mayoría de las veces lleva mucha prueba y error. A veces obtienes coco.
Semáforos . Los automóviles se mueven o se detienen. Es fácil imaginar un semáforo, pero ¿qué sucede si agrega otro? ¿Qué tal un tercio? ¿Qué tal una ciudad entera? Un sistema de tránsito está compuesto por miles de luces de freno, cada una simple en sí misma, pero cuando se toma como un todo, se convierte en un sistema complejo. Si uno de esos semáforos funciona mal o se apaga por solo unos segundos, arroja todo el sistema al caos. Si todo está sincronizado, simplemente disfruta el viaje.
Un orador motivacional encuentra claves para desbloquear el rompecabezas de las motivaciones, sueños e ideas de las personas. Cada situación, cada persona es diferente. Lo que funcionó en el pasado puede no ser apropiado ahora. A veces, una clave se puede reutilizar, pero debe adaptarse al individuo. Otras veces, la clave debe ser creada de nuevo. Lo más gratificante es cuando la persona ha sido desbloqueada y la ves salir y conquistar el mundo. Lo más devastador es cuando te sientes cerca, pero simplemente no eres capaz de desbloquear el potencial.
Una historia de detectives , donde el detective construye lentamente su caso buscando pistas y reuniendo evidencia. Metódico, inteligente y preciso ganará el día. Descuidado, ignorante y perezoso condenará el caso. Eventualmente, el trabajo se mantendrá o caerá ante un jurado de colegas.
Una máquina tragamonedas . Pones todas tus monedas y tiras de la palanca. A veces ganas a lo grande, a veces te sientas allí durante horas y no pasa nada. A veces alguien más pasa casualmente, tira de la palanca una vez y gana el premio gordo.
Música . Una nota es bastante simple, pero una medida es más compleja. Una canción completa tiene muchas medidas con muchas notas. Si una nota está desactivada, puede arruinar todo el rendimiento. Si cada nota se entrega perfectamente, la interpretación se desvanece en el fondo y solo existe la música.
fuente
La mejor metáfora de cualquier cosa es en sí misma. Cualquier cosa diferente perderá algo de precisión. Como tal, elegir la mejor metáfora depende de lo que, específicamente, desee capturar acerca de la programación. Dado que aquí se darán muchas respuestas sobre la codificación de metáforas, responderé con la metáfora clásica para el proceso de desarrollo en su conjunto:
Construcción de edificio
El aspecto más común de esta metáfora es que un arquitecto físico es algo análogo a un arquitecto de software. Aquí hay algunos otros paralelos:
Por supuesto, como cualquier metáfora, tiene sus limitaciones. Algunos defectos con esto:
Entonces, como cualquier analogía, depende de lo que intentes explicar. Tenga cuidado de no confiar demasiado en ninguna metáfora, o su cliente comenzará a preguntarse cuáles serán los impuestos a la propiedad en su nuevo sistema de nómina.
fuente
Me encanta la analogía de Chris McMahon de que el desarrollo de software es como la creación de música, particularmente música de jazz.
Aquí está el enlace a la publicación del blog en el que lo discute: http://chrismcmahonsblog.blogspot.com/2007/05/example-of-analogy-monks-vs-music.html
fuente
A veces me refiero a la programación para controlar zombies sin sentido . Resumiendo mi publicación de blog al respecto:
fuente
La programación es como construir cosas con Lego :
fuente
Programar una computadora es como criar a un niño ...
La principal diferencia es que nos enojamos si alguien roba nuestro código fuente, pero a menudo nos alegra que alguien nos quite a nuestros hijos de nuestras manos.
fuente
La programación es como construir una fábrica o una línea de montaje.
Piense en el software como una máquina o línea de ensamblaje que existe dentro de la computadora. Algunas materias primas y componentes se alimentan a la máquina, y sigue un conjunto de procedimientos para procesarlos en algún producto final. Los procedimientos se configuran para realizar una operación específica en alguna materia prima o componente a un conjunto específico de parámetros (por ejemplo, tiempo, temperatura, distancia, etc.) en un orden particular. Si los detalles de la operación a realizar fueran incorrectos, o si los sensores de la máquina no estuvieran correctamente calibrados, o si alguna materia prima o componente no estuviera dentro de los estándares de calidad esperados, podría cambiar el resultado de la operación y el producto no resultaría como se esperaba.
Tal máquina es muy rígida en su funcionamiento e insumos aceptables. Las máquinas no cuestionan la inteligencia de los diseñadores ni su entorno operativo actual. Continuará siguiendo los procedimientos mientras se le indique. Incluso si un cambio en las materias primas o componentes pudiera tener un efecto drástico en lo que sucedió en operaciones posteriores, la máquina aún realizaría sus procedimientos. El proceso necesitaría ser revisado para ver qué cambios a los procedimientos fueron necesarios para compensar y producir el resultado deseado. Un cambio en el diseño o la configuración del producto también puede requerir un cambio significativo en las operaciones realizadas o en su pedido. Aunque los encargados de la producción aprendieron rápidamente la importancia de aislar las operaciones tanto como sea posible para reducir los efectos indeseables entre ellas, se hacen muchas suposiciones de la condición en que los componentes están en proceso de procesamiento; supuestos que podrían no detectarse hasta que el producto final esté en manos del usuario en un entorno operativo diferente.
fuente
Ayudar a un idiota rápido a pasar una clase de matemáticas que requiere un ensayo escrito.
fuente
La programación de computadoras es como jugar un juego de ajedrez en el que el tamaño del tablero, la cantidad de piezas en juego y las reglas que gobiernan esas piezas crecen en tamaño y complejidad a medida que avanza el juego.
fuente
Escribir software es como ... ¡Escribir! ^^
fuente
Los nuevos estudiantes de las clases de CS / Programación son, prácticamente, como usuarios sin programación. El ejemplo del robot es bueno.
En los años 80, usar Logo, Karel (o entornos de programación similares), donde el usuario aprende a programar, viendo la computadora como un robot, en lugar de un televisor con una máquina de escribir, ayudó mucho. Esas herramientas se utilizan comúnmente en la escuela secundaria y preparatoria.
¡Esa programación práctica ayudó a los estudiantes a adquirir habilidades para resolver problemas, incluso si no estaban relacionados con la computadora!
O, incluso si los estudiantes no se convirtieron en programadores.
Algunos colegas y universidades también aplicaron esas herramientas en los cursos de primer año.
Me pregunto por qué muchas escuelas secundarias dejan de enseñar Logo y Karel ...
fuente
Me gusta la analogía de Fred Brooks, de Mythical Man-Month, que la programación es como realizar magia.
fuente
Esto suele ser un intento de engañar a un geek para que arregle una computadora (¿siente la necesidad de demostrar que está equivocado?). Mi respuesta estándar:
soy programador. Es como un ingeniero de automóviles: probablemente no sabrá cómo reparar los frenos de usted Trabant '72, y ciertamente no lo haría si lo supiera. ¡Un mecánico haría eso!
fuente
Soy aficionado al concepto de una receta para cocinar.
fuente
La programación es como manejar enormes cantidades de energía. Puedes hacer que la computadora haga lo que quieras. Solo está limitado por su imaginación y la cantidad de tiempo que está dispuesto a invertir.
Los programadores son como los fabricantes de una casa. Podemos contarte todo sobre las casas que hemos construido. Sin embargo, si nos pide que le preguntemos a una casa aleatoria por la que pasamos en el camino, es probable que no sepamos mucho. Pero si necesita agregar o cambiar algo en esa casa, podemos hacer que suceda siempre que el propietario nos lo permita.
fuente
En uno de los viejos artículos de Chris Crawford sobre programación , comparó un programa complejo con una burocracia, con múltiples agencias que se comunican pasando notas de ida y vuelta. He encontrado que es una metáfora muy útil al explicar el desarrollo de software.
fuente
Generalmente equiparo la programación a un rompecabezas.
Para crear un nuevo proyecto: tiene toneladas de piezas, algunas de las cuales no pertenecen a esta imagen, y no tiene una vista previa de cómo se ve el rompecabezas cuando está hecho. Pero sí conoce el tamaño y los colores generales, por lo que las estimaciones son posibles, pero no necesariamente precisas.
Para modificar un proyecto ya existente, apareció un gato y arrancó una parte del rompecabezas terminado. Tomará algún tiempo, pero el marco ya está allí, por lo que no debería ser tan malo (dependiendo de cuánto deba cambiarse).
También ayuda a describir el progreso. Uno de mis proyectos recientes, en un momento me preguntaba cómo describirlo para que una persona no técnica entienda por qué no sé cuánto tiempo más, y se me ocurrió: piense en un rompecabezas donde todos los Las piezas de borde están hechas, como son un poco más de la mitad si las piezas internas Los que quedan están separados entre sí, lo que tengo que hacer ahora es llenar los vacíos.
fuente
Es triste, pero la programación es un trabajo que solo se puede entender aprendiendo cómo hacerlo.
La programación tiene varios niveles diferentes de percepción y diferentes desde diferentes lados.
A bajo nivel es "escribir instrucciones muy, muy detalladas para una máquina muy, muy tonta"
En el siguiente nivel se trata de complejidad. Construyendo una nueva metáfora para simplificar el trabajo. Como las matemáticas superiores.
Desde un punto de vista diferente, el uso de tecnologías auxiliares como control de versiones, código auto documentado, construcción de proyectos y pruebas.
Desde el otro lado, está construyendo una interfaz de "usuario" (no literalmente, me refiero a la API también a la interfaz de usuario), predice posibles errores (realizados por el usuario, los datos o incluso él mismo) y corrige la reacción ante los errores.
Y finalmente.
La metáfora para la programación es literatura. Primero necesita aprender el alfabeto. Pero escribir una novela en esto incluso no comienza.
fuente