Categorias
Programação

Introdução à Lógica (de programação) – Você já sabe …

Lógica de programação é sem sombra de dúvida um dos temas mais “temidos” de quem começa a programar. Reconheço que o próprio nome é de certa forma algo intimidador.

Já comentei em outros posts que não gosto de falar “lógica de programação” já de cara, principalmente por parecer que lógica é algo que só existe na programação.

Eu explico no vídeo de hoje que lógica está presente na nossa vida em vários momentos, e se você entendeu esta exata frase aqui, então eu posso afirmar que você já sabe lógica (pelo menos até um certo nível).

Lógica não nasceu na programação, e quando começou a ser estudada, nem se imaginava que um dia computadores existiriam.

Lógica é simplesmente uma ferramenta que nós utilizamos na computação para conseguir, dentre outras coisas, controlar a forma como nosso programa é executado pelo processador, dando a impressão de que ele consegue tomar decisões.

Se você já viu o post em que comparo um programa de computador com um fluxograma, então você já sabia que em algum momento precisaríamos aprender lógica de programação, e acredito que este seja o momento de termos uma introdução.

Dividi o vídeo em duas partes. Na primeira vou mostrar como já utilizamos lógica quando falamos em Português, e na segunda iremos trazer o conhecimento de lógica para dentro da linguagem C.

Para acompanhar o conteúdo de hoje, os únicos conhecimentos prévios que você precisará ter são:

  • Saber falar Português 🙂
  • Saber efetuar as 4 operações básicas da matemática.

Este é um daqueles vídeos (de novo) que vão exigir a sua concentração, então peço que reserve um tempo para assistir com calma.

Disponibilizei o mapa mental que uso no vídeo aqui neste link.

Agora, que tal utilizar nosso conhecimento de lógica para descobrir se o pai vai levar a criança no parque ou não, ou se a pessoa vai continuar gastando o dinheiro com guloseimas nos exemplos que mostrei no vídeo?

Vamos substituir nossas condições por “variáveis” e atribuir valores para elas. Quando as condições forem verdadeiras, as variáveis terão 1, quando forem falsas, terão 0.

Exemplo 1:

Frase: Só vou levar você no parque se você se comportar E se você NÃO arrumar a sua cama.

Duas condições:

  • se comportar (usaremos uma variável chamada comportar)
  • NÃO arrumar a cama (condição com uma negação, nome: arrumar)

Operador lógico que interliga as condições: E lógico

Expressão completa em linguagem C:
(comportar && !arrumar)

Situação proposta 1: Garoto se comporta e arruma a cama.
Portanto variável comporta será 1 e arruma será 1:

  • (1 && !1)
  • (1 && 0)
  • 0

Resultado: Como o resultado é falso (0), o garoto não irá ao parque.

Situação proposta 2: Garoto se comporta e não arruma a cama.
Variável comporta será 1 e arruma será 0:

  • (1 && !0)
  • (1 && 1)
  • 1

Resultado: Como o resultado é verdadeiro (1), o garoto irá ao parque.

Utilizando a estrutura if:

if (comportar && !arrumar) {
    levar_no_parque();
}

Exemplo 2:

Frase: Enquanto eu estiver empregado OU eu estiver com vontade de comer, vou continuar gastando meu dinheiro em guloseimas

Duas condições:

  • estar empregado (nome: empregado)
  • vontade de comer (nome: vontade)

Operador lógico que interliga as condições: OU lógico

Expressão completa em linguagem C:
(empregado || vontade)

Situação proposta 1: Pessoa empregada e sem vontade de comer.
Variável empregado será 1 e vontade será 0:

  • (1 || 0)
  • 1

Resultado: Como o resultado é verdadeiro (1), a pessoa continuará gastando o dinheiro com guloseimas.

Situação proposta 2: Pessoa desempregada e com vontade de comer.
Variável empregado será 0 e vontade será 1:

  • (0 || 1)
  • 1

Resultado: Como o resultado é verdadeiro (1), significa que a pessoa irá continuar gastando o dinheiro em guloseimas.

Utilizando a estrutura while:

while (empregado || vontade) {
    comprar_guloseimas();
}

Veja que basta alterar o conteúdo das variáveis que representam as condições para refletir uma determinada situação, efetuar então a operação lógica remanescente e o seu programa conseguirá “decidir” se deve ou não executar a ação que está dentro do bloco entre chaves, que neste caso é uma chamada de função, mas poderia ser qualquer outra ação.

Espero que o conteúdo de hoje tenha ajudado a esclarecer um pouco de como é possível fazer um programa de computador “tomar uma decisão” baseado em uma expressão lógica, e nos próximos posts abordaremos um pouco mais de como utilizar estas expressões para fazer algo mais elaborado.

Não esqueça de deixar sua opinião nos comentários.

Um abraço!

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: Raio-X na Memória RAM

Se você tem curiosidade de saber como os dados são armazenados na memória RAM do computador, o vídeo de hoje é pra você.

Este é um conhecimento que muitas vezes é ignorado por quem estuda programação, mas que eu considero extremamente necessário.

A Memória RAM é um dos componentes da nossa dupla dinâmica, e é um dos elementos com quem a gente mais interage na nossa vida de programador.

Independente da linguagem de programação que você for aprender, entender o mecanismo usado pelo computador pra guardar os dados na memória RAM irá te ajudar a progredir mais rápido.

No post passado eu mostrei rapidamente como declarar variáveis (Gavetas!) e mudar seus conteúdos.

No vídeo de hoje você vai entender como que estes dados vão se acomodando (alocando) internamente na memória RAM conforme a gente vai manipulando as variáveis dentro do nosso programa.

De quebra você já vai entender de forma resumida o que são os famosos (e tão temidos) “ponteiros” em linguagem C.

E aí? Curtiu? Deixe um comentário aqui em baixo pra eu saber se esse tipo de conteúdo é relevante para você.

Abraço!

Categorias
Programação

Gavetas! Introdução à Variáveis em Linguagem C

No post de hoje você vai ver uma breve introdução à variáveis em linguagem C.

Vou começar com uma pequena história:

Quando eu ainda era pré-adolescente (sim, eu comecei cedo nessa vida computacional) eu perguntei para o meu pai o que eram variáveis.

Eu já programava alguma pouca coisa em BASIC e estava querendo me aprofundar no assunto (antes que você me pergunte: não! não dava pra pesquisar no google. Internet só surgiu alguns anos depois).

A explicação que ele me deu me deixou intrigado e simplesmente nunca saiu da minha cabeça, e hoje vou passar ela adiante, e espero que ela faça sentido pra você também.

Gavetas!

A resposta foi curta e simples: “Variáveis são gavetinhas”.

Na hora eu confesso que não entendi completamente. Faltava conhecimento de algumas outras coisas e conceitos de computação que só fui aprender alguns anos depois.

Já te adianto que quando um programa está rodando, essas gavetas são colocadas dentro de um armário que fica dentro do seu computador, e que eu já expliquei lá no post da dupla dinâmica.

Além disso, descobri que eram as variáveis que, além de outras coisas, ajudariam a controlar aquele nosso fluxograma computacional (que expliquei no vídeo passado), ou seja, sem variáveis não existe programa de computador.

Então no vídeo de hoje vou explicar na prática o básico sobre variáveis em linguagem C (mas que conceitualmente serve para outras linguagens), e no próximo vídeo será a parte técnica e que eu considero necessária para conseguir progredir em programação.

Se você é realmente iniciante em programação, pode já começar a desenvolver sua fluência em ler código *mesmo* sem entender o que o código faz.

Este arquivo seguinte está escrito em linguagem C (parte de um projeto antigo meu).

https://sourceforge.net/p/rnat/code/HEAD/tree/rnat_router/rnat_router.c

É parte do netfilter (código do kernel linux que lida com os pacotes de rede) com algumas modificações que eu fiz, então não se preocupe em entender o que são todas estas coisas…

De momento somente procure no código o local aonde é criada a variável “is_rnat” (que em termos técnicos chama-se: declarar a variável), descubra qual é o tipo dela e o valor que é colocado lá dentro inicialmente, e depois procure no código a linha em que o conteúdo desta variável é alterado.

Lembre-se que o importante aqui é você se acostumar a ler o código e identificar variáveis dentro de um programa em linguagem C, e não o de entender o que o código está fazendo. Isto vem com o tempo, Ok?

Espero que o conteúdo de hoje tenha te ajudado.

Como sempre, comenta aqui em baixo o que você achou.

*** EDITADO – Atenção – Este aviso será removido em breve*** : Como vários de vocês sabem, eu tenho um curso específico sobre terminal lá no EAD do Diolinux (aliás muitos alunos começaram a acompanhar o site aqui depois de finalizar o curso lá, muito obrigado!).

Coloquei no ar recentemente aqui no site uma série gratuita pra ajudar iniciantes a dar pelo menos os primeiros passos no terminal, e quem sabe ao final da série decidir se juntar aos outros alunos lá do curso. Só pra avisar, no final vai ter um momento jabá do curso.. spoiler alert 🙂 Mas mesmo que não tenha interesse no curso  (ou mesmo se já fez o curso), assista à série, pois a gente sempre pode aprender algo novo. Fechado?

Ainda não decidi se vou deixar a série no ar.. então fica aqui o meu convite pra você assistir ao primeiro episódio, e se achar que ela é pra você, cadastre-se para receber os próximos episódios e o material que uso nas explicações.

Se você gostar do conteúdo e achar que conhece alguma pessoa que quer (ou precisa) aprender mais sobre terminal, fique à vontade para compartilhar o link com ela.

PS: se você já é cadastrado aqui no site e quiser acompanhar a série, peço que se cadastre lá também, pois não vou enviar conteúdo sobre terminal para quem está cadastrado só pra receber conteúdo de programação, certo? Eu sei que é chato ficar se cadastrando, mas no momento é o único jeito que eu tenho de entregar o conteúdo com uma certa efetividade e segmentar quem quer receber cada tipo de conteúdo (pra evitar spam), além do que sou fã de carteirinha de e-mail. Sei lá, deve ser coisa de saudosista 🙂

Abraço!

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!