{"id":49791,"date":"2024-05-01T17:03:43","date_gmt":"2024-05-01T20:03:43","guid":{"rendered":"https:\/\/quebrandocontrole.com.br\/site\/?p=49791"},"modified":"2024-05-01T17:03:48","modified_gmt":"2024-05-01T20:03:48","slug":"por-um-punhado-de-bits-fundamentos-da-programacao","status":"publish","type":"post","link":"https:\/\/quebrandocontrole.com.br\/site\/por-um-punhado-de-bits-fundamentos-da-programacao\/","title":{"rendered":"Por Um Punhado De Bits: Fundamentos Da Programa\u00e7\u00e3o"},"content":{"rendered":"\n<p>Na idade do bit lascado, quando ainda n\u00e3o existiam as maravilhosas ferramentas de hoje, conhecidas como &#8220;engines&#8221;, o desenvolvedor de games tinha que escolher entre duas linguagens, para a cria\u00e7\u00e3o de um jogo: o Basic ou o Assembly. Basic \u00e9 uma linguagem de &#8220;conversa\u00e7\u00e3o&#8221; em ingl\u00eas, voltada para iniciantes e que equipava 10 em cada 10 dos computadores dos anos 80. Na verdade eles j\u00e1 vinham com ela de f\u00e1brica pois a \u00fanica forma de usar o computador era escrevendo voc\u00ea mesmo um programa. Ou copiando-o de uma revista, livro, apostila e assim por diante.<\/p>\n\n\n\n<p>Eu disse &#8220;conversa\u00e7\u00e3o&#8221; porque era assim mesmo: voc\u00ea ia &#8220;conversando&#8221; com o computador e instruindo-o a fazer certas coisas. Linha ap\u00f3s linha, numeradas para refer\u00eancia, e cada linha contendo uma determinada instru\u00e7\u00e3o com seus par\u00e2metros. Por exemplo: como fazer uma vari\u00e1vel num\u00e9rica chamada &#8220;A&#8221; conter o valor 15? Simples: LET A=15 ou seja fa\u00e7a A ser igual a 15. Simples assim.<\/p>\n\n\n\n<p>J\u00e1 o Assembly (ou Assembler como a gente chamava nos tempos b\u00edblicos da programa\u00e7\u00e3o) era outro n\u00edvel. Falando diretamente ao &#8220;c\u00e9rebro&#8221; do computador (o processador), ela n\u00e3o exigia a interpreta\u00e7\u00e3o do fonte digitado. O programador era instru\u00eddo a usar mnem\u00f4nicos, na sua grande maioria compuindecifr\u00e1veis. Por exemplo, para fazer a mesma coisa que fizemos em Basic, bastava usar o seguinte: LD A,15 sendo que LD \u00e9 uma forma abreviada de &#8220;LoaD&#8221; e A indica um registrador espec\u00edfico (o acumulador). Ou seja, carregue o Acumulador com o valor 15.<\/p>\n\n\n\n<p>S\u00f3 para ilustrar, programadores do baixo clero, que n\u00e3o dispunham de grandes equipamentos rodando compiladores assembler, tinham que digitar no computador n\u00e3o o mnem\u00f4nico mas os c\u00f3digos hexadecimais correspondentes \u00e0 instru\u00e7\u00e3o desejada e seus par\u00e2metros. Quer ver como? Preste aten\u00e7\u00e3o, nada nessa m\u00e3o, nada na outra e\u2026 3E 0F. A nota\u00e7\u00e3o \u00e9 em hexadecimal porque programador baixo n\u00edvel pensa na base 16 e n\u00e3o na base 10, que \u00e9 o normal. O c\u00f3digo 3E \u00e9 toda a parte LD A, do mnem\u00f4nico e 0F \u00e9 o valor 15 em hexa. Se voc\u00ea pensou que a gente &#8220;assemblava&#8221; de cabe\u00e7a, pensou certo, dai chamarmos de linguagem Assembler, j\u00e1 que o compilador \u00e9 o pr\u00f3prio programador.<\/p>\n\n\n\n<p>Mesmo aparentando semelhan\u00e7as nas instru\u00e7\u00f5es que descrevi acima, esses dois exemplos tem uma diferen\u00e7a fundamental entre eles: o Basic \u00e9 interpretado e o Assembler \u00e9 compilado (n\u00e3o tem a necessidade de interpreta\u00e7\u00e3o, sendo executado imediatamente). E isso importa? Claro, isso reflete diretamente na velocidade de processamento do jogo e isso, mesmo que voc\u00ea tenha sa\u00eddo do coma recentemente, diz tudo sobre se o jogo \u00e9 lento ou n\u00e3o. A briga por mais velocidade n\u00e3o \u00e9 apenas uma competi\u00e7\u00e3o entre hardwares e\/ou lat\u00eancia da internet, mas tamb\u00e9m entre t\u00e9cnicas e linguagens de programa\u00e7\u00e3o.<\/p>\n\n\n\n<p>Enquanto no LD A,15 o processador j\u00e1 sabe o que \u00e9 LD, onde est\u00e1 o A e quanto \u00e9 15, no LET A=15 o processador precisa descobrir que raios de instru\u00e7\u00e3o \u00e9 essa LET, onde est\u00e1 e se j\u00e1 existe a vari\u00e1vel A, se esse sinalzinho engra\u00e7ado que vem depois indica uma atribui\u00e7\u00e3o ou \u00e9 um teste de igualdade e se o 15 est\u00e1 dentro da faixa num\u00e9rica aceit\u00e1vel para aquele caso. E ele vai fazer isso em todas as linhas de programa\u00e7\u00e3o, tantas vezes quanto elas forem executadas dentro do fluxo principal de processamento do jogo. Repetitivo e desnecess\u00e1rio, mas \u00e9 assim que a coisa funciona embora, nos dias atuais, a gigantesca velocidade de processamento dos computadores modernos meio que compensa essa perda de tempo.<\/p>\n\n\n\n<p>Mas n\u00e3o se deixe iludir pela propaganda enganosa do \u00faltimo par\u00e1grafo. Se a sua engine do cora\u00e7\u00e3o, cantada em verso e prosa pela maioria dos desenvolvedores de games, tiver algo como uma pseudo linguagem embutida, linguagem de script, ou coisa do g\u00eanero, pode ter certeza que pelo menos uma boa parte do jogo \u00e9 interpretada e n\u00e3o compilada. Isso \u00e9 bom ou ruim? Depende muito da qualidade e do conhecimento de quem fez a programa\u00e7\u00e3o do referido jogo e principalmente dos prop\u00f3sitos e objetivos do dito cujo.<\/p>\n\n\n\n<p>No final das contas, n\u00e3o existe muita diferen\u00e7a entre programar usando a linguagem A, B ou C porque tudo \u00e9 mesmo uma quest\u00e3o de qu\u00e3o inteligente \u00e9 o fluxo de processamento. Podemos, na melhor das hip\u00f3teses, argumentar que uma linguagem \u00e9 mais produtiva que outra, de acordo com o programa que est\u00e1 sendo feito ou do tipo de computador usado ou mesmo se existe a transmiss\u00e3o via internet na jogada. Tamb\u00e9m podemos escolher por comodidade ou porque conhecemos mais e melhor certos procedimentos de cada uma delas.<\/p>\n\n\n\n<p>\u00c9 ineg\u00e1vel que as engines modernas simplificaram muito a maioria das tarefas banais da programa\u00e7\u00e3o, mas isso tamb\u00e9m tem um pre\u00e7o a ser pago, em termos de velocidade de processamento, tamanho e efici\u00eancia do c\u00f3digo. Afinal, toda escolha tem consequ\u00eancias e a quest\u00e3o nem \u00e9 saber qual \u00e9 a melhor op\u00e7\u00e3o mas sim entender o pre\u00e7o que est\u00e1 pagando por ela.<\/p>\n\n\n\n<p>Entenda, n\u00e3o estou pregando a volta do assembler na cria\u00e7\u00e3o de jogos, muito pelo contr\u00e1rio. S\u00f3 usei esse exemplo (e nem mesmo o Basic ainda \u00e9 usado) para mostrar dois conceitos importantes da programa\u00e7\u00e3o: a interpreta\u00e7\u00e3o e a compila\u00e7\u00e3o. S\u00e3o faces de uma mesma moeda e conhec\u00ea-las pode ajudar muito nas escolhas futuras.<\/p>\n\n\n\n<p>Ainda est\u00e1 achando que para fazer joguinho basta s\u00f3 ter uma ideia? Vai achando\u2026<\/p>\n\n\n\n<p>Ent\u00e3o, se quiser criticar, elogiar, xingar, falar palavras de incentivo, mandar pix pra ajudar na aposentadoria etc, o canal mais eficiente \u00e9 o velho e surrado e-mail: renato@tilt.net. Sinta-se livre pra descer o sarrafo porque nesta altura do campeonato, meu amigo, eu j\u00e1 sofri todas as cr\u00edticas positivas e negativas que um gamedev pode sofrer.<\/p>\n\n\n\n<p>Imagem: equipe Quebrando o Controle<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A linguagem \u00e9 determinante na velocidade do seu game.<\/p>\n","protected":false},"author":78,"featured_media":49859,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[8,1582,6],"tags":[2233,2234,1006,1393,1559],"class_list":["post-49791","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-noticias","category-renato_degiovani","category-ultimas-noticias","tag-assembler","tag-biasic","tag-programacao","tag-renato-degiovani","tag-tilt-online"],"jetpack_featured_media_url":"https:\/\/quebrandocontrole.com.br\/site\/wp-content\/uploads\/2024\/04\/Linguagem-Computador-Renato-Degiovani.webp","wpmagazine_modules_lite_featured_media_urls":{"thumbnail":["https:\/\/quebrandocontrole.com.br\/site\/wp-content\/uploads\/2024\/04\/Linguagem-Computador-Renato-Degiovani-150x150.webp",150,150,true],"cvmm-medium":["https:\/\/quebrandocontrole.com.br\/site\/wp-content\/uploads\/2024\/04\/Linguagem-Computador-Renato-Degiovani-300x300.webp",300,300,true],"cvmm-medium-plus":["https:\/\/quebrandocontrole.com.br\/site\/wp-content\/uploads\/2024\/04\/Linguagem-Computador-Renato-Degiovani-305x207.webp",305,207,true],"cvmm-portrait":["https:\/\/quebrandocontrole.com.br\/site\/wp-content\/uploads\/2024\/04\/Linguagem-Computador-Renato-Degiovani-400x600.webp",400,600,true],"cvmm-medium-square":["https:\/\/quebrandocontrole.com.br\/site\/wp-content\/uploads\/2024\/04\/Linguagem-Computador-Renato-Degiovani-600x600.webp",600,600,true],"cvmm-large":["https:\/\/quebrandocontrole.com.br\/site\/wp-content\/uploads\/2024\/04\/Linguagem-Computador-Renato-Degiovani-1024x864.webp",1024,864,true],"cvmm-small":["https:\/\/quebrandocontrole.com.br\/site\/wp-content\/uploads\/2024\/04\/Linguagem-Computador-Renato-Degiovani-130x95.webp",130,95,true],"full":["https:\/\/quebrandocontrole.com.br\/site\/wp-content\/uploads\/2024\/04\/Linguagem-Computador-Renato-Degiovani.webp",1555,864,false]},"categories_names":{"8":{"name":"Not\u00edcias","link":"https:\/\/quebrandocontrole.com.br\/site\/category\/noticias\/"},"1582":{"name":"Renato Degiovani","link":"https:\/\/quebrandocontrole.com.br\/site\/category\/artigos\/renato_degiovani\/"},"6":{"name":"\u00daltimas not\u00edcias","link":"https:\/\/quebrandocontrole.com.br\/site\/category\/noticias\/ultimas-noticias\/"}},"tags_names":{"2233":{"name":"Assembler","link":"https:\/\/quebrandocontrole.com.br\/site\/tag\/assembler\/"},"2234":{"name":"Biasic","link":"https:\/\/quebrandocontrole.com.br\/site\/tag\/biasic\/"},"1006":{"name":"Programa\u00e7\u00e3o","link":"https:\/\/quebrandocontrole.com.br\/site\/tag\/programacao\/"},"1393":{"name":"Renato Degiovani","link":"https:\/\/quebrandocontrole.com.br\/site\/tag\/renato-degiovani\/"},"1559":{"name":"Tilt Online","link":"https:\/\/quebrandocontrole.com.br\/site\/tag\/tilt-online\/"}},"comments_number":"0","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/quebrandocontrole.com.br\/site\/wp-json\/wp\/v2\/posts\/49791","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/quebrandocontrole.com.br\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/quebrandocontrole.com.br\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/quebrandocontrole.com.br\/site\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/quebrandocontrole.com.br\/site\/wp-json\/wp\/v2\/comments?post=49791"}],"version-history":[{"count":0,"href":"https:\/\/quebrandocontrole.com.br\/site\/wp-json\/wp\/v2\/posts\/49791\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/quebrandocontrole.com.br\/site\/wp-json\/wp\/v2\/media\/49859"}],"wp:attachment":[{"href":"https:\/\/quebrandocontrole.com.br\/site\/wp-json\/wp\/v2\/media?parent=49791"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/quebrandocontrole.com.br\/site\/wp-json\/wp\/v2\/categories?post=49791"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/quebrandocontrole.com.br\/site\/wp-json\/wp\/v2\/tags?post=49791"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}