¿Cómo puedo explicarles a mis padres que estudio lenguajes de programación?

64

Actualmente estoy terminando mi maestría en informática. Estoy interesado en lenguajes de programación, especialmente en sistemas de tipos. Me interesé en la investigación en este campo y el próximo semestre comenzaré un doctorado sobre el tema.

Ahora aquí está la verdadera pregunta: ¿cómo puedo explicar lo que (quiero) hacer a las personas sin conocimientos previos, ya sea en informática o campos relacionados?

El título proviene de los hechos de que ni siquiera puedo explicar lo que hago a mis padres, amigos, etc. Sí, puedo decir "el objetivo es ayudar a los desarrolladores de software a escribir un mejor software" , pero no creo que sea realmente útil: no conocen la "programación", no tienen idea de lo que significa. Parece que estoy diciendo que soy mecánico de automóviles para alguien de la Edad Media: simplemente no saben de qué estoy hablando, y mucho menos cómo mejorarlo.

¿Alguien tiene buenas analogías con el mundo real? ¿Ejemplos esclarecedores que causan momentos "a-ha"? ¿Debo mostrar un fragmento de código corto y simple a más de 60 años sin experiencia en informática (ni académica)? Si es así, ¿qué idioma debo usar? ¿Alguien aquí enfrenta problemas similares?

effeffe
fuente
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
DW
3
Esta pregunta recibió un voto negativo y uno o más indicadores cercanos, si entiendo correctamente el panel. Por favor considere dejar un comentario para que pueda mejorarlo. Aunque he estado al acecho aquí por un tiempo, esta es la primera vez que participo activamente en el sitio y tal vez no estoy familiarizado con algunas políticas.
effeffe
1
Simplemente no puedo entender por qué esta pregunta es más votada que una pregunta relacionada con un problema específico, lo cual es más útil. Esta pregunta es ridícula y fue ridículamente votada. ¡Increíble!
nbro
2
@nbro No entiendo lo ridículo de la pregunta, y no estoy seguro de cómo decidió que una pregunta específica es "más útil" que otra.
effeffe

Respuestas:

59

Si tiene unos minutos, la mayoría de las personas saben cómo sumar y multiplicar dos números de tres dígitos en papel. Pedirles que hacer eso, (o que admitir que podrían, si tuvieran que) y pedirles que reconocer que lo hacen esta tarea metódica: si este número es mayor que 9, a continuación, añadir un acarreo, y así sucesivamente. Esta descripción que acaban de dar sobre qué hacer es un ejemplo de algoritmo .

Así es como le enseño a la gente el algoritmo de la palabra, y en mi experiencia este ha sido el mejor ejemplo. Luego puede explicar que uno puede imaginar que hay tareas más complejas que las computadoras deben hacer, y que, por lo tanto, existe la necesidad de un lenguaje inequívoco para alimentar estos algoritmos. Por lo tanto, ha habido una proliferación de lenguajes de programación porque las personas expresan sus pensamientos de manera diferente, y usted está investigando formas de diseñar estos lenguajes para que sea más difícil cometer errores.

Esta es una situación muy reconocible. La mayoría de las personas no tienen idea de que las computadoras que usan ejecutan programas, o que esos programas son código fuente escrito por humanos, o que una computadora podría 'leer' el código fuente, o que la computación, que asocian con la aritmética, es lo único que las computadoras hacer (y movimiento de datos, y redes, tal vez).

Mi investigación es en computación cuántica, así que cuando la gente me pregunta qué hago, no intento explicarlo. En cambio, trato de explicar que existe la física cuántica (por lo general, han oído hablar del gato de Schrödinger y cosas que están en dos lugares a la vez), y que debido a esta extraña física, podría ser posible un cálculo más rápido.

Mi objetivo es dejar que la persona se sienta un poco más informada de lo que entró, sintiéndose emocionada por un mundo que no sabían que existía, pero con el que ahora los ha familiarizado. Creo que eso es mucho más valioso que explicar mis preguntas de investigación particulares.

Lieuwe Vinkhuijzen
fuente
27
Ordenar una baraja de cartas también es una manera fácil de introducir la noción de algoritmos.
Morwenn
2
@ Morwenn ¡Eso es verdad! ¡Hay muchos algoritmos que ejecutamos en la vida diaria! El reparto de tarjetas es algorítmico, el tráfico tiene muchos aspectos algorítmicos, aunque están basados ​​en eventos y no son imperativos, la cocción es algorítmica cuando lo haces en piloto automático. La razón por la que me gusta la adición es que todos aprendieron el mismo algoritmo en la escuela primaria, mientras que para ordenar una lista de números, las estrategias de las personas varían y no son metódicas: intentan encontrar patrones de números cercanos y adyacentes, y no todos conocen el ordene una baraja de cartas de todos modos (¿son corazones antes que espadas?)
Lieuwe Vinkhuijzen
Personalmente, cuando se me pregunta acerca de la computación cuántica, tiendo a evitar la física por completo, pero trato de dar una idea general (que una computadora cuántica no funciona mejor o más rápido, sino que simplemente puede hacer cálculos de una manera que está fuera del alcance de las computadoras normales). Si preguntan de qué manera es así, tienden a estar contentos con una vista simplificada, básicamente la del procesamiento SIMD (con recursos lineales suficientes para acceder al tamaño exponencial de datos de entrada paralelos), que son la mayoría de los algoritmos.
The Vee
Puedes ir más allá de las cartas; Recientemente me encontré usando una variante de Quicksort para clasificar una pila de papeles que tuve que organizar sin pensarlo porque había demasiados para un tipo de inserción básica.
JAB
@JAB ¡Eso es increíble! Pero probablemente ya conozca Quicksort en el fondo de su mente. La ventaja de explicar la suma frente a la clasificación es que todos tienen el mismo algoritmo de suma, pero ningún laico tiene un algoritmo de clasificación metódico. Por otro lado, ¡eso podría ser una ventaja! Tienes la oportunidad de explicar diferentes algoritmos. Esta es la ruta que tomo cuando hablo con alguien con mentalidad matemática fuera de cs, y cruza el concepto de diferentes algoritmos para la misma tarea con diferentes límites de tiempo, y por qué los límites inferiores son difíciles.
Lieuwe Vinkhuijzen
18

Intentaría algo como esto:

Los programadores pueden decirle a las computadoras qué hacer. Para hacer eso, necesitan usar un lenguaje de programación. Ese es un lenguaje que tanto las computadoras como los humanos entienden. Por ejemplo, si edita un documento de Word y presiona una tecla, la computadora mostrará la letra que presionó. Esto se debe a que un programador escribió un programa que decía: Si el usuario presiona "A", coloque una "A" en el documento. Si el usuario presiona "B", coloque una "B" en el documento, y así sucesivamente. La computadora solo sigue las reglas del programa que escribió el programador.

Ahora a veces los programadores escriben una estúpida regla por error. La computadora intentará seguir la estúpida regla de todos modos, pero si sigues una mala regla, algo malo sucederá. Por ejemplo, a veces, cuando edita un documento de Word, de repente todo se congela y la computadora ya no reacciona. Eso puede deberse a que algún programador de Microsoft escribió un programa menos que perfecto.

Mi trabajo se trata de inventar métodos para verificar programas para tales y otros errores, utilizando otros programas y algunas matemáticas. La idea básica es descubrir cómo predecir qué sucederá cuando se ejecute un programa, sin ejecutarlo realmente.

Por supuesto, dado que es investigación, solo trabajo en un pequeño aspecto de esto, no todo a la vez, pero esa es la gran imagen de lo que estamos tratando de lograr.

Estoy usando una explicación en un estilo similar para mi campo (lenguajes específicos de dominio), y puedo informar que a menudo me ayudó a superar el "oh, eres un científico de la computación, nunca podría hacer eso, déjame ir y dejar de hablar a usted "problema. La clave parece ser sacar las primeras oraciones hasta que una llegue a un ejemplo con el que la otra persona pueda relacionarse, como los documentos de Word en este caso. Puntos de bonificación para el ejemplo de la carcasa especial para la otra persona, como Excel para contadores o Powerpoint para jefes o juegos de computadora para jugadores o navegadores web o lo que sea.

Tenga en cuenta que no tiene que permanecer en este nivel superficial. Si usted (¡y la otra persona!) Lo desea, puede profundizar en los detalles de lo que está haciendo exactamente desde allí. Por ejemplo, "en mi proyecto actual, estoy tratando de demostrar matemáticamente que lo que inventé el año pasado realmente funciona. Eso significa que tengo que definir con mucho cuidado lo que realmente significa un programa y lo que mi invención predice que significa un programa, y ​​luego Puedo demostrar que la predicción es correcta ".

Toxaris
fuente
12

La mayoría de la gente entiende las recetas. Si sigues las instrucciones, obtendrás una comida decente. A veces, sin embargo, las instrucciones pueden ser difíciles de seguir. Por ejemplo, cuando está haciendo perogies, encontrará instrucciones como esta, tomadas palabra por palabra de las Perogies polacas de la abuela :

Para cocinar perogies: hierva una olla grande de agua ligeramente salada. Suelta perogies en uno a la vez. Se hacen cuando flotan hacia la cima. ¡No hierva demasiado tiempo o se empaparán! Retirar con una cuchara ranurada.

Yikes Repasemos los amables consejos de la abuela. Colóquelos uno a la vez ... para que todos tengan diferentes períodos de tiempo que estén en la olla. Entendido. Se hacen cuando flotan hacia la cima . Bueno, ¿cuántos son 'ellos'? ¿Atrapo a cada uno a medida que surge? ¿Espero que el 80% flote hasta la cima y luego los obtengo a todos? Esto es una locura inexacta. ¡No hierva demasiado tiempo o se empaparán! ¿Cómo mido cuando están a punto de empaparse para que no tarden demasiado? Si aparecen cinco en la parte superior al mismo tiempo, ¿tendré tiempo para obtenerlos todos?

Y confía en mí, he arruinado muchas perogies en mi día. Este es un problema grave que cualquier cocinero de perogie se ha encontrado antes. Pero a pesar de estos problemas que surgen incluso en el análisis más básico, las personas aún pueden hacer perogies utilizando este mismo método. Pero, ¿hay algo que podamos hacer para que más lotes de perogies tengan éxito y menos lotes de perogies fallen?

¿No sería grandioso si alguien se especializara en hacer recetas más confiables? Alguien que dijo "¡podemos canalizar las perogies para que salgan y salgan del agua!" o "podemos agregar un tinte especial a la perogie, seguro para comer, que les da diferentes tonos y sabemos que debemos sacar los más oscuros primero, ya que corren el mayor riesgo de empaparse". Queremos un experto que pueda tomar esta receta y solucionar los posibles problemas con ella. La vida de los cocineros de perogie en todo el mundo será más fácil, y se alimentarán a un perro con menos trozos de pasta y papa empapados.

Los programadores también siguen recetas todo el tiempo. Pero a veces, el equipo que usan, las instrucciones que usan y las interpretaciones que usan no se combinan para hacer la comida lujosa que querían. Afortunadamente, hay personas que dedican sus carreras a hacer que la vida de un programador sea más productiva. En su caso, se ha especializado en una de las herramientas que utiliza un programador, el lenguaje, para tratar de mejorarlas.

corsiKa
fuente
7

Así es como (trataría) de explicarle esto a mi madre:

Los lenguajes de programación son utilizados por personas para proporcionar instrucciones a una computadora. Todo lo que hace una computadora se hace mediante un código de computadora escrito en un lenguaje de programación por un programador.

Entonces, si, por ejemplo, queremos que el canal de TV cambie cuando presionamos un botón, entonces tendríamos que escribir algún código en un lenguaje de programación para hacerlo. Lo mismo ocurre con todo lo que sucede con una computadora portátil, un teléfono inteligente y cualquier otra cosa cuya operación involucre una computadora.

Puede parecer que puede haber un solo lenguaje de programación que los programadores puedan usar para escribir todos los programas. Pero este no es el caso. Existen diferentes lenguajes de programación para todos los diferentes tipos de aplicaciones.

Algunos se utilizan para crear sitios web, otros para crear aplicaciones para computadoras portátiles (como Microsoft Word).

Una de las razones por las que hay muchos lenguajes de programación diferentes es porque algunos son más adecuados para algunas tareas que otros. Otra razón es que algunos idiomas están diseñados para ser utilizados con diferentes computadoras. Por lo tanto, no siempre puede tomar el código escrito para un teléfono inteligente y ejecutarlo en una computadora portátil. Y aunque algunos programadores pueden programar en muchos idiomas, y muchos son capaces o aprenden nuevos idiomas rápidamente, cualquier programador sabrá algunos idiomas mejor que otros, y algunos no lo harán en absoluto.

Por lo tanto, los lenguajes de programación son una de las tecnologías clave que hacen que las computadoras funcionen. Los lenguajes de programación bien diseñados pueden aumentar enormemente la productividad de los programadores. También pueden mejorar la seguridad y reducir errores de programación, errores y defectos.

Y básicamente, esto es lo que estudio: ¿cómo afectan las diferentes partes de los lenguajes de programación a la productividad del programador? ¿Qué partes de un idioma en particular lo hacen mejor para escribir código para un sitio web? ¿Por qué algunos idiomas son más populares que otros?

Si bien puede parecer que estas preguntas son esotéricas y están muy alejadas de la vida diaria de la persona promedio, lo contrario es cierto. El estudio de los lenguajes de programación es vital para cualquier producto o servicio que use una computadora. Y hoy eso significa casi todo;)

Matt Hall
fuente
7

Su mejor opción puede ser formar analogías con los idiomas humanos.

Los lenguajes de programación se utilizan para proporcionar instrucciones a las computadoras. Los lenguajes humanos se utilizan para comunicar ideas a otras personas y ayudar a formar nuestros propios pensamientos. La hipótesis de Sapir-Whorf dice que el lenguaje que usas influye en tu pensamiento. (Se debate el grado en que la hipótesis de Sapir-Whorf es verdadera, pero podemos aceptar que sea cierta cuando se habla de lenguajes de programación. De lo contrario, es mejor que renuncies a tu doctorado. 😜)

Existe una amplia variedad de lenguajes humanos, algunos con características que consideramos exóticas. Por ejemplo:

  • Algunos idiomas requieren que indique evidencial con cada declaración: si la declaración se debe a su propia experiencia, su propia inferencia, rumores, especulaciones, etc.
  • Algunos idiomas forman grandes palabras por aglutinación; cada palabra puede modificarse mucho para codificar mucha información sobre su función gramatical. Otros idiomas casi nunca modifican las palabras y se basan en el orden de las palabras o en las partículas para expresar esa información.
  • Los idiomas difieren en el tamaño del vocabulario . Algunos idiomas tienen palabras que solo se pueden traducir con una circunlocución (por ejemplo, 엄친아 ). Algunos idiomas tienen expresiones brillantes que son tan buenas que otros los toman prestados (por ejemplo, Schadenfreude).
  • Algunos idiomas no tienen concepto de izquierda / derecha; debes expresar todo en términos de norte / sur / este / oeste.
  • Algunos idiomas no tienen números. Los idiomas también varían en la cantidad de nombres de colores comunes .
  • Los idiomas varían en su fonotáctica. Por ejemplo, la tasa de sílabas varía, ya que el japonés tiende a usar muchas sílabas simples, mientras que el chino es más lento, pero codifica la información en tonos.
  • Los idiomas varían en densidad de información . Si observa una traducción chino-inglés-francés, verá que la versión china es muy compacta en papel, y que el francés ocupará la mayor parte del espacio.
  • Algunos idiomas, como el inglés, son promiscuos: cualquiera puede tomar prestada libremente una palabra de otro idioma e inglesificarla. Otros idiomas, como el francés, tienen un cuerpo estandarizador que resiste el cambio. El islandés, por ejemplo, es ferozmente conservador por naturaleza.

¿Existe un mejor lenguaje, hablando objetivamente? La respuesta puede depender de lo que intente hacer.

  • Si está tratando de comunicarse en secreto por radio, Navajo sería una buena apuesta. (Mencione su idioma favorito de "solo escritura").
  • Si está tratando de escribir una advertencia a las generaciones futuras, y la inscripción debe ser comprensible dentro de unos miles de años, es posible que desee usar chino (debido a la gran cantidad de hablantes y la estabilidad de su sistema de escritura) o tal vez Inglés (que ha cambiado drásticamente en el último milenio, pero es muy conocido). (C y JavaScript probablemente vivirán "para siempre").
  • Los chinos, que tienen muchos homófonos, son excelentes para castigar . (Perl poesía)
  • Quizás la neutralidad es importante, en cuyo caso puede elegir Esperanto. (Java está diseñado para ser portátil; C lo es menos).
  • Tal vez necesite expresar un pensamiento con total precisión, y ningún lenguaje natural será suficiente. ¡Tienes que recurrir a Ithkuil !
  • Puede ser muy difícil traducir entre algunos pares de idiomas (por ejemplo, árabe-inglés ) debido a las grandes diferencias culturales y las connotaciones culturales con ciertas palabras. Del mismo modo, algunas ideas no se expresan fácilmente en ciertos lenguajes de computadora porque el concepto simplemente no existe (por ejemplo, recursividad de cola).

Al final, todo en una computadora se traduce al lenguaje de máquina, pero elegir el idioma adecuado para el trabajo puede afectar en gran medida la productividad, la confiabilidad, el rendimiento y la agilidad de su software. Elegimos lenguajes de camisa de fuerza como Ada o Java para proyectos "serios", y Ruby o Perl para la máxima capacidad de latigazo . Para consultar una base de datos, SQL es el lenguaje habitual; escribir tu propio código C sería idiota.

En base a estas analogías, estoy seguro de que puede exponer ideas como programación funcional, seguridad de tipos, inferencia de tipos, etc. durante unas horas.

200_success
fuente
1
Una dificultad con esto es que algunas personas nunca han reflexionado realmente sobre su propio lenguaje natural. Entonces, los ejemplos de lenguaje pueden ser casi tan difíciles de entender para algunas personas, como la noción de un lenguaje de programación. Si sabe que la persona es (al menos) bilingüe, las perspectivas son probablemente mejores ...
TextGeek
@TextGeek Incluso dentro del inglés, hay dialectos. Las personas discuten sobre las reglas del lenguaje, como los negativos dobles y las oraciones finales con una preposición. El lenguaje evoluciona todo el tiempo, a veces de manera controvertida. La popularidad de los mensajes de texto ha dado lugar a nuevas abreviaturas. En inglés americano, puede convertir cualquier sustantivo en un escándalo agregando un sufijo "-gate". No creo que tenga que ser bilingüe para apreciar la innovación y la diversidad lingüística.
200_success
3
  • los lenguajes de computadora se relacionan de manera aproximada con los lenguajes humanos. usan palabras estándar / comunes / compartidas. Considere que hay miles de lenguajes humanos, algunos difuntos, otros activos, y su vocabulario y uso evoluciona continuamente con el tiempo. Algunas personas crean nuevas palabras útiles para expresar conceptos que antes no se podían expresar. Otro aspecto superpuesto del lenguaje informático y el lenguaje humano es la gramática . algunos idiomas, por ejemplo, el inglés tienen una gramática muy compleja. considere todos los tiempos diferentes y las reglas complejas que los gobiernan. otros idiomas no tienen los mismos tiempos . otra correlación es con partes del discursocategorías, por ejemplo, sustantivo, verbo, adverbio, adjetivo, etc., funcionan de manera similar a los tipos en lenguajes de computadora. imagine crear nuevos idiomas con diferentes partes de las categorías del habla que no han sido consideradas previamente, o con nuevas combinaciones de partes del habla que provienen de diferentes idiomas, etc .; así que tenga en cuenta que la lingüística tiene una conexión con la informática, por ejemplo, especialmente en la teoría del lenguaje chomskiano.

  • El software y el hardware a menudo están relacionados con motores y máquinas e incluso se nombran después de esto. Existe una antigua analogía de software que dice que tratar de modificar un complejo sistema de producción 24/7 es como cambiar los motores de un avión mientras está en vuelo . También tenga en cuenta que los motores a reacción son muy complejos e implican especificaciones precisas masivas de piezas intercambiablesy aquí hay una analogía con los lenguajes de computadora que controlan el hardware. imagine toda la complejidad de los documentos que describen exactamente cómo construir motores a reacción: todas las partes, cómo se construyen, cómo encajan, cómo se ensamblan, etc. son creados / compilados por ingenieros usando un formato / estructura / reglas convencionales precisas; El software es algo análogo a esto.

  • ¡Las máquinas, cualquier persona sin educación científica o matemática o incluso un niño pueden comprender el concepto básico y muchos aspectos de una máquina de Turing! Una creación maravillosa. uno sospecha que Turing se inspiró en máquinas de escribir y / o máquinas de teletipo. uno podría describir la tabla de estado y mostrarles una tabla de estado de muestra que calcule la multiplicación, y alguien podría ver una animación de youtube de una máquina de Turing que calcule un cálculo básico como una multiplicación. dígales que la tabla de estados puede calcular o literalmente decidir un idioma, y que las entradas se llaman literalmente palabras . de hecho, las máquinas de Turing aceptan palabras en idiomasetc., luego dígales que hay dos tablas de estados que calculan la multiplicación, pero una es mucho más rápida o más eficiente que la otra, y que su investigación implica encontrar mejores conceptos de tabla de estados. ¡descubrir cómo construir tablas de estado efectivamente involucra lenguajes de programación que resumen el contenido de tablas de estado grandes! un compilador convierte el código escrito en un lenguaje de programación en una tabla de estado grande.

  • Los algoritmos de clasificación son una gran metáfora de nivel de entrada en informática. Uno puede mirar las diferentes listas de instrucciones, también conocido como algoritmo para cada tipo. uno puede aprender qué es un tipo de burbuja versus un tipo de inserción, uno puede usar una baraja de cartas. ahora concéntrese en los diferentes conjuntos de instrucciones y considere que deben escribirse en un lenguaje muy preciso, tan preciso como las declaraciones matemáticas, que tiene una sintaxis estricta , etc., y tiene elementos comunes / estructuras básicas: lógica condicional, bucles, variables, etc. , y explique que el arte de esta especificación precisa es sobre lenguajes de computadora, y que algunos idiomas diferentes pueden producir los mismos algoritmos, pero que hay algunas variaciones estilísticas sutiles en estos idiomas que se estudian a gran profundidad, etc.

vzn
fuente
1
¿Por qué rechazar este? Creo que hay muchas ideas. Uno puede no estar de acuerdo con todos los puntos, pero hay muchas posibilidades aquí. +1
effeffe
3

Simplemente dices "Estoy ayudando a los muchachos que enseñan computadoras a trabajar"

La idea es que los programadores enseñen a las computadoras a hacer cosas usando programas y tú los estás ayudando. Creo que funcionará asumiendo que ya saben un poco sobre computadoras.

lal
fuente
"Creo que funcionará suponiendo que ya sepan un poco sobre computadoras", ese es el punto: si lees cuidadosamente mi respuesta, verás que el problema principal es explicar lo que hago a aquellos que no tienen idea de cómo funciona realmente la computadora .
effeffe
@effeffe: ¿pero son conscientes de que existen computadoras? Y probablemente tengan alguna idea de que hay cosas llamadas "programas", "aplicaciones" o "aplicaciones", incluso si nunca han usado una computadora a sabiendas. Entonces, en aras de la simplicidad, la programación es (entre otras cosas) crear una aplicación escribiendo las instrucciones que la computadora puede seguir. Naturalmente, les tomaría mucho tiempo e instrucciones apreciar cualquier detalle de la programación o de cómo se puede mejorar, pero si saben que las computadoras y los programas mejoran con el tiempo, al menos saben "un poco" acerca de las computadoras.
Steve Jessop
3

Si no desea utilizar las comparaciones, aunque creo que el "algoritmo" que planteó Lieuwe es muy agradable para transmitir la idea, podría decir que desea reducir los malentendidos entre humanos y computadoras. Después de todo, estás tratando con idiomas, y eso es algo muy básico para los humanos, supongo. Entonces, ¿por qué no pretender que la computadora es solo otra mente con la que quieres hablar?

Los humanos crearon computadoras, por lo que sabemos cómo funciona la mente de la computadora. Pero la computadora generalmente no "sabe" cómo funcionan nuestras mentes. (O cuál era nuestra intención real cuando escribimos un error intrincado y finamente elaborado que vive felizmente en las zarzas de nuestro código durante muchos ciclos;)) Por lo tanto, depende de nosotros refinar el lenguaje que usamos para comunicarnos con ellos, y Reducir las posibilidades de malentendidos. Y eso es lo que haces. Analogías como la corrección ortográfica o la gramática son, por supuesto, muy bienvenidas en este contexto.

Sir jane
fuente
3

Aquí hay dos analogías que pueden serle útiles:

  • Mi trabajo es algo así como explorar nuevos enfoques para la notación musical. ( ejemplo ) Aunque los sistemas de notación predominantes son bastante sofisticados, es valioso explorar alternativas que reduzcan el tiempo / esfuerzo / errores para el compositor, para el intérprete, o permitan cosas que son torpes o imposibles de expresar en el sistema predominante, o incluso solo promueven diferentes tipos de pensamiento y, por lo tanto, conducen a nuevas composiciones. (Esto hace que sea fácil entender que uno de los desafíos es convencer a las personas para que adopten las nuevas cosas).

  • Estoy ayudando a diseñar mejores herramientas para las personas en mi industria. Al igual que las personas en la industria manufacturera son ayudadas por innovaciones como taladros inalámbricos, cortadores láser e impresoras 3D (ninguna de las cuales existía hace 60 años), las personas en la industria del desarrollo de software reciben ayuda de más poderosos, más precisos, más robustos o lenguajes de programación más fáciles de usar y sus características.

Artelius
fuente
2

Bueno, lo más probable es que tengas alguna razón para estudiar idiomas: usa esa razón. P.ej:

Estoy tratando de hacer que las computadoras y sus aplicaciones sean más baratas, fáciles de usar y más seguras.

Si eso es algo que atrae su atención, siéntase libre de profundizar un poco, pero no se olvide de la distancia inferencial : la mayoría de las personas tienen grandes problemas para explicar algo que está muy lejos de la experiencia y el conocimiento existente del estudiante.

Los idiomas están muy abajo en la escala de la computadora. Las personas a las que intenta explicar probablemente no sepan qué es el algoritmo , mucho menos que existan diferentes formas de representar dicho algoritmo que sean más o menos útiles. Puede explicar cualquier cosa si es lo suficientemente suave, pero prepárese para atravesar muchas capas si desea explicar algo tan "profundo" como "lenguaje de programación RnD". Ayuda si las personas a las que explicas ya manejan bien las matemáticas, pero eso es casi tan raro como el conocimiento de la computadora :)

Sea fácil con las analogías. Aunque parezca que lo están ayudando, pero desde mi experiencia, por lo general aumentan la confusión, incluso si usted piensa que son de gran ayuda. Los lenguajes de programación son una especie de jerga abogado ... pero eso no es muy útil para las personas que no lo hacen ya se entienden tanto la programación como la abogacía, la verdad. Si realmente necesita ayuda adicional, los ejemplos funcionan lo suficientemente bien, pero necesita acomodarlos a la persona a la que le está explicando (y qué es exactamente lo que está investigando)

¿Sabes cómo no puedes dividir por cero? Estoy tratando de asegurarme de que las computadoras nunca intenten dividirse por cero, para que no se bloqueen cuando alguien comete un error.

Luaan
fuente
▲ por sugerir un enfoque gradual y suave.
PJTraill
1

Creo que las mejores analogías se adaptan a la persona con la que está hablando. ¿Son pintor? Discuta cómo lo que está haciendo equivale a explorar la teoría de cómo hacer mejores pinceles, ¡solo este campo tiene solo 60 años en lugar de 600! Jinetes? Compárelo con el desarrollo de herraduras para tareas específicas a lo largo de los años.

Si realmente quieren entender mejor, mi forma favorita de explicarlo es hablar sobre cómo completar formularios de impuestos y las instrucciones en cada línea. Creo que la mayoría de las personas mayores de 20 años tienen algo de experiencia con el Formulario 1040 del IRS, y esos cuadros que completa corresponden bastante bien para hablar sobre la asignación de variables. Luego señalo que el software hace el equivalente a alrededor de 2 mil millones de estos por minuto (un número inventado, pero lo hace entender). Si está estudiando lenguajes informáticos, es fácil para las personas comprender por qué las mejores instrucciones realmente serían importantes =)

Si todavía parecen interesados, este es el punto en el que empiezo a tratar de explicar el control de flujo. Por lo general, cuando termino de hablar sobre el control de flujo en el Formulario 1040, comienzan a entusiasmarse ya preguntar si ya he vendido alguna de mis ideas al gobierno.

A menudo hablo de sistemas integrados, así que a veces fusiono la analogía del Formulario 1040 con un robot que cocina una barra de pan (o 500). Por lo general, funciona bien, aunque por alguna razón pasar de los formularios de impuestos del IRS a hacer algo que deja un buen sabor en la boca es un tramo realmente difícil para algunas personas.

Cort Ammon
fuente
1

Tus padres tienen algún tipo de computadora. Probablemente no uno, sino muchos. Pueden tener una computadora de escritorio o una computadora portátil, o un teléfono o un iPad. Si no, entonces tienen una lavadora o un video grabado o un reproductor de DVD o algo con una computadora adentro.

Si no lo hacen, dices: "Lo siento, pero lograste tener una vida completamente sin computadoras. Así que no puedo explicarte lo que estoy haciendo. Pero el mundo está cambiando. Solo tienes que confiar en mí. Sé lo que estoy haciendo. "

Si tienen algún tipo de computadora, usted dice: "Esta es una computadora, y no solo funciona por arte de magia. Funciona porque algún hombre o mujer inteligente escribió un programa que le dice a su computadora cómo funciona. Y el trabajo de estos hombres y mujeres inteligentes son realmente difíciles, y lo que estoy haciendo es ayudarlos a facilitar el trabajo ".

gnasher729
fuente
-1

Hace un tiempo decidí que una buena analogía para la programación que podría ser fácilmente comprendida por personas con poca o ninguna experiencia en informática, sería escribir recetas de tejer .

Una buena receta de tejido contiene varios tamaños en la misma lista de instrucciones, que le dan bucles y declaraciones if. Es ilegible para aquellos que no tejen, y si contiene errores, terminará con patrones desalineados o una manga adicional. Depende de usted, como redactor de recetas, averiguar dónde estaba mal la receta en función de los suéteres incorrectos y solucionarlo.

Luego puede usar el ejemplo de "Estoy viendo cómo las recetas son diferentes para tejer, crochet, Nålebinding y similares" y aprender a X (donde necesita encontrar una analogía de lo que realmente hace ).

Thorbjørn Ravn Andersen
fuente
El autor de la pregunta no está estudiando programación. Están estudiando el diseño de lenguajes de programación.
David Richerby
@DavidRicherby Es por eso que sugerí usar el ejemplo de OP mirando cómo se ven las recetas para diferentes tipos de trabajos manuales. Aparentemente, estos también son muy diferentes.
Thorbjørn Ravn Andersen
-1

¡Es magia!

Cuando las personas sin antecedentes técnicos preguntan qué significa escribir software / programas / hacer ingeniería de software, simplemente les digo lo que realmente es: magia. Los magos conjuran hechizos en un lenguaje esotérico para realizar ciertas tareas, agitan sus varitas y sucede algo mágico. Invoco ciertos hechizos en un lenguaje esotérico, muevo el mouse y sucede algo mágico (en lo que a ellos respecta).

Si no están convencidos, les pedí que enciendan su teléfono inteligente y me digan cómo funciona realmente todo. Por lo general dicen: "No sé, simplemente lo hace. Aprieto botones y suceden cosas". Luego les digo: "Sí, exactamente, pero sé lo que realmente está sucediendo, y es básicamente lo mismo que Harry Potter agitando su varita y diciendo: 'Hocus pocus'" A todos los efectos, para el laico, yo Creo que esta es una explicación perfectamente legítima.

Casi todos saben quién es Harry Potter, qué hace y qué lo hace especial (al menos que es un mago y puede hacer cosas poderosas con magia). Simplemente puedes explicar que a veces los magos necesitan escribir sus hechizos en un nuevo idioma para hacer que su magia sea aún más poderosa, lo que en realidad no está tan lejos de la verdad. Puedes decirles que estás estudiando el proceso de crear libros de hechizos más poderosos para ayudar a una generación de magos aún más poderosos que pueden crear magia aún mayor en sus dispositivos de consumo favoritos. Todos lo aprecian.

Fallo épico

Si eso falla, recurro al ejemplo de la receta, porque la falta de uniformidad de las soluciones al menos enseña a las personas que hay más de una forma de pelar un gato (u hornear un pastel), y esto es parte de lo que hace que la programación sea tan difícil. También ayuda a poner a la persona en la posición de ser la CPU y, a veces, seguir instrucciones que quizás no entiendan (la mayoría de las personas probablemente no saben la diferencia entre el bicarbonato de sodio y el polvo de hornear, y por qué una receta tendría uno u otro).

Callejones sin salida

No me gusta usar las matemáticas como ejemplo, porque para hacerlas debes entender para qué sirven los pasos. No puedes hacer muchas matemáticas siguiendo instrucciones a ciegas (bueno, puedes hacerlo, pero no es así como los humanos lo aprenden, por lo general). No me gusta la clasificación como un ejemplo porque es demasiado técnico para que el laico lo aprecie. Si estoy hablando con alguien que puede apreciar el ejemplo de clasificación, entonces probablemente ya tengan alguna idea de qué se trata la programación y probablemente lo hayan intentado ellos mismos.

Hombre cortadora de césped
fuente
1
No veo qué tiene que ver esto con la pregunta. Específicamente, la pregunta es cómo explicar la teoría de tipos a los laicos, y la teoría de tipos es matemática.
David Richerby
Quizás tristemente, quizás no, pero la programación en general es un libro cerrado para más del 99% de la población mundial. He pasado una buena cantidad de tiempo a lo largo de los años intentando que los no programadores entiendan la programación, sin éxito. Explicar las complejidades y delicadezas de varios sistemas de tipos es similar a explicar la física de partículas subatómicas a esas mismas personas: sus ojos se verán vidriosos y probablemente serán educados, pero no lo entenderán. Y eso está bien: no NECESITAN entenderlo y, con toda probabilidad, NO LE IMPORTA que no lo entiendan. Es suficiente que hagamos. :-)
Bob Jarvis