Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Bryan en Es
Bryan en Es
Resumen de las computadoras ha dado lugar a industrias prósperas para la creación de ideas
nuevas e innovadoras. En biología, los chips que procesan conjuntos de datos tan
La disciplina de la informática tiene una historia larga y complicada con los
grandes que eran impensables hace 20 años ahora se analizan fácilmente. Los
lenguajes de programación informática. Históricamente, los inventores han
psicólogos, los investigadores médicos, los físicos y toda la industria del software
creado productos lingüísticos por una amplia variedad de razones, desde
utilizan regularmente los cálculos como parte fundamental del trabajo diario. Sin las
intentos de facilitar tareas específicas de dominio o logros técnicos, hasta
tecnologías que nuestra comunidad inventa como base fundamental, las innovaciones
razones económicas, sociales o políticas. Como consecuencia, la industria de
en algunas disciplinas, como las del Gran Colisionador de Hadrones, serían
los lenguajes de programación modernos ahora tiene una gran variedad de
efectivamente imposibles de evaluar. En cierto sentido, los lenguajes de programación
lenguajes de programación incompatibles, cada uno de los cuales tiene una
unen a la galaxia, otorgando un papel crucial que ninguna otra disciplina puede
sintaxis, semántica, conjuntos de herramientas únicos y, a menudo, sus
reclamar.
propias bibliotecas estándar, vida útil y costos. En este artículo, sugerimos
que las guerras de los lenguajes de programación, un término que describe la
Como científicos de la computación, aunque tenemos muchos roles con respecto
amplia divergencia y el impacto de los diseños de los lenguajes, incluidas las
a estas innovaciones, uno es quizás el más crucial:
afirmaciones a menudo pseudocientíficas de que son buenos o malos,
somos los administradores de la computación. Por administrador, queremos decir que
pueden tener un impacto negativo en el mundo. Este amplio problema,
los científicos informáticos, y especialmente los diseñadores de lenguajes de
programación, han creado productos que son fundamentales para los avances en casi
todas las áreas de la ciencia, que influyen enormemente en la informática académica y
provocan cambios sísmicos en toda la industria del software. Los lenguajes que
Descriptores de Sujeto y Categorias D.3 [ Programación creamos proporcionan la base de cómo explicamos a la computadora lo que nos
Idiomas]; H.1.2 [ Sistemas de información]: Sistemas de usuario / máquina - gustaría que hiciera.
Psicología del software
Desafortunadamente, como es cada vez más obvio para algunos, la disciplina
Términos generales Idiomas, factores humanos, experimentación
de las ciencias de la computación no ha podido o no ha querido resolver muchos de
los problemas básicos de los lenguajes de programación, quizás notablemente,
Palabras clave Las guerras de los lenguajes de programación; Estabilidad de la literatura identificando el impacto de diseños de lenguaje específicos en las personas. Como
académica; Estándares de evidencia resultado, encontramos nuestra disciplina en una situación en la que diferentes
desarrolladores e investigadores dedican tiempo a un conjunto divergente de
1. Introducción productos lingüísticos. Debido a una variedad de factores complejos que
discutiremos, luego encontramos disputas acaloradas en diferentes lugares (por
"Nos rodea y nos penetra; une a la galaxia ". ejemplo, academia, conferencias, oficinas) donde grupos en competencia
- Obi-Wan Kenobi en Star Wars argumentan a favor o en contra de lenguajes o características particulares, a
menudo con poca evidencia para respaldar afirmaciones contrapuestas. En
La sociedad moderna ha experimentado una transformación significativa con respecto a la términos generales, estos y muchos otros problemas forman la base de las guerras
disciplina del descubrimiento científico. El advenimiento de los lenguajes de programación, que causan una variedad de males sociales.
El permiso para hacer copias digitales o impresas de todo o parte de este trabajo para uso personal o en el aula se
otorga sin cargo siempre que las copias no se hagan o distribuyan con fines lucrativos o comerciales y que las copias
lleven este aviso y la cita completa en la primera página. . Se deben respetar los derechos de autor de los
componentes de este trabajo que son propiedad de terceros distintos del autor. Se permite resumir con crédito. Considere por un momento lo que realmente ocurre hoy con respecto al uso del
Copiar de otra manera, o volver a publicar, publicar en servidores o redistribuir a listas, requiere permiso específico
lenguaje de programación en la práctica. En el mundo académico, los estudiantes aprenden
previo y / o una tarifa. Solicite permisos a permissions@acm.org.
muchos productos lingüísticos, algunos de los cuales se abandonan, reemplazan o
¡Adelante! 2014, 20-24 de octubre de 2014, Portland, OR, EE. UU. cambian rápidamente. Los productos educativos se crean y promocionan incluso si los
Los derechos de autor pertenecen al propietario / autor (es). Derechos de publicación con licencia para ACM. ACM
283
presentó cualquier evidencia sobre el impacto del diseño en programadores o en eso. Finalmente, proporcionamos información sobre la base actual de la evidencia
estudiantes. En las comunidades profesionales, los problemas tienen similitudes. Para en las guerras de idiomas.
los científicos de otros campos, los desarrolladores de la industria del software o los Con esto en mente, nos corresponde hacer la pregunta obvia: ¿Cuáles son las
estudiantes que comienzan, estas personas pueden asumir que los diseñadores han guerras del lenguaje de programación? Si bien nos negamos a proporcionar una
examinado cuidadosamente las decisiones de diseño con evidencia, pero un análisis definición formal, creemos que las guerras lingüísticas tienen al menos tres
sistemático en curso que hemos realizado sobre la literatura ha encontrado que esto es componentes fundamentales: 1) divergencia lingüística, 2) impacto lingüístico y 3)
casi nunca realmente cierto [43]. En efecto, el simple hecho de que nuestros principales comunidades lingüísticas. Aunque describimos estas ideas brevemente en los próximos
lenguajes no tengan evidencia que demuestre que su diseño tiene sentido es evidente párrafos, cada una es muy compleja y se irá desarrollando a medida que continuemos
cuando nos damos cuenta de que, para los principiantes, un lenguaje generado con este ensayo. Primero, observamos una divergencia extrema hoy en día en el
aleatoriamente es tan fácil de usar como Perl o Java [44]. campo de los lenguajes de programación. Esta divergencia de idiomas ocurre en un
espectro que va desde lo engañosamente trivial (p. ej., ¿cuál debería ser la sintaxis de
un bucle?) hasta lo discutiblemente más profundo (p. ej., tipificación fuerte o débil, ¿qué
Escribimos este trabajo porque el futuro de la ciencia y la industria del software tipo de modelo de herencia?). Tenga en cuenta que nuestra afirmación no es que la
depende, en su nivel más profundo, de nuestra comunidad. Los científicos e ingenieros divergencia sea buena o mala; solo que existe. Los ejemplos de este tema se discutirán
de otros campos con los que trabajamos generalmente esperan que seamos una extensamente a lo largo de este ensayo.
comunidad científica, que usa evidencia, crea teorías y usa el proceso de revisión por
pares para promover la ciencia, no las creencias. Por lo tanto, aunque pensamos que el
enfoque de la comunidad lingüística en las matemáticas de los lenguajes de
programación es obviamente apropiado para los desafíos técnicos, aquí argumentamos En segundo lugar, las guerras de idiomas están relacionadas con lo que denominamos
que este conocimiento es necesario, pero no suficiente, para resolver el caos observado impacto del lenguaje. Esto incluye potencialmente impactos tanto positivos (por
en el mundo del desarrollo de software. Por lo tanto, escribimos aquí sobre lo que ejemplo, soluciones de lenguaje creativo, características que impactan positivamente la
llamamos Las guerras de los lenguajes de programación, un concepto que describiremos productividad humana) como impactos negativos (por ejemplo, duplicación de
a lo largo de este ensayo. esfuerzos, costo monetario social). El concepto de impacto del lenguaje es quizás uno
de los misterios más extraordinarios de toda la informática y no se comprende bien.
Este tema está en el corazón de nuestra sección sobre la base de la evidencia en el
¿Cuál es la contribución de este ensayo? Este ensayo contribuye de tres formas. diseño del lenguaje.
Primero, describimos los problemas que enfrenta la comunidad científica en general
debido a las guerras de los lenguajes de programación. En segundo lugar, definimos un Finalmente, las guerras lingüísticas implican claramente comunidades lingüísticas. Con
conjunto de preguntas para la comunidad de lenguajes de programación que deben ser esto queremos decir que involucran a una variedad de actores, con varios roles. Creemos
respondidas si los académicos se toman en serio la solución, incluso parcialmente, de los que discutir estos roles es importante para comprender el resto de este trabajo. Por lo
principales problemas que existen en el diseño de lenguajes en la actualidad. Finalmente, tanto, los describimos a continuación.
discutimos las responsabilidades que tiene la amplia comunidad informática con respecto a
las guerras de idiomas.
2.1 Funciones en las guerras lingüísticas
concluyen este ensayo. a lo largo de este trabajo para describir la situación en el mundo del desarrollo de
software por dos razones. Primero, el término implica un papel de adversario en la
comunidad, o al menos uno de competencia. En segundo lugar, aunque casi nunca
2. Enmarcando las guerras lingüísticas se discute en la literatura académica revisada por pares, creemos que, a pesar de su
falta de formalización, muchos en la comunidad han escuchado el término de manera
“Las generaciones anteriores estaban absolutamente convencidas de que sus teorías informal.
científicas eran casi perfectas, solo para que resultara que no habían entendido por
completo”. Como parte de las guerras lingüísticas, tiene sentido pensar en los roles que
- Pratchett, Stewart y Cohen, La ciencia del Mundodisco tienen los distintos actores y cómo estos roles impactan el éxito o el fracaso de los
productos lingüísticos. En esencia, reconocemos aquí que muchos participantes
En esta sección, el propósito principal es discutir, sin dejar de reconocer que nuestra individuales de las guerras de los lenguajes de programación, que naturalmente
explicación de un problema social tan complejo no complacerá a todos los académicos, abarcan una amplia gama de personas (por ejemplo, estudiantes, profesionales de
cuáles son las guerras de los lenguajes de programación, incluidos los roles que las nivel de entrada, directores ejecutivos de grandes corporaciones), albergan
personas juegan en ellas. Usando la analogía de las guerras del lenguaje, pasamos a un diferentes motivaciones para su participación. Si bien nuestra lista difícilmente
análisis del espectro de puntos de vista que hemos escuchado en privado de los pretende abarcar todo, la aclaramos aquí.
académicos.
284
como un ejemplo de las posibilidades, comenzando con lo que llamamos propietarios y éxito de un producto lingüístico. Puede haber un espectro entre
seguidores. dependiente y voluntario.
Primero, el concepto de propietario es literal: clasificamos este rol como el que Si bien imaginamos que es obvio para la mayoría de los lectores, queremos
posee un lenguaje de programación. Por ejemplo, Microsoft, que posee C #, u Oracle, señalar que nuestra descripción de los roles apenas toca la superficie. Los
que posee Java, o los desarrolladores principales de un lenguaje más pequeño, como mencionamos al comienzo relativo de este artículo porque creemos que es
Ruby. Los propietarios, por definición, tienen un interés personal en el éxito de un importante reconocer que la guerra de los lenguajes de programación tiene
producto lingüístico (por ejemplo, fama, interés, creencias, dinero). Propietarios participantes. Si bien nuestros roles no son exactos, nos brindan una línea de base
contrastantes, tenemos seguidores, por lo que nos referimos a cualquier individuo aproximada para pensar en los diversos grupos. Con esto en mente, ahora podemos
involucrado en un idioma, independientemente del éxito (por ejemplo, promocionarlo, pasar a lo que llamamos el espectro de las guerras de idiomas: posibles resultados o
usarlo) o del fracaso (por ejemplo, denunciarlo). Si bien los seguidores pueden no tener resultados de las guerras de idiomas.
los mismos motivos que los propietarios, también pueden tener intereses creados. Por
ejemplo, aquellos que aprendieron a programar usando C, y que están familiarizados
2.2 Posibles resultados de las guerras lingüísticas
con su sintaxis, podrían estar más dispuestos a adoptar un lenguaje similar a C, como
Java. Comenzamos esta discusión con dos puntos de vista divergentes, cada uno de los cuales
es una posición extrema que hemos escuchado de los estudiosos sobre lo que detendría
las guerras de los lenguajes de programación. A la primera vista la llamamos “Un idioma
Si bien los propietarios y seguidores pueden tener sus propias motivaciones, para gobernarlos a todos”, la idea en la que la única solución posible a las guerras de
idiomas es que todos los posibles desarrolladores en todas las condiciones posibles usen
definimos tres roles adicionales que pueden desempeñar cualquiera de los grupos: 1) creyentes
el mismo idioma. A continuación, nos movemos a lo opuesto de esta vista, que
2) dependientes, y 3) voluntarios. En el primer caso, imaginamos a los creyentes como
llamaremos "copos de nieve únicos", donde todos los desarrolladores, en todas las
aquellos que encuentran convincente el diseño de un lenguaje en particular. Esto
condiciones posibles, son tan únicos que necesitan su propio lenguaje de programación.
podría ser hipotéticamente un individuo que piensa que C # es mejor que Java (o
Señalamos estos extremos por dos razones: 1) en realidad escuchamos afirmaciones
viceversa), que las funciones lambda son importantes para que un lenguaje tenga (o
como esta de diseñadores de lenguajes, académicos y desarrolladores, 1
no), o que una sintaxis particular es elegante (o no). La creencia de dichos individuos
puede o no estar basada en evidencia.
y 2) tales puntos de vista son difíciles de creer para nosotros sin evidencia que los
Un segundo papel es el de los dependientes. En este caso, tomamos a estos apoye; al discutirlos, nos damos cuenta del hecho de que es necesario considerar
individuos como aquellos que necesitan un idioma en particular para completar su puntos de vista más equilibrados. Esto nos lleva a nuestra primera pregunta de
trabajo o que de otra manera requieren el éxito de un idioma por una razón externa. investigación:
Por ejemplo, si una casa de desarrollo de software tiene un millón de líneas, por el
En el futuro, ¿en qué punto del espectro se
bien del argumento, código PHP correcto escrito en el back-end de un servidor,
RQ entre "Un idioma para gobernarlos a todos" y
entonces dependen del éxito financiero de PHP (Facebook podría servir como
¿Es deseable tener “copos de nieve únicos”?
ejemplo). Este puede ser el caso independientemente de si un grupo posee la
tecnología del lenguaje. Llamamos a los de esta categoría dependientes financieros.
En este mismo sentido, los estudiantes también son dependientes en el sentido de "Un Anillo para gobernarlos a todos, Un Anillo para encontrarlos, Un Anillo para traerlos a todos
y en la oscuridad atarlos".
que normalmente se les exige que utilicen productos lingüísticos elegidos para ellos por
- El Señor de los Anillos
los profesores. Si bien esto es normal, es importante reconocer que a veces los
estudiantes necesitan años para aprender un lenguaje como C ++ de manera
Una creencia que hemos escuchado comúnmente entre los diseñadores, académicos y
competente. Como tal, con ese tiempo invertido, los estudiantes dependen del éxito del
usuarios de lenguajes de programación es la visión errónea sobre las guerras de los
lenguaje o sus construcciones. Llamamos a las personas en esta situación dependientes
lenguajes de que cualquier solución debe dar cuenta de todas las tareas posibles en todas
intelectuales. Obviamente, los dos no son mutuamente excluyentes.
las condiciones posibles. Rechazamos esta visión, encontrándola poco más que una
discutimos esta creencia, que llamamos "Un idioma para gobernarlos a todos".
Finalmente, el opuesto lógico de los dependientes son los voluntarios. En este grupo,
los programadores pueden experimentar con un lenguaje de programación o utilizarlo de
Considere por un momento por qué la creencia de Un lenguaje para gobernarlos es
otro modo por sus propias razones. Dichos usuarios pueden pertenecer a categorías
inválida en su forma más pura. Vemos muchas razones posibles, pero señalamos solo
como los primeros en adoptar, que prueban Swift de Apple porque quieren. Del mismo
algunas que consideramos importantes, a saber: 1) los humanos varían, 2) los dominios
modo, pueden disfrutar utilizando una variedad de productos lingüísticos por motivos
de los problemas varían y 3) incluso un lenguaje perfecto, si se creó (de alguna manera),
personales. El punto es que los voluntarios son aquellos que tienen poco interés personal
podría no ser adoptado. Primero, mientras que algunos desarrolladores
práctico, financiero o intelectualmente, en el
1 Por cortesía profesional, pedimos a los lectores que no nos pregunten qué personas han hecho tales
285
tomará el hecho obvio de que los desarrolladores tienen una variación natural en sus mundano como el lenguaje en el que se programó previamente, evidencia de lo
necesidades y habilidades como un argumento a favor de la visión de los copos de nieve que antes llamamos dependencia intelectual. Incluso un lenguaje de alguna
únicos, es importante reconocer que los desarrolladores varían, reconociendo también que manera perfecto puede no ser adoptado. Las razones para no adoptar un
esta variación no es tan alta como muchos creen. Por ejemplo, en los estudios de los lenguaje tan perfecto podrían depender, entre muchos factores posibles, de las
autores sobre diseño de lenguaje, normalmente publicamos información demográfica en observaciones del mercado o de los efectos de la red. Por ejemplo, si los
nuestros experimentos. Sin embargo, aunque hablamos poco de ello en estos trabajos, desarrolladores asumen que cierto lenguaje se mantendrá durante décadas o
nos parece que la variación entre la mayoría de las muestras es menos importante que la es de uso común, trabajar con él puede percibirse como más razonable, a
amplia variación demográfica. pesar de las imperfecciones percibidas o reales. Esto nos lleva a la siguiente
pregunta de investigación:
Por ejemplo, considere que los niños en la escuela en muchos países ahora están
aprendiendo ciencias de la computación a una edad cada vez más joven, en parte
porque organizaciones como Code.org han ayudado a crear conciencia, pero también
RQ ¿Qué lenguajes específicos de dominio benefician a
porque muchos educadores se dan cuenta de que viven en los 21 años. S t siglo: la
mans?
programación es ahora una habilidad fundamental y básica. Es probable que muchos
estudiantes jóvenes quieran resolver problemas que sus mayores no quieren, como tal
vez querer aprender a programar animaciones o juegos, o cualquier otra variedad de Esta pregunta implica varias perspectivas diferentes. Esto incluye al menos
actividades. Por otro lado, los programadores profesionales que trabajan en la NASA estimaciones sobre el futuro del lenguaje, la disponibilidad de los desarrolladores, la
obviamente tienen diferentes necesidades, que probablemente requieren diferentes capacidad de aprendizaje, la usabilidad u otros conceptos. Para dar un ejemplo
lenguajes o bibliotecas. Dicho de manera más cruda, abrigamos dudas de que casi específico, no conocemos evidencia de que el lenguaje de programación R haga que
cualquier aplicación seria creada por profesionales se realice en Alice o Scratch, y las estadísticas sean más fáciles de lograr que tener una API de estadísticas, con
mucho menos en la próxima generación de transbordadores espaciales, pero también características similares, incorporada en otro lenguaje. Dado esto, si se necesita R
reconocemos que los niños pueden aprender los fundamentos de la programación con requiere más evidencia que pruebas de que un cálculo estadístico particular, o una
tales herramientas. Esto nos lleva a una pregunta de investigación: característica del lenguaje, funciona o es rápido.
RQ base posible bajo el mayor número de circuitos El Señor dijo: “Si como un solo pueblo que habla el mismo idioma han comenzado a
circunstancias? hacer esto, entonces nada de lo que planean hacer les será imposible. Ven,
bajemos y confundamos su idioma para que no se entiendan ”.
En segundo lugar, aparte de las necesidades de los usuarios, debemos considerar
que los científicos y la industria privada utilizan lenguajes de programación para una - Génesis 11: 6–7, Nueva Versión Internacional
amplia variedad de objetivos. Esto incluye aplicaciones tan variadas como bioingeniería,
física, videojuegos o edición de películas, entre muchas otras demasiado numerosas Si tomamos el opuesto lógico de Un lenguaje para gobernarlos todos, obtenemos lo
para mencionarlas. Si bien está claro que muchas aplicaciones se pueden crear con que llamamos copos de nieve únicos: la idea de que todos los desarrolladores
lenguajes que existen en la actualidad (por ejemplo, muchas aplicaciones están escritas necesitan un lenguaje de programación único para todas las tareas posibles. Antes
en Java o C ++), algunos dominios de aplicaciones pueden beneficiarse de tener un de discutir el tema, señalamos que esta visión es refutada por evidencia empírica en
lenguaje de programación único. Si bien se podrían señalar muchas áreas potenciales, la literatura. Discutimos dos cuestiones, a saber, que 1) no está respaldado por la
creemos que una obvia es el análisis sintáctico, donde herramientas como Antlr evidencia existente y que 2) errar demasiado cerca de la visión de Unique Snow fl
proporcionan formas concisas de representar reglas de análisis sintáctico que pueden akes en la sociedad puede tener consecuencias negativas, especialmente para la
ser realmente complejas cuando se escriben a mano en un lenguaje como C o Java. comunidad científica.
Admitimos, sin embargo, que no conocemos evidencia concreta sobre este punto,
tampoco podemos determinar con ningún tipo de certeza matemática exactamente qué En primer lugar, y lo que es más importante, creemos que ya existe evidencia en la
dominios pueden requerir un nuevo lenguaje y cuáles no. Sospechamos que, cuando se literatura que muestra que es poco probable que el punto de vista de Unique Snow fl
escribe la historia, el número de veces que los autores han afirmado que se necesitaba akes sea válido. Considere por un momento cómo tendrían que verse los datos
un nuevo lenguaje específico de dominio se considerará una exageración significativa. empíricos para que fueran razonables. Es decir, los desarrolladores necesitan variar
tanto que no se puedan tomar medidas consistentes; esta vista no es lo que
observamos a partir de mediciones cuidadosas del comportamiento del programador
hasta ahora.
Desde otra perspectiva, con nuestro tercer punto, Meyerovich y Rabkin Por ejemplo, considere el estudio de Rossbach et al. [39], que mostró una
[32] señalan que por qué se adopta un lenguaje de programación es una diferencia de casi 8 veces en las tasas de errores entre una solución de software
cuestión compleja que involucra muchos factores, incluidos algunos basada en memoria transaccional en comparación con bloqueos de grano fino o
aparentemente curso. O considere eso,
286
en casi todas las réplicas de estudios sobre tipificación estática o dinámica (por autores de alquiler. Si bien no conocemos un análisis sistemático de los tipos y tipos
ejemplo, con o sin un entorno de desarrollo, con o sin documentación, el uso de de lenguajes de programación utilizados en los colegios y universidades de los
genéricos), esa tipificación estática parece aumentar la productividad del Estados Unidos o del mundo, puede resultar esclarecedor capturar esta información
programador en promedio [12, 25, 31]. En estudios de principiantes, las diferencias a escala global. Si bien fue un comienzo ciertamente inadecuado, comenzamos un
en la sintaxis tienen un poder explicativo significativo, a juzgar por los valores eta análisis de este tipo realizando una breve encuesta de 39 colegios y universidades
reportados por los estudios, al decir por qué observamos que algunos lenguajes son en el medio oeste, analizando solo qué idiomas usaban estas escuelas en el curso
más fáciles de entender y usar inicialmente que otros [44]. Dicho de manera sucinta, introductorio. De estos, se utilizaron aproximadamente 9 lenguajes de
cada estudio, y cada estudio futuro, que documente que los programadores, en programación, incluidos C, C ++, Alice, VB, Python, Java, C #, COBOL y ADA. La
promedio, obtienen mejores resultados o peores con una característica del lenguaje evidencia de que cada una de estas opciones tiene sentido, como un todo o en
sobre otra, refuta cada vez más la visión del mundo de Unique Snow fl akes. términos de características individuales del lenguaje, no puede establecerse a partir
de la literatura.
promover la visión de los copos de nieve únicos. La sociedad moderna requiere que también está muy fracturada en lo que respecta al uso de lenguajes de programación, tanto en
los programadores trabajen juntos y parece demasiado obvio que si todos los lo que respecta a las variaciones en la adopción (como se ha estudiado recientemente) como
programadores tuvieran su propio lenguaje, la colaboración sería más difícil, si no en lo que respecta a bibliotecas y conjuntos de herramientas. Por ejemplo, en NetBeans 7.4,
imposible. Dicho de otra manera, incluso si las personas tienen necesidades únicas contamos un total de 466 conjuntos de herramientas diferentes disponibles para su uso como
mensurables en todas o en muchas condiciones, esto no implica que la sociedad bibliotecas Javascript. Estos kits de herramientas, que son básicamente pequeñas adiciones a
obtenga un beneficio tangible de la divergencia extrema de idiomas. Javascript, brindan a los desarrolladores capacidades listas para usar para codificar en la web.
Para la mayoría de los estudiosos, esto no debería sorprender y la situación es similar para
Creemos que un área tangible que puede no beneficiarse de la divergencia obtienen acceso a bibliotecas y extensiones estándar muy grandes, para bien o para mal.
es la sintaxis. Históricamente, aunque pocos cuestionan la creatividad asociada Algunos pueden considerar esto solo una expresión de la creatividad de nuestra comunidad y,
con la creación de nuevos productos lingüísticos, es importante reconocer que en la superficie, este punto de vista puede parecer atractivo. Sin embargo, nos preocupa que
los artículos suelen estudiar una característica, al tiempo que combinan ideas una divergencia tan grande esté reduciendo la productividad a escala social.
Otro tema de importancia con respecto a las guerras más amplias de los lenguajes de
programación es su impacto en el mundo en general. Este efecto es difícil de cuantificar, Del tiempo empleado en desarrollar programación
en parte porque los científicos informáticos a menudo parecen encontrar que hablar de las RQ idiomas, qué porcentaje se gastó en reinventar
guerras del lenguaje es un tabú en la investigación revisada por pares, y en parte porque ing la misma solución (por ejemplo, un HashTable en Java frente a C #)?
se ha realizado poca investigación científica sobre las guerras del lenguaje como un
fenómeno en sí. En esta sección, si bien admitimos en primer lugar que la evidencia sobre
el impacto social de las guerras del lenguaje es difícil de reunir, damos un primer intento Si bien hay poco debate sobre si los cambios en los idiomas pueden tener
de discutir lo que vemos como las consecuencias de este problema. Centramos nuestros beneficios, a veces incluso cambios menores en nuevos idiomas (por ejemplo,
esfuerzos en cuestiones que creemos que son importantes para la academia y la industria, diferencias en las estructuras de bucle) o, en algunos casos, problemas de patentes o
incluida la duplicación de esfuerzos y costos. derechos de autor, influyen en la posibilidad de reutilizar partes de una biblioteca
estándar. Naturalmente, esto lleva a corporaciones como Oracle (o Sun) a crear todo el
JDK, mientras que otras crean todo .NET, una obvia duplicación de esfuerzos. Cuando
En el ámbito académico, creemos que pocos científicos informáticos han llegado a un miramos más ampliamente, en las bibliotecas estándar de C ++, bibliotecas para Ruby,
acuerdo con lo fracturada que está la comunidad de lenguajes de programación. Considere Perl, Python u otras tecnologías, y
287
Además, si observamos las API que los desarrolladores de proyectos más pequeños a Perl. En el mundo académico, la situación es similar. Cuando los miembros de la facultad
vuelven a implementar una y otra vez en diferentes idiomas, sospechamos que la cambian los productos de lenguaje, digamos de C ++ a Java, como ha sido común en los
comunidad en su conjunto se beneficiaría si se redujera la duplicación de esfuerzos en últimos años, los libros de texto, los tutoriales para partes de las bibliotecas estándar, las
todos los sectores tecnológicos. diapositivas, las tareas y los ejemplos deben cambiar al nuevo enfoque. Esto nos lleva a
Para las empresas de software, existe una perspectiva diferente, que depende de
las limitaciones del mercado. Si, por ejemplo, Microsoft decide desarrollar un lenguaje
¿Cuál es la productividad histórica total perdida?
como C # como competidor del lenguaje de programación Java, 2 la duplicación de
RQ cambiando / actualizando lenguajes de programación
esfuerzos debe haberse considerado inicialmente que valía la pena el costo. Sin
en varios entornos (por ejemplo, académico, industrial, militar)?
embargo, para los desarrolladores individuales que realmente usan un idioma y
necesitan escribir un código similar en uno diferente, la duplicación de código
correspondiente se vuelve problemática. Parece ser especialmente grave tan pronto
como se requiere que varios clientes escriban el mismo código o fragmentos de código Además, si imaginamos que, con el tiempo, los diseñadores de lenguajes y los
similares en diferentes idiomas; en otras palabras, mientras que las empresas pueden académicos se volvieron cada vez más dependientes de pruebas válidas y reproducibles
beneficiarse discutiblemente de la duplicación, es posible que los clientes no. Esto lleva para tomar decisiones, es lógico pensar que al menos algunos aspectos del diseño del
a otra pregunta de investigación: lenguaje dejarían de reproducirse en nuevos lenguajes. Por ejemplo, aunque nuestras
pruebas solo abarcan un pequeño conjunto de posibles soluciones en comparación con el
conjunto, los datos empíricos que hemos recopilado nos llevan a algunas conclusiones.
Considere las cuatro construcciones de bucle alternativas enumeradas en la Figura 1,
De todo el tiempo utilizado en el desarrollo de software que muestra la salida de la palabra "Hola-" y una variable de contador en la pantalla 10
RQ ¿Qué porcentaje se gastó en reimplementación? veces.
¿Estás buscando la misma solución en un idioma diferente?
grupos que cambian los lenguajes de programación, lo cual es común debido a la teniendo un impacto significativo en la sociedad en su conjunto. Desde nuestra
velocidad a la que cambia nuestra disciplina, deben en última instancia rehacer el perspectiva, el impacto es en gran medida negativo. Si bien los problemas sociales nunca
trabajo y adaptar su tecnologías (por ejemplo, portabilidad). En algunos casos, estos se pueden resolver con un grupo de investigación, y las guerras lingüísticas son un
procedimientos de transferencia son sencillos. Por ejemplo, moverse entre nuevas problema profundo con muchos factores, es necesario investigar el impacto en la sociedad
versiones de Java o C ++ puede requerir esfuerzo, pero podría decirse que sería si queremos que las generaciones futuras no miren hacia atrás en nuestro trabajo con
menos esfuerzo que convertir desde Fortran sorpresa, preguntándose por qué Nos llevó tanto tiempo incluso realizar un estudio sobre,
por ejemplo, la sintaxis de un bucle. Este tema de la base de la evidencia es el siguiente
tema de discusión en este trabajo.
2 ver, por ejemplo, los artículos correspondientes como http: //
news.cnet.com/2100-1001-242268.html\&title=
Microsoft-brewing-Java-like-language \ & desc = - +
CNet + artículo
288
i=0 Hola x):-
repetir 10 veces (X> 10,!);
yo = yo + 1 ( escribir( 'Hola' - X), Siguiente es X + 1, hola
producción " Hola- "+ i (Próximo)).
fin : -hola (1).
Figura 1. Estilos de bucle en varios lenguajes de programación que generan una cadena y una variable de contador.
2.4 El diseño del lenguaje necesita una base de evidencia más sólida “Inapropiados, demasiado difíciles, inútiles e incluso dañinos”: argumentos que creemos
coinciden estrechamente con los planteados por algunos investigadores del lenguaje en
la actualidad. Un trabajo reciente que exploraba ideas similares encontró que el campo
"No sabes nada, Jon Snow". de la ingeniería de software todavía está muy rezagado en su rigor académico [26].
- Ygritte, Juego de tronos
289
¿Cómo podemos incrementar el lenguaje de programación Tiene sentido preguntar cuáles son nuestras responsabilidades. En esta
RQ medir los estándares de evidencia de la comunidad de diseño? sección, miramos las guerras de los lenguajes de programación desde un punto
de vista diferente. Si bien reconocemos que este problema puede ser uno de
los más desafiantes en la informática, que no tiene una solución fácil o sencilla,
Admitimos fácilmente que no sabemos la respuesta a la pregunta
discutimos aquí un posible camino a seguir. En este contexto, discutimos cómo
anterior, pero queremos ofrecer algunas especulaciones limitadas que otros
varias comunidades pueden contribuir a aliviar aspectos de las guerras
pueden explorar libremente, con suerte para refutar o mejorar nuestras
lingüísticas durante el próximo siglo.
suposiciones. Una posibilidad de por qué la comunidad lingüística no ha
estado reuniendo pruebas rigurosas, más allá de las consideraciones
Por lo tanto, ahora miramos a los individuos y las comunidades, discutiendo su
técnicas, es que en el mundo académico hay pocos incentivos para
papel en las guerras de idiomas, incluyendo dónde han tenido éxito o fracasado. A lo
hacerlo. Los artículos se pueden publicar quizás incluso más fácilmente con
largo de este proceso, proporcionamos nuestra opinión sobre las posibles actividades
pequeños cambios incrementales en el trabajo existente. Además, dado
que podrían emprender y que pueden ayudar a largo plazo. Si bien debería ser obvio,
que las instituciones académicas a menudo se basan considerablemente
no tenemos todas las respuestas, ni pretendemos tener algún tipo de garantía de que
en el recuento de artículos, literalmente el número de artículos que un
nuestras sugerencias sean beneficiosas. Sin embargo, señalamos que muchas
académico publica como métrica, se desalienta directamente a los
comunidades están haciendo poco para investigar o solucionar un problema social
académicos de trabajar para aliviar problemas difíciles y de larga data que
importante en nuestra disciplina.
podrían requerir años de arduo estudio si conduce a sólo una, o unas pocas
publicaciones. En otras palabras,
de condiciones psicológicas. Con los lenguajes de programación, la creación de una cabeza? " [...] "Por supuesto que está sucediendo dentro de tu cabeza, Harry, pero ¿por qué
colección estándar de todas las evaluaciones realizadas sobre sistemas de tipos, diablos debería eso significar que no es real?"
científica confiable, replicable y sobre el impacto. Esto nos lleva a nuestra siguiente
pregunta:
Los informáticos y los investigadores de lenguajes de programación son
expertos en construir ejemplos que ilustren una situación que podría
considerarse un problema. Normalmente, el enunciado de un problema se utiliza
como trampolín para explicar una posible solución. Como ejemplo, considere el
¿Podemos crear un catálogo usando el DSM5 [1] primer artículo sobre programación orientada a aspectos [24], que se originó en
RQ como ejemplo, para pruebas fiables de lenguaje el diseño de lenguajes de programación, métodos formales, protocolos de
¿impacto? meta-objetos, pruebas de caja gris, construcción de compiladores, etc. Por qué
se desarrolló AOP, no podemos encontrar evidencia en la literatura de que el
problema original se basara en evidencia documentada. Por supuesto,
3. Mayordomía y responsabilidades entendemos muy bien por qué este suele ser el primer paso en la ciencia. Sin
embargo, si bien pensar en un problema potencial es importante primero Paso,
"Ahora, naturalmente, como muchos de nosotros, me resisto a cambiar demasiado las viejas la ciencia moderna en otras disciplinas, cuando se publica en revistas
formas". importantes, suele exigir a los autores profundizar, un paso que a veces se pasa
- Kazuo Ishiguro, Los restos del día por alto en nuestra disciplina. Esto nos lleva a la primera responsabilidad de un
académico individual en diseño de lenguaje:
Dado que los diseñadores de lenguajes son los administradores de la computación en
el sentido de que nuestra comunidad desarrolla productos fundamentales para los que
se basa el software del mundo,
290
Las declaraciones de problemas deben incluir reproducciones Considere otro ejemplo, en este caso el uso de genéricos. El estudio de Parnin
Resp. prueba ducible, verificable, de que el et al. muestra la frecuencia con la que se utilizan los tipos genéricos en Java [34].
El problema tiene impacto. Si bien los aspectos técnicos de los genéricos se publicaron en una gran variedad
de lugares (ver
Hay diferentes formas de identificar si un problema tiene impacto, que incluyen al ej., [3, 21, 33] entre muchos otros), los resultados de este estudio indican que
menos: 1) experimentos controlados, 2) estudios de campo, 3) análisis de repositorios los genéricos se usan relativamente poco, aunque debe mencionarse que en
de códigos, 4) encuestas y otras técnicas. Todos estos métodos nos permiten una versión extendida del estudio, los autores ven al menos alguna tendencia al
evidenciar que una situación particular tiene un impacto suficiente como para que pueda alza [ 35]. 3 Otros ejemplos de tales estudios son el de Gil y Lenz [15] donde los
ser detectada y replicada por otros grupos de investigación. Estas técnicas a menudo autores estudian la frecuencia de sobrecarga de métodos en las definiciones de
pueden con fi rmar, y lo que es más importante, refutar, que un problema es importante, clase o el estudio de Callau et al. [5], donde los autores estudian el uso de
lo que puede probarse intentando detectar un daño. Por ejemplo, si los académicos características de lenguaje dinámico en Smalltalk.
la pérdida de capacidad de mantenimiento u otros factores, estos calificarían. Por lo construcciones del lenguaje se están probando mucho después de que se inventaron.
general, aunque debería ser evidente, cuanto mayor es el impacto del lenguaje, Sin embargo, incluso antes de estos estudios, muchos afirmaron que los constructos
eran útiles y, en algunos casos, tenían un impacto mundial. Para dar un ejemplo de
hoy, muchos lenguajes de programación están integrando características de
programación funcional. Sin embargo, cuando analizamos todos los artículos escritos
en ICFP, lo que hemos hecho internamente y codificado formalmente, esta comunidad
3.1.2 Proporcionar evidencia de que una solución ayuda argumenta consistentemente que la programación funcional es beneficiosa, pero
tampoco proporciona evidencia, aparte de las de fi niciones puramente técnicas
“Lo comprobé muy a fondo”, dijo la computadora, “y esa es definitivamente la —necesario, obviamente, pero no suficiente . Tichy parece tener razón; nuestras
respuesta. Creo que el problema, para ser sincero contigo, es que nunca has sabido comunidades están integrando características sin evidencia. Esto nos lleva a nuestra
realmente cuál es la pregunta ". segunda responsabilidad:
- Reflexión profunda en la Guía del autoestopista de Douglas Adam para
Galaxia
Si continuamos con el ejemplo de AOP, encontramos que la orientación hacia el espectador Resp. Los académicos individuales deben comprender significativamente
es una técnica que ahora se discute comúnmente en la literatura. Algunos miembros de la aumentar sus estándares de evidencia.
comunidad investigadora han argumentado que su éxito es paradójico [45]. Por un lado,
parece claro que las preocupaciones transversales son reales; realmente podemos
3.1.3 Si no está roto, no lo arregle
encontrar ejemplos, como el registro, en los que una solución AOP se siente más limpia o
Sin embargo, considere las investigaciones empíricas sobre la - Richie Norris en Mars Attacks
programación orientada a especialistas realizadas por académicos que son
independientes del grupo de investigación original [2, 11, 12, 17]. En tal En la sección anterior, discutimos que los académicos individuales deben desafiarse a
caso, cuando la situación se considera más detenidamente y se pide a los sí mismos para proporcionar una cantidad cada vez mayor de datos y evidencia en
desarrolladores reales que programen utilizando las nuevas técnicas, los artículos académicos, especialmente con respecto a la evidencia de si una solución de
beneficios declarados de AOP no son compatibles. Las mediciones lenguaje tiene impacto, funciona y realmente ayuda a la comunidad en su conjunto. .
cuidadosas refutan las opiniones de la comunidad de AOP de que tales En esta sección, nos enfocamos en un problema diferente que debe ser considerado
técnicas son útiles, lo que debería dar una pausa a cualquier académico por investigadores y académicos de lenguajes de programación individuales, a saber:
que piense cuidadosamente si el problema original fue impactante o si las solo cambie aquellas características del lenguaje para las cuales exista evidencia
soluciones propuestas ayudan. Curiosamente, sin embargo, el primer observable directa de que deberían serlo.
promoción, si estaban involucrados en tal comunidad, inventar una nueva característica de lenguaje de programación. Esta característica, se
afirma, es beneficiosa. Asumir como
3 En términos de impacto humano, un estudio mostró que los genéricos ayudan a los desarrolladores que usan una
API que usa genéricos en comparación con los tipos sin procesar en la descripción de la interfaz (ver [19]).
291
bueno, por el bien del argumento, que este erudito siguió nuestras pautas de las firmas de métodos o tal vez está creando código que habla con
secciones anteriores. Proporcionaron una prueba formal de que la función componentes externos como objetos COM. De cualquier manera, la
funcionaba, realizaron un ensayo controlado aleatorio con seres humanos que elección es tuya, no mía.
demostraron que la función tuvo un impacto positivo y realizaron encuestas con
Teniendo en cuenta que los estudios mencionados anteriormente muestran que
socios de la industria, que colectivamente proporcionaron una base sólida de
el tipado estático ayuda a la hora de explorar una API, y teniendo en cuenta que
evidencia. De esto, concluiríamos que el investigador ha realizado su debida
ningún otro estudio muestra lo contrario, la declaración anterior sobre la
diligencia, obteniendo plausiblemente varias publicaciones y haciendo su trabajo
conveniencia de renunciar a la seguridad del tipado estático para explorar una API
como académico de manera adecuada.
debe llamarse fácticamente incorrecto. Si bien existe evidencia en este caso, donde
no hay ninguna, las afirmaciones deben verificarse para ver si cumplen con las
Supongamos ahora, sin embargo, que este erudito amplía su trabajo,
pruebas científicas de corrección. Más importante aún, para los autores de
incorporándolo a un nuevo lenguaje con su propio compilador. Para construir un
lenguajes de programación, se debe evitar el cambio espontáneo de las
compilador de este tipo, el académico tiene al menos dos opciones: 1) reconocer que
características de los lenguajes de programación sin evidencia. Si bien no tenemos
no siempre es posible, incorporar la característica en un lenguaje existente con la
ninguna duda de que algunos encontrarán tales cambios en una exploración
característica incorporada, o 2) construir un nuevo lenguaje que incluya la
inofensiva, creemos que las divergencias de lenguaje no basadas en evidencia,
característica. Dadas nuestras observaciones de la literatura de investigación y los
como esta, son de utilidad discutible y pueden afectar el mantenimiento del
lenguajes de programación en el campo, abrigamos dudas de que los académicos
software a largo plazo. Por lo tanto,
estén tomando decisiones sensatas aquí, que ejemplificamos comenzando con una
discusión de Java y Boo.
A veces es apropiado renunciar a la red de seguridad "Imponemos orden en el caos de la evolución orgánica. Existes porque lo
proporcionada por la escritura estática. Tal vez solo desee explorar permitimos y terminarás porque lo exigimos ”.
una API sin preocuparse demasiado por - Soberano, Mass Effect
4 Ver
https://github.com/bamboo/boo/wiki/
Gotchas-para-usuarios de Python para una descripción más completa de las diferencias entre Tanto en un contexto industrial como educativo, se realiza o financia poco trabajo
Boo y Python académico para evaluar las guerras de idiomas.
292
Comunidades enteras en la National Science Foundation están dedicadas a la disponible en la mayoría de los lenguajes (por ejemplo, bucles, efectos secundarios,
informática educativa, pero estos programas generalmente no tratan este tema, a funciones o procedimientos, paso de parámetros, etc.) y las técnicas para estos
pesar de que esto puede llevar a decisiones peculiares causadas por el estado de la estudios probablemente incluirían experimentos controlados. Sin embargo, los
práctica. Por ejemplo, el excelente plan de estudios de la escuela secundaria, estudios previamente mencionados por Parnin et al, Gil y Lenz, Callau et al, y Souza
Exploring Computer Science, incluye una variedad de lenguajes de programación. [5, 15,
Esta decisión, de utilizar más de un lenguaje de programación en un plan de estudios 34, 41] que estudiar el uso de las características del lenguaje en los repositorios de código
para niños relativamente pequeños, es un reflejo de la disciplina, para bien o para existentes puede darnos información sobre el uso, aunque determinar la causalidad suele
mal. En esta sección, discutimos los tipos de investigación que creemos que las ser más fácil con el primero por razones bien conocidas.
En segundo lugar, los comités deben fomentar una mayor investigación del
misterio y las implicaciones de las guerras lingüísticas. Esto incluye analizar cómo la Incluso si los científicos trabajan diligentemente en las guerras del lenguaje durante
divergencia de idiomas está afectando a otras disciplinas. Como solo un ejemplo, décadas en un entorno académico, parece poco probable que realmente tenga un
creemos que sería bueno saber cómo la divergencia de idiomas está afectando a los impacto en la práctica a menos que trabajemos con diseñadores de idiomas existentes
químicos o físicos. Además, sabemos muy poco sobre cómo la divergencia de fuera de la disciplina. Creemos que este trabajo de difusión debe tomar dos formas con la
productos lingüísticos está afectando la educación o la industria del software en comunidad: 1) necesitamos convencer a los diseñadores de lenguajes corporativos de lo
general. Si bien pensamos que el resultado de las guerras de idiomas es que es verdadero y falso, y 2) se necesita presentar más trabajo sobre cómo el diseño del
probablemente negativo, argumentaríamos que ningún erudito lo sabe realmente: los lenguaje impacta a los humanos o la sociedad en general, dado que esto es un principio
científicos de la computación no investigan uno de los problemas más impactantes en fundamental de los lenguajes de programación.
toda la ciencia de la computación. Para ser claros, hemos escuchado a muchos
académicos en nuestra comunidad argumentar, si el lector disculpa una
generalización, que el libre mercado lo resolverá por sí solo. Rechazamos este En el primer punto, tomemos como ejemplo nuestra discusión anterior sobre Boo o
argumento, encontrándolo ingenuo. Si el mercado libre pudo resolver las guerras de Java. Por un lado, las nuevas características de dichos lenguajes generalmente no se
idiomas, probablemente ya lo habría hecho. Esto nos lleva a nuestra próxima basan en pruebas de su importancia. Por otro lado, a menos que la comunidad de
responsabilidad: investigadores, después de haber realizado dichos estudios, lleve a cabo actividades de
divulgación para enseñar a los diseñadores por qué sus características tienen éxito o
fallan, y qué diseños tangibles solucionan el problema, poco cambiará.
Para dar una idea de cómo sería una investigación de las guerras de corporativos sean bienvenidos y se les enseñe sobre el impacto del lenguaje. No queremos decir,
idiomas, los estudios podrían analizar ambos idiomas en su conjunto y sus en el sentido más estricto, que debamos enseñar cómo ejecutar experimentos, ya que los
características. Un buen punto de partida para analizar las características del diseñadores individuales como el autor de Boo probablemente tengan pequeños mecanismos.
293
nismo para ejecutarlos incluso si quisieran. Sin embargo, queremos decir que los papel en el mercado, aunque existen serias críticas que creemos no deben pasarse por
diseñadores de lenguajes y los estudiantes en el aula deben aprender lo que alto. 5 En otras palabras, no sabemos lo suficiente sobre cómo se utilizan los idiomas
muestra la mejor evidencia disponible con respecto al diseño de lenguajes. en la práctica, lo que dificulta que nuestra comunidad oriente las prioridades de
investigación para satisfacer las necesidades del mercado. Sin esa información, los
En segundo lugar, la comunidad de investigadores necesita mucho más trabajo para eruditos a menudo están en la oscuridad, lo que nos lleva a nuestra primera
estudiar el impacto del diseño del lenguaje. Como consecuencia, la comunidad responsabilidad:
investigadora debe asegurarse de que los métodos centrados en el ser humano se
apliquen en gran medida en las publicaciones sobre lenguajes de programación. Se
Resp. Hacer públicos los datos sobre el uso del idioma.
debe fomentar que las presentaciones en conferencias o talleres contengan elementos
sobre los estudios centrados en el ser humano o el impacto del lenguaje en general y
esta información debe compartirse más allá de la academia. Esto es importante, ya que
imaginamos que algunos académicos afirman que es suficiente si se estudia una nueva 3.3.2 Evidencia de la demanda
construcción del lenguaje utilizando métodos centrados en el ser humano y que no es
necesario realizar un trabajo de divulgación. Sin embargo, en la práctica, muchas No le pague al barquero. Ni siquiera fijes un precio. No le pagues al barquero
grandes corporaciones son propietarias de los productos lingüísticos que utiliza la hasta que te lleve al otro lado ".
comunidad en la práctica: dependen financieramente. Si la comunidad académica - Chris de Burgh, no le pagues al barquero
realizara los estudios, pero no realizara actividades de divulgación, parece plausible que
los socios corporativos lo ignoren. De las dos declaraciones anteriores concluimos la Albergamos pocas dudas de que la industria del software en sí misma no puede, o no
siguiente responsabilidad de la comunidad investigadora: puede, realizar de manera realista el tipo de recopilación de pruebas académicas que
se requeriría para conocer el impacto del diseño del lenguaje en la práctica. Las
pruebas matemáticas generalmente las resuelven los académicos y los ensayos
controlados aleatorios a menudo deben ser realizados por grupos independientes del
interés económico propio. Por lo tanto, si bien la industria del software no puede
Enseñar, comunicar y fomentar métodos centrados en el ser humano
Resp. realizar estudios por sí misma, antes de adoptar productos de lenguaje, instamos a la
en el diseño de lenguajes de programación para una amplia variedad
industria del software a exigir más evidencia y abandonar los productos / características
de audiencias.
del lenguaje que no estén a la altura de las expectativas científicas razonables.
lenguas juegan un org / jtc1 / sc22 / wg21 / docs / papers / 2012 / n3337.pdf
294
datos recopilados sobre esta característica del lenguaje, pero creo que no está Los sistemas de programación de usuario final [27] han existido por algún
claro si tiene un gran impacto en la práctica. Esto nos lleva a otra responsabilidad tiempo, la evidencia de sus beneficios no es tan convincente como algunos
de la industria del software: podrían pensar. Por ejemplo, es crucial reconocer que las herramientas
visuales pueden ayudar inicialmente a los principiantes (aunque no para los
Grupos como ISO y empresas que apoyan
ciegos), específicamente a promover la transferencia del aprendizaje de los
Resp. ellos, deben basar sus decisiones en pruebas.
sistemas visuales a los lenguajes de programación basados en texto. Esto
ha sido con fi rmado de forma independiente y utilizando diferentes
Queremos ser claros al decir que, si bien reconocemos que tales comités a metodologías con al menos la herramienta ALVIS [20] y Alice [7]. Por otro
menudo tienen que depender del juicio de expertos, C ++ se ha establecido durante lado, un estudio de Garlick y Cankaya comparó el uso de Alice en un curso
décadas. Cuando se diseñó por primera vez, es comprensible que Stroustrup no introductorio con un grupo de control que comenzó con pseudocódigo, y
estuviera realizando ensayos controlados aleatorios. Décadas más tarde, sin encontró que el grupo de Alice tuvo una caída estadísticamente significativa
embargo, es lamentable que grupos tan grandes e importantes como ISO no estén en las calificaciones [14]; un tipo de estudio muy diferente con un resultado
utilizando evidencia científica. Si bien algunos de los cambios en la especificación de muy diferente al discutido por Dann et al. [7]. Esto es interesante,
C ++ 11 nos “parecen” inofensivos (por ejemplo, agregar una tabla hash a la biblioteca pensamos,
estándar), otros parecen confusos o de valor cuestionable. En última instancia, es
lamentable que los estándares de evidencia no fueran más altos para algo tan
obviamente importante como cambiar C ++.
Con una herramienta como Scratch, parece haber poca evidencia rigurosa sobre
Sin embargo, nuestro punto, aparte de los comités o las funciones, es que la el uso de la herramienta en comparación con otras que existían antes. Nos parece
industria tiene un papel que desempeñar en este proceso. Grupos como Microsoft o IBM extraño dado el considerable financiamiento de la National Science Foundation para
que construyen compiladores de C ++ deberían pedir pruebas a ISO y, de lo contrario, promover actividades de participación [4, 13, 29, 38, 51]. Si bien no hacemos
mantenerse firmes porque la productividad de sus desarrolladores depende de un buen afirmaciones sobre Scratch de ninguna manera, nos sorprendió saber que la mayoría
diseño. Google mostró esto con bastante claridad en su último artículo en ICSE [40], de los artículos publicados que investigamos contenían una recopilación de evidencia
mostrando evidencia de que los errores individuales del compilador estaban afectando muy limitada, aunque muchos, a pesar de esto, elogiaron la herramienta. Por otro
la productividad de los desarrolladores en la empresa. Argumentamos que el comité de lado, un estudio analizó 536 proyectos de Scratch y encontró que los estudiantes
C ++ 14 está siendo pseudocientífico si no está usando el método científico para hacer aprendieron conceptos de programación usando Scratch a lo largo del tiempo. Esto
la próxima versión. La ejecución de estudios de usuarios es bastante fácil de lograr y puede parecer aceptable hasta que nos demos cuenta de que el estudio no contó con
vemos pocas excusas aceptables. un grupo de control [28]. Recordamos al lector, como describe Kaptchuk, que el uso
de grupos de control ayuda a descartar cuestiones importantes como el fraude o
cuestiones más mundanas como la incorrección [22]. Más importante aún, dado que
los estudiantes pasan la mayor parte de su carrera académica utilizando más
3.4 Responsabilidades de las instituciones educativas
productos de propósito general que Alice o Scratch, es lamentable que se realicen tan
Creemos que las instituciones educativas también tienen un papel importante que pocas investigaciones sobre los productos que la gente usa más en el aula o en el
desempeñar en las guerras de idiomas. En última instancia, los académicos deciden qué campo.
productos lingüísticos aprenderá la próxima generación de informáticos y deben educar a
los estudiantes para que utilicen la evidencia al pensar en ellos. Por tanto, los educadores
juegan un papel significativo en las guerras de idiomas y tienen importantes
responsabilidades. Discutimos estos aquí. Esto nos lleva a nuestra primera responsabilidad con la comunidad educativa:
3.4.1 Analizar el impacto del lenguaje con los estudiantes Realizar análisis competitivos de programación.
Si bien la comunidad de educación en ciencias de la computación tiene varios roles Resp. idiomas con estudiantes de todos los niveles de la
importantes (por ejemplo, participación, trabajo con personas con discapacidades, oleoducto demic.
computación en las escuelas primarias, el impacto del género), estudiar el impacto del
diseño del lenguaje de programación es algo raro en esta comunidad. Esto es interesante En segundo lugar, necesitamos tener una mejor idea de cómo se utilizan los lenguajes
porque, si bien está claro que muchos están interesados en las herramientas visuales, en de programación en el mundo académico a nivel internacional. Tal como está ahora,
nuestra mini revisión de las universidades en el medio oeste, vimos que pocas sabemos sorprendentemente poco sobre cómo se utilizan los productos lingüísticos en la
universidades realmente usan herramientas visuales para enseñar a los estudiantes práctica. El trabajo en el compromiso se ha centrado en la escuela secundaria utilizando Alice
universitarios, casi siempre favoreciendo más lenguajes de programación de propósito o Scratch, principalmente, pero no está claro cuánto se usan estas herramientas en la
general. universidad o por cuánto tiempo. Si bien algunas escuelas los usan en un curso introductorio,
tenemos pocos datos para respaldar las decisiones que se están tomando, y mucho menos
Primero, incluso en lo que respecta a los lenguajes de programación visual, aunque las consecuencias de esas decisiones. Esto nos lleva a una responsabilidad:
sabemos que los editores dirigidos por sintaxis [49], o herramientas más modernas como
Alice [6, 36], Scratch [29, 38], o tal vez
295
Resp. Trace cuidadosamente el uso del lenguaje en la academia. Enseñe a los estudiantes sobre las guerras del lenguaje,
Resp. ing argumentos basados en evidencia en el debate.
296
Parece plausible que los argumentos de la comunidad lingüística sean similares. comunidad de las ciencias de la computación, mientras que otras quizás nunca se
Los desarrolladores de productos lingüísticos que no son académicos, que no tienen cumplan. Sin embargo, imploramos a la comunidad que actúe. Las posibles soluciones a
formación en diseño de estudios ni ningún mecanismo para realizar experimentos, las guerras de idiomas no son mágicas.
dirán con razón que no tienen forma de seguir nuestras sugerencias. Por supuesto,
esto es justificable, pero los desarrolladores que no pueden contribuir a la recopilación 5. Conclusión
de evidencia deberían al menos informarse sobre lo que muestra la evidencia. En
otras palabras, si un diseñador de lenguaje no puede recopilar evidencia sobre la “Soy y siempre seré el optimista, el que espera grandes esperanzas y el soñador de
sintaxis, debe seguir los datos existentes. Si no tienen formación en estudios sobre
sueños inverosímiles”.
La industria del software también puede oponerse. Quizás la industria erróneas de que afectará al mundo de una manera sustancial, agregamos
argumentará que no puede esperar a obtener pruebas porque necesita una responsabilidad final, que decimos con toda sinceridad y total seriedad:
escuchado muchas veces). Además, aunque reconocemos que los estudios en el aula
pueden ser difíciles (véase, por ejemplo, Enbody y Punch [10]), las ciencias médicas lo
tienen dramáticamente más difícil que nosotros: si nuestros estudios fallan, nadie muere.
Sin embargo, aunque obviamente imperfectas por muchas razones, otras disciplinas logran
Expresiones de gratitud
un progreso tangible a lo largo del tiempo utilizando datos empíricos, un hecho que nuestra
comunidad no debe ignorar. Nos gustaría agradecer a Bruce Horn por sus comentarios sobre los borradores de
este trabajo, además de todos los revisores anónimos. Los comentarios detallados que
recibimos fueron extraordinariamente útiles para revisar y mejorar este ensayo.
que cualquier erudito de nuestra historia haya pensado que tal afirmación podría ser software, 16 (1): 23–44, 2008.
cierta. Si la afirmación es realmente cierta, es una farsa. Imaginamos que algunas de [3] G. Bracha, M. Odersky, D. Stoutamire y P. Wadler. Mak-
nuestras sugerencias podrían llevar años de introspección por parte del ing el futuro a salvo para el pasado: agregando genérico al lenguaje de
programación java. En Actas de la Conferencia ACM SIGPLAN de 1998 sobre
sistemas de programación orientada a objetos, lenguajes y aplicaciones
(OOPSLA '98), Vancouver,
297
Columbia Británica, Canadá, 18 al 22 de octubre de 1998, páginas 183– [15] J. Gil y K. Lenz. El uso de la sobrecarga en programas java.
200. ACM, 1998. En Actas de la 24a Conferencia Europea sobre Programación Orientada a
Objetos, ECOOP'10, páginas 529–551, Berlín, Heidelberg, 2010.
[4] K. Brennan y M. Resnick. Historias desde cero
Springer-Verlag.
comunidad: Conexión con ideas, intereses y personas. En Actas del 44 ° Simposio
Técnico de ACM sobre Educación en Ciencias de la Computación, SIGCSE '13, [16] S. Hanenberg. Fe, esperanza y amor: un ensayo sobre ciencia del software
páginas 463–464, Nueva York, NY, EE. UU., 2013. ACM. negligencia de la ence de los factores humanos. En Actas de la Conferencia
Internacional ACM sobre lenguajes y aplicaciones de sistemas de programación
orientados a objetos, OOPSLA '10, páginas 933–946, Nueva York, NY, 2010. ACM.
[5] O. Callaú, R. Robbes, É. Tanter y D. Röthlisberger. Cómo
(y por qué) los desarrolladores utilizan las características dinámicas de los lenguajes de
programación: el caso de smalltalk. Ingeniería de software empírica, 18 (6): 1156-1194, [17] S. Hanenberg, S. Kleinschmager y M. Josupeit-Walter.
[9] P. Denny, A. Luxton-Reilly, E. Tempero y J. Hendrickx. 474, Nueva York, NY, EE.UU., 2013. ACM.
Comprender la barrera sintáctica para principiantes. En Actas de la decimosexta [20] CD Hundhausen, SF Farley y JL Brown. Puede dirigir
conferencia anual conjunta sobre innovación y tecnología en la educación ¿La manipulación reducir las barreras a la programación informática y promover la
informática, ITiCSE '11, páginas 208–212, Nueva York, NY, EE. UU., 2011. transferencia de formación ?: Un estudio experimental. Transacciones ACM sobre la
ACM. interacción humana entre computadoras, 16 (3): 1–40,
2009.
[10] RJ Enbody y WF Punch. Rendimiento de python cs1
estudiantes en cursos cs de nivel medio que no son de Python. En Actas del 41 ° [21] A. Igarashi, BC Pierce y P. Wadler. Featherwieght java:
simposio técnico de ACM sobre educación en informática, SIGCSE '10, páginas Un cálculo básico mínimo para java y gj. En Actas de la Conferencia ACM
520–523, NuevaYork, NY, EE. UU., SIGPLAN de 1999 sobre sistemas de programación orientada a objetos,
2010. ACM. lenguajes y aplicaciones (OOPSLA '99), Denver, Colorado, EE. UU., 1-5 de
noviembre de 1999, páginas 132–
[11] S. Endrikat y S. Hanenberg. Es un programa orientado a aspectos
146. ACM, 1999.
¿Está realizando una inversión gratificante en futuros cambios de código? Un
estudio socio-técnico sobre el tiempo de desarrollo y mantenimiento. En Actas de la [22] TJ Kaptchuk. Ignorancia intencional: una historia de ciegos
19a Conferencia Internacional sobre Comprensión de Programas del IEEE 2011, ICPC evaluación y controles de placebo en medicina. Boletín de Historia de la
'11, páginas 51–60, Kingston, CA, 2011. IEEE Computer Society. Medicina, 72 (3): 389–433, 1998.
¿La documentación de la API y la escritura estática afectan la usabilidad de la API? En programadores novatos. Encuestas de ACMComputing,
36th International Conference on Software Engineering, ICSE '14, Hyderabad, India 37 (2): 83-137, 2005.
- 31 de mayo - 7 de junio de 2014, páginas 632– [24] G. Kiczales, J. Lamping, A. Mendhekar, C. Maeda, CV
642. ACM, 2014. Lopes, J.-M. Loingtier y J. Irwin. Programación Orientada a Aspectos. En ECOOP,
P. Bontá y M. Resnick. Diseño de scratchjr: apoyo al aprendizaje de la primera [25] S. Kleinschmager, S. Hanenberg, R. Robbes, É. Tanter y
infancia a través de la programación informática. En A. Ste fi k. ¿Los sistemas de tipo estático mejoran la capacidad de mantenimiento de los
Actas de la 12a Conferencia Internacional sobre Diseño de Interacción y sistemas de software? Un Estudio Empírico. En IEEE 20th International Conference on
Niños, IDC '13, páginas 1–10, Nueva York, NY, EE. UU., 2013. ACM. Program Comprehension, Passau, Alemania, 11-13 de junio de 2012, ICPC'12, páginas
153–162. Sociedad de Informática IEEE, 2012.
'10, páginas 165–168, Nueva York, NY, humanos. Ingeniería de software empírica, páginas 1–32,
298
[27] AJ Ko, R. Abraham, L. Beckwith, A. Blackwell, M. Burnett, [39] CJ Rossbach, OS Hofmann y E. Witchel. ¿Es transac-
M. Erwig, C. Scaffi di, J. Lawrance, H. Lieberman, B. Myers, ¿La programación tradicional es realmente más fácil? SIGPLANot., 45 (5): 47–
MB Rosson, G. Rothermel, M. Shaw y S. Wiedenbeck. El estado del arte en 56, enero de 2010.
ingeniería de software para usuarios finales. Computación ACM. Surv., 43 (3): 21:
[40] H. Seo, C. Sadowski, S. Elbaum, E. Aftandilian y R. Bow-
1–21: 44, abril de 2011.
didge. Errores de compilación de los programadores: un caso de estudio (en google).
[28] J. Maloney, M. Resnick, N. Rusk, KA Peppler y YB En Actas de la 36a Conferencia Internacional de Ingeniería de Software, ICSE 2014,
Kafai. Diseños de medios con scratch: lo que los jóvenes urbanos pueden aprender páginas 724–734, Nueva York, NY, EE. UU., 2014. ACM.
sobre programación en un club de computadoras. En Actas de la Octava Conferencia
Internacional sobre la Conferencia Internacional para las Ciencias del Aprendizaje -
[41] C. Souza y E. Figueiredo. ¿Cómo utilizan los programadores
Volumen 3, ICLS'08, páginas 81–82. Sociedad Internacional de Ciencias del
tipificación nacional ?: Un estudio empírico. En Actas de la XIII Conferencia
Aprendizaje,
2008.
Internacional sobre Modularidad, MODULARITY '14, páginas 109–120, Nueva
York, NY, EE. UU., 2014. ACM.
[29] J. Maloney, M. Resnick, N. Rusk, B. Silverman y E. East-
mond. El entorno y el lenguaje de programación scratch. [42] S. Spiza y S. Hanenberg. Nombres de tipo sin tipo estático
Trans. Computación. Educ., 10 (4): 16: 1–16: 15, noviembre de 2010. comprobar ya mejorar la usabilidad de las apis (siempre que los nombres de los
tipos sean correctos): un estudio empírico. En 13th International Conference on
[30] S. Markstrum. Reclamos de juego: una historia de programación
Modularity, MODULARITY '14, Lugano, Suiza, 22-26 de abril de 2014, páginas
Afirmaciones y evidencia de diseño de lenguaje: un trabajo posicional en progreso. En Evaluación
99–108. ACM,
y usabilidad de lenguajes y herramientas de programación, PLATEAU '10, páginas 7:
2014.
1–7: 5, Nueva York, NY, EE.UU., 2010. ACM.
Un estudio empírico de la influencia de los sistemas de tipo estático en la factores humanos en el diseño del lenguaje? un estudio empírico sobre talleres de
usabilidad del software indocumentado. En Actas de la 27a Conferencia Anual ACM lenguaje de programación. En Actas de la 20a Conferencia Internacional de
SIGPLAN sobre Programación Orientada a Objetos, Sistemas, Lenguajes y Comprensión de Programas del IEEE 2014, ICPC '14, páginas 223–231. Sociedad
Aplicaciones, Tucson, AZ, EE. UU., 21 al 25 de octubre de 2012, OOPSLA'12, de Informática IEEE, 2014.
18 de octubre de 2013.
[45] F. Steimann. El paradójico éxito de la producción orientada a aspectos
[33] M. Naftalin y P. Wadler. Genéricos y colecciones de Java - gramática. En OOPSLA '06: Actas de la 21a conferencia anual ACM SIGPLAN
acelerar el proceso de desarrollo de Java. O'Reilly, 2006. sobre sistemas de programación orientada a objetos, lenguajes y
[34] C. Parnin, C. Bird y ER Murphy-Hill. Genéricos de Java aplicaciones, páginas 481–497, Nueva York, NY, 2006. ACM Press.
Adopción: cómo se introducen, promocionan o ignoran las nuevas funciones. En Actas
de la 8va Conferencia de Trabajo Internacional sobre Repositorios de Software de
[46] M. Steinberg. ¿Cuál es el impacto de los sistemas de tipo estático?
Minería, MSR 2011 (Colocado con ICSE), Waikiki, Honolulu, HI, EE. UU., 21-28
en tareas de mantenimiento? Un estudio empírico de las diferencias en el tiempo de
de mayo,
depuración utilizando lenguajes tipados estática y dinámicamente. Tesis de maestría,
2011, Actas, páginas 3–12. IEEE, 2011.
Instituto de Informática y Sistemas de Información Empresarial, Universidad de
[35] C. Parnin, C. Bird y ER Murphy-Hill. Adopción Duisburg-Essen, enero de 2011.
y uso de genéricos java. Ingeniería de software empírica,
18 (6): 1047–1089, 2013.
[47] M. Steinberg y S. Hanenberg. ¿Cuál es el impacto de la estática
[36] R. Pausch. Alice: La pasión de un moribundo. En SIGCSE '08: Pro-
sistemas de tipo en la depuración de errores de tipo y errores semánticos? Un estudio
finales del 39 ° Simposio Técnico SIGCSE sobre Educación en Ciencias de la
empírico de las diferencias en el tiempo de depuración utilizando lenguajes tipados
Computación, páginas 1–1, Nueva York, NY, 2008. ACM.
estática y dinámicamente. inédito.
299