Mindblowing

Gamelab 2018: Jonathan Blow reivindica el derecho a la felicidad del programador

Gamelab 2018: Jonathan Blow reivindica el derecho a la felicidad en la programación

Explicaba Pep hace unos días que Jonathan Blow es «uno de esos genios que trabajan de pie». No era una metáfora: al parecer en algunos de sus vídeos sobre programación se le puede ver tecleando código sin sentarse, en una mesa alta como las de las cafeterías más cosmopolitas, posiblemente porque le va bien para la espalda o la circulación o porque el tipo es tan inteligente que necesita estar involucrado en una constante actividad paralela; quizá mientras programa está cocinando o haciendo Taichí. Quizá mientras programa intenta cultivar su calidad de vida o, al menos, vivir.

Esa necesidad de no caer en el sedentarismo más aplastante es algo que se desprende de su charla del pasado jueves en el Gamelab de Barcelona: antes de arremangarse y ejecutar el compilador en su ordenador portátil (momento en el que inevitablemente perdió la atención de buena parte de los presentes: los que no tenemos ni idea de programación o hemos olvidado lo poco que sabíamos), Blow habló de cosas muy terrenales, de preocupaciones y reflexiones afiladas en su día a día que le llevaron a tomar una decisión tan contundente como crear su propio lenguaje de programación, Jai. Hasta ahora Blow ha tenido siempre fama de tipo extraño y difícil de tratar, y a menudo se ha dicho de él que su obsesión con el trabajo rozaba lo insalubre: en enero de 2016 publicó un misterioso twit (ahora eliminado) con una fotografía en la que mostraba una botella de plástico llena de orina, sugiriendo que estaba meando en botellas para no perder ni un segundo yendo al retrete durante el tramo final del desarrollo de The Witness. Cuatro años antes, en mayo de 2012, The Atlantic publicaba el que quizá sea el mejor artículo para conocer la personalidad algo complicada de Jonathan Blow: «Si quieres sacarle a comer algo, tienes que decirle “salgamos a discutir este tema” o “salgamos a trabajar en nuestros juegos”», explicaba Chris Hecker, su mejor amigo en la industria. «Si le preguntas si quiere simplemente salir te responderá: “¿por qué?”».

Algo debe de haber pasado a lo largo de estos años para que Blow haya empezado a tomarse más en serio otras dimensiones, personales y sociales, de la vida, pero a pesar de que su charla habla de sus frustraciones con los lenguajes actuales, no parece interesado en hablar mucho de sí mismo, de su obra o de sus influencias. Estamos hablando de un tipo que ha dado conferencias de títulos tan pomposos y trascendentalistas como Videojuegos y la condición humana y que a menudo ha sacado a colación la influencia de la obra de Italo Calvino en su trabajo. Da la impresión de que Blow piensa ahora en otras cosas: «Es importante que los programadores mejoremos nuestras calidad de vida: no deberíamos ser infelices como muchos lo somos», confiesa. Su Jai nace de la intención de hacer un lenguaje que aporte fluidez en la elaboración del código, que permita solucionar los problemas y los errores humanos de manera rápida y satisfactoria, que acorte significativamente el tiempo que tarda en compilarse una aplicación para no perder el ritmo de trabajo y que afecte de manera positiva a la productividad y la conciliación familiar. Habla de reducciones actuales en los tiempos de cerca del 15%, pero afirma que la idea es rondar entre el 50 y el 80% en la productividad.

El problema que encuentran los programadores a menudo, según Blow, es que no hay un lenguaje que mantenga el equilibrio entre la sencillez y el control. Cuando más sencillo y accesible es el lenguaje, más sensación tiene el programador de que no está controlando todo lo que sucede y que por tanto se le escapa un margen de libertad de acción; y cuanto más controlable es un lenguaje, más problemas presenta, más lento funciona y más complicado es trajinar con él sin caer en momentos de frustración. «Existe la idea generalizada entre este dualismo es inevitable, pero no es cierto: se puede hacer un lenguaje con todas las ventajas de C# pero que al mismo tiempo permita un control a tan bajo nivel como C», explica, «lo que sucede es que nadie lo ha hecho aún y al no ver ejemplos nos parece incomprensible». Blow sostiene que el mundo de los lenguajes de programación está lleno de ideas preconcebidas como que «se suele pensar que la acumulación de pilas es algo que hace el código más completo y mejor, pero en realidad lo hace peor: acaban por no ser algo bien construido, como un tambaleo que al final acaba por tirarte al suelo», dice. «Lo ideal es ser explicar con claridad cómo es la interacción entre las distintas capas del código, por si tú u otra persona necesita modificar algo», señala. «Este tipo de capas generalmente no encajan entre ellas, son chapuceras y provocan que haya veces en las que no sabes qué demonios está pasando, y eso sucede cuantas más capas añades, haciendo también más lenta la compilación, y todo acaban siendo problemas».

Gamelab 2018: Jonathan Blow reivindica el derecho a la felicidad en la programaciónBlow también se queja de una sobreutilización «en el mundo moderno» de software como Visual Studio o Xcode, entornos integrados de desarrollo que «a muchos programadores les parecen imprescindibles porque les dicen qué está pasando y dónde están los archivos, pero que en realidad tiene un valor nulo o directamente negativo porque interfiere entre el programador y la programación activa; es una bestia rara, un Frankenstein sin sentido que al final te impide programar sin usarla», lamenta Blow, «lo realmente importante es el debugger y el editor». El diseñador y programador sostiene que debe ser el propio lenguaje y nuestra manera de trabajar con él lo que nos traslade toda la información detallada sobre qué está haciendo el código y cómo funciona cada cosa. Habla de añadir comentarios de manera exhaustiva, de avisar sobre cuándo se cierra un archivo para que el proceso pueda seguir, de no esconder nunca el funcionamiento de las cosas.

Blow tiene cierta fama de neurótico, y desde luego su Jai puede ir enfocado a cosas que le obsesionan como la eficiencia, el tiempo invertido y el orden y la claridad de las cosas.

Tras décadas tecleando código ha llegado a un conocimiento cristalino sobre lo que ayuda y lo que perjudica la tarea de programar, y también a conclusiones muy sonoras: «La gente que habitualmente diseña lenguajes de programación quiere ayudarte (a veces), pero no escuchan este tipo de quejas y problemas, de modo que es imposible programar de la manera correcta si quien ha hecho el lenguaje no ha abandonado ciertas ideas y tópicos demasiado asimilados». Dice muchos programadores de juegos usan C++ «porque no te impide hacer cosas a muy bajo nivel; hace bien cosas que otros lenguajes hacen mal (…) pero en general C++ es un desastre, es un lenguaje realmente terrible». Dice que C++ permite gestionar muy bien la memoria (uno de los grandes granos en el culo de la programación), pero que el coste a nivel velocidad de ejecución es enorme, que hay muchas veces en que el código del programador está perfectamente pulido pero las instrucciones del lenguaje no son eficientes. Habla de problemas de calado incluso conceptual, de cómo se entiende la memoria o las órdenes que envían a un hardware que tiene sus limitaciones y su comportamiento específico: «Tratar de escalar hacia el cielo no es necesariamente un error, pero es importante mantener un pie en el suelo», advierte. El código es algo abstracto que permite hacer teóricamente cualquier cosa, pero Blow dice que «programamos en el mundo real y las máquinas están en el suelo, por eso es importante mantener el contacto con ese suelo», y echa falta un conocimiento más extendido de los detalles de implementación, de la velocidad a la que corre un ordenador o de su grado de robustez. «Conviene poder subirse a la escalera para hacer cosas abstractas, para expresarse, pero también ser capaces de bajar al nivel del suelo para manipularlas desde la raíz; lo interesante es poder moverse en ambas direcciones».

Finalmente llega la pregunta que, dice Blow, le hace todo el mundo en todas partes: «¿Por qué hacer un nuevo lenguaje de programación? Por Dios, si hay cientos en el mundo, por qué no te quedas con uno de esos» y su respuesta resume el discurso moderadamente contracultural que viene haciendo con respecto a todo su trabajo, tanto en la programación como en el diseño de videojuegos: «Hago Jai porque todos y cada uno de esos lenguajes ya existentes han comprado las creencias incorrectas, todos parten de algunas bases y concepciones que son un error o que no favorecen a la hora de hacer videojuegos».

Blow dice que Jai sigue en desarrollo y que hasta ahora solo lo han utilizado para programar quienes están diseñándolo junto a él, no más de cinco personas, y que para finales de año espera entregar una alpha cerrada a unas cuantas personas. Nos muestra un ejemplo: una versión 3D de Sokoban que compila en tiempo real en su portátil en 1,7 segundos y que, dice, «en mi ordenador de sobremesa ronda un solo segundo», y en la sala no se oye a nadie desmayarse de la impresión o levantarse a aplaudir. Intuyo que lo que ha conseguido Blow no es ninguna cosa revolucionaria, pero por cómo se refiere a Jai parece que tampoco trata de serlo, al menos a corto plazo. Sabe perfectamente que los videojuegos, y especialmente los AAA, trabajan sobre game engines que son auténticos mastodontes carísimos y enormes («la última vez que lo comprobé, el de los Assassin’s Creed rondaba los diez millones de líneas, ahora probablemente habrá crecido mucho más») que no cambiarán de la noche a la mañana, así que su objetivo son los desarrollos doble A y los indies. Dice que está cansado del derrotismo de los programadores cuando dicen que lo que ha sido siempre así difícilmente va a cambiar, pero incluso quienes no sabríamos ni programar un vídeo VHS si aún existieran tenemos claro el potencial de Blow como agitador de la industria y de sus métodos. Muchos situamos el inicio de la gran eclosión de los indies en el momento en que Braid salió a la venta hace casi exactamente diez años, así que de Jonathan Blow se pueden decir muchos cosas y no todas son buenas (en 2011 Kotaku planteó a su comunidad un debate titulado «Cuando amas a un juego pero no a su creador» y lo ilustraron con una captura de pantalla de Braid), pero el error más grave por nuestra parte sería, sin duda, subestirmarle.

Redactor
  1. LordXamon

    Hace bastantes años Bill Gates dijo lo mismo de los lenguajes modernos. El señor ya no programa y lleva décadas sin dale a un teclado para programar profesionalmente (ni lo necesita) y está asombrado que la programación siga siendo casi tan arcaica y tosca como cuando él empezó de joven.

    Personalmente tengo mucha curiosidad en esto, hace solo dos semanas terminé mi FP de programación así que estoy prácticamente en pañales por lo que no sé como tomarme esto ni reconocer la magnitud e importancia de lo que quiere intentar hacer este señor.

  2. Majin

    No sé, parece referirse más a un compendio de Best practices que no a un lenguaje de programación específico.

  3. jk_eye

    Esto solo lo sabe el que se ha dado de cabezazos con el código repetidísimas veces. Ojalá acabe teniendo algo de trascendencia con este tema. Yo le tengo respect máximo por la violada mental que es el The Witness, y más después de saber que le vino la inspiración por el Arx Fatalis que siempre me moló un huever.

  4. _Konrad_ (Baneado)

    It is an imperative static/strongly typed C-style language, but with a variety of modern language features that C lacks.

    Tenéis más informacion no oficial incluyendo algunos ejemplos básicos de código aquí: https://github.com/BSVino/JaiPrimer/blob/master/JaiPrimer.md

  5. yonkykong (Baneado)

    Nos muestra un ejemplo: una versión 3D de Sokoban que compila en tiempo real en su portátil en 1,7 segundos y que, dice, «en mi ordenador de sobremesa ronda un solo segundo», y en la sala no se oye a nadie desmayarse de la impresión o levantarse a aplaudir. Intuyo que lo que ha conseguido Blow no es ninguna cosa revolucionaria,

    Pues eso es casi un aumento de eficiencia del 50% así que si, es una puta barbaridad.

    Sobre lo que dice del derecho a la felicidad.
    El problema del capitalismo es que siempre exige más y esta obsesionando con los margenes y la eficiencia.

    Por ejemplo la paradoja de Jevons.
    Jevons creo maquinas que consumian carbon más eficientemente, pero al crearlas aumento la productividad y automaticamente aumento el consumo.

    Cuando empezaron a haber coches, tener uno era una ventaja.
    Ahora que todo el mundo conduce en coche, ya no es una ventaja sino una exigencia.

    No tengo dudas que Jai tiene que ser la polla, el problema sería convencer a programadores que llevan años especializandose en ciertos lenguajes en el que te cambian los esquemas.

    Javascript ha pegado un subidon increible y NodeJS parece estar disputandole el puesto a PHP. Pero tenemos que recordad que es porque son tecnologias web que están en todos los navegadores, que pulsando F12 y yendo a console, escribes un console.log( «Hola mundo» ) y ya estas programando sin instalar complicados programas.

  6. Koldo Gutiérrez

    Vaya, esperaba que su ponencia fuera más general, no tan centrada en aspectos técnicos y teóricos como los lenguajes de programación y demás. Fuera de ese tema, ¿comentó alguna otra cosa interesante sobre gamedesign, creación de puzles, etc?

    @jk_eye

    No sabía que la inspiración le vino de Arx Fatalis, siempre creí que venía de Myst. ¿Lo comentó en la charla o ha sido en algún otra entrevista?

  7. pinjed

    @sabin

    Nada que yo sepa, en la charla. Luego sí dio alguna entrevista con más enjundia.

  8. PUNKOMAN

    Ahí voy con mi remo:

    «Existe la idea generalizada entre este dualismo es inevitable, pero no es cierto: se puede hacer un lenguaje con todas las ventajas de C# pero que al mismo tiempo permita un control a tan bajo nivel como C»

    No. Imposible. Y me sorprende que un tio como Blow, capaz de hacer un compilador, diga algo así…imagino que será algo de la lost in translation, pero por si las moscas, ahí va mi argumento:

    C#, al igual que Java, es un lenguaje cuya ejecución se hace sobre una máquina virtual. Esto significa que el código que se genera al compilar desde tu IDE no tiene instrucciones máquina a bajo nivel. Es decir, que ese código no puede ejecutarse en ninguna CPU por si sólo, si no que necesita de una máquina virtual que interprete ese código y traduzca esas instrucciones a lenguaje máquina, ya sí, entendible por tu CPU.

    La gran ventaja de esto es que da igual la CPU, arquitectura, S.O.. que tengas, mientras la máquina virtual sepa interpretar el código objeto hará ese trabajo en lugar de necesitar un compilador por máquina. El código objeto es, pues, totalmente exportable a otros sistemas sin necesitar de ningún cambio.

    La gran desventaja de un lenguaje ejecutado en máquina virtual (y es por lo que C sigue siendo tan querido en desarrolladores de sistemas unix), es que con máquina virtual no se puede trabajar a bajo nivel por que no puedes ligarte a una arquitectura y especificaciones en concreto. Un ejemplo simple: ¿Y si direcciono una posición de memoria que no existe en tu mapa de memoria? correcto, catacroker.

    Ahora todo el mundo echa de menos lenguajes cómo C, por que glorifican esas posibilidades a bajo nivel que con los lenguajes modernos hemos perdido. Pero se olvidan de cómo ese .exe que compilabas y que funcionaba a la perfección en tu pentium II de repente en un K-II aquello petaba sin saber por qué cojones lo hacía. Había que recompilar en el K-II.

    Igual que los antivacunas, que se han olvidado de la viruela parece ser.

  9. reverso13

    Me da la impresión de que la mayoría de las traducciones estan hechas de manera muy literal perdiendose parte de su significado 😕

  10. Silvani

    Vaya por delante que para mí este tipo es un genio (estoy buscando una entrevista que dio a un tipo y en la que hablaba de cómo diseñar puzles, lo que hace divertido un juego, etc., pero ya no sé dónde estaba), pero quedarte encerrado en un ascensor con este y Jon Carmack es como para pegarte un tiro.

  11. Dany_hollow (Baneado)

    La charla casi tan aburrida como su último «»»»»»videojuego»»»»»»»» …CASI

  12. jk_eye

    @sabin dijo:
    No sabía que la inspiración le vino de Arx Fatalis, siempre creí que venía de Myst. ¿Lo comentó en la charla o ha sido en algún otra entrevista?

    Comenta que el tema de «dibujar caminos» viene del sistema de conjuros del Arx Fatalis que era dibujando glifos en el aire. Cogió eso tan aparentemente simple, lo exprimió bien, y lo utilizó como base para The Witness. Pero casi mejor que te lo explique él 😉

    https://www.youtube.com/watch?v=YdSdvIRkkDY

  13. d20

    Encuentro a Jonathan Blow un genio desde ese documental de Indies, sus juegos son y están hechos de manera interesante y si es que el dice lo que dice yo voy por lo mínimo a tener fe en él. Y cuando salga Jai voy a estar ahí para aprenderlo y comprobar si es un logro o no.

  14. Yurinka

    @punkoman Aquí hay un buen resumen de la charla : https://twitter.com/RafaLagoon/status/1012336726193442816

    Creo recordar que «se metía» con C++, no con C#. Hubo 2 o 3 veces que casi me quedo sobao, pegué amagos de cabezadita. La charla venía a ser una chapa, pero cuando vi el título «C++ is a terrible language» se me escapó una carcajada.

    A este señor lo veo un genio como diseñador, pero como programador parece el típico novato con demasiado ego que dice «el Unity/Unreal/whatever es una mierda, me voy a hacer mi propio motor que va a ser mucho mejor» sin tener ni idea de que lo que va a hacer va a ser mucho peor, mas incómodo de usar por otros, menos versatil, menos documentado y menos probado por miles de otros equipos en muchas plataformas.

    Pero en lugar de con el motor, en este caso incluso lleva la flipada de creérselo incluso al lenguaje de programación. Muchos programadores aprendimos a hacer compiladores en la Uni o FP. Obviamente haciendo una cosa pequeñita compilará rápido (a mi parecer lo que hizo compilaba muy lento), pero su lenguaje cuando tenga que adaptarse a muchas plataformas, necesite acceder a ciertas APIs y demás las va a pasar putas.

    Lo veo como un ingenuo con demasiado ego, ojalá me equivoque.

    @silvani dijo:
    Vaya por delante que para mí este tipo es un genio (estoy buscando una entrevista que dio a un tipo y en la que hablaba de cómo diseñar puzles, lo que hace divertido un juego, etc., pero ya no sé dónde estaba), pero quedarte encerrado en un ascensor con este y Jon Carmack es como para pegarte un tiro.

    @kerotan dijo:
    Encuentro a Jonathan Blow un genio desde ese documental de Indies, sus juegos son y están hechos de manera interesante y si es que el dice lo que dice yo voy por lo mínimo a tener fe en él. Y cuando salga Jai voy a estar ahí para aprenderlo y comprobar si es un logro o no.

    Estoy de acuerdo en que como diseñador es un genio, pero eso no implica que sea bueno -o que sea un genio- como programador, ya que son dos cosas totalmente diferentes.

  15. yens

    @yurinka en realidad como programador también es un genio

  16. Durion (Baneado)

    Para lo que quiere hacer ya podría haber usado Rust.

  17. pinjed

    @yurinka @punkoman

    Menciona C Sharp varias veces al principio, si queréis os paso el audio. Y lo que hace no es meterse con él: habla de sus ventajas, lo pone en el texto. :

  18. PUNKOMAN

    @yurinka
    Venía a decir lo que acaba de comentar @pinjed, que menciona c# (sharp) varias veces. Por lo que, efectivamente, lo que dice es falso.

    @pinjed Yo no digo que Blow haya criticado c#, lo que digo es que las ventajas de tener un lenguaje híbrido (compilado + interpretado) no las a poder tener en un lenguaje compilado en objeto nativo (y viceversa, olvidate a tener acceso a bajo nivel si tienes una máquina virtual entre tu código y la CPU). Otra cosa es que Blow no piense que la exportabilidad sea una ventaja…

  19. wizn

    Yo lo que ya no entiendo es de qué va el Gamelab. Creía que era un evento especializado para la industria en donde se hablaban de cosas técnicas, (Rollo GDC), sin embargo he leído a muchísima gente quejarse precisamente de que se hablan de cosas técnicas. El mundo de los vídeojuegos, mejor dicho todo lo que rodea a los vídeojuegos se parece cada día más a un puto manicomio y yo ya no se, a lo mejor lo más sano es jugar a los 3-4 juegos que me gustan al año y olvidarme de todo lo de alrededor

  20. PUNKOMAN

    @wizn
    Esa es otra. Tal cual lo comentas.

    La gente se ha olvidado que para hacer juegos hay que programarlos, y que los que programan son muchos más que los que los diseñan. Pero claro, programar no es tan guay porque es muy técnico, hay que estudiar mucho ingenierías y esas cosas de frikis.

    Todo el mundo quiere ser game designer animatronic floripendig manager, Los halagos se los llevan Kojimas con sus chaladuras, pero poco se hablan de los pedazo de ingenieros que nos pusieron aquel fox engine con unos gráficos que te cagas a 108060fps en los albores de la generación…pero no, la gente quiere oir a la estrella de rock y sus carismáticas ocurrencias, que no digo que no sean interesantes, pero no todo puede ir por ahí, por favor.

    Una situación: Si mañana hubiera conferencia de desarrolladores del fornite, lo más interesante de ahí es cómo demonios meten a millones de jugadores cada día, que problemas de concurrencia resuelven, cómo comprimen y encriptan las peticiones o cómo cojones lo hacen para balancear carga. Posiblemente fornite sea ahora mismo el sistema distribuido más pesado existente en la actualidad, y será un placer escucharles hablar sobre ello.

    Pero no, si hicieran eso, lo que habría es antorchas y horcas…cosas del mainstream.

  21. DrTenma

    No he podido evitar leer a Blow con la voz de Bender mientras pasa de C+, C# y decide crear un casino con furcias… Digo un lenguaje de programación propio. Que bien por él si con eso va a sacar más juegos, pero dudo que la industria necesite otro lenguaje de programación.

  22. wizn

    @punkoman

    Pero es que cansa ya que todo tenga que ser un caramelito para los consumidores o la prensa. Si ves las conferencias que no tenían Streaming y que nos llegaba el Resumen en forma de hobby consolas, muchas veces parecería que estaban vendiendo más el SDK que la propia consola. Hay que ser realista y tampoco pedir esto, pero de ahí al circo que se ha montado…. Si Carmack hubiera sacado su DOOM en 2018, creeríamos que es un friki más que se dedica a hacer numeritos en un ordenador

  23. Majin

    @punkoman

    Aplaudo esto muy fuerte. Tener que leer a gente de prensa especializada que el plano secuencia del God of War es mucho menos meritorio que en el cine porque claro, controlar las cámaras es muy fácil, obviando todo el trabajo que conlleva la eliminación de tiempos de carga, es casi insultante para la labor de la programadores.

  24. Artelosus

    Sin ánimo de resultar polémico, me parece lo menos lúcido que haya leído nunca de Blow. Cuando se liberan recursos en un proceso productivo por mejoras en la eficiencia, esos recursos no se quedan ociosos. Al contrario, se redirigen al aumento de la producción. Vamos, que no creo que una compañía que adoptase el lenguaje de Blow decidiese recompensar a sus empleados con reducciones de jornada manteniendo sus sueldos; más bien intentaría aumentar su productividad en la proporción exacta en que el lenguaje lo permita. Si consigue lo que se propone, claro.

    No se. Quizás debería abrir Blow un libro de historia y comprobar si las reducciones de jornada han sido alguna vez una cuestión tecnológica, de aumento de la eficiencia, o más bien han sido una cuestión política y social. Los crunches no se van a acabar con mejores lenguajes de programación, precisamente.

    Sinceramente, no se si está vendiendo humo a lo bestia o es que no comprende demasiado bien cómo funciona el mundo fuera de un ordenador. Tonto no parece, desde luego.

  25. Yurinka

    @pinjed dijo:
    @yurinka @punkoman

    Menciona C Sharp varias veces al principio, si queréis os paso el audio. Y lo que hace no es meterse con él: habla de sus ventajas, lo pone en el texto. :

    @punkoman dijo:
    @yurinka
    Venía a decir lo que acaba de comentar @pinjed, que menciona c# (sharp) varias veces. Por lo que, efectivamente, lo que dice es falso.

    @pinjed Yo no digo que Blow haya criticado c#, lo que digo es que las ventajas de tener un lenguaje híbrido (compilado + interpretado) no las a poder tener en un lenguaje compilado en objeto nativo (y viceversa, olvidate a tener acceso a bajo nivel si tienes una máquina virtual entre tu código y la CPU). Otra cosa es que Blow no piense que la exportabilidad sea una ventaja…

    Ok, thanks!

    @wizn dijo:
    Yo lo que ya no entiendo es de qué va el Gamelab. Creía que era un evento especializado para la industria en donde se hablaban de cosas técnicas, (Rollo GDC), sin embargo he leído a muchísima gente quejarse precisamente de que se hablan de cosas técnicas. El mundo de los vídeojuegos, mejor dicho todo lo que rodea a los vídeojuegos se parece cada día más a un puto manicomio y yo ya no se, a lo mejor lo más sano es jugar a los 3-4 juegos que me gustan al año y olvidarme de todo lo de alrededor

    Yep, Gamelab es un congreso de la industria del videojuego. Se hablan de cosas de diseño, de programación, de arte, de negocio, tendencias de mercado y tal. A algunos les habrá chocado esta charla porque las de programación -o charlas mas técnicas en general- las suelen dar en las salas pequeñas, por lo que si no suelen ir a las charlas de las otras tracks porque normalmente únicamente vienen a ver las charlas donde las estrellas hablan de su carrera o alguna temática poco técnica les pillará de nuevo.

  26. Koldo Gutiérrez

    @jk_eye

    Cierto, había olvidado que tenía ese documental pendiente. ¡Gracias por recordármelo! 🙂

  27. CoffeeMcRoasted

    Bueno, yo voy a aportar lo mio aunque quiero aclarar que esto es opinión. Ojala estuviese en posesión de la verdad absoluta; probablemente estaría en Silicon Valley cubierto de millones y millones de petrodolares en lugar de aquí dando por saco.

    En primer lugar, todos conocemos el carácter peculiar, maniático y difícil de Jonathan Blow, con lo cual no me sorprendí lo más mínimo cuando oí que iba a sacar su propio lenguaje de programación. Hay un resumen de lo que pretende hacer el lenguaje disponible aqui:https://github.com/BSVino/JaiPrimer/blob/master/JaiPrimer.md, al cual he echado un vistazo.

    Cualquiera que haya investigado un poco sobre eficiencia en C++ y desarrollo de videojuegos sobre el lenguaje habrá podido ver como incluso personas que forman parte del comité de desarrollo del estándar o de los grupos de investigación llegan a decir que «ninguna charla sobre C++ está completa sin un apartado de quejas sobre el lenguaje».

    Incluso hay un grupo dentro del estándar dedicado a las necesidades de los grupos interesados en alta eficiencia (entre los que se encuentran programadores, además de videojuegos, de aplicaciones bursatiles y otras aplicaciones en las cuales se requiere exprimir cada ciclo de reloj), lo cual da a entender que en este aspecto hay mucho por hacer.

    Es por ello que hay que conceder cierta validez a las quejas de Blow, y mucho a su proactividad al lanzar un lenguaje de programación propio que, en su opinión, solvente dichos problemas. En cualquier caso, es un nuevo punto de vista, y aunque tendrá que demostrar su eficiencia en un entorno de producción, hay que decir que Jai tiene, a nivel técnico, una serie de ideas, que si bien rupturistas, pueden funcionar muy bien.

    Jai se define con un sustituto moderno para C, un lenguaje conocido por su eficiencia. Y es que Jai busca, sobre todo, la eficiencia, el talón de Aquiles de todo programa con requerimientos tan estrictos como los de un videojuego (Apenas 16 milisegundos para hacer todo lo que requiere un ciclo de un videojuego a 60fps)[Obviemos que probablemente, al inicio, Jai será lento como un caracol porque el compilador estará poco optimizado]. Esto es mas grave en consolas, que suelen ser equipos con recursos mucho mas limitados. A ese fin, la gran mayoria de engines actuales utilizan el paradigma de la programación orientada a datos(Data-Oriented Programming) y el modelo de datos Entity-Component-System, que busca acercarse más a como los procesadores tratan los datos disponibles y dar enfoque al flujo de los datos en lugar de a la abstracción de los conceptos y estructuras que suele propiciar la programación orientada a objetos (que tiende encapsular los datos de manera separada en entes que ayudan a la comprension humana del código pero que no se parecen a como entiende el ordenador los datos, con lo cual aprovecha poco las capacidades predictivas de los procesadores y la carga de datos en la caché ) [ESTO ES UNA DEFINICIÓN BASTANTE LIBERAL, no me apedreeis…]

    C++ es multiparadigma, con lo cual permite programar de ambas maneras, pero hay que aclarar que no tiene facilidades directas integradas en el lenguaje para el DOP como pretende tener Jai. Esto significa que C++ tiene muchas más utilidades dentro de lo disponible de manera estándar para permitir esas diferentes maneras de programar. Blow prentende quitar todo lo que él no considera imprescindible para juegos, vease clases, herencia, polimorfismo… que son las principales caracteristicas de la programación orientada a objetos. (También templates fuera, que sirven para el paradigma de «metaprogramación» ) . Básicamente Blow da por sentado que ese tipo de estructuras propician la creación de código peor, con lo cual las suprime, manteniendo libre de distracciones al programador.

    Tambien da control directo en el código para determinados tipos de acciones que permiten optimizar la ejecución del juego, dejando más en manos del programador y probablemente menos en el compilador. Además tambien pretende eliminar varios mecanismos de salvaguarda de la memoria que tienden a ralentizar el código(para los que puedan estar remotamente interesados en esto que busquen sobre lock-less multithreading).

    La sintaxis del lenguaje, a su vez, es peculiar, siguiendo planteamientos mas modernos que tengo la impresion de que generarán algo de rechazo, pero bueno, como en todo, sería cuestion de acostumbrarse.

    Contemplando todo lo anterior, parece que Blow rechaza los lenguajes cada vez mas saturados de caracteristicas y busca limitar el repertorio en favor de darle mas importancia a las caracteristicas más utilizadas en el mundo de los videojuegos. Sin embargo, esto da la impresión de que va a resultar en un lenguaje difícil de usar, pero que dará mucho control al programador a coste de requerir una capacidad de concentración casi sobrehumana.

    Esto me da la impresión de que forma parte de la filosofía de Blow que opina, segun el «primer» del lenguaje: «Jai is a language designed for good programmers, not against bad programmers. Languages like Java were marketed as idiot-proof, in that it’s much more difficult for programmers to write code that can hurt them. The Jai philosophy is, if you don’t want idiots writing bad code for your project, then don’t hire any idiots.»

    Por ultimo, Blow ofrece la posibilidad de interactuar con código de C, de manera que se puedan utilizar API’s y librerías de sistema (una queja que había visto mencionada antes por @yurinka. Dado que esta es la manera en la que lo solventan la mayoría de lenguajes no C/C++, no creo que sea el principal problema que encontraría la implantación del lenguaje, cuando se tiene la inercia de una industria que no tiene un segundo que perder en aprender nuevos lenguajes).

    Saliendo del mundo de las máquinas y pasando al mundo de los sacos de carne, no creo que esto vaya a implicar una mejora apreciable en la calidad de vida de los programadores de juegos, como apuntaba @Artelosus. En mi opinión, eso dependerá de si la ganancia de productividad que podría dar Jai se tiene en cuenta en el manejo de los proyectos para no recurrir a abrumar al programador, lo cual depende más del factor humano que del factor técnico.

    Hay que admitir que Blow, quizas de manera un poco egolatra, llega pisando fuerte, diciendo que lo que hay es una mierda y que el lo hará mejor. Eso, está por ver. En cualquier caso es un buen aporte a la industria, que desde su lado técnico lleva mucho tiempo luchando contra lenguajes que no se adaptan del todo a sus necesidades.

    Y con esto, vuelvo a mi caverna.

    TL;DR : Jonathan Blow ofrece un punto de vista diferente a un problema abierto y que además tiene mucha inercia de la industria, con lo cual ofrece una ruptura en un entorno de muy lento cambio.

  28. Cyran

    @punkoman
    Una duda que me gustaría que la ejemplificaras: ¿Cuál es la diferencia entre diseñar y programar?

  29. PUNKOMAN

    @cyran

    https://work.chron.com/designer-vs-programmer-what-19599.html

    Aunque después de dos meses igual me podías haber escrito un privado, que no creo que nadie más nos lea…

    Saludos!