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?
Respuestas:
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.
fuente
Intentaría algo como esto:
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 ".
fuente
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 :
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.
fuente
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;)
fuente
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:
¿Existe un mejor lenguaje, hablando objetivamente? La respuesta puede depender de lo que intente hacer.
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
Bueno, lo más probable es que tengas alguna razón para estudiar idiomas: usa esa razón. P.ej:
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)
fuente
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.
fuente
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 ".
fuente
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 ).
fuente
¡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.
fuente