{"id":11957,"date":"2017-08-16T16:53:52","date_gmt":"2017-08-16T19:53:52","guid":{"rendered":"http:\/\/www.desfavor.com\/blog\/?p=11957"},"modified":"2017-08-16T16:53:52","modified_gmt":"2017-08-16T19:53:52","slug":"linguagens-de-programacao","status":"publish","type":"post","link":"https:\/\/www.desfavor.com\/blog\/2017\/08\/linguagens-de-programacao\/","title":{"rendered":"Linguagens de programa\u00e7\u00e3o."},"content":{"rendered":"<p>Qual a l\u00edngua mais falada no mundo? Se voc\u00ea pensou ingl\u00eas ou mesmo chin\u00eas, talvez n\u00e3o esteja sendo generoso o suficiente com o conceito do que configura uma l\u00edngua. Vou partir do princ\u00edpio que \u00e9 um conjunto codificado de significados que pode ser compreendido por qualquer outra entidade que possa decodific\u00e1-los. Pessoas codificam significados em imagens e sons, principalmente, mas existem outras formas de comunica\u00e7\u00e3o por significados codificados. E se mantivermos essa defini\u00e7\u00e3o aberta para acomodar os zeros e uns usados pelos computadores, temos a\u00ed a resposta da pergunta inicial: a l\u00edngua mais falada no mundo \u00e9 a das m\u00e1quinas. Mas, como essa l\u00edngua funciona?<!--more--><\/p>\n<p>Bom, como toda l\u00edngua, essa precisa de dois lados: o que \u201cfala\u201d e o que \u201cescuta\u201d. Bem in\u00fatil uma l\u00edngua que s\u00f3 uma pessoa saiba, n\u00e3o? Perde quase toda a fun\u00e7\u00e3o dela. No mundo das m\u00e1quinas, podemos chamar o grupo das l\u00ednguas faladas por cada uma delas de linguagens de programa\u00e7\u00e3o. Porque s\u00e3o a partir delas que conversamos com m\u00e1quinas e computadores em geral. E essas linguagens funcionam com a mesma l\u00f3gica das que usamos entre n\u00f3s: informar e compreender.<\/p>\n<p>Mas como voc\u00ea deve ter aprendido ao ver sua v\u00f3 conversando com a televis\u00e3o durante a novela, m\u00e1quinas n\u00e3o s\u00e3o naturalmente muito boas para entender o que queremos, at\u00e9 porque se n\u00e3o forem criadas especificamente com esse objetivo, sequer sabem que estamos por perto. Do mesmo jeito que a mocinha d\u00e1 mais uma chance pro vil\u00e3o apesar dos protestos dos presentes na sala, a m\u00e1quina vai continuar fazendo o que est\u00e1 programada para fazer at\u00e9 algu\u00e9m dizer algo que ela seja capaz de entender e fazer.<\/p>\n<p>E \u00e9 aqui que come\u00e7amos a falar sobre os conceitos de linguagens de programa\u00e7\u00e3o de alto e baixo n\u00edvel (tradu\u00e7\u00f5es fanfarronas de high-level e low-level): existe uma diferen\u00e7a consider\u00e1vel entre o que humanos s\u00e3o capazes de entender e o que m\u00e1quinas (daquelas gigantes em f\u00e1bricas at\u00e9 o seu celular) s\u00e3o capazes de entender. Os famosos zeros e uns do c\u00f3digo bin\u00e1rio s\u00e3o c\u00f3digos humanos para explicar o funcionamento dos elementos mais fundamentais do funcionamento de chips de computadores: a presen\u00e7a ou aus\u00eancia de energia el\u00e9trica em determinado lugar. Dentro do processador do seu computador (ou celular) existem bilh\u00f5es de pequenos objetos que ligam ou desligam de acordo com a mensagem que recebem de fora.<\/p>\n<p>Para falar com a m\u00e1quina nesse grau fundamental do que entendem, s\u00f3 mandando zeros e uns para ela mesmo. Todo o resto s\u00e3o simplifica\u00e7\u00f5es usadas por n\u00f3s, seres humanos, para acelerar o processo de transformar nossas ideias em c\u00f3digo bin\u00e1rio. De uma certa forma, linguagens de programa\u00e7\u00e3o s\u00e3o o que nos permitem mandar informa\u00e7\u00f5es complexas para as m\u00e1quinas, afinal, ningu\u00e9m \u00e9 r\u00e1pido o suficiente para codificar o que est\u00e1 pensando nesse n\u00edvel e ainda ter resultados aceit\u00e1veis.<\/p>\n<p>Por isso, as linguagens sobem de n\u00edvel: as mais b\u00e1sicas trabalham diretamente com zeros e uns, mas j\u00e1 s\u00e3o artefatos hist\u00f3ricos para a imensa maioria das pessoas que sequer passam perto de programa\u00e7\u00e3o. J\u00e1 temos as bases definidas para esse grau de especificidade de zeros e uns, ent\u00e3o podemos usar uma linguagem que converse com essa ao inv\u00e9s de sempre ficar reinventando a roda. Linguagens de baixo n\u00edvel s\u00e3o aquelas que conversam diretamente com os circuitos das m\u00e1quinas, n\u00e3o mais em zeros e uns, mas presumindo alguns conceitos b\u00e1sicos do funcionamento delas: informa\u00e7\u00f5es precisam ser inseridas na mem\u00f3ria da m\u00e1quinas, serem mantidas e manipuladas l\u00e1 dentro de acordo com a necessidade.<\/p>\n<p>Uma linguagem b\u00e1sica como a Basic (ha) basicamente (ha!) diz para o computador como fazer esse gerenciamento de mem\u00f3ria: \u201cpegue a informa\u00e7\u00e3o 1 e coloque no bloco 3, depois troque ela pela informa\u00e7\u00e3o 2 e coloque a 1 no bloco 2, depois some as duas e coloque no bloco 1\u201d\u2026 parece complicado, mas \u00e9 uma das coisas mais \u00f3bvias e diretas que voc\u00ea pode fazer com uma m\u00e1quina. Diz para ela se lembrar de algumas coisas, onde elas est\u00e3o e como manipular elas, sem esquecer de nada no processo.<\/p>\n<p>Apesar de ser um tema interessante, n\u00e3o precisamos ficar muito tempo nas linguagens de baixo n\u00edvel, porque essa parte tamb\u00e9m j\u00e1 est\u00e1 bem definida e via de regra s\u00e3o os pr\u00f3ximos n\u00edveis de linguagem de programa\u00e7\u00e3o que interessam para a humanidade em geral, pelo menos nos dias de hoje. Perceberam o processo? Computadores entendem sequ\u00eancias de ligado e desligado, e existem linguagens que passam essa informa\u00e7\u00e3o pra eles. A partir delas, existem linguagens que controlam como os computadores v\u00e3o usar a mem\u00f3ria que tem para fazer tarefas, sem a necessidade de zeros e uns sendo escritos diretamente por uma pessoa. Mas convenhamos que apesar de no fundo ser tudo a mesma coisa, \u00e9 muito pouco intuitivo ficar decidindo como o computador vai gerenciar suas pe\u00e7as a cada a\u00e7\u00e3o que toma.<\/p>\n<p>Por isso, temos as linguagens de alto-n\u00edvel. Essas seriam aquelas que chegam mais perto das l\u00ednguas humanas, e sem nenhuma surpresa, as mais conhecidas no mundo moderno. Ao inv\u00e9s de ensinar o computador a gerenciar sua mem\u00f3ria, partimos do princ\u00edpio que ele j\u00e1 vai entender isso quando nossa linguagem de alto-n\u00edvel for traduzida para a de baixo-n\u00edvel e depois para a bin\u00e1ria. Com todo esse processo definido, podemos escrever o que queremos, desde que a nossa l\u00edngua escolhida seja compreendida pelas l\u00ednguas mais primordiais da m\u00e1quina.<\/p>\n<p>E o que s\u00e3o as linguagens de alto-n\u00edvel? Bom, o pr\u00f3prio desfavor usa algumas delas \u2013 PHP e JavaScript &#8211; para mostrar o texto que estou escrevendo agora. Minha palavras e todo o arredor que voc\u00ea est\u00e1 vendo na sua tela s\u00e3o zeros e uns e gerenciamento de mem\u00f3ria do seu computador ou celular, mas quando eu tenho que mexer em alguma coisa aqui, posso ser bem mais direto: h\u00e1 uma fun\u00e7\u00e3o do c\u00f3digo desta p\u00e1gina que manda o computador criar um quadrado branco, colocar letra por letra do texto, imagens e links. E se voc\u00ea for ler o c\u00f3digo com calma e conhecendo as \u201cpalavras\u201d dessa l\u00edngua, vai perceber que foram ordens escritas: criar quadrado, pegar texto do banco de dados, mostrar dentro do quadrado, colocar foto espec\u00edfica na parte de cima do quadrado\u2026 e por a\u00ed vai.<\/p>\n<p>L\u00f3gico que n\u00e3o \u00e9 exatamente com essas palavras, mas quando eu fiz o layout desse site, por exemplo, n\u00e3o precisei pensar em como a mem\u00f3ria do seu computador ou celular ia fazer o quadrado, s\u00f3 mandei fazer o quadrado! O seu sistema a\u00ed que est\u00e1 se virando para mostrar as coisas que o desfavor est\u00e1 pedindo para ele mostrar. At\u00e9 por isso sites carregam mais r\u00e1pido ou mais devagar dependendo da sua conex\u00e3o e da velocidade da sua m\u00e1quina. Ou mesmo se eu der uma ordem errada para a linguagem de programa\u00e7\u00e3o, o seu computador pode sofrer com isso, tentando execut\u00e1-la.<\/p>\n<p>E como se fala com um computador em alto-n\u00edvel? Bom, linguagens podem variar, mas a maioria delas segue alguns padr\u00f5es m\u00ednimos, e na minha nunca humilde opini\u00e3o, tem alguns conceitos b\u00e1sicos que explicam como essa l\u00edngua das m\u00e1quinas funciona: vari\u00e1veis, condicionais e repeti\u00e7\u00f5es. Tem mais que isso? Tem muito mais que isso, mas hoje \u00e9 o que vai interessar. Antes disso, vamos entender o seguinte: computadores leem os c\u00f3digos para executar de cima pra baixo, da direita pra esquerda, assim como n\u00f3s ocidentais. O que ler primeiro acontece primeiro.<\/p>\n<p>Vari\u00e1veis s\u00e3o informa\u00e7\u00f5es que queremos guardar na mem\u00f3ria do computador para uso posterior. Normalmente s\u00e3o definidas em algum ponto do c\u00f3digo e podem ser chamadas ou modificadas de acordo com o desejo do programador. O que importa \u00e9 que elas ficam guardadinhas numa prateleira e o programa sabe onde elas est\u00e3o, podendo v\u00ea-las e modific\u00e1-las sempre que precisar. Na linguagem que o desfavor \u00e9 escrito, PHP, definir uma vari\u00e1vel \u00e9 quest\u00e3o de dizer pro computador que: 1) aquilo vai ser uma vari\u00e1vel e 2) qual \u00e9 o conte\u00fado dela.<\/p>\n<p><code>$desfavor = 1;<\/code><\/p>\n<p>Aqui eu estou dizendo que vai ser uma vari\u00e1vel com o cifr\u00e3o antes do nome, dando um nome e dizendo o que ela tem que significar. Neste caso, 1. Pronto, o computador sabe disso e coloca essa informa\u00e7\u00e3o numa prateleira para uso futuro. O ponto e v\u00edrgula no final \u00e9 um aviso pro computador que j\u00e1 dissemos o que quer\u00edamos aqui e que ele pode descer pra pr\u00f3xima linha procurando mais o que fazer.<\/p>\n<p>Condicionais s\u00e3o essenciais para comparar e tomar decis\u00f5es a partir dessas compara\u00e7\u00f5es. Sendo um dos elementos mais b\u00e1sicos de qualquer programa\u00e7\u00e3o, as condicionais v\u00e3o olhar para uma informa\u00e7\u00e3o e decidir o que fazer depois de l\u00ea-la. De novo explicando no PHP:<\/p>\n<p><code>if ($desfavor == 1) {<br \/>\necho \u201coi\u201d;<br \/>\n} else {<br \/>\necho \u201ctchau\u201d;<br \/>\n}<\/code><\/p>\n<p>Agora eu disse o seguinte pro computador. SE (if) ele pegar a vari\u00e1vel desfavor e vir que o resultado dela \u00e9 1 (por isso os dois iguais), pode come\u00e7ar seguir pra linha de baixo e fazer alguma coisa. No caso era escrever oi. OU (else) escrever tchau se a vari\u00e1vel desfavor tivesse qualquer outro significado que n\u00e3o 1. Se eu tivesse mudado o valor de desfavor pra zero, ele teria escrito tchau.<\/p>\n<p>E depois disso, temos as repeti\u00e7\u00f5es. Essa parte \u00e9 bacana porque automatiza muita coisa repetitiva. Basicamente escrevemos um c\u00f3digo dizendo pro computador pra repetir uma a\u00e7\u00e3o at\u00e9 chegar na condi\u00e7\u00e3o final. Meio que como dizer para Fernandinho comer balas at\u00e9 as balas no pote acabarem. Talvez Fernandinho tente comer o pote, mas o computador \u00e9 mais obediente. Acabaram as balas, acabou a tarefa.<\/p>\n<p><code>for ($i=1; $i<=10; $i++) {\necho $i;\n}<\/code><\/p>\n<p>Neste c\u00f3digo acontece o seguinte: ENQUANTO (for) a vari\u00e1vel i (viram o s\u00edmbolo de cifr\u00e3o antes dele?) for menor que 10, pra adicionar mais um no n\u00famero (++) e continuar. E a cada vez que isso acontecer, escrever o valor da vari\u00e1vel i. O resultado desse c\u00f3digo seria o computador contando de 1 at\u00e9 10.<\/p>\n<p>Parece pouco, mas s\u00f3 com essas bases j\u00e1 d\u00e1 pra fazer muita coisa. E as linguagens de programa\u00e7\u00e3o em m\u00e9dia tem zilh\u00f5es de outros truques na manga para gerenciar as informa\u00e7\u00f5es que passamos pra ela. Se voc\u00ea nunca mexeu com nada de programa\u00e7\u00e3o e ficou interessado(a), eu s\u00f3 espero que essa explica\u00e7\u00e3o extremamente b\u00e1sica te mostre que n\u00e3o \u00e9 t\u00e3o complicado quanto parece se voc\u00ea come\u00e7ar bem do comecinho. Hoje em dia, programar \u00e9 conversar com uma m\u00e1quina e pedir para ela fazer coisas. E ela vai te obedecer cegamente se voc\u00ea souber COMO dar ordens para ela.<\/p>\n<p>S\u00f3 parece complicado. Mas \u00e9 apenas uma quest\u00e3o de conhecer as palavras. E como voc\u00eas podem ter visto, saber ingl\u00eas acelera bastante as coisas. Sugiro come\u00e7ar aprendendo com a linguagem C, das quais derivam v\u00e1rias das outras mais famosas e utilizadas hoje em dia (inclusive a PHP que eu demonstrei, a mais usada pra fazer p\u00e1ginas de internet). O que n\u00e3o falta s\u00e3o cursos online gr\u00e1tis.<\/p>\n<p>Os programadores que nos acompanham v\u00e3o dar chiliques pela minha simplifica\u00e7\u00e3o, ou mesmo dizerem quais s\u00e3o as melhores linguagens a aprender e porque as que eu mencionei s\u00e3o horr\u00edveis, mas isso tem em todos os campos. Inclusive, se algu\u00e9m quiser indicar boas linguagens para aprender, adoraria ler aqui.<\/p>\n<p class=\"uk-background-muted uk-padding\">Para me chamar de nerd, para dizer que agora \u00e9 nerd porque entendeu, ou mesmo para dizer que eu mere\u00e7o um pr\u00eamio por n\u00e3o fazer piadas com garotos ou garotas de programa: <a href=\"mailto:somir@desfavor.com\">somir@desfavor.com<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Qual a l\u00edngua mais falada no mundo? Se voc\u00ea pensou ingl\u00eas ou mesmo chin\u00eas, talvez n\u00e3o esteja sendo generoso o suficiente com o conceito do que configura uma l\u00edngua. Vou partir do princ\u00edpio que \u00e9 um conjunto codificado de significados que pode ser compreendido por qualquer outra entidade que possa decodific\u00e1-los. Pessoas codificam significados em [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":11958,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32],"tags":[],"class_list":["post-11957","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desfavor-explica"],"_links":{"self":[{"href":"https:\/\/www.desfavor.com\/blog\/wp-json\/wp\/v2\/posts\/11957","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.desfavor.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.desfavor.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.desfavor.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.desfavor.com\/blog\/wp-json\/wp\/v2\/comments?post=11957"}],"version-history":[{"count":0,"href":"https:\/\/www.desfavor.com\/blog\/wp-json\/wp\/v2\/posts\/11957\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.desfavor.com\/blog\/wp-json\/wp\/v2\/media\/11958"}],"wp:attachment":[{"href":"https:\/\/www.desfavor.com\/blog\/wp-json\/wp\/v2\/media?parent=11957"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.desfavor.com\/blog\/wp-json\/wp\/v2\/categories?post=11957"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.desfavor.com\/blog\/wp-json\/wp\/v2\/tags?post=11957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}