6 puntos por GN⁺ 2023-08-10 | 1 comentarios | Compartir por WhatsApp
  • Una explicación técnica sobre cómo una computadora ejecuta un programa de principio a fin, centrada en entender cómo funciona la computadora desde el arranque hasta la ejecución del programa
  • Parte de preguntas como qué ocurre realmente cuando se ejecuta un programa, si un programa se ejecuta directamente en la CPU, qué son las syscalls y cómo funcionan, y cómo se ejecutan varios programas al mismo tiempo
  • El trasfondo es la preocupación de que, si no vas a la universidad, no hay muchos recursos integrales sobre sistemas, por lo que hay que revisar múltiples fuentes de calidad desigual y a veces contradictorias
  • Basado en varias semanas de investigación y casi 40 páginas de apuntes, es un material cuyo objetivo es organizar lo aprendido en un solo texto sólido
  • Para quienes quieran leer rápido o sientan que ya lo saben, se ofrece por separado el enlace a Chapter 3: How to Run a Program

1 comentarios

 
GN⁺ 2023-08-10
Opiniones de Hacker News
  • ¡Hola! Soy Lexi, la autora de este artículo/minilibro.
    Existe la pregunta clásica “¿qué pasa cuando abres un sitio web?”, pero a mí siempre me dio más curiosidad “¿qué pasa cuando ejecutas un programa?”. Hace unos tres meses me frustró muchísimo no poder responder esa pregunta, así que decidí estudiarlo por mi cuenta.
    Todo lo que sé de programación lo aprendí de forma autodidacta, así que pensé que esto también sería fácil, pero para nada. La mayoría de los recursos en línea sobre cómo funcionan los sistemas operativos y las CPU eran pésimos, y además casi no había material. Así que, mientras estudiaba, pensé que debía crear yo misma un buen recurso; al organizar lo que iba aprendiendo terminé con un Google Doc de 60 páginas, y a partir de ahí empecé a escribir.
    Pero mientras escribía me di cuenta de que gran parte de ese documento enorme estaba mal, así que tuve que investigar más. Seguí corrigiendo una y otra vez; la calidad de los recursos de internet seguía siendo mala, y tenía que mejorar el texto. También necesitaba ilustraciones y diagramas, pero no sabía dibujar, así que abrí Figma y experimenté, y dibujé algunas partes con una tableta Wacom que me habían dado en un hackathon.
    Ahora, unos tres meses después, tengo un resultado del que estoy muy orgullosa. Me alegra compartir la versión final de Putting the "You" in CPU, incluso con sus ilustraciones torpes. Este trabajo lo hice como parte de Hack Club(https://hackclub.com), una comunidad de estudiantes de preparatoria/secundaria a quienes les gustan las computadoras.
    Hace unas semanas, una versión todavía en proceso recibió atención por casualidad en HN, y agradecí muchísimo el feedback que recibí. Desde entonces lo pulí bastante, y recién ahora me siento lo bastante satisfecha como para compartirlo yo misma con el mundo.
    El sitio web es un proyecto estático de HTML/CSS, y lo escribí todo desde cero. Me gusta especialmente el componente de navegación. Espero que disfruten la lectura y que se convierta en un recurso del que cualquiera pueda aprender.

    • Solo le di una mirada rápida, pero parece una introducción bastante buena, y me gusta el estilo.
      Escribir este tipo de material cuando estás aprendiendo algo nuevo por tu cuenta es una muy buena forma de hacerlo. Te ayuda a aclarar tu proceso de pensamiento y a encontrar partes que al principio creías entender, pero que todavía estaban difusas.
      También me gustó esta frase del final: “Mientras escribía este texto, hablé bastante con GPT-3.5 y GPT-4. Mintieron mucho y la mayor parte de la información no sirvió, pero a veces fueron de gran ayuda para resolver problemas. Si conoces las limitaciones de los LLM y dudas muchísimo de todo lo que dicen, la suma total de ayuda puede ser positiva. Eso sí, escriben horrible. No dejes que escriban por ti.” Gran proyecto.
    • Después de leer las primeras páginas, mi único comentario sería que convendría reducir las expresiones tiernas/juguetonas.
      Por ejemplo, en un contexto como “La CPU se encarga de todos los cálculos. Es el hermano mayor. Shazam alakablam…”, se leería mucho mejor quitando la frase en broma y escribiendo algo como: “La CPU se encarga de todos los cálculos. Desde el momento en que enciendes la computadora, empieza a ejecutar instrucciones una por una”.
      No soy una persona extremadamente técnica, pero como alguien a quien le pagan por escribir, así es como lo veo. El trabajo en sí es excelente, así que sigue adelante.
    • No investigué por mi cuenta, pero me cuesta creer que la mayor parte de la información sea tan difícil de encontrar o esté equivocada, al menos si sabes dónde buscar.
      Estos temas suelen cubrirse bien en cursos universitarios de arquitectura de computadoras y sistemas operativos. Hoy en día ya pasaron de moda y en la mayoría de los casos quedaron como materias optativas.
      Varias universidades publicaron clases gratuitas, y también hay libros escritos por profesores del área. Si quieres algo más cercano a las tendencias recientes, las charlas de conferencias técnicas relacionadas también son bastante útiles.
      Aun así, enseñar es un arte subestimado, y hacer que la información sea más accesible o más divertida e interactiva sin duda tiene mucho valor.
    • Quiero señalar sí o sí que LWN(https://lwn.net/) lleva mucho tiempo dedicado a producir información sobre sistemas operativos que no es pésima. Échale un vistazo y, si puedes, súmate :)
    • Todavía solo lo hojeé por encima, pero se ve excelente. Felicitaciones y sigue haciendo este tipo de trabajo.
      Antes trabajé como ingeniero de investigación; en mi caso, era ingeniero de software haciendo investigación en seguridad informática en un laboratorio universitario. Como mencionó otro comentario sobre que los cursos de sistemas operativos sean optativos, incluso entre estudiantes de posgrado hay personas que no tienen este nivel de comprensión de sistemas operativos.
      Es difícil encontrar buena información, pero definitivamente existe. El hecho de que hayas reunido información difícil de encontrar y la hayas convertido en algo mejor es prueba de ello. Mi título es en matemáticas, pero aprendí computación por mi cuenta. Saber aprender de esta forma y poder comunicar información altamente técnica de manera accesible es muy importante y no debe subestimarse.
      Comparto solo dos enlaces, porque si no esto podría seguir infinitamente. Primero, https://git.lain.faith/sys64738/airs-notes.git y el índice de la parte sobre linkers https://lwn.net/Articles/276782/. Si apenas rozaste la superficie de ELF y el linking, la serie de 20 posts de Ian Lance Taylor y los temas adicionales cubren todo lo que alguna vez quisiste saber sobre ELF, e incluso cosas que te harán cuestionar cómo demonios funcionan los comandos. También aparece brevemente DWARF, el compañero de ELF, que además es una máquina virtual usada cada vez que se produce una excepción en C++.
      Segundo, https://0xax.gitbooks.io/linux-insides/content/ también es un proyecto excelente. Sigue de una forma legible para humanos cómo el kernel de Linux hace varias cosas. Es casi seguro que ya se compartió en HN.
  • Está muy bien escrito, y felicidades por haber profundizado tanto en este tema
    Hoy en día, a los 17 años uno puede salirse con la suya hasta cierto punto “programando” pegando cosas que no entiende, pero creo que al final se va a topar con un límite. Por eso, lo que estás haciendo ahora es realmente valioso no solo para ti, sino para todos los que aprenderán con este material
    ¡Buen trabajo! :) Si todavía no lo hiciste, ahora prueba usar un emulador. Es divertidísimo

    • Eso de que “hoy en día, a los 17 años, se puede programar pegando cosas que uno no entiende” también aplica a mí. Llevo 26 años haciendo eso
      Si “algún día me voy a topar con un límite”, me pregunto si será pronto
    • Entre los 17 y más o menos los 21 fue, de hecho, la etapa de mi vida como programador en la que menos pegaba cosas
      Hice un framework MVC desde cero, también intérpretes y compiladores, e incluso intenté, por accidente, reinventar desde cero el aprendizaje automático y el procesamiento de lenguaje natural. Hice todo tipo de cosas geniales y divertidas
      Luego descubrí el dinero y el trabajo previo. Si aceptas que otras personas te digan “solo usa esto”, puedes construir mucho más rápido. También con frameworks. Me sorprendió lo fácil que jQuery hacía la vida
      Ahora, varios años después, cosas que antes parecían “solo pegar piezas” hoy se consideran “trabajo avanzado de muy bajo nivel”. Porque encima de esas abstracciones se construyeron nuevas abstracciones
      Las cosas que un principiante hoy puede “más o menos sacar adelante” serán, para la próxima generación, zonas peligrosas de bajo nivel. La programación es genial en ese sentido
    • Estoy fuertemente en desacuerdo. A menos que estés apuntando a un puesto que haga solo tareas técnicas específicas en un campo muy estrecho, al final la capacidad de leer documentación y conectar servicios en la nube con librerías de JavaScript se vuelve realmente importante
      De hecho, alguien que abordó la programación de forma académica tiene más probabilidades de sentirse completamente abrumado cuando se encuentra con trabajo que requiere entender varias tecnologías a un nivel básico y seguir adelante
      Sería distinto si en una gran empresa un project manager y un diseñador te acotaran las especificaciones para que pudieras concentrarte solo en ejecutar, pero para la mayoría de la gente esa es una situación poco común
    • Yo era exactamente así cuando entré a la industria hace 10 años, como desarrollador de 30 años. Hay cosas que no cambian
    • O también podrías probar con un sistema operativo. Recuerdo que hace mucho seguí el libro Operating System Concepts y cubría muchos temas parecidos
      Solo recordaba el dinosaurio de la portada, así que tuve que volver a buscar el título
  • Felicidades por haber terminado esta guía
    Se nota esa parte de que, si no vas a la universidad, no hay mucho material integral sobre sistemas, y uno tiene que revisar un montón de recursos de calidad irregular que a veces incluso se contradicen entre sí
    El mejor material que se puede encontrar es Code: The Hidden Language of Computer Hardware and Software, de Charles Petzold. La segunda edición acaba de salir
    https://codehiddenlanguage.com/

    • Creo que The Elements of Computing Systems, de Noam Nisan y Shimon Schocken, junto con el proyecto nand2tetris relacionado, es igual de bueno o mejor. Es mucho más práctico, de construir con las manos
      https://mitpress.mit.edu/9780262539807/the-elements-of-compu...
      https://www.nand2tetris.org/
    • Leí ese libro y me encantó, pero hoy recomiendo mucho en su lugar el juego Turing Complete
      Te lleva de forma excelente desde compuertas NAND hasta llamadas a funciones, con una dinámica interactiva muy entretenida. En vez de leer e imaginar en tu cabeza cómo funcionaría, lo construyes directamente
      Yo llegué a hacer una pequeña SIMD/GPU para manejar una matriz LED, con mi propio ensamblador de CPU y un lenguaje de shaders programable
    • ¡Gracias! Se siente muy orientado al hardware y se ve muy interesante. Creo que lo leeré algún día
    • Al ver el sitio web me acordé de este libro
      Cuando lo compré hace 15 años, mis ojos se nublaron en la parte de arquitectura de CPU, pero tal vez ahora sí esté listo. También compré hace poco la segunda edición
  • Es un artículo que tengo en mi lista de lectura. En su momento, este pequeño detalle me conquistó
    “Agregué espacio al final de todas las páginas para que el lector pueda mantener una altura de mirada consistente.”
    Es un detalle realmente pequeño y, visto en retrospectiva, obvio. Pero resulta sorprendentemente cómodo. Cuando lo noté, supe que era un proyecto hecho con pasión

    • Hay bastantes detalles de UI muy buenos. El hecho de que el autor tenga 17 años también parece relevante
      Se nota que pensó mucho en cómo representar un libro en la web, y parece haber creado convenciones nuevas como las que uno esperaría de una generación nueva. Por ejemplo, es la primera vez que veo ese widget de navegación de capítulos en la parte superior donde los capítulos anterior/siguiente se ven ligeramente opacos
  • Tengo casi 40 años y nunca he logrado algo así. Justo estaba intentando calmar mi síndrome del impostor, así que tendré que calmarlo un poco más
    Excelente trabajo :p

    • Nunca es demasiado tarde para empezar algo que creas que te dará una sensación de logro. Tengas 17, 40 u 80 años
      Todavía queda mucho tiempo, y tampoco hay mucha razón para apurarse. Elige una idea que te inspire y avanza poco a poco en los pequeños ratos libres que puedas dedicarle
      Creo que lo importante es sentir orgullo de ti mismo por hacerlo. El resultado final terminará llegando
  • OP, no uses tu edad como excusa para tu trabajo. Este texto es mejor que lo que la mayoría de la gente podría hacer en toda su vida. Gran trabajo

    • Si no hubiera mencionado su edad, esto no habría recibido ninguna atención aquí. Hay muchísimos materiales excelentes que mueren en new. Decidió usar su edad como elemento de marketing, y claramente funcionó
    • Poner la edad al frente de material de autopromoción, seas joven o mayor, es un ángulo de marketing que funciona desde hace muchísimo tiempo. No lo culparía por aprovecharlo
    • Si el autor no hubiera dicho que tiene 17 años, es muy poco probable que a alguien le hubiera interesado este resumen de CPU de nivel ChatGPT
  • Si a los 17 años crea contenido como este, no puedo ni imaginar las cosas increíbles que hará si elige este campo como profesión. De verdad, impresionante.

    • Después de leer este artículo y revisar los repositorios, yo pensé más bien lo contrario. Ojalá encuentre la forma de seguir haciendo lo que hace ahora sin entrar profesionalmente a la industria tecnológica.
      Espero que su espíritu no termine aplastado por la administración trivial, objetivos corporativos aún más triviales y un crecimiento profesional sin sentido. Ya está haciendo un trabajo excelente, así que ojalá existiera algo como una beca que le permita seguir sin desgastarle el alma en la rueda de hámster de la industria tecnológica.
  • Al OP le vendría bien echarle un vistazo al curso de Casey Muratori en computerenhance.com.
    La tarea de la primera parte del curso es crear un simulador del Intel 8086 de 1978. El ensamblador x86_64 moderno todavía se le parece bastante. Se aprende mucho conocimiento sobre computadoras que es realmente difícil encontrar en otros lugares.

  • Yo también tengo casi 17 años, ¡buen trabajo! :^)
    Hace apenas 20 minutos estaba averiguando cómo extraer el primer byte de un entero de 16 bits y terminé aprendiendo sobre endianess, mientras tú estás escribiendo un libro sobre CPUs.
    Cuando termine Crafting Interpreters definitivamente lo voy a leer. Aunque, como muchos otros proyectos, mi ritmo de avance claramente se ha vuelto más lento, así que puede que tarde un poco lol

  • Muy buen artículo, y también me gusta el estilo. Disfruté mucho la combinación de texto e ilustraciones/memes.
    Sobre los términos RISC/CISC, tengo algunas reservas, pero quizá eso sea cuestión de gustos >.>
    Como alguien que ha pasado tiempo intentando entender cómo funcionan algunas partes del kernel, empatizo con lo doloroso que debió de haber sido crear este artículo. Aun así, al verlo, claramente valió la pena.
    Del lado de NT, Windows Internals cubre mucho de lo que uno quiere saber, y la documentación de Microsoft tampoco está mal. Para mí es claramente mejor que la documentación del kernel de Linux, y es un muy buen punto de partida.
    Si quieres saber más sobre Windows, también recomiendo foros/recursos de hacking de juegos. Hay mucho que filtrar, pero para temas de nicho a veces pueden ser una fuente de información bastante buena.
    Por último, al verlo en un smartphone, la fuente de algunos bloques de código era bastante grande y resultaba difícil de leer. Por ejemplo, el main.c del capítulo 6.
    Además, la frase “si eres un adolescente al que le gustan las computadoras y todavía no estás en el Slack de Hack Club, únete ahora mismo” me recuerda demasiado bien que me estoy volviendo viejo lol