A menudo he visto personas peleándose por que su idioma favorito es más "poderoso" que otros. Cuando se trata de describir un lenguaje de programación, puedo entender qué es un lenguaje orientado a objetos o qué es un lenguaje dinámico, pero aún no puedo entender qué es exactamente un lenguaje "poderoso". ¿Cuáles son tus pensamientos?
programming-languages
artesano
fuente
fuente
Respuestas:
No podemos definir qué es un lenguaje "poderoso" sin definir primero la palabra "poderoso".
La definición literal de potencia sería "potencia", y creo que todos podemos estar de acuerdo en que la gran mayoría de los compiladores, e incluso muchos intérpretes que no están completos en Turing, hacen un trabajo igualmente bueno para que el procesador ejecute sus instrucciones. . En cuanto a la definición literal, la respuesta a la pregunta sería "casi cualquier idioma".
Prácticamente, realmente deberíamos parar allí; definir un "lenguaje poderoso" es un poco como definir una "buena persona" o un "producto de calidad". No hay absolutamente ninguna definición objetiva de estas palabras que pueda hacer que todos, o incluso la mayoría de los expertos, estén de acuerdo, y la mayoría de las definiciones simplemente terminan planteando la pregunta . Dependiendo de con quién hable, el poder podría ser cualquiera de los siguientes:
¿Todos ven lo que está pasando aquí? Prácticamente cada característica de viñeta puede interpretarse como un signo de "poder", ¡ y también puede ser exactamente lo contrario!
Alguien, en algún lugar, obviamente pensó que las variables variables eran una idea asombrosa que haría que el lenguaje fuera muy poderoso . No voy a juzgar; No soy un chico PHP.
Propongo que en lugar de todas estas tonterías de la guerra santa, todos usemos esta Definición Realmente Simple:
El lenguaje más poderoso es el que le permite enviar el producto de mayor calidad al menor costo en el menor tiempo posible.
¿Vago? Puedes apostar. Es por eso que cualquiera que quiera llamarse a sí mismo profesional debe comprender tanto los conceptos de programación como el dominio del proyecto. Esa es la única forma en que podrá decidir qué es "poderoso" para usted.
De lo contrario, podrías llevar un cuchillo realmente grande a una pelea de armas.
fuente
Tal vez soy parcial porque soy un programador de sistemas. Creo que un lenguaje de programación utilizado para toda la programación de kernel, sistema, servidor y aplicaciones, o que admite múltiples paradigmas de programación, o ambos, puede llamarse "poderoso".
C, C ++, D son poderosos, pero obviamente esta es solo mi humilde opinión.
fuente
Hay algunas definiciones de poder más allá de la integridad de Turing. Mark ha citado lo que tiendo a pensar como "la definición de Paul Graham". Es una definición bastante buena, con un defecto grave: está mal. Teóricamente es una muy buena definición del poder del lenguaje, pero ya sabes lo que dicen sobre la diferencia entre teoría y práctica ...
Si todos fueran capaces de escribir código perfecto, no solo perfectamente libre de errores, sino también a prueba de futuro, de manera consistente, entonces la definición de Paul Graham sería correcta. Pero ese obviamente no es el caso. En el mundo real, la mayor parte del tiempo y el esfuerzo que se dedica a la ingeniería de software no se dedica a la creación inicial del producto, sino al mantenimiento posterior. Dependiendo de las estadísticas que escuche (y probablemente varía bastante de un proyecto a otro), el mantenimiento puede representar entre el 60% y el 90% del esfuerzo total que se dedica a un programa.
El mantenimiento a menudo es realizado por personas distintas a la persona que escribió el código inicialmente, y con frecuencia meses o incluso años después de la escritura inicial del código, lo que significa que incluso para el codificador original también podría ser "código de otras personas". punto. Si desea ser productivo durante el mantenimiento, debe poder determinar rápidamente la intención original del código al leerlo.
Por lo tanto, un lenguaje más potente es aquel que hace que el código sea más fácil de leer rápidamente, no uno que hace que el código sea más fácil de escribir rápidamente. Suele haber una buena cantidad de superposición entre los dos, pero los conceptos a menudo también tienen propósitos cruzados, ya que la sintaxis breve a menudo omite detalles que un compilador / intérprete puede inferir mucho más fácilmente que un programador de mantenimiento.
EDITAR: Hay otro punto importante en la descripción del poder de un lenguaje: la gama de conceptos que puede expresar y la facilidad con la que puede alcanzar ambos extremos. A Paul Graham le gusta evaluar este nivel de nivel de abstracción que puede alcanzar, pero eso es solo la mitad. Cualquier lenguaje que imponga un límite inferior de abstracción, por debajo del cual no se puede ir cuando sea necesario, está paralizado porque los detalles que se están abstrayendo están allí por una razón. Esta es la diferencia entre un lenguaje de juguete fácil de leer como COBOL y un lenguaje poderoso y fácil de leer: COBOL no tiene punteros ni acceso al ensamblaje en línea, donde puede expresar cualquier cálculo, incluso aquellos para los que COBOL no es adecuado.
COBOL tampoco es particularmente bueno para alcanzar el extremo superior del espectro de abstracción. Según Wikipedia, "no tiene tipos definidos por el usuario ni funciones definidas por el usuario", lo que hace que sea muy difícil crear algoritmos y estructuras de datos.
fuente
Esto se ha debatido repetidamente en gran medida (por ejemplo, en comp.lang.lisp, varias veces). No creo que a nadie se le ocurra una respuesta "correcta", pero mucha gente ha encontrado respuestas que me parecen obviamente erróneas.
En las respuestas que veo aquí, permítanme elegir la respuesta de Mason Wheeler. Por un lado, los temas que cubre son importantes, pero por otro lado, no puedo imaginar llamarlos relacionados con el "poder". Es un poco como si dijera que su mini furgoneta Honda es más poderosa que una dragster de combustible superior porque es más segura, más silenciosa, tiene un mejor manejo, más espacio para pasajeros y una conducción mucho más cómoda. Todo esto es absolutamente cierto, y todo es importante. Esos factores (entre muchos otros) hacen que la minivan sea mucho más práctica y razonable para la mayoría de las personas, pero no cambian el hecho de que el motor de la minivan produce solo unos 250 HP, mientras que el del dragster produce alrededor de 8000 HP.
El problema, por supuesto, es que con los vehículos hay una definición clara de lo que constituye "potencia" y lo que no. Con los lenguajes de programación, me parece que la discusión termina siendo equivalente a tratar el manejo, la comodidad, la velocidad, la capacidad de carga y el rango de crucero como parte de la "potencia". El resultado tiende a ser hilos que se ejecutan sin fin, generando mucho más calor que luz. La mayoría de las preguntas que surgen básicamente se reducen al grado de importancia que le da a las características ortogonales y completamente ajenas, por ejemplo, la capacidad de programar la MMU en lenguaje ensamblador es más o menos "poderosa" que la capacidad de crear funciones de nivel superior en Haskell? Al menos en mi opinión, no hay una manera significativa de comparar los dos, y no hay una respuesta significativa a la cual es "
Como tal, por mucho que odio, tengo que decir que en este caso, la única respuesta significativa es básicamente una relativista: un lenguaje poderoso es el que encuentras que te ayuda a lograr lo que quieres. Las diferencias en los objetivos de las personas hacen que la mayoría de las mediciones "absolutas" del poder no tengan sentido en el mejor de los casos.
fuente
El equilibrio adecuado entre brevedad y flexibilidad.
Gran pregunta Dado que muchos idiomas son "completos de Turing", podemos ponerlos a todos en igualdad de condiciones con respecto a lo que son teóricamente capaces de hacer. Pero no hacemos eso porque los idiomas obviamente difieren entre sí. ¿Y cual es la diferencia?
La diferencia es la capacidad de decir muchas cosas diferentes con muy poco . Si pudiéramos saltar directamente a los extremos, podría crear un lenguaje que sea el mejor lenguaje para inicializar automáticamente un sistema de administración de contenido utilizando solo un carácter, 'c'. Pero, ¿cuál sería el punto de eso? Claro, es poderoso en un sentido de ser muy breve, pero no es flexible. Lo que quieres es un lenguaje que te permita decir muchas cosas complejas diferentes sin ser demasiado detallado. Sin ser como un ensamblaje, capaz de todo bajo el sol, infinitamente flexible pero extremadamente detallado.
Un lenguaje poderoso es un lenguaje que le permite decir muchas cosas diferentes con la menor cantidad de longitud posible.
fuente
Una vez que llegas a Turing completo (y es fácil para un idioma hacer esto), "poder" no significa mucho, en el sentido de que todo lo que puedes decir en un idioma completo de Turing lo puedes decir en otro. La respuesta de Mark Canlas lo clava: la brevedad y la flexibilidad hacen la diferencia.
Dicho esto, el artículo de Matthias Felleisen sobre el poder expresivo de los lenguajes de programación constituye una lectura interesante. En él intenta formalizar la noción de expresividad en los idiomas.
fuente
Parece haber un gran desacuerdo sobre lo que constituye el poder lingüístico. ¿Es brevedad, legibilidad, adaptabilidad o simplemente la integridad de Turing? Creo que todos estos factores entran en juego, por lo que quizás la mejor manera de verlo es en términos de estadísticas. Sí, estoy hablando de RPG de lápiz y papel, aquí.
La idea es que cada idioma tenga (aproximadamente) el mismo número de "puntos", que se pueden distribuir arbitrariamente en varias categorías. Para fines de discusión, digamos que los únicos factores son brevedad, legibilidad y flexibilidad. Un lenguaje puede ser extremadamente conciso y flexible, pero en consecuencia muy difícil de leer; o muy legible y flexible, pero extremadamente detallado.
(Podría decirse que la cantidad de puntos que un idioma tiene que distribuir está definida por la habilidad del diseñador e implementador, pero supongamos que todos los diseñadores de idiomas son igualmente buenos en lo que hacen).
Cuando un diseñador de idiomas decide aumentar la fuerza de un idioma en una categoría, lógicamente le quita una fracción de esa fuerza potencial a todas las demás categorías. Es por eso que a menudo se dice que el diseño del lenguaje de programación se trata de compensaciones. Desde este punto de vista, el poder general de un idioma aún no es definible, y tenemos que volver al método probado y verdadero de categorizar idiomas en función de sus fortalezas relativas. ¿No es satisfactorio? Demasiado.
Puede argumentar de dos maneras: que un lenguaje poderoso es uno con una distribución relativamente uniforme de puntos (jack of all trades, master of none), o con tantos puntos como sea posible en un área sin dejar a otros desatendidos (especialista). No existe el lenguaje del "hombre renacentista", con dominio perfecto en numerosos campos. Y si esa es su definición del lenguaje más poderoso posible, entonces simplemente no tiene suerte.
Para leer más, este artículo (por coincidencia también de Paul Graham, que parece tener opiniones encontradas) toca la idea de que, aunque sea difícil determinar cómo , los lenguajes de programación varían en potencia. Él argumenta de manera bastante persuasiva que es muy fácil ver cómo un lenguaje es menos poderoso que el preferido (le falta la característica X), pero es muy difícil ver cómo un lenguaje realmente más poderoso es, de hecho, es básicamente equivalente al lenguaje X, pero con un montón de otras cosas arrojadas. Te dejo con una cita de ese periódico:
fuente
Los lenguajes de programación son herramientas, nada más y nada menos. Algunas herramientas son extremadamente especializadas y adecuadas para fines particulares; otros se generalizan y simplifican hasta el punto de casi inutilidad.
Yo diría que el lenguaje más "poderoso" es el que le permite alcanzar sus objetivos con una inversión mínima de tiempo, energía y otras investigaciones; es decir, el lenguaje que proporciona el mayor ROI. En algunas situaciones podría ser C; en otros, Java; en otros más, Haskell.
Lo mejor sería familiarizarse con una amplia variedad de idiomas y para qué son útiles. Luego, cuando llegue el momento de comenzar un nuevo proyecto, puede tomar una decisión informada sobre cuál sería el más apropiado.
fuente
Las discusiones sobre lenguajes de programación son, en mi humilde opinión, como discusiones sobre clientes de correo en algunos grupos de noticias de Linux: tienden a ser una guerra de llamas. Puedo recordar momentos en que VB6 era popular. Incluso hubo personas que argumentaron que no es un lenguaje de programación en absoluto, mientras que otros crearon aplicaciones sorprendentes con él.
Creo que los lenguajes de programación ya difieren en el concepto ya que los creadores tenían diferentes cosas en mente cuando crearon / diseñaron el lenguaje. Entonces, un lenguaje que se ajusta a un propósito, y bajo esa circunstancia es poderoso, podría no encajar en otro. Nombrar el lenguaje poderoso o no es entonces puramente subjetivo. Dicho esto, no creo que haya una métrica que pueda aplicarse.
fuente
Todas son herramientas en su caja de herramientas. Un martillo puede ser poderoso, pero no si necesita una llave inglesa. C / C ++ es excelente si usted es un programador de sistemas, pero Adobe Flash probablemente sea mejor para el sitio web de juegos que desea crear.
fuente
El lenguaje de programación más poderoso es el que resuelve el siguiente problema de programación lineal :
Maximizar
Rapidez de desarrollo
+ Facilidad de lectura de código
+ Facilidad de depuración
+ Sucisión / brevedad de expresión
+ Facilidad de aprendizaje / enseñanza
- Uso de CPU
- Requisitos de memoria
Sujeto a
(Y sí, lo sé, ya publiqué una respuesta completamente contradictoria. Eso es porque soy dialectiana).
fuente
Esto fue escrito con respecto a los lenguajes naturales, pero creo que también es apropiado para los lenguajes de programación:
El "poder" simplemente no es atribuible a un idioma sobre otro. Sería una tontería decir que "el chino es un idioma más poderoso que el coreano". Del mismo modo, es una tontería decir "APL es un lenguaje más poderoso que COBOL".
Ha habido varios intentos de equiparar el poder lingüístico con alguna medida objetiva. Creo que estos intentos fallan:
Mi opinión es que las discusiones sobre "el poder de un idioma sobre otro" son expresiones veladas de los sentimientos de superioridad del hablante sobre algún otro grupo. En resumen, sus prejuicios y estereotipos. Por supuesto, las personas con prejuicios realmente, realmente creen en sus estereotipos con bastante fuerza, y es poco probable que pueda persuadirlos a cambiar de opinión.
fuente