Categorias
Programação

Linguagem C: Os 3 Estágios da Compilação

Hoje teremos mais um daqueles posts em que não falamos diretamente de programação, mas sim dos estágios da compilação de um programa em linguagem C.

Talvez de momento você possa imaginar que isto é desnecessário, já que o compilador faz todo o processo pela gente, mas na realidade, dominar os procedimentos é um passo essencial, e eu vou explicar melhor o porquê:

Tudo é divertido enquanto as coisas dão certo. Concorda?

  • Você escreve seu programa;
  • O GCC compila e gera um arquivo executável;
  • Você executa o arquivo gerado.

Só quem já tentou programar alguma vez na vida sabe que nem sempre isto sai como o esperado.

É comum que no começo a gente sempre pense que o problema está no código em si. Procuramos por horas e horas e o problema, no final das contas, era só alguma opção que faltava passar para o compilador poder fazer a coisa certa.

Existe código que “compila”, mas ainda assim não funciona, exatamente por ter dado algum erro no processo posterior ao da compilação, e que nem sempre é lembrado ou até mesmo conhecido pelo programador.

Por isso que sempre digo que precisamos entender as ferramentas e os processos, e não só a programação em si. Quanto mais você entende do processo, melhor você programa, e quanto melhor você programa, melhor você entende o processo.

É um via de mão dupla, e por isso hoje separei este conteúdo pra você desde já ir se acostumando.

O processo de compilação pode ser dividido em diversos estágios, e é de extrema importância pelo menos entender os 3 principais:

  1. Pré-processamento
  2. Compilação propriamente dita (traduzir código de alto nível em código de baixo nível: saiba mais aqui)
  3. Linking (ou “ligação”, mas pra ser sincero nunca ouvi ninguém falando assim em português)

No vídeo eu mostro o que é o pré-processamento, o que acontece com o seu código por debaixo dos panos depois que ele é processado, e explico a importância do estágio de Linking, que tem tudo a ver com as #include‘s, que já vimos nas aulas sobre bibliotecas.

Se você gostou da ideia de poder incluir bibliotecas escritas por outras pessoas no seu código, então você precisa entender o que é esse tal de Linking.

Algo que esqueci de comentar no vídeo e que é legal de saber: O pré-processador também é responsável por remover todos os comentários do seu código antes de passar para o estágio de compilação. Abordaremos o assunto de comentários um pouco mais para a frente.

E agora que você já conheceu o comando ldd, que tal passar para o ldd outros programas aí do seu computador e ver quais bibliotecas eles estão usando por debaixo dos panos?

Se você caiu aqui “de paraquedas”, clique aqui para assistir/ver os posts na ordem em que foram lançados.

Nota: O pessoal da QtCon me avisou que ainda tem ingressos para os dois dias de palestras (para os treinamentos já se esgotaram). Para o pessoal de São Paulo que tiver interesse em Qt, dê uma olhada no site oficial do evento: br.qtcon.org. Minha palestra falando do Ubuntu Phone a princípio está marcada para o Sábado dia 19 de Agosto de 2017. Apareça lá pra gente bater um papo 🙂

E antes de fechar o post, uma pergunta para você: tá com um tempo livre? Então deixa um comentário aqui em baixo (ou lá no youtube mesmo se preferir).

Um abraço!

Categorias
Programação

Funções em linguagem C, Bibliotecas e Libc – Parte 2

Finalmente está no ar a segunda parte do conteúdo de funções e bibliotecas!

Se você ainda não assistiu a primeira parte, o post anterior está aqui neste link.

Hoje vamos aprender como utilizar algumas funções matemáticas fornecidas pela glibc através da “math.h” e algumas funções de uso geral da “stdlib.h”.

De quebra vamos aprender rapidamente o tipo de variável “double”, que nos permite representar um número “real” (com casas decimais), e veremos como pedir para o printf() formatar este tipo de valor adequadamente quando impresso na tela.

Talvez você perceba que o ritmo da aula foi meio acelerado, mas logo voltamos à nossa “programação normal” 🙂

Caso tenha curiosidade de olhar tudo o que a Glibc oferece para você usar no seu programa, vou deixar o link da documentação abaixo. Não se assuste com a quantidade de informação. Realmente é bastante coisa, mas de passo em passo a gente chega lá.

Como exercício você pode procurar no documento as funções que aprendemos hoje na aula, e talvez descobrir outras funções semelhantes.

https://www.gnu.org/software/libc/manual/html_mono/libc.html

Eu sei que olhar documentação nem sempre é um processo divertido, mas pense assim: Melhor gastar 2 minutos do seu tempo olhando e entendendo a documentação de algo que já existe do que gastar 1 hora programando algo do zero e que já havia sido feito por outra pessoa.

Para finalizar, tenho dois avisos:

  1. Nos dias 18, 19 e 20 de Agosto de 2017 estará acontecendo a primeira QtCon do Brasil em São Paulo. Farei uma palestra sobre o que aprendemos no desenvolvimento do Ubuntu Phone usando o framework Qt. A programação do evento está muito legal e terá diversas palestras interessantes. Algumas pessoas que acompanham aqui já me avisaram que comparecerão e será um prazer conversar pessoalmente com vocês.
  2. Para os alunos do curso de terminal: Neste domingo lançamos o Curso de Shell Script e alunos do curso anterior recebem 50% de desconto. Um cupom foi enviado no mesmo e-mail utilizado no cadastro do EAD. Se por qualquer motivo você não recebeu o seu, por favor entre em contato com o EAD do Diolinux. Caso ainda deseje fazer o curso anterior, ao final você também receberá o desconto para prosseguir no de Shell Script.

Um abraço e até mais.

Categorias
Programação

Funções em linguagem C, Bibliotecas e Libc – Parte 1

Já imaginou você emprestar um livro e adquirir instantaneamente todo o conhecimento sem nem precisar ler? Parece bom demais pra ser ver verdade, não é? Mas esta é a mágica das bibliotecas em linguagens de programação, e que vamos aprender um pouco melhor no vídeo hoje. Vamos também entender o que são funções em linguagem C.

Para você não se assustar muito, já adianto que o vídeo de hoje é o maior vídeo que já gravei aqui pro site. Um combo de uma hora de duração.

Tópicos abordados:

  • Programar direto na linha de comando (opcional) do seu computador;
  • Instalar o compilador de linguagem C da GNU (gcc);
  • Aprender a compilar seu programa com o gcc manualmente no terminal;
  • Aprender o que são funções usando o exemplo da minha cafeteira italiana;
  • Fazer um paralelo entre funções em linguagem C e funções da matemática;
  • Aprender o que são bibliotecas e como elas vão facilitar sua vida na programação;
  • Mostrar exemplos de bibliotecas open source que você pode usar no seu programa.
  • Aprender o que é a libc e a glibc;
  • Aprender o que exatamente significa “#include <stdio.h>”, e o que isso tem a ver com o Neo do Matrix.
  • Aprender a usar as funções puts(), putchar() e printf().

Como você deve ter visto, é bastante conteúdo e por isso recomendo que você reserve uma hora do seu dia para assistir e executar os procedimentos da aula no seu computador.

Segue aqui os links que citei durante a aula:

Como nesta aula não consegui vencer todo o conteúdo que tinha preparado, dividi o post em duas partes.

Na próxima aula veremos algumas outras funções em linguagem C oferecidas pela libc: funções matemáticas e funções de uso geral.

Agora me diga aí nos comentários sua opinião pra eu poder ir adequando as aulas aos poucos e achar a melhor forma de trazer o conteúdo pra você.

Um abraço e nos vemos na parte 2.

Categorias
Programação

Programação em C: Seu primeiro programa em 7min e 40s

Talvez eu seja suspeito para falar, mas sou de carteirinha de programação em C (e C++ também).

Em toda a minha carreira a linguagem C esteve presente. Mesmo quando ainda não trabalhava diretamente com programação, mas queria simplesmente alterar o funcionamento de um programa, volta e meia caía um código em C ou C++ nas minhas mãos.

Bom, C não foi a primeira linguagem que eu aprendi. Eu comecei com “Basic” quando era ainda um pré-adolescente, e alguns anos depois aprendi algo com “Visual Basic”.

Passei por diversas outras linguagens (shell, python), até que na faculdade finalmente encarei a programação em C, que para minha surpresa não era aquele bicho de 7 cabeças que muita gente dizia por aí.

Sem falar que depois de aprender C entendi muitos “porquês” de coisas que eu fazia nas outras linguagens, mas não entendia muito bem o motivo.

Programação em C e C++ no mundo real

Ainda hoje ouço gente falar que aprender programação em C e C++ é bobagem, porque existem outras linguagens mais modernas, mas isso está longe de ser verdade. Quer alguns exemplos?

  • O kernel Linux é todo feito em C;
  • No Ubuntu o Unity8 é todo feito em C++ (usando Qt e Qml);
  • Desenvolvemos todos os componentes da pilha de telefonia do Ubuntu Phone em C++;
  • O Unity7 foi escrito em C++;
  • O Kde é escrito em C++ (Usando Qt também);
  • O aplicativo do Telegram para desktop é feito em C++ (E Qt);
  • E a lista aqui poderia continuar indefinidamente…

C e C++ são aquelas linguagens que nunca ficam velhas.

Os anos passam e elas continuam lá, firmes e fortes. E mesmo que você pretenda atuar em ramos dominados por outras linguagens (como páginas web ou aplicativos para Android e iOS), ainda assim boa parte dos conceitos que você aprende em C e C++ continuam valendo para outras linguagens: PHP, javascript, java, objective-c, python, shell scripting, etc.

Então recomendo que aprenda C (ou pelo menos o básico da linguagem) de começo e depois as coisas vão ficar mais fáceis quando você precisar aprender outras linguagens.

E por falar em começo… gravei esta vídeo-aula explicando como você pode dar o seu passo inicial e escrever o seu primeiro programa em linguagem C.

Este é o menor programa possível de ser criado, e em menos de 8 minutos você já vai ter escrito, compilado, executado e entendido o que ele faz.

Diz pra gente aí nos comentários o que você achou.

Abraço!

Categorias
Programação

Linguagens de Programação: O que você precisa saber antes de começar sua jornada como programador.

Aprender uma nova língua nos permite expandir nossos horizontes, e a mesma coisa acontece com linguagens de programação. Quer apostar? Então pensa assim:

Com quantas pessoas no mundo você conseguiria se comunicar hoje sabendo falar somente Português? 250 milhões (sim, eu procurei no Google). Até aí tudo bem, mas..

Se você aprender Inglês, este número aumenta para quase 600 milhões.
E se você aprender Mandarim então… este número vai para quase 2 bilhões de pessoas!

E se eu te perguntar hoje: Com quantos processadores você consegue se comunicar hoje?

Aliás, você sabia que a língua nativa que eles entendem chama-se Assembly?

Outra pergunta: Você sabia que nem todos os processadores falam a mesma língua, e você sabia que você pode, sim, se comunicar com todos eles sem falar a sua língua nativa?

Em resumo, é isso que a maioria dos programadores faz no seu dia a dia. Conversa com processadores, mesmo sem saber falar a língua deles, através de alguns tradutores que chamamos de Compiladores e Interpretadores.

Este é o assunto que eu cubro com mais detalhes neste quase-podcast, que eu gravei essa semana. Como parte deste experimento aqui (de ensinar programação), estou testando o formato de podcast em vez de vídeo.

Sem mais delongas, ouça aqui o episódio pra entender melhor o que são linguagens de programação, de alto nível, de baixo nível, e porque eu digo que ao contrário do que muita gente pensa, linguagem de máquina é na verdade “muito simples“.

**Aviso 1: Se você é novo por aqui e não recebeu meus e-mails anteriores, veja os posts do Modelo Orquestra e da Dupla Dinâmica antes de prosseguir.

**Aviso 2: No final do episódio eu faço umas perguntas que eu gostaria que você deixasse nos comentários a sua opinião.

Espero que tenha gostado deste conteúdo. Tenho certeza que em breve vamos debulhar umas linhas de código juntos.

Um Abraço!