6 pontos por GN⁺ 2023-08-10 | 1 comentários | Compartilhar no WhatsApp
  • Uma explicação técnica sobre como um computador executa um programa do começo ao fim, com foco em entender como ele funciona desde a inicialização até a execução de programas
  • Parte de perguntas como: o que realmente acontece quando um programa é executado, se o programa é executado diretamente na CPU, o que são syscalls e como funcionam, e como vários programas conseguem rodar ao mesmo tempo
  • O pano de fundo é a percepção de que, para quem não vai para a universidade, não há tantos materiais abrangentes sobre sistemas, e é preciso consultar várias fontes de qualidade desigual e às vezes contraditórias
  • Com base em algumas semanas de pesquisa e em quase 40 páginas de anotações, o material tem como objetivo organizar o que foi aprendido em um texto único e sólido
  • Para leitores que querem uma leitura rápida ou sentem que já conhecem o assunto, há um link separado para Chapter 3: How to Run a Program

1 comentários

 
GN⁺ 2023-08-10
Opiniões do Hacker News
  • Olá! Sou a Lexi, autora deste artigo/minilivro.
    Existe aquela pergunta clássica: “o que acontece quando você abre um site?”, mas eu sempre tive mais curiosidade sobre “o que acontece quando você executa um programa?”. Há uns 3 meses, fiquei tão frustrada por não conseguir responder a essa pergunta que decidi estudar por conta própria.
    Tudo que sei sobre programação aprendi sozinha, então achei que isso também seria fácil — mas não foi nem um pouco. A maior parte do material online sobre como sistemas operacionais e CPUs funcionam era péssima, e quase não havia material. Então, enquanto estudava, pensei que deveria criar um bom recurso eu mesma; ao organizar o que fui aprendendo, acabei com um Google Doc de 60 páginas, e foi a partir daí que comecei a escrever.
    Só que, enquanto escrevia, percebi que uma parte considerável daquele documento gigantesco estava errada, então precisei pesquisar mais. Nesse ciclo de revisar e corrigir repetidamente, a qualidade do material na internet continuava ruim, e eu precisava tornar o texto melhor. Também precisava de ilustrações e diagramas, mas eu não sabia desenhar, então abri o Figma e fui experimentando; desenhei algumas partes com um tablet Wacom que ganhei em um hackathon.
    Agora, uns 3 meses depois, cheguei a um resultado do qual realmente me orgulho. Fico feliz em compartilhar a versão final de Putting the "You" in CPU, incluindo até as ilustrações meio desajeitadas. Este trabalho foi criado como parte do Hack Club (https://hackclub.com), uma comunidade de estudantes do ensino médio que gostam de computadores.
    Algumas semanas atrás, uma versão ainda em andamento acabou recebendo atenção no HN por acaso, e fiquei muito grata pelo feedback que recebi. Desde então, organizei bastante coisa, e só agora estou satisfeita o suficiente para compartilhá-la com o mundo por conta própria.
    O site é um projeto estático em HTML/CSS, e escrevi tudo do zero. Gosto especialmente do componente de navegação. Espero que vocês se divirtam lendo e que ele se torne um recurso com o qual qualquer pessoa possa aprender.

    • Só dei uma passada por cima, mas parece um livro introdutório muito bom, e gostei do estilo.
      Escrever um material assim quando você está aprendendo algo novo por conta própria é uma ótima abordagem. Isso deixa seu processo de pensamento mais claro e ajuda a encontrar partes que, no começo, você achava que tinha entendido, mas que ainda estavam nebulosas.
      Também gostei desta frase no final: “Enquanto escrevia este texto, conversei bastante com o GPT-3.5 e o GPT-4. Eles mentiram muito e a maior parte das informações foi inútil, mas às vezes ajudaram bastante a destravar problemas. Se você conhece os limites dos LLMs e desconfia extremamente de tudo que eles dizem, a soma total da ajuda pode ser positiva. Mas eles escrevem muito mal. Não deixe que escrevam por você.” Projeto excelente.
    • Depois de ler as primeiras páginas, meu único feedback é que seria bom reduzir as expressões fofinhas.
      Por exemplo, em um contexto como “A CPU é responsável por todos os cálculos. Ela é o chefão. Shazam alakablam...”, o texto flui muito melhor se você remover as frases brincalhonas e escrever algo como “A CPU é responsável por todos os cálculos. A partir do momento em que você liga o computador, ela começa a executar instruções uma por uma”.
      Não sou uma pessoa tecnicamente muito profunda, mas, do ponto de vista de alguém que é pago para escrever, é assim que me parece. O trabalho em si é ótimo, então continue.
    • Não pesquisei por conta própria, mas acho difícil acreditar que a maior parte das informações fosse tão difícil de encontrar ou estivesse tão errada, pelo menos se você souber onde procurar.
      Esses temas costumam ser bem abordados em disciplinas de arquitetura de computadores e sistemas operacionais em nível de graduação. Hoje em dia, elas saíram de moda e, na maioria dos casos, viraram optativas.
      Várias universidades publicaram aulas gratuitas, e também há livros escritos por professores da área. Se quiser algo mais próximo das tendências atuais, palestras de conferências técnicas relacionadas também são bastante úteis.
      Ainda assim, ensinar é uma arte subestimada, e tornar informações mais acessíveis ou mais divertidas e interativas certamente tem muito valor.
    • Quero destacar que a LWN (https://lwn.net/) há muito tempo se dedica a produzir informações sobre sistemas operacionais que não são péssimas. Dê uma olhada e, se puder, participe :)
    • Ainda só passei os olhos pelo texto, mas parece excelente. Parabéns, e continue fazendo esse tipo de trabalho.
      No passado trabalhei como engenheiro de pesquisa; no meu caso, eu era engenheiro de software em um laboratório universitário que fazia pesquisa em segurança de computadores. Como outro comentário mencionou que aulas de sistemas operacionais são optativas, há até alunos de pós-graduação que não têm esse nível de compreensão de sistemas operacionais.
      É difícil encontrar boas informações, mas elas certamente existem. O fato de você ter sintetizado informações difíceis de encontrar e transformado em uma forma melhor é prova disso. Minha formação é em matemática, mas aprendi computação por conta própria. A capacidade de aprender desse jeito e de comunicar informações altamente técnicas de forma acessível é realmente importante e não deve ser subestimada.
      Vou compartilhar só dois links, senão isso pode se estender sem fim. Primeiro, https://git.lain.faith/sys64738/airs-notes.git e o índice da parte sobre linkers em https://lwn.net/Articles/276782/. Se você apenas arranhou a superfície de ELF e linking, a série de 20 posts do blog de Ian Lance Taylor, junto com tópicos adicionais, cobre tudo que você queria saber sobre ELF — e até coisas que fazem você duvidar de como os comandos sequer funcionam. Também aparece brevemente o DWARF, companheiro do ELF, que é também uma máquina virtual usada toda vez que ocorre uma exceção em C++.
      Segundo, https://0xax.gitbooks.io/linux-insides/content/ também é um excelente projeto. Ele acompanha, de forma legível para humanos, como o kernel Linux faz várias coisas. Tenho quase certeza de que já foi compartilhado no HN.
  • Muito bem escrito, e parabéns por se aprofundar nesse tipo de assunto
    Hoje em dia, uma pessoa de 17 anos consegue se virar até certo ponto “programando” ao juntar coisas que não entende, mas acho que, no fim, vai bater em um limite. Por isso, o que você está fazendo agora tem muito valor, não só para você, mas para todo mundo que vai aprender com este material
    Mandou bem :) se ainda não fez isso, experimente usar um emulador agora. É divertido demais

    • Essa história de que “hoje em dia, uma pessoa de 17 anos pode programar juntando coisas que não entende” também se aplica a mim. Faço isso há 26 anos
      Se “um dia vou bater em um limite”, fico curioso para saber se isso vai acontecer logo
    • Dos 17 aos 21 anos, mais ou menos, foi justamente a fase em que eu menos juntava coisas prontas na minha vida de programador
      Criei frameworks MVC do zero, fiz interpretadores e compiladores e, sem querer, também tentei reinventar machine learning e processamento de linguagem natural do zero. Fiz todo tipo de coisa legal e divertida
      Aí descobri dinheiro e o estado da arte. Percebi que, se eu aceitasse quando outras pessoas diziam “é só usar isto aqui”, conseguia construir as coisas muito mais rápido. Frameworks também. Foi surpreendente ver como o jQuery facilitava a vida
      Agora, alguns anos depois, coisas que antes pareciam “só juntar peças” passaram a ser vistas como “trabalho avançado de baixíssimo nível”. Porque construímos novas abstrações em cima daquelas abstrações
      As coisas que um iniciante hoje consegue “levar mais ou menos” serão, para a próxima geração, áreas perigosas de baixo nível. Programação é excelente nesse sentido
    • Discordo fortemente. A menos que você esteja mirando uma vaga em uma área muito estreita fazendo apenas um tipo específico de trabalho técnico, no fim a capacidade de ler documentação e costurar serviços em nuvem com bibliotecas JavaScript se torna realmente importante
      Na verdade, alguém que abordou programação de forma acadêmica tem mais chance de ficar completamente sobrecarregado quando encontra um trabalho em que precisa entender várias tecnologias em nível básico e seguir em frente
      Seria diferente se, em uma gigante de tecnologia, gerentes de projeto e designers estreitassem as especificações para você poder se concentrar só na execução, mas para a maioria das pessoas essa é uma situação rara
    • Eu era exatamente assim quando entrei no setor 10 anos atrás, como desenvolvedor de 30 anos. Tem coisas que não mudam
    • Ou então também vale experimentar um sistema operacional. Lembro que, muito tempo atrás, acompanhei o livro Operating System Concepts e cobri muitos assuntos parecidos
      Eu só lembrava do dinossauro na capa, então tive que procurar o título de novo
  • Parabéns por concluir este guia
    Se você não for para a universidade, dá para perceber o trecho em que foi preciso vasculhar um monte de materiais abrangentes sobre sistemas, que não são muitos, têm qualidade irregular e às vezes entram em conflito entre si
    O melhor material que você pode encontrar é Code: The Hidden Language of Computer Hardware and Software, de Charles Petzold. A 2ª edição acabou de sair
    https://codehiddenlanguage.com/

    • Acho que The Elements of Computing Systems, de Noam Nisan e Shimon Schocken, e o projeto nand2tetris relacionado são tão bons quanto, ou até melhores. É uma abordagem muito mais mão na massa
      https://mitpress.mit.edu/9780262539807/the-elements-of-compu...
      https://www.nand2tetris.org/
    • Li esse livro e gostei muito, mas hoje recomendo fortemente, no lugar dele, o jogo Turing Complete
      Ele leva você muito bem de portas NAND até chamadas de função, em um formato interativo muito divertido. Em vez de ler e imaginar na cabeça como tudo funciona, você constrói diretamente
      Eu cheguei a criar minha própria assembly de CPU e até uma pequena SIMD/GPU que aciona uma matriz de LEDs com uma linguagem de shader programável
    • Obrigado! Parece ter uma pegada de hardware e ser muito interessante. Acho que vou ler algum dia
    • O site me fez lembrar desse livro
      Quando comprei, 15 anos atrás, meus olhos ficavam vidrados na parte de arquitetura de CPU, mas talvez agora eu esteja pronto. Também comprei recentemente a 2ª edição
  • É um texto que coloquei na minha lista de leitura. No passado, este pequeno detalhe específico me conquistou
    “Coloquei margem na parte inferior de todas as páginas para permitir que o leitor mantenha uma altura de olhar consistente.”
    É um detalhe muito pequeno e, em retrospecto, óbvio. Mas é surpreendentemente confortável. Quando percebi isso, soube que era um projeto movido por paixão

    • Há vários detalhes de UI muito bons. O fato de o autor ter 17 anos também parece ter relação com isso
      Ele parece ter pensado bastante em como representar um livro na web e criado novas convenções que se poderia esperar de uma nova geração. Por exemplo, acho que foi a primeira vez que vi o widget de navegação de capítulos no topo mostrar os capítulos anterior/seguinte levemente opacos
  • Tenho quase 40 anos e nunca consegui fazer algo assim. Eu estava justamente tentando acalmar minha síndrome do impostor, agora vou ter que acalmar mais ainda
    Mandou muito bem :p

    • Nunca é tarde demais para começar algo que pareça capaz de dar uma sensação de realização. Seja aos 17, aos 40 ou aos 80
      Ainda há bastante tempo, e há poucos motivos para correr. Escolha uma ideia que inspire você e vá fazendo aos poucos, no pequeno tempo livre que conseguir encontrar
      Acho que o essencial é sentir orgulho de si mesmo por estar fazendo aquilo. O resultado final acaba vindo
  • OP, não use sua idade para justificar o trabalho. Este texto é melhor do que a maioria das pessoas conseguiria fazer na vida inteira. Trabalho excelente

    • Se ele não tivesse mencionado a idade, não teria recebido nenhuma atenção aqui. Há muitos materiais excelentes que morrem no new. Ele decidiu usar a idade como elemento de marketing, e claramente funcionou
    • Colocar a idade na frente de um material de autopromoção, seja você jovem ou velho, é um ângulo de marketing que funciona desde sempre. Não quero culpá-lo por ter aproveitado isso
    • Se o autor não tivesse dito que tem 17 anos, é muito improvável que alguém se interessasse por este resumo de CPU no nível do ChatGPT
  • Se alguém cria um conteúdo desses aos 17 anos, nem consigo imaginar que coisas incríveis fará no futuro se escolher essa área como profissão. Realmente impressionante.

    • Ao ler este texto e dar uma olhada nos repositórios, pensei justamente o contrário. Espero que encontre um jeito de não entrar profissionalmente no setor de tecnologia e de continuar fazendo o que já faz agora.
      Espero que sua alma não seja esmagada por burocracias triviais, metas corporativas ainda mais triviais e crescimento de carreira sem sentido. Você já está fazendo um trabalho excelente; seria ótimo se existisse algo como uma bolsa/fellowship que permitisse continuar sem ter a alma moída na roda de hamster da indústria de tecnologia.
  • Acho que o OP deveria dar uma olhada no curso de Casey Muratori em computerenhance.com.
    A tarefa da primeira parte do curso é criar um simulador do Intel 8086 de 1978. O assembly x86_64 moderno ainda se parece bastante com aquilo. Você aprende muito conhecimento sobre computadores que é realmente difícil de encontrar em outros lugares.

  • Como alguém que também tem quase 17 anos, mandou bem! :^)
    Há apenas 20 minutos eu estava tentando descobrir como extrair o primeiro byte de um inteiro de 16 bits e acabei aprendendo sobre endianness, enquanto você está escrevendo um livro sobre CPUs.
    Quando eu terminar Crafting Interpreters, com certeza vou ler. Mas, como muitos outros projetos, meu ritmo certamente desacelerou, então pode levar um tempo lol

  • Texto muito bom, e gostei do estilo. A combinação de texto com ilustrações/memes foi realmente divertida.
    Quanto ao termo RISC/CISC, tenho algumas ressalvas, mas talvez isso seja questão de gosto de cada um >.>
    Como alguém que já passou tempo tentando descobrir como partes do kernel funcionam, consigo imaginar o quanto o processo de criar este texto deve ter sido doloroso. Ainda assim, pelo resultado, valeu muito a pena.
    Do lado do NT, Windows Internals cobre bastante do que você talvez queira saber, e a documentação da Microsoft também não é ruim. Para mim, é definitivamente melhor que a documentação do kernel Linux, e é um ótimo ponto de partida.
    Se quiser saber mais sobre Windows, também recomendo fóruns/materiais de game hacking. Há muita coisa para filtrar, mas em tópicos de nicho às vezes eles são fontes de informação bem boas.
    Por fim, ao visualizar no smartphone, alguns blocos de código estavam com a fonte bem grande e difíceis de ler. Por exemplo, o main.c do capítulo 6.
    Além disso, a frase “se você é adolescente, gosta de computadores e ainda não está no Slack do Hack Club, entre agora mesmo” me lembra muito bem que estou ficando velho lol