¿Cuál es el lenguaje de programación más difícil de aprender y por qué?

Follar

Este idioma es difícil como sugiere su nombre. Brainfuck fue inventado por Urban Müller en 1993, en un intento de crear un lenguaje para el que pudiera escribir el compilador más pequeño posible para el sistema operativo Amiga, versión 2.0.

Brainfuck opera en una matriz de celdas de memoria, también conocida como la cinta, cada una inicialmente puesta a cero. Solo hay 8 comandos en el idioma.

Los 8 comandos son ><+-.,[]

Un simple código ‘Hola mundo’ se ve así

Referencia

VACA

Sí. Vaca como en vaca con cuatro patas. El lenguaje de programación COW fue diseñado teniendo en cuenta a los bovinos. Dado que las vacas tienen habilidades de vocabulario limitadas, parecía natural incorporar solo las palabras que saben en el idioma. Como resultado, todas las instrucciones son una variación de “moo”, que resulta ser la única palabra que realmente entienden.

Cualquier otra palabra o símbolo que no sea una instrucción se ignora por completo. Por lo tanto, los espacios pueden ser utilizados o no. Las líneas nuevas se pueden utilizar o no. Tienes la idea Hace que comentar los programas de COW sea bastante fácil, siempre y cuando no uses ninguna palabra que tenga una instrucción incrustada.

Referencia

INTERCAL

El lenguaje del compilador sin acrónimo pronunciable, abreviado INTERCAL. Expresiones que parecen líneas de ruido. Controla las construcciones que te harán jadear, te harán reír y posiblemente te harán lanzar.

INTERCAL tiene muchas otras características diseñadas para hacerlo aún más estéticamente desagradable para el programador: usa declaraciones como “READ OUT”, “IGNORE”, “FORGET” y modificadores como “POR FAVOR”. Esta última palabra clave proporciona dos razones para el rechazo del programa por parte del compilador: si “POR FAVOR” no aparece con la frecuencia suficiente, el programa se considera insuficientemente educado y el mensaje de error dice esto; si con demasiada frecuencia, el programa podría ser rechazado por excesivamente educado.

Referencia

Espacio en blanco

Fue lanzado el 1 de abril de 2003, la mayoría de la gente pensó que era una broma de April Fool, pero no lo fue. Como puede adivinar, en el lenguaje de espacios en blanco, solo los espacios, las pestañas y los saltos de línea tienen significado. El intérprete de espacios en blanco ignora los caracteres que no sean espacios en blanco. Una consecuencia interesante de esta propiedad es que un programa de espacio en blanco se puede contener fácilmente dentro de los caracteres de espacio en blanco de un programa escrito en otro idioma.

Referencia

Cocinero

Chef es un lenguaje basado en pila donde los programas parecen recetas de cocina.

De acuerdo con la página de inicio de Chef, los principios de diseño para Chef son:

  • Las recetas del programa no solo deben generar un resultado válido, sino que deben ser fáciles de preparar y deliciosas.
  • Las recetas pueden ser de interés para cocineros con diferentes presupuestos.
  • Las recetas serán métricas, pero pueden usar medidas de cocción tradicionales como tazas y cucharadas.

Hola mundo se ve así!

Referencia1 y Referencia2

(La pregunta original que respondí es: “¿Cuál es el lenguaje de programación más difícil que conoces?”, Que es ligeramente diferente de lo que se ha fusionado).

Voy a excluir lenguajes de broma como INTERCAL y Unlambda. Claro, son duros, pero son deliberadamente obtusos. Nadie va a elegir seriamente esos para algún proyecto.

El lenguaje más duro que conozco, en el que he intentado escribir software serio, es …

BASIC.

Sí, bueno de Microsoft 8 bits BÁSICO.

Pero espera, su nombre sugiere que no debería ser difícil! Es el código de instrucción simbólico de uso múltiple para principiantes.

Claro, si todo lo que quieres hacer es …

10 ENTRADA “¿Cuál es tu nombre?”; A $
20 IMPRIMIR “Hola”; A $; “, ¿cómo estás?”

…no es tan malo. En segundos puedes obtener algo en la pantalla. ¡Genial! Mira ma, yo puedo programar!

Pero ahora trata de hacer algo serio. Es horrible. Es como intentar fusionarse en la autopista mientras conduces uno de estos:

(Imagen cortesía de Little Tikes.)

¿Por qué es difícil?

Hay cero alcance. Todas las variables son variables globales. En las versiones anteriores de BASIC, las variables están limitadas a 2 caracteres. Entonces, son globales y tienen nombres oscuros como X3 y AZ$ .

El sistema de tipos se limitaba principalmente a seleccionar entre número y cadena. Esto es antes de llegar a las versiones posteriores de BASICA / GW-BASIC o QuickBASIC, que agregaron tipos flotantes de enteros, enteros largos y doble precisión. Estoy hablando más a lo largo de las líneas de Applesoft, Commodore BASIC 4.0 (o V2 en el C64) y TRS-80 CoCo2 BASIC. Pero seamos realistas, incluso si permites esas extensiones, ¿está diciendo que I% , L& , y G# realmente son un paso adelante?

La única estructura de datos es una variable con tensión DIM (también conocida como una matriz). No hay punteros, ni listas enlazadas, ninguna struct (o record ), nada. Las matrices pueden tener múltiples dimensiones, por lo que ayuda. Sin embargo, en los BASIC más antiguos, el producto de todas las dimensiones tenía que ser 256 o menos. Y tenga cuidado: DIM A(10) le ofrece una matriz con 11 elementos, A(0) través de A(10) .

Podría construir subrutinas con GOSUB , pero no hay forma de pasar argumentos de una manera estructurada. Recuerda, no hay alcance, y todo es global. ¿Por qué necesitas argumentos? * eyeroll *

IF declaraciones IFTHENELSE tenían que estar todas en una línea. Si intentabas controlar bloques de código más grandes, necesitabas usar GOTO . Ya sabes, el código de espagueti primitivo?

Era tan común, que incorporaron el GOTO en las palabras clave THEN y ELSE :

130 IF FR 140 IMPRIMIR “Iniciando nuevo ciclo FROB”
150 FR = FR + 42
160 GOSUB 1000
170 GOSUB 1100
180 GOTO 200
190 IMPRIMIR “No más FROBs para GROK”.
200 GOSUB 2000

(Si crees que el código anterior es una broma, mira los programas en este libro. Separé el gráfico de flujo de control de uno de ellos en esta cadena de comentarios.)

Y finalmente, la documentación (declaraciones REM ) ralentiza su programa. Tiene un desincentivo activo para documentar adecuadamente su código. GOTO sentencias GOTO y GOSUB necesitan escanear una lista enlazada de líneas de programa para encontrar sus objetivos, por lo que incluso si nunca ejecuta las líneas que contienen las sentencias REM , la bifurcación sobre ellas aún cuesta ciclos.


Todas estas limitaciones hacen que sea excepcionalmente difícil escribir código bien estructurado. Cada una de estas limitaciones funciona activamente contra la estructuración correcta de su código. Debe ser diligente para mantener su código limpio, útil y reutilizable.

Ahora dale BASIC a un principiante que no ha aprendido a estructurar el código correctamente. No han visto un buen código, y ni siquiera saben que eso es una cosa todavía. Y, cada suave presión en el sistema los aleja del buen código.

Tienes caos.


Escribí toneladas de programas divertidos y de mierda en BASIC mientras crecía. Finalmente aprendí algunas técnicas para estructurarlos, por lo que no fueron del todo horribles. Por ejemplo, asignar nombres de variables a subrutinas antes de tiempo para que no entren en conflicto. Asignar nombres de variables a “argumentos” para poder llamar a las subrutinas de manera un tanto consistente. Pero, no creo que haya escalado más allá de unos pocos cientos de líneas de código. Un programa BASIC de 1000 líneas es gigantesco.

Tardé años en desprogramar los malos hábitos que BASIC fomentaba en mí. Ahora, cuando vuelvo y miro ese desastre, estoy horrorizado.

Y, no hay reparación de esos programas antes de reescribirlos a partir de una especificación de alto nivel. No mires el código, te contaminará.

Claro, alguien podría decir que C ++ es más difícil. Sin duda tiene más características esotéricas y puedes generar errores más espectaculares. Pero, considere si incluso sería posible llegar a dos órdenes de magnitud del problema que está resolviendo en C ++ con BASIC, especialmente los antiguos BASIC de 8 bits.

Alguien podría decir que la asamblea es más difícil. ¡El montaje no es nada difícil! Es tedioso y consume mucho tiempo. Sin embargo, si creas una biblioteca de tiempo de ejecución decente y un conjunto de macros, no está tan mal. Y, si solo está rociando un poco de ensamblaje en un programa más grande en un lenguaje de nivel superior, no está nada mal. (Ayuda que el 99.44% del tiempo puedas evitarlo por completo).

El código de la máquina es más difícil que el ensamblaje, pero solo porque te has atado las dos manos a la espalda y te has planteado un desafío de ortografía innecesario. Hay casi una correspondencia 1: 1 entre el código de la máquina y el ensamblaje, por lo que diría que no es realmente un lenguaje destinado a ser programado por humanos y está fuera del alcance. En estos días, los humanos codifican el lenguaje de máquina por la misma razón por la que codifican Brainf * ck, y por lo tanto obtiene el mismo nivel de consideración. Había razones muy reales para programar el lenguaje de máquina hace años. Ninguna de esas razones se aplica ahora. [EDIT: OK, puede que lo esté haciendo como parte de un trabajo de curso. Mi declaración se aplica fuera de eso.

La realidad es que BASIC tiene un techo muy bajo. Puedes comenzar con BASIC de manera muy sencilla, pero rápidamente alcanzas ese límite. Puedes romper ese techo con medidas heroicas. Un lenguaje de programación más capaz podría ser más lento para comenzar, pero tiene un techo mucho más alto.


Por cierto, nada de eso me impidió escribir un código QBASIC horrible para descargar los cartuchos Intellivision en una vieja computadora portátil Win98 con un dumper paralelo basado en un puerto.

Al menos podía usar nombres de variables un tanto decentes, y no había números de línea.

Bueno, personalmente no veo el lenguaje de programación como el más difícil. Solo tu actitud es lo que hace que las cosas sean más difíciles de entender.

Digamos, por ejemplo, que en su plan de estudios podría haber encontrado lenguaje de programación C o C ++. Cuando alguien te pide que programes y sabes que C, estás seguro de trabajar en ello. Pero si alguien te pide que hagas lo mismo en Python o Scala o Java o Ruby o cualquier otro lenguaje de programación, tienes miedo porque no lo sabes.

Solo trata de aprender a escribir un programa simple en cualquier idioma de vez en cuando, lo que te dará la ventaja y la confianza de que puedes hacerlo. Cuando llegas a esta actitud. nada es mas dificil Todo será un pedazo de pastel o cacahuetes para usted.

Espero que esto lo aconseje y alivie su miedo a los lenguajes de programación. Feliz codificación … 🙂

Creo que Brainfuck es el lenguaje de programación más difícil ya que no está hecho para el uso práctico, sino para desafiar y divertir a los programadores. Sólo tiene ocho comandos, cada uno consiste en un solo carácter.

  1. > incrementar el puntero de datos (para apuntar a la siguiente celda a la derecha).
  2. < disminuir el puntero de datos (para apuntar a la siguiente celda a la izquierda).
  3. + incrementar (aumentar en uno) el byte en el puntero de datos.
  4. - decrementa (disminuye en uno) el byte en el puntero de datos.
  5. . la salida del byte en el puntero de datos. , acepte un byte de entrada, almacenando su valor en el byte en el puntero de datos.
  6. [ Si el byte en el puntero de datos es cero, en lugar de mover el puntero de la instrucción hacia adelante al siguiente comando, salte al comando después del comando correspondiente ] .
  7. ] si el byte en el puntero de datos es distinto de cero, entonces, en lugar de mover el puntero de instrucción al siguiente comando, salte al comando después del comando [ correspondiente .

A continuación se muestra el programa hello wold que contiene comentarios para explicarlo.

-, + [Leer el primer carácter e iniciar el bucle de lectura del carácter externo
- [Saltar hacia adelante si el carácter es 0
>> ++++ [> ++++++++ <-] Configure el divisor (32) para el bucle de división
(DISEÑO DE LA MEMORIA: cociente del divisor del resto de la copia del dividendo cero cero)
<+ <- [Configurar dividendo (x menos 1) e ingresar al bucle de división
> +> +> - [>>>] Aumentar copia y resto / reducir divisor / Caso normal: saltar adelante
<[[> + <-] >> +>] Caso especial: mover el resto de nuevo al divisor y aumentar el cociente
<<<<< - Dividir el dividendo
] Final de bucle de división
] >>> [-] + Fin del bucle de salto; Cero divisor anterior y reutilizar el espacio para una bandera
> - [- [<-> +++ [-]]] <[Cero esa bandera a menos que el cociente sea 2 o 3; cociente cero; bandera de control
++++++++++++ <[Si marca, configure el divisor (13) para el bucle de segunda división
(DISEÑO DE LA MEMORIA: cociente cero del resto del divisor del dividendo de la copia cero cero)
> - [> + >>] Reducir divisor; Caso normal: aumentar el resto
> [+ [<+> -]> + >>] Caso especial: aumentar el resto / moverlo de nuevo a divisor / aumentar el cociente
<<<<< - Disminuir el dividendo
] Final de bucle de división
>> [<+> -] Agregue el resto al divisor para obtener un 13 útil
> [Saltar hacia adelante si el cociente era 0
- [Disminuye el cociente y salta hacia adelante si el cociente era 1
- << [-] >> Cero cociente y divisor si el cociente fuera 2
] << [<<->> -] >> Cero divisor y restar 13 de la copia si el cociente era 1
] << [<< + >> -] divisor cero y agregar 13 a la copia si el cociente era 0
] Finalizar el bucle de salto externo (saltar a aquí si ((carácter menos 1) / 32) no era 2 o 3)
<[-] Borrar el resto de la primera división si se saltó la segunda división
<. [-] Genere el carácter ROT13ed de la copia y bórrelo
<-, + Leer el siguiente caracter
] Final del ciclo de lectura de caracteres.

Fuente: Wikipedia.org

Un estudio llamado, La historia de los lenguajes de programación [1], sitúa el número de lenguajes en aproximadamente 8512. Eso fue en 2007. Hoy en día, ese número probablemente supera los 10.000. La razón que es relevante para la pregunta es que hay tres formas de responderla.


Primero, podemos ver si hay un proceso de prueba independiente para determinar cuál es el lenguaje más difícil de aprender. En este caso, necesita un proceso en el que pueda probar de forma independiente más de 10.000 lenguajes de programación. Surgirán preguntas como cuáles son los criterios de dificultad? ¿Quién realizará la prueba? ¿Cómo incorporarás nuevos lenguajes de programación que emergen cada año?

Como puede ver, es difícil encontrar un método independiente e imparcial para saber qué idioma es el más difícil de aprender.


Otro enfoque implica la experiencia personal. En lugar de centrarse en más de 10.000 lenguajes de programación, puede concentrarse solo en el 2, 3 o, en algunos casos, en 15 lenguajes de programación diferentes que pueda conocer. Conocer menos de 4 lenguajes de programación metodológicamente diversos puede facilitar el aprendizaje de otros 10 lenguajes de programación. Reconocer ciertos lenguajes como difíciles puede ser en sí mismo una perspectiva difícil, ya que algunos aspectos del aprendizaje de los lenguajes de programación mejoran cuanto más aprendes. Muchas de las respuestas que ha recibido a esta pregunta pueden ser una expresión de este fenómeno.


Un tercer enfoque es simplemente referirse a la sabiduría común sobre qué idiomas son difíciles. Algunos idiomas a lo largo de las décadas han aparecido en esa lista. Hace años, acepté tales pronunciamientos de otros solo para descubrir más tarde que no había mucho ruido por nada. Nuevamente, puede haber validez para las vistas comunes en ciertos lenguajes de programación convencionales. O, simplemente puede reflejar problemas no relacionados con la sintaxis del lenguaje y la convención. Nunca se puede saber la base de las opiniones agregadas sobre cosas que, por definición, rara vez se miden con respecto a una línea de base establecida para la dificultad.


En general, la pregunta a menudo será respondida con una opinión. Como tal especulación, puede acumular una lista de opiniones, pero puede o no generar una visión verdaderamente útil para mejorar la comprensión práctica de los lenguajes de programación convencionales. Dado este tema en particular, no hay manera de que realmente puedas saberlo.


[1] HOPL: una lista interactiva de lenguajes de programación. El enlace de la fuente está en http://hopl.murdoch.edu.au .

¿Has oído hablar de Brainf … nvm. (¿Por qué las personas no leen las respuestas? ¿Por qué hago esta pregunta cuando sé que no importa?)

Voy a añadir algunos conceptos:

  1. El lenguaje más difícil es ese lenguaje con la mayor brecha de conocimiento, que generalmente es una hoja de cálculo. Si bien no trabajé en hojas de cálculo para mi investigación de doctorado, conozco a personas que sí lo hicieron. La cantidad de personas que escriben / mantienen hojas de cálculo, y qué parte del mundo se ejecuta en las hojas de cálculo, es alucinante, y, por supuesto, pocas de estas personas tienen alguna educación en ingeniería de software (ver EUSES para obtener más información), y las hojas de cálculo son muy Difícil de probar.
  2. El lenguaje más difícil es el lenguaje con alta frecuencia de defectos. Mucha gente olvidó que uno de los propósitos clave de Java era reducir defectos (errores). Hace aproximadamente 15 años, hasta bien entrado la era de Java, se realizó un estudio y se encontró que C ++ tenía una frecuencia de defectos mucho más alta que otros idiomas estudiados. No fue un estudio perfecto en parte porque estaba basado en el análisis estático, y en parte porque hay muchas maneras de arruinar el C ++. Hubo una broma de que en una Entrevista sobre C ++, Stroustrup admitió que él creó a C ++ para que fuera intencionalmente difícil aumentar los salarios de los programadores (algo que algunas personas tomaron en serio).
  3. Los idiomas más difíciles son aquellos para los que existen concursos de programas confusos. El concurso Perl ofuscado duró poco pero fue maravilloso; Aquí está el programa de Perl ofuscado de entrada de Mark-Jason Dominus 2000. El más famoso es The International Obfuscated C Code Contest (que explica de qué se trata un concurso de código ofuscado), y mi entrada favorita es http://www.ioccc.org/1988/westley.c , que calcula pi basada en una Círculo aproximado realizado en ASCII.

Para mí, en términos prácticos, el lenguaje más difícil de aprender es C. No es un lenguaje cegadoramente difícil desde la perspectiva de la sintaxis, y el libro The C Programming Language me ayudó a convertirme en un mejor programador en general, pero el propósito de C (en Su creación y en su uso actual son dos de las piezas de software más complejas: sistemas operativos y compiladores. Los compiladores siguen una lógica muy complicada basada en las características del lenguaje, pero hay una lógica subyacente. Sin embargo, los sistemas operativos … no es que ningún concepto sea particularmente desafiante, sino construir una pieza de software tan complicada en un lenguaje de procedimiento … me desconcierta, pero hay buenas razones por las que se usa C, la más importante de las cuales es que El sistema operativo UNIX y el lenguaje de programación C fueron diseñados y construidos juntos . Ambos eran enfoques bastante radicales en ese momento, y no hay un lenguaje híbrido equivalente de bajo nivel / alto nivel. La gente habla sobre el desafío de los idiomas fuera del paradigma imperativo (a menudo se menciona a Lisp y Haskell), y debo admitir que soy parcial en este sentido (he enseñado y utilizado lenguajes funcionales), pero incluso un paradigma múltiple. el lenguaje como Scala no es rival en complejidad para un lenguaje que está diseñado para servir como base para un compilador de arranque y un sistema operativo al mismo tiempo. Es como tomar un Ferrari y atar un arado de nieve gigante en la parte delantera y hacer que funcione bien en ambas tareas . En pocas palabras, no entiendes C hasta que entiendes los compiladores y los sistemas operativos, lo que hace que el manejo de la memoria de aprendizaje en C ++ parezca un ejercicio trivial en comparación.

El lenguaje más difícil de aprender para mí fue … Java . Probablemente estés como: “¡WTF Java fue el primer idioma que aprendí! Fue tan fácil, bla bla ”

Vengo de un fondo de programación productiva. Eso significa que todo es muy simple, organizado y fácil de seguir. No hay clases, ni herencia, ni clases abstractas. Solo hay código, y solo código. No hay abstracción ni nada. Me gusta el código que es fácil de leer, fácil de seguir y fácil de navegar. A diferencia de la programación orientada a objetos.

Aprendí bien el lenguaje Java, pero no tenía ni idea de qué se trataba esta ness “orientada a objetos”. Todo lo que sabía era que hacía el código más lento y que también era bueno para los académicos. Hubo algunas partes, como interfaces y anotaciones, que me resultaron confusas, pero dije: “Siempre habrá características de un lenguaje que no usas”.

Siempre me burlaba y decía ” Hmph. ¿Por qué necesitas aprender programación orientada a objetos? Es solo otra capa de complejidad

Revirtí mis pensamientos cuando un proyecto Java excedió las 600,000 líneas y las partes comenzaron a fallar debido a su gran tamaño y al código de pegado de copias.

Java es un lenguaje difícil de aprender si no se toma el tiempo para aprender el ecosistema y el diseño del lenguaje.

Fuente: Lenguajes de programación más difíciles de aprender | R Bhave

Programar es el arte de desarrollar nuestra lógica y mejorar nuestro conocimiento para hacer algo hermoso. Puede que te hayas preguntado que la programación es aburrida a veces, especialmente cuando recibes muchos errores . Puede que le resulte interesante cuando lo inicie o trabaje con él. Pero, en este mundo que cambia rápidamente, nada es imposible. En los últimos años vimos el surgimiento de nuevos lenguajes de programación emergentes como Python & Ruby. Pero, ¿conoces algunos de los lenguajes de programación más difíciles que existen y no lo sabías? Bueno, ese es el trabajo de CSTechFans para brindarte contenido único.

Los lenguajes de programación más difíciles de aprender.

Leer completo: Los lenguajes de programación más difíciles de aprender | R Bhave

Espacio en blanco: el lenguaje de programación más difícil

Fuente: Lenguajes de programación más difíciles de aprender | R Bhave

Whitespace es desarrollado por Edwin Brady y Chris Morris. Y fue lanzado el 1 de abril de 2003 ( April Fool’s Day ). Como su nombre indica, “espacios en blanco” o “” son caracteres importantes de este idioma. Una cosa más única de Whitespace es que ignora cualquier carácter que no sea un espacio en blanco. Sólo los espacios, las pestañas y los saltos de línea tienen significado.

Programa “Hola, Mundo” de los espacios en blanco

¿Qué idioma? ¡Guauu! Espera, esto es sólo un remolque.

Malbolge: el lenguaje confuso

Malbolge fue desarrollado por Ben Olmstead en 1998. Malbolge fue diseñado de tal manera que es imposible de usar, a través de una ‘operación loca’ contraintuitiva, aritmética de base tres y código auto-alterante. Se basa en la dificultad del lenguaje BrainFuck & Befunge.

“Hola, Mundo” Programa de Malbolge

(= <`# 9] ~ 6ZY32Vx / 4Rs + 0No- & Jk)" Fh} | Bcy? `= * Z] Kw% oG4UUS0 / @ - ejc (: '8dc

Más: Lenguajes de programación más difíciles de aprender | R Bhave

Intercal (idioma de Complier sin acrónimo pronunciable)

Intercal fue creado por Don Woods y James M. Lyon, dos estudiantes de la Universidad de Princeton en 1972. Hay dos versiones actualizadas de INTERCAL: C-INTERCAL y CLC-INTERCAL.

Programa Intercal “Hola, Mundo”

DO, 1 <- # 13
POR FAVOR HAGA, 1 SUB # 1 <- # 238
DO, 1 SUB # 2 <- # 108
DO, 1 SUB # 3 <- # 112
DO, 1 SUB # 4 <- # 0
DO, 1 SUB # 5 <- # 64
DO, 1 SUB # 6 <- # 194
DO, 1 SUB # 7 <- # 48
POR FAVOR HAGA, 1 SUB # 8 <- # 22
DO, 1 SUB # 9 <- # 248
DO, 1 SUB # 10 <- # 168
DO, 1 SUB # 11 <- # 24
DO, 1 SUB # 12 <- # 16
DO, 1 SUB # 13 <- # 162
Por favor lee, 1
Por favor renunciar

Vaca: lenguaje de programación moO

Leer a continuación: Los lenguajes de programación más difíciles de aprender | R Bhave

Bienvenido al mundo de la programación infernal: – El lenguaje de programación esotérico s .

Estos lenguajes están diseñados para probar los límites del diseño del lenguaje de programación de computadoras o se pueden usar como una interfaz de pirateo para otro idioma.

Uno de esos lenguajes es Malbolge .

Así que vamos a ver qué hay en el código …

(= <`# 9] ~ 6ZY32Vx / 4Rs + 0No- & Jk)" Fh} | Bcy? `= * Z] Kw% oG4UUS0 / @ - ejc (: '8dc

Este código imprime la cadena “Hello World!” (Incluido el signo de exclamación y sin comillas dobles)

Aquí está el siguiente código …

(aBA @?> = <;: 9876543210 /.-, JH) ('&% $ # "! ~} | {zy \ J6utsrq
ponmlkjihgJ% dcba` _ ^] \ [ZYXWVUTSRQPONMLKJIHGF (‘C% $$ ^
K ~ <; 4987654321a /.- ,\*)
j
! ~% | {zya} | {zyxwvutsrqSonmlO
jLhg`edcba` _ ^] \ [ZYXWV8TSRQ4
ONM / KJIBGFE> CBA @?> = <; {9876w
43210 /.- m + *) (‘&% $ # “! ~} | {Zy \
wvunslqponmlkjihgfedcEa`_ ^ A
\> ZYXWPUTSRQPONMLKJIH * FEDC &
A @?> = <;: 9876543210 /.- m + *) (i
&% $ # “! ~} | {zyxwvutsrqpRnmlkN
ihgfedcba` _ ^] \ [ZYXWVU7SRQP3
NMLKJIHGFEDCBA @?> = <;: z8765v
3210 /.- ,+*)(‘&%$# “! ~} _ {Zyx [
vutsrqjonmlejihgfedcba` _ ^] @
[ZYXWVUTSRo

Este programa lee una cadena de un usuario e imprime esa cadena.

(MENTE = BLOWN)

La usabilidad rara vez es un objetivo para los diseñadores de lenguajes de programación esotéricos, lo contrario puede ser cierto.

Sin embargo, se puede usar para mostrar algo llamado Turing Tarpit que indica Que ningún lenguaje de programación es más poderoso que cualquier otro .

La dificultad depende del compromiso. Muchos idiomas fueron diseñados para ofuscar intencionalmente. Otros lo lograron por accidente. Mientras sean TC, son básicamente todos iguales. Seguro seguro. Dirá que el procedimiento es diferente de lo que es diferente que lo funcional de que el objeto es diferente que el aspecto es diferente de … Entonces, ¿qué? ¿Puedes hacer un bucle? ¿Puedes ramificar? ¿Puedes leer y escribir en almacenamiento externo? Todo lo que es diferente de los idiomas es el estilo. TODO ES ESTILO. Todos ellos dependen absolutamente y sin excepción del código de máquina organizado de esta manera o de esa manera. ¿Quieres una pila? DE ACUERDO. ¿Quieres una memoria virtual segmentada y paginada lineal? DE ACUERDO.

Digo de nuevo, no hay nada que pueda hacer un idioma que no pueda hacer en código de máquina. Si lees esto atentamente, lo que significa es que todos los idiomas RESTRINGEN tu uso del código de máquina. Ningún idioma puede mejorarlo. Los primeros programas de hoja de cálculo tenían un disco y una memoria muy limitados. Los programadores solían usar las mismas secuencias de bytes como instrucciones diferentes saltando a diferentes desplazamientos dentro de la secuencia de datos prefix-opcode-modregrm-displacement. No hay nada en los idiomas modernos algo como esto. El código de auto-modificación fue crítico para mostrar el rendimiento en las primeras PC de IBM.

Solía ​​pensar en el código de máquina hex iAPX86 de Intel a tiempo completo. Leería una pantalla de volcado hexadecimal y sabría lo que hizo el código. Mis responsabilidades eran comprender el campo de virus de rápido crecimiento que se distribuía por disquete a principios de los años noventa. Uno de los mejores autores del día fue Michael Abrash con su “Zen del lenguaje ensamblador”. Todavía es una lectura refrescante para alguien como yo; algo así como volver a una novela o libro de texto favorito.

APL era un lenguaje muy bien definido y fácil de aprender si tenía en mente el procesamiento de matrices (J es similar). LISP también fue muy bien diseñado en los primeros días (el clojure es similar). FORTRAN fue maravilloso. Así fue PL / 1. Hay mucho que amar en C. C ++ es interesante y útil, pero hay aspectos para analizar que me ponen ansioso. Hay un sitio web maravilloso con “hello world” en cientos de idiomas (The Hello World Collection).

La dificultad está en la pregunta de por qué estás programando. Si tienes un prejuicio sobre un idioma, será difícil de aprender. Si está interesado en qué tipo de problemas inspiraron el desarrollo del lenguaje, será fácil.

La gente habla de brainfuck, ook, y malbolge y otros idiomas ofuscados intencionalmente. Simplemente escriba un traductor en LISP o Python o perl o alguna otra cosa para traducir la secuencia de caracteres a cualquier lenguaje abstracto de superconjunto TC de su elección y léalo. Y qué.

Acabo de escribir un lenguaje de marcado wiki de mi propio diseño utilizando un diccionario de traducciones de expresiones regulares. Probablemente debería haberse hecho en un análisis combinatorio monádico, pero siento que todavía no he aprendido cómo hacerlo para mi satisfacción. Es una idea difícil. ¿A alguien le importa explicármelo y mostrarme por qué es una capacidad de superconjunto y un rendimiento sobre mi diccionario de expresiones regulares?

Ahí es donde uno debería preocuparse por la dificultad. Un idioma que se interpone en su camino al resolver un problema es el idioma incorrecto. Una idea que toma tiempo para aprender es donde uno puede pasar su tiempo mejor.

Mi opinión: aprenda el código de máquina, luego pregúntese por qué se siente confinado al usar todos los demás idiomas.

Hay, como otros lo mencionan, lenguajes de programación que están diseñados para ser difíciles de usar. Para algunos de ellos, lleva meses para que alguien descubra cómo escribir un programa de “hola mundo” en el idioma.

Pero entre los lenguajes que se usan comúnmente, quizás C ++ esté entre los más difíciles, y el ensamblaje probablemente sea el más difícil.

C ++ es difícil debido a la falta de aislamiento entre usted y la computadora. Básicamente solo hace lo que le dices, incluso si le dices que haga algo ridículo. No hay tanto error al revisar allí. Además de eso, la sintaxis no está pensada para ser tan fácil como sea posible, por lo que podría trabajar con ella durante décadas y aún así quedar atrapado. La mayoría de las personas lo aprenden hasta cierto punto y luego sienten que eso es lo suficientemente bueno; no necesitan conocer todas las últimas sintaxis y peculiaridades de implementación.

El lenguaje ensamblador es difícil porque es solo una capa delgada de traducción sobre el código de byte de máquina real. Necesitas entender mucho sobre los registros de CPU y la memoria. Los comandos son más adecuados para las computadoras que los seres humanos.

Aquí está mi lista de los 5 principales lenguajes de programación difíciles

Visita a mi blog aquí: – http://www.unitedfox.com

5. Brainfuck

De acuerdo con el nombre, este lenguaje es realmente un problema para la mente, aquí está el ejemplo del programa de ejemplo hello world.

Urban Müller creó este lenguaje en 1993. Solo hay 8 comandos en este idioma. Es imposible crear un programa complejo con este lenguaje. Su básicamente funciona en una matriz de células de memoria.

Aquí están los 8 comandos de este lenguaje: – 1 ″> ”| 2“ <”| 3 “+” | 4 “-” | 5 “.” | 6 “,” | 7 “[” | 8 “]”

Ahora le toca a usted si cree que se consideraría en nuestro top 5 de los lenguajes de programación más difíciles suscríbase a nuestras últimas noticias para mantenerse al día con nosotros

4. VACA

Sí, sé que es divertido, pero este es el nombre de este lenguaje de programación. El lenguaje de programación COW es un lenguaje de programación esotérico y fue creado por Sean Heber en 2003. Tiene solo 12 instrucciones que se basan en Moo al igual que COW. Aquí está el ejemplo del programa de ejemplo hello world.

La mayoría de las instrucciones son moo s, solo las mayúsculas varían: mOo, moO, mOO, Moo, etc. MMM, OOO, oom y OOM son las excepciones. Entonces, ¿qué te parece este lenguaje? Danos tu opinión sobre el lenguaje de programación más difícil que piensas.

3. INTERCAL

Este lenguaje es muy difícil de entender. Este es un lenguaje de programación compilador sin acrónimo pronunciable.

Aquí está el programa hola mundo en INTERCAL. Fue creado en 1972 por 2 estudiantes Jim Lyon y Don Woods.

2. Malbolge [1]

Malbolge es creado por Ben Olmstead en 1998. fue el lenguaje de programación más difícil, incluso su creación no pudo programar su programa hello world. Lenguaje Malbolge diseñado para ser difícil o imposible de aprender.
Aquí está el ejemplo del programa de ejemplo hello world en Malbolge.

1: – Espacio en blanco [2]

Aquí hay un programa de ejemplo que imprime “¡Hola, mundo!” Escrito en espacio en blanco. Espacio, T para tabulador y L para salto de línea

Notas al pie

[1] Los cinco lenguajes de programación más difíciles de aprender del mundo.

[2] Los cinco lenguajes de programación más difíciles de aprender del mundo.

El lenguaje de programación más difícil de aprender definitivamente tendría que ser malversación. Parte de los objetivos al crear malbolge fue crear el lenguaje más difícil de programar. (Como nota al margen, otro lenguaje con un objetivo similar es el siguiente. Fue creado para ser el lenguaje más difícil de compilar Befunge – Esolang) Tomó años incluso antes de que existiera un programa real de molbolge válido y ni siquiera fuera creado por un humano. Para brindarle aún más comprensión de lo difícil que es dedicar un artículo completo a escribir un programa de 99 botellas de cerveza en malbolge ( http: //www.sakabe.i.is.nagoya-u… .)

El hecho de que el código se altere a sí mismo es increíblemente confuso. Aquí hay un extracto de wikipedia que le da una idea de cómo se está alterando.

Malbolge tiene ocho instrucciones. Malbolge determina qué instrucción ejecutar al tomar el valor [c] , agregarle el valor de c y tomar el resto cuando se divide entre 94. El resultado final le dice al intérprete qué hacer:

Después de que se ejecuta cada instrucción, la instrucción culpable se encripta (ver más abajo) para que no haga lo mismo la próxima vez, a menos que se produzca un salto. Justo después de un salto, Malbolge cifrará la instrucción inocente justo antes de la que saltó en su lugar. Luego, los valores de c y d se incrementan en uno y se ejecuta la siguiente instrucción.

Y por supuesto un Hello World! (I really don’t want to copy from other places but there are so few valid malbolge programs and I think I’d go insane from ever even attempting to try to learn this beast of a language)

(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc

  • Malbolge – Wikipedia
  • Programming in Malbolge
  • Malbolge – Esolang

I’ve been writing code for 37 years. I’ve written production code (well, OK, if you count the crap I wrote as a kid as “production”) in over 20 languages and 7 flavors of assembler. By far, the most difficult language for me to learn was (and continues to be): JavaScript .

First, let’s ignore all the stupid Turing-machine joke languages like Brainfuck and so on. Those are languages developed to prove a point about Turing machines and quines, not to write code in.

A lot of people say “the most difficult language is your first,” but that certainly wasn’t true for me and I don’t think it’s generally true. My first language was BASIC and my second language was a Z80A assembler (that I typed in from a magazine ). Getting things done in either was easy to learn with diligence and experimentation, because the ecosystem of early 80s computing was very easy to control and understand.

Other than JavaScript, the most difficult language I’ve ever used was PL/S as an intern with IBM in the early 90s. Not because it’s a terribly difficult language to understand, but because the compiler was a buggy piece of crap and any useful documentation was generally protected by IBM’s highest intellectual property level (Registered Confidential), which made it seriously difficult to RTFM.

As the story unfolds, you might see where this is going— ecosystem. Most professional-grade languages aren’t very difficult for a trained and intelligent programmer to grasp. What sucks is trying to navigate the conventions of other programmers and the ecosystem the code generally resides in. The ecosystem of my TS2068 or Commodore 64 was stable and easy to understand. C’s ecosystem is slightly less easy to understand, but it’s still pretty stable and manageable. Java—well, less, still, but it’s manageable. And so on down through the Rs, Pythons, SQLs, and Rubys of the world.

When we get down to the bottom of the list, we find JavaScript. The JS ecosystem is freaking nasty . Whether you’re in Node.js or a browser, solving trivial tasks is a serious pain in the ass. There’s LOTS of documentation, and that’s actually the problem because the waning and waxing enthusiasm for JS means that most of it is out of date, and that can be a serious problem with an ecosystem that is almost entirely composed of arcane conventions.

Finally, reading and understanding the code of other JS developers is unpleasant at best and impossible at worst. This is the real killer for JavaScript, because the best way to learn a language is to experiment with an experienced programmer’s existing code. And that’s not really a lot of fun with JavaScript, either.

I think every programming language have their own difficulty . But, in the end you can find the solutions everywhere using internet.

In my opinion, the most difficult part of programming is the coding paradigm and the problem solving skill . Nowadays, many interviewer like to ask many question about the coding paradigm question like Object Oriented Programming, etc.

Your ability to solve a problem is also considered to be very important. Every programming language can be learned fast but the ability to solve problem efficiently isn’t an easy task. If you want to enhance your problem solving skill, you can participate to many Contest.

Online contests (like topcoder, Codeforces ,etc ) provide many problem that can enhance your problem solving skill.

According to me Brainfuck is the hardest programming language ever.

A simple code for printing hello world in brainfuck looks like this:-

1

+++++

+++

Set Cell #0 to 8

2

El

3

>

++++

Add 4 to Cell #1; this will always set Cell #1 to 4

4

El

as the cell will be cleared by the loop

5

>

++

Add 4*2 to Cell #2

6

>

+++

Add 4*3 to Cell #3

7

>

+++

Add 4*3 to Cell #4

8

>

+

Add 4 to Cell #5

9

<<<<

Decrement the loop counter in Cell #1

10

]

Loop till Cell #1 is zero

11

>

+

Add 1 to Cell #2

12

>

+

Add 1 to Cell #3

13

>

Subtract 1 from Cell #4

14

>>

+

Add 1 to Cell #6

15

El

<

]

Move back to the first zero cell you find; this will

dieciséis

be Cell #1 which was cleared by the previous loop

17

<

Decrement the loop Counter in Cell #0

18

]

Loop till Cell #0 is zero

19

20

The result of this is:

21

Cell No : 0 1 2 3 4 5 6

22

Contents: 0 0 72 104 88 32 8

23

Pointer : ^

24

25

>>

.

Cell #2 has value 72 which is ‘H’

26

>

.

Subtract 3 from Cell #3 to get 101 which is ‘e’

27

+++++

++

..

+++

.

Likewise for ‘llo’ from Cell #3

28

>>

.

Cell #5 is 32 for the space

29

<

.

Subtract 1 from Cell #4 for 87 to give a ‘W’

30

<

.

Cell #3 was set to ‘o’ from the end of ‘Hello’

31

+++

.

—–

.

—–

.

Cell #3 for ‘rl’ and ‘d’

32

>>

+

.

Add 1 to Cell #5 gives us an exclamation point

33

>

++

.

And finally a newline from Cell #6

for more reference and to see a neat presentation of this program visit Wikipedia

Brainfuck – Esolang← Click here

JavaScript might be today’s go-to for front-end programming, however from multiple points of view it’s a dialect that impersonates what has preceded. Much the same as COBOL, C, C++, C#, Java and Python, JavaScript is a procedural dialect. There’s nothing particular about JavaScript, with one major special case: JavaScript has a code many-sided quality issue.

How could JavaScript, a dialect in light of the same worldview the same number of others, have an intricacy issue that is so particular? The answer is worldliness. JavaScript sits in an exceptional spot in programming advancement history, rising unequivocally amidst a movement from generally back-end to for the most part front-end improvement, which was prodded by the portable unrest.

Recently prominent front-end engineers would need to tidy up the chaotic legacy of strained creators, who had played second fiddle and along these lines seldom got the assets they expected to complete the employment. Tragically, there wasn’t the ideal opportunity for tidy up, or rather, administration didn’t set aside a few minutes as they kept on requesting more fancy odds and ends.

This is the problem in which JavaScript developers wound up in the late 2000s and it’s a story that plays out in the information. Seerene has dissected more than 400 billion lines of code to distinguish and imagine the programming dialects that make the most migraines for designers.

Apart from the ‘joke’ languages invented purely for their unintelligibility, most answers here seem to be concentrating on standard Von Neumann or Harvard architecture languages. In that case probably the lower level languages starting from C down through various flavours of macro-assembler, or even the microcode that runs inside the processor itself are the most difficult.

Mastering any flavour of assembler is akin to mastering the underlying electronics hardware of the machine, which is a really good reason to learn at least something about it.

I’ve seen comments here saying assembler has no variables, but every microprocessor has registers and memory address space – these are the very definition of variables.

An 8 bit register is just a type int8_t, four of them together is an int32_t. These can be defined as signed or unsigned numbers and cascaded to calculate with incredible precision at enormous speed.

The program counter that points to the next instruction to be executed is a special type of variable that needs to be adjusted or we wouldn’t have looping and therefore any computers. RAM itself is variable depending on how you define it – perhaps as a string of ASCII characters followed by a zero delimiter. Most modern processors have built-in floating point instructions too. A stack is a special type of last-on first-off array.

For me, the hardest languages to master are undoubtedly the parallel processing languages and in that I include occam on the original Transputer, the differing implementations of parallel-C, and at the FPGA level, VHDL.

Leaving parallelism up to an optimising compiler will never fully exploit the true potential of massively parallel processing. It will require an entirely different way of thinking to code for tens of thousands of tiny, power efficient processors compared with a high end multi-threaded PC of today. If you’re interested in this stuff, check out the Epiphany chip used in the Parallella range of $100 boards. It’s a good way to get your feet wet, but you’ve been warned, it’s a challenge.

[EDIT: in case of non-eso-lang was meant; then C++ takes the crown of mainstream languages (at least of those I know, if you really want to know it); people complain also about Haskell and APL; and some assembly languages, like x86 is a kludge ( Intel’s iAPX 432 even worse, I understand), but ARM is nice, SHx and PowerPC not nice.]

From the List of ideas – Esolang this one would be my guess (or some of the other mathematical ones?):

“A programming language based on Hilbert’s tenth problem: the program is a diophantine equation, and the computer is searching an integer solution to the equation. It would probably be turing-complete by Matiyasevich theorem.

  • I’m reasonably sure that at least one famous-ish mathematician has written a Lisp interpreter in this. So it would be TC.
  • It was Chaitin.”

Register Machines, Exponential Diophantine Equations, & Pure LISP – University Publishing Online

The abstract:

“In Part I of this monograph, we do the bulk of the preparatory work that enables us in Part II to exhibit an exponential diophantine equation that encodes the successive bits of the halting probability Ω.

In Chapter 2 we present a method for compiling register machine programs into exponential diophantine equations. In Chapter 3 we present a stripped-down version of pure LISP. And in Chapter 4 we present a register machine interpreter for this LISP, and then compile it into a diophantine equation. The resulting equation, which unfortunately is too large to exhibit here in its entirety, has a solution, and only one, if the binary representation of a LISP expression that halts, ie, that has a value, is substituted for a distinguished variable in it. It has no solution if the number substituted is the binary representation of a LISP expression without a value.

Having dealt with programming issues, we can then proceed in Part II to theoretical matters.”

If we are considering only on language perspective not on it’s practical use then I will go with programming language Brainfuck:

Brainfuck is an esoteric programming language created in 1993 by Urban Müller, and notable for its extreme minimalism.

Simple Hello world program in the same language:

[ This program prints “Hello World!” and a newline to the screen, its
length is 106 active command characters. [It is not the shortest.]
This loop is an “initial comment loop”, a simple way of adding a comment
to a BF program such that you don’t have to worry about any command
characters. Any “.”, “,”, “+”, “-“, “<" and ">” characters are simply
ignored, the “[” and “]” characters just have to be balanced. Esta
loop and the commands it contains are ignored because the current cell
defaults to a value of 0; the 0 value causes this loop to be skipped.
]
++++++++ Set Cell #0 to 8
[
>++++ Add 4 to Cell #1; this will always set Cell #1 to 4
[ as the cell will be cleared by the loop
>++ Add 2 to Cell #2
>+++ Add 3 to Cell #3
>+++ Add 3 to Cell #4
>+ Add 1 to Cell #5
<<<<- Decrement the loop counter in Cell #1
] Loop till Cell #1 is zero; number of iterations is 4
>+ Add 1 to Cell #2
>+ Add 1 to Cell #3
>- Subtract 1 from Cell #4
>>+ Add 1 to Cell #6
[<] Move back to the first zero cell you find; this will
be Cell #1 which was cleared by the previous loop
<- Decrement the loop Counter in Cell #0
] Loop till Cell #0 is zero; number of iterations is 8
The result of this is:
Cell No : 0 1 2 3 4 5 6
Contents: 0 0 72 104 88 32 8
Pointer : ^
>>. Cell #2 has value 72 which is ‘H’
>—. Subtract 3 from Cell #3 to get 101 which is ‘e’
+++++++..+++. Likewise for ‘llo’ from Cell #3
>>. Cell #5 is 32 for the space
<-. Subtract 1 from Cell #4 for 87 to give a 'W'
<. Cell #3 was set to 'o' from the end of 'Hello'
+++.——.——–. Cell #3 for ‘rl’ and ‘d’
>>+. Add 1 to Cell #5 gives us an exclamation point
>++. And finally a newline from Cell #6

Source : Wikipedia