Jump to content
  • Especificações da linguagem C

       (0 reviews)

    Fernando Mercês
     Share

    Há algum tempo tinha vontade de escrever algo sobre os padrões da linguagem C e recentemente, motivado por uma discussão na lista exploits-brasil [1] e aproveitando um domingo nublado no Rio de Janeiro, decidi começar.

    Este artigo vai ajudá-lo a entender (e quando utilizar) os padrões de programação da linguagem C. Não ache que a utilidade é teórica, pois não é. Seguir um padrão pode ajudar na segurança de código, otimização e até aumentar a produtividade, como veremos mais a diante (sabia que C tem o tipo boolean, por exemplo?).

    1. Introdução

    A maioria das linguagens de programação seguem padrões abertos, que os criadores de compiladores (ou interpretadores) precisam seguir para suportar a linguagem completamente. A linguagem C foi criada por Denis Ritchie (falecido em 2011) entre 1969 e 1973 com o objetivo de substituir o Assembly (o que explica a existência comandos como goto na linguagem). Desde então, várias versões de compiladores foram criadas, por várias pessoas e empresas, sem seguir uma especificação oficial. Por isso, em 1983, o American National Standards Institute, mais conhecido pela siga ANSI, formou um comitê para estabelecer um padrão, que só foi concluído em 1989.

    2. Linha do tempo da linguagem C

    • 1969-1973: Denis Ritchie cria a linguagem C
    • 1983: O ANSI cria um comitê para especificar a linguagem
    • 1989: A especificação ANSI X3.159-1989 é concluída. O nome informal dela é C89 e também é conhecida por ANSI C.
    • 1990: O ISO (International Organization for Standardization) assume a especificação de linguagem e cria um grupo de trabalho (working group) chamado WG14 [2] para cuidar da especificação do C, que é renomeada para ISO/IEC 9899:1990, informalmente conhecida como C90. Não houve mudanças na linguagem. Esta especificação se mantém por vários anos e define a linguagem C que “todos conhecem”.
    • 1999: O WG14 publica a especificação ISO/IEC 9899:1999, informalmente chamada de C99. Esta já traz várias novidades que serão tratadas mais à frente neste artigo.
    • 2011: O WG14 publica a ISO/IEC 9899:2011, conhecida como C11. Este é o padrão atual da linguagem.

    Vários recursos cobertos nas especificações mais recentes já eram implementados pelos desenvolvedores de compiladores por sua conta. No caso do GCC, por exemplo, o Projeto GNU criou os padrões GNU89, GNU99 e GNU11 com suas próprias extensões. O Visual C++ da Microsoft também tem várias extensões da linguagem (lembre-se que em geral qualquer compilador C++ compila C, pois a linguagem é a mesma, mas a recíproca não é verdadeira).

    Vou mostrar alguns recursos das especificações atuais, utilizando o gcc 4.6 para os exemplos.

    A opção -std do gcc define qual especificação usar. Já a -pedantic faz o gcc alertar sobre qualquer construção que seja proibida pela especificação, de forma bem rigorosa.

    3. Recursos da C99

    • Tipo booleano:

    Incluindo a stdbool.h, você pode declarar variáveis do tipo bool e usar os estados verdadeiro e falso, assim:

    #include <stdbool.h>
    
    void main()
    {
    	bool var;
      
    	if (var)
    		var = false;
    }

    É fato que isso já era feito usando-se 1 e 0 e na verdade os estados true e false não passam de outros nomes (#define) para estes números, respectivamente. No entanto, a legibilidade do código melhora com o tipo bool.

    • Comentários com //

    A C89 só permite comentários entre /* e */, o que dá um trabalho extra para comentários de uma linha. Usando a C99, você pode iniciar a linha com //, como no C++, PHP etc. e esta linha será um comentário perfeitamente válido.

    • Funções em linha

    Quando você chama uma função no código, o compilador normalmente gera uma instrução CALL (do Assembly) para desviar o fluxo de código para o endereço da função. Isso envolve passagem de parâmetros pela pilha de memória (stack), retorno etc. Ou seja, isto gera um ônus de processamento e consumo de memória considerável, principalmente associado ao número e tamanho dos argumentos. Um código que não use funções é mais otimizado, no entanto, é mais difícil de manter. Para resolver isso, você pode dizer que uma função é em linha (inline). Dessa forma, toda vez que a função for chamada, o código dela será copiado para o trecho onde a chamada aconteceu. É como se você copiasse e colasse a função em vários trechos, mas sem precisar fazer isso.;)

    Imagine que temos a função:

    inline int soma(int num1, num2)
    {
    	return num1 + num2;
    }

    Como ela foi declarada como inline, ao chamá-la por exemplo como:

    var = soma(3, 5);

    O compilador vai substiuir por:

    var = 3 + 5;
    • Vetores de tamanho variável

    Na C99 você pode declarar um vetor assim:

    void funcao(int numero)
    {
    	char vet[numero];
    }

    O tamanho do array de char vet depende do parâmetro recebido. Isso era resolvido antes com funções para alocação dinâmica.

    Há adições também do tipo complex, para números complexos (e imaginários) e muito mais novidades. No site do WG14 [2] há toda a especificação para download.

    Para utilizar a C99 com o gcc, use:

    $ gcc -std=c99 fonte.c

    4. Recursos da C11

    • Novas funções seguras (com bound checking)

    As funções tidas como inseguras como strcpy, strcat etc ganharam novas versões sufixadas com “_s”, de safe. Basicamente elas recebem um argumento a mais que é o número de caracteres para trabalhar. São elas:

    • Multithreading (thread.h)

    Apesar de os SOs modernos fornecerem funções de API para multithreading, ao ser inserida oficialmente no C possivelmente vai ajudar na portabilidade de aplicativos que utilizem este recurso. É algo muito bom para a linguagem.

    • Estruturas e uniões anônimas

    Útil quando estão aninhados, este foi um recurso que senti falta quando programei a primeira versao do pev, que usa muitas estruturas. Se queremos que um campo de uma estrutura seja outra estrutura, antes da C11, é preciso fazer:

    struct ponto {
    	int x;
    	int y;
    }
    
    struct reta {
    	struct ponto p;
    }

    Aí para acessar:

    struct reta r;
    
    r.p.x = 10;

    Com a C11, a estrutura reta pode ser:

    struct reta {
    	struct ponto;
    }

    E o acesso:

    r.x = 10;

    Dizemos então que a estrutura reta possui uma estrutura anônima (sem nome) como campo.

    5. Qual especificação usar?

    Na hora de usar uma especificação e seguir suas regras, você deve pesar como é o seu projeto, em quais sistemas ele vai rodar, como será distribuído etc. Por exemplo, se é um projeto interno e o compilador que você utiliza suporta a C99, não vejo por que não utilizá-la. Agora, se você vai distribuir seu código, aí já tem que pensar nas versões dos compiladores de quem for baixar. Será que o gcc do usuário do seu software é a última versão? Será que suporta a C11?

    No hdump, um dumper hexa/ASCII que fiz para usar no Windows e no Solaris, eu optei por trabalhar com C89 por dois motivos: o código é pequeno e eu precisava levar o fonte para compilar em versões antigas do Solaris, com compiladores que não suportavam a C99, por exemplo.

    Já para o pev um analisador de binários de Windows, eu comecei em ANSI mas já estou atualizando para C99, para deixar o código mais legível e utilizar os novos recursos. Eu distribuo o fonte e binários já compilados, inclusive para Windows, então não tem problema para os usuários.

    O importante é ler as especificações e perceber se tem algo que te ajuda/atrapalha no projeto, pensando no escopo, usuários e sistemas alvo. Só a C11 que acho que ainda não dá para distribuir um código em produção, visto que nenhum compilador à suporta completamente. Recomendo usá-la internamente e esperar um pouco antes de liberar código com ela, pois está muito recente.

    6. Conclusão

    Existem outros recursos interessantes na C11 [3] mas ainda não conheço um compilador que a suporte 100%. Na verdade o gcc também não suporta a C99 por inteiro ainda. Existe até uma página onde você pode acompanhar as mudanças no suporte à C99 [4]. Na versão 4.6, o gcc já estreiou o suporte inicial à C11, sob a opção -std=c1x. A versão 4.7 já vai vir com suporte a mais recursos desta especificação, sob a opção -std=c11. Inslusive cabe um comentário: é muito bom poder contar com um conjunto de compiladores constantemente atualizado e bem feitos como são os do GCC. Essa maravilhosa suíte inclui compiladores para C, C++, Objective-C, Fortran, Java, Ada, e Go. Todos livres. É um espetáculo mesmo. :)

    O último rascunho ISO/IEC 9899:201x, divulgado em abril do ano passado está disponível em PDF [5] mas a especificação mesmo, publicada em dezembro, está à venda por cerca de R$ 450,00 na ISO Store [6].

     

    Referências

    [1] https://groups.google.com/forum/?fromgroups#!forum/exploits-brasil
    [2] http://www.open-std.org/JTC1/SC22/WG14/
    [3] http://en.wikipedia.org/wiki/C11_%28C_standard_revision%29
    [4] http://gcc.gnu.org/gcc-4.6/c99status.html
    [5] http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
    [6] http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=57853


    Revisão: Leandro Fróes
     Share


    User Feedback

    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.
    Note: Your post will require moderator approval before it will be visible.

    Guest

    • This will not be shown to other users.
    • Add a review...

      ×   Pasted as rich text.   Paste as plain text instead

        Only 75 emoji are allowed.

      ×   Your link has been automatically embedded.   Display as a link instead

      ×   Your previous content has been restored.   Clear editor

      ×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By Bruna Chieco
      O Relatório de Ciências da Organização das Nações Unidas para Educação, Ciência e Cultura (Unesco) publicado em fevereiro deste ano apontou que, em todo o mundo, as mulheres ainda representam apenas 40% dos graduados em ciência da computação e informática. Em relação à área de engenharia, o percentual cai para 28%, enquanto em áreas altamente qualificadas, como inteligência artificial, apenas 22% dos profissionais são mulheres. 
      Ao se deparar com o relatório, o Secretário-Geral da ONU António Guterres alertou que “promover a igualdade de gênero no mundo científico e tecnológico é essencial para a construção de um futuro melhor”. Segundo ele, “mulheres e meninas pertencem à ciência”, mas os estereótipos as afastaram de campos relacionados à área, e “é hora de reconhecer que mais diversidade promove mais inovação”. Para o Secretário-Geral, sem mais mulheres nas ciências, “o mundo continuará a ser projetado por e para homens, e o potencial de meninas e mulheres permanecerá inexplorado".
      Para que esse potencial seja cada vez mais explorado, precisamos incentivar o público feminino a entrar na área de ciência, tecnologia, engenharia e matemática (também conhecida pelo termo STEM, em inglês), sem medo de ser menos capaz que os homens nesse quesito – porque de fato não é. 
      É por isso que escolhemos este dia 12 de outubro para tratar do assunto. Toda segunda terça-feira do mês de outubro comemora-se mundialmente o Ada Lovelace Day, celebração internacional que representa a conquista das mulheres na STEM. Augusta Ada Byron King – conhecida como Ada Lovelace – é considerada a primeira programadora do mundo. A matemática e escritora inglesa é reconhecida principalmente por ter escrito o primeiro algoritmo a ser processado por uma máquina nos anos 1800. 
      Ada Lovelace deixou um legado, séculos depois, sendo seu nome usado para dar destaque às mulheres que atuam na ciência, tecnologia, engenharia e matemática, com o objetivo de aumentar a representação do público feminino nessas áreas. E já temos exemplos de meninas que conquistaram e vêm conquistando cada vez mais espaço e podem inspirar outras tantas a estudarem e se engajarem nas profissionais relacionadas a STEM. 
      É o caso de Lais Bento, que é Java Software Engineer na eDreams ODIGEO. Sua trajetória na área de Tecnologia da Informação (TI) vem de uma longa história. Ela conta que sempre se interessou pelo tema, mas na hora de escolher um curso na universidade se deparou com algumas barreiras sociais e acabou optando por cursar administração. "Depois de um tempo, isso passou a ser um peso na minha vida, porque eu não gostava da área. Mas eu tinha receio de ir para TI, porque não era muito moda, tinha poucas mulheres na área", diz Lais em entrevista ao Mente Binária.
      Até aceitar definitivamente seu gosto pela tecnologia, Lais passou um tempo trabalhando como administradora. Em determinado momento, decidiu fazer um curso técnico em informática, para depois cursar Análise e Desenvolvimento de Sistemas no Instituto Federal de São Paulo. "No segundo ano da universidade consegui minha primeira oportunidade na área de TI, em uma grande empresa, com 26 anos", conta. 

      "No começo eu era uma no meio de vários homens, mas isso mudou muito rápido" - Lais Bento
      Depois de alguns meses, Lais já foi para sua segunda oportunidade na carreira, no iFood, que considera ter mudado sua vida. "Entrei lá como estagiária e virei uma desenvolvedora de software. Aprendi o que precisava e graças a toda a experiência que conquistei, hoje estou morando em Portugal, trabalhando na maior agência de viagens online da Europa".
      Lais conta que sua experiência no iFood marcou sua vida profissional especialmente por ter sido uma das primeiras estagiárias de tecnologia mulher de toda a história da empresa. "Isso me impactou bastante". Após 2 anos trabalhando lá, ela conta que a inclusão já mudou bastante, e muitas mulheres entraram na área de programação, entre elas desenvolvedoras e cientistas de dados. "No começo eu era uma no meio de vários homens, mas isso mudou muito rápido".
      Não ter medo de começar – Lais relata ter um único arrependimento nessa história toda: não ter entrado antes na área de TI. "Deveria ter começado com 18 anos, aceitando que mulheres podem programar também", diz. Segundo ela, começar mais cedo poderia ter trazido mais experiência do que tem hoje. "As coisas em tecnologia mudam muito rápido, então você sempre tem que estar pronto para aprender coisas novas. Sei que não tem idade para começar, mas se eu tivesse entrado antes, vejo que eu estaria mais avançada", diz. 
      Já a história de Tainah Bernardo é um pouco diferente. Ao contrário da Lais, que sempre soube que gostava de tecnologia, Tainah nunca achou que essa área fosse pra ela. Formada em Artes Visuais, recentemente, aos 26 anos, ela descobriu que queria mudar de carreira e foi atrás de um curso de programação. "Com a pandemia, eu percebi que estava cansada de atuar em uma profissão que, por mais que gostasse, não era valorizada. Um dia encontrei um curso que ensinava programação a partir do zero e que garantia inserção no mercado. Foi aí que comecei a conhecer o mercado da tecnologia, porque até então era uma coisa distante, tinha uma imagem bem estereotipada de que para entrar na área precisaria ser um gênio ou alguém enclausurado em um quarto escuro de capuz com várias telas em volta", conta. 

      "Tudo sempre foi muito atrelado à imagem masculina, mas isso era muito inconsciente" – Tainah Bernardo 
      Segundo ela, ainda é muito enraizada a visão de que somente homens são capazes de participar do desenvolvimento tecnológico. "Quem mexia com tecnologia era o meu irmão, o computador ficava no quarto dele. Tudo sempre foi muito atrelado à imagem masculina, mas isso era muito inconsciente", conta Tainah, que deu o primeiro passo em meados do ano passado para investir em uma área totalmente nova. "Fui fazer o curso, que tinha duração de 6 meses, e achei que o mais importante é que eles trabalham com inclusão, tratam bem as pessoas, fazem elas se sentirem acolhidas, parte da comunidade, e eu vi que tinha espaço pra mim", conta sobre sua experiência no curso oferecido pela Labenu.
      Tainah conta que acabou estudando muitas matérias práticas, e no final realizou treinamentos relacionados a entrevistas de emprego e challenges que a prepararam para o mercado de trabalho. "Terminei o curso e comecei a trabalhar no Olist". Hoje, ela é desenvolvedora backend de e-commerce no Olist, trabalhando com NodeJs dentro do time de Shops, que desenvolve um produto novo para pessoas físicas criarem uma loja virtual e integrá-la às redes sociais. O time da Tainah é responsável por essa integração e cotidianamente busca melhorias e novas features para quem utiliza o app. No dia a dia de trabalho, ela utiliza Javascript.
      Superando desafios – "Se eu tivesse pensado um pouco mais, talvez eu não tivesse coragem, porque cheguei a ver relatos de mulheres que desistiram da área por conta de pessoas que as desrespeitaram", conta Tainah. Segundo ela, o grande desafio de iniciar uma carreira na tecnologia é a comparação em relação aos homens, pois causa estranheza ver tantos homens numa mesma área enquanto há poucas mulheres. "Quando cheguei, fiquei meio bloqueada, achando que seria tratada com diferença, mas eu tive sorte, porque as pessoas foram super legais comigo", reforça. 
      Superando o receio inicial, Tainah percebeu que essa é uma área que está crescendo, e assim ela decidiu crescer junto. "Eu não sabia que TI tem uma comunidade tão ativa e cooperativa, o que me deixou bem feliz. Mas comecei a entender isso melhor durante o curso, pois vi que tinha mulheres trabalhando, que mudaram de área e conseguiram se adequar. Eu vi que eu consigo também, se tem outras pessoas lá, eu também consigo", destaca.
      "Eu achava que sempre dava sorte de entrar nos lugares, mas aos poucos percebi que não foi por sorte, e sim porque mereci, me esforcei, estudei", relata Lais.
      Para Lais, um grande desafio que principalmente as mulheres devem superar é de sempre se acharem inferiores tecnicamente ou menos capazes. "Eu achava que sempre dava sorte de entrar nos lugares, mas aos poucos percebi que não foi por sorte, e sim porque mereci, me esforcei, estudei. Se isso acontecer com alguma menina, o ideal é fazer uma listinha de tudo que teve que aprender para estar onde está hoje. Com isso, consigo perceber que foi uma questão de mérito", conta. 
      Como TI é uma área predominantemente masculina, Lais destaca que há algumas situações em que meninos fazem piadas machistas, perpetuando o estigma de que a área de tecnologia não é para mulheres. "Mas as pessoas hoje estão muito mais abertas. No começo eu sentia mais medo de homens me julgarem, de sofrer algum tipo de machismo. Mas é sempre bom estarmos preparados psicologicamente, pois essas coisas podem acontecer".
      Como entrar na área – Lais diz que a melhor maneira para meninas que querem atuar com tecnologia iniciarem sua carreira na área é saber exatamente o que querem fazer. "É muito fácil falar que quer entrar em TI, mas é uma área muito abrangente. Você quer ser programadora? De aplicativo ou de site? Quer participar da parte lógica, ou ir para a parte bonita do site, que todo mundo vê? Eu sugiro que elas entendam o que cada parte faz, e como trabalham, e assim fazer um curso básico de programação de um app, ou como construir um site, para entender o que acha mais legal. O ideal é saber o que quer fazer e depois disso começar a estudar", indica.
      Segundo ela, o próximo passo é encarar as oportunidades de frente. "Já vi pesquisas que dizem que se uma mulher achar que não atende a um requisito da vaga, não se candidata. E eu diria para se candidatar sim, porque o homem se candidata e nem sempre ele tem todos os requisitos. Encarem as oportunidades de frente, se atualizem e estudem. Se você recebeu uma proposta, participe do processo. A chance de conseguir a oportunidade é muito grande, e sobre o requisito que faltou, você acaba aprendendo depois" diz. "Há muitas oportunidades, só faltam mulheres corajosas para conseguirem ocupar essas vagas", destaca Lais.
      "Vai dar medo, vai ser difícil, mas vai dar. É possível sim, não existe limitação física para isso", diz Tainah.
      Tainah também acredita que mais do que capacidade intelectual, o principal para entrar na área de TI é a vontade. "Vai dar medo, vai ser difícil, mas vai dar. É possível sim, não existe limitação física para isso. Eu vi muitas mulheres que eram mães de primeira viagem ou de segunda viagem fazendo o mesmo curso que eu. Pessoas que não tinham condições financeiras, com dificuldade de aprendizado, e todas elas conseguiram. É possível, mas não vai ser fácil. Aí que entra o querer", relata.
      Ela também não precisou abandonar sua vocação com as artes para seguir a carreira na tecnologia. Hoje, as artes visuais hoje são um hobby (vem dar uma olhada não trabalho dela!), o que, segundo Tainah, acaba sendo muito melhor do que antes. "Faço quando quero, como quero, não dependo disso, e agora conheci um novo universo que vai de acordo com minha personalidade, porque gosto de trabalhar em grupo, isso não era tão comum nas artes, nos lugares em que trabalhei", conta. "Cada um tem sua história, e é bom não desistir nos momentos difíceis, que é quando a gente tem mais vontade. Nessa hora respire, tire o pé do acelerador, mas não para e não volta. Vai devagar, mas vai".
    • By Felipe.Silva
      Livro em Português sobre Assembly em constante desenvolvimento. É de autoria do @Felipe.Silva, membro da comunidade aqui! 🤗
    • By Bruna Chieco
      O livro Programação Shell Linux é uma referência completa sobre programação Shell nos sistemas operacionais Unix/Linux, e chegou na sua 12ª edição depois de mais de 22 anos que o autor, Julio Cezar Neves, veio adaptando essa obra. Apresentando o assunto de forma didática e descontraída, Julio se utiliza de exemplos e dicas de fácil compreensão para explicar para seu público como programar em Shell. Quem pensa que esse é um livro de cabeceira está enganado. É um material prático para ser usado do lado do computador, sendo uma referência completa da linguagem Shell. "Esse livro não é para estudar, é um guia de referência, porque ele está completo", diz o próprio autor, Julio Neves. 
      Ele conta para o Mente Binária como foi seu processo de construção desse rico material. "Tudo começou como uma brincadeira. Durante muitos anos eu fui gestor e de repente eu estava de saco cheio do meu departamento, não queria ficar administrando pessoas. Então resolvi abandonar essa área e voltar para a área técnica". Foi assim que Julio passou a atuar no suporte técnico. No início dos anos 1980, ele já tinha trabalhado desenvolvendo um Unix na Cobra Computadores e Sistemas Brasileiros, hoje BB Tecnologia e Serviços (BBTS). "Eu continuei usando o Unix, porque quando apareceu o primeiro sistema operacional da Microsoft, o DOS, ele saiu da costela do Unix. Se eu já tinha o Shell, para que eu iria usar o DOS?", diz. 
      Assim, Julio decidiu fazer um sistema para protocolo, transferência e check de integridade de arquivos via FTP para a empresa na qual trabalhava. "Eu fiz tudo em Shell". Ele passou a fazer treinamentos com seus colegas na empresa, e acabou escrevendo um manual no qual conta que tinha muita piada e conteúdo descontraído. "A cada treinamento que eu dava eu ia melhorando. Um belo dia minha esposa falou que isso tudo daria um livro", conta Julio. Foi assim que ele publicou a primeira edição do livro Programação Shell Linux, em 2000.
      Motivação
      Os treinamentos internos que Julio fazia em sua empresa sempre davam muita audiência. Ele conta que quando trabalhou na Cobra Computadores, foi feito um convênio com a Universidade Estácio de Sá, do Rio de Janeiro, que cedia as instalações para o pessoal da Cobra dar treinamentos. Em contrapartida, a Cobra dava suporte para a Estácio de graça. "Foi minha primeira experiência dando aula. Eu fiz um curso de didática com técnicas de apresentação e quando fui dar os treinamentos na empresa, anos depois, já tinha essa prática de didática. É uma coisa que gosto de fazer", conta. Hoje, Julio oferece treinamentos sobre Shell Script junto a Rubens Queiroz De Almeida (saiba mais sobre os treinamentos).
      Além do gosto por dar aulas, Julio conta que o livro é uma maneira de disseminar o conteúdo sobre Shell em uma linguagem fácil e acessível, o que não existe em outros materiais. Ele cita o Linux man pages, um manual escrito em inglês rebuscado, sem exemplos. "Praticamente tudo que tem no man pages tem no meu livro, só que o livro tem um monte de exemplo e bom humor. O man page não te ensina a programar, mas só a usar uma instrução. O meu livro mostra as instruções, de forma ordenada, e o funcionamento do Shell. Eu mesmo aprendi Shell pelo man pages, mas é muito chato!", avalia.

      "Meu livro mostra as instruções, de forma ordenada, e o funcionamento do Shell" – Julio Neves
       
      Por que um profissional precisa ter conhecimento de Shell?
      "Uma vez eu dei uma palestra sobre Shell e na hora das perguntas um cara falou que não gostava da linguagem. E eu falei que sem o Shell, o Linux não existe. Quando você dá boot na máquina, ela executa centenas de scripts em Shell; quando você loga, ela roda dezenas de scripts em Shell. Tudo que é feito na máquina está em C ou em Shell. O administrador de sistemas antigamente era obrigado a conhecer profundamente Shell", explica. 
      Na área de segurança, a necessidade desse conhecimento é igualmente importante, conforme explica Fernando Mercês, que é pesquisador na Trend Micro e fundador do Mente Binária. "O Linux é um sistema operacional obrigatório na área de segurança. Quem não conhece Linux, não consegue andar nessa área. E o Shell é o coração do Linux, é por onde um usuário controla o sistema inteiro e usa todos os recursos. Programar em Shell é obrigatório para automatizar o que precisa ser automatizado no Linux", explica Mercês.
      Ele conta que no lado dos ataques, por exemplo, do ponto de vista de segurança ofensiva, e também para criar defesas e ações de proteção de um servidor Linux diante de algum ataque, é preciso usar programação em Shell. "Se seu sistema Linux está sob ataque, você detectou isso e vai bloquear a comunicação do atacante para com o seu servidor, e isso vai ser um comando em Shell do Linux. Além do Linux ser um sistema operacional que precisa ser conhecido, programá-lo bem e saber operá-lo em nível de programação via Shell é essencial para um bom profissional, e um grande diferencial para profissionais de tecnologia em geral", destaca Mercês. 
      Para Julio Neves, não saber programar em Shell pode ser inclusive um risco de segurança. "A pessoa tem que saber Shell, porque a interface gráfica não sabe tudo sobre a digitação, e aí se ele tiver alguma dúvida, vai recorrer à Internet. Se ela fizer isso, pode colocar dentro do computador algo que pode ser ruim, um malware", diz.
      "Meu nível de Shell depois desse livro ficou muito acima da média", diz Fernando Mercês 
      Na experiência de Mercês, de fato o livro Programação Shell Linux é o material mais completo que se tem em língua portuguesa sobre o assunto. "Quando comecei a estudar Linux, em 2008, vi que os materiais que tratam do assunto introduzem o Shell, mas não vão muito além disso. Aí comprei a 6ª edição desse livro do Julio e me impressionei, porque além de ser muito mais profundo que as introduções que eu tinha lido, a didática é impecável. O livro realmente ensina a programar com alguém que sabe muito", conta. 
      "Meu nível de Shell depois desse livro ficou muito acima da média, mesmo no meio do mundo Linux, porque esse conhecimento veio de alguém que não simplesmente estudou, aprendeu e escreveu um livro. O Julio fez parte do time de desenvolvimento de um Unix. Ele foi capaz de criar um Shell. É uma pérola no Brasil". 
      12ª edição
      Julio Neves conta que ao longo do tempo, as edições do livro foram "engordando", cada vez contendo mais material. Mas nessa 12ª edição, ele acabou publicando o livro em uma nova editora, a Novatec, muito motivado a baixar o custo. "Eu estava achando o preço do livro um absurdo e resolvi pegar o livro, que tinha duas partes, um Shell básico e um Shell programação, e tirei o Shell básico para diminuir o custo do livro". 
      Ainda assim, o material continua com 600 páginas, já que ao longo do tempo Julio foi agregando mais conhecimento. "Na primeira edição eu disse que o intuito do livro não era ser um compêndio sobre Shell. Hoje, coloco ele como uma referência sobre Shell", destaca.
      O livro pode ser comprado online nesse link, e tem um cupom de 25% de desconto válido até o dia 30 de julho. Para utilizar, basta digitar PROGSHELL na hora de realizar a compra.

      Capa do livro Programação Shell Linux – 12ª Edição
       
      Falando em referência, o Julio também é uma inspiração para nós do Mente Binária, afinal foi o primeiro entrevistado no programa Papo Binário, em janeiro de 2016. Assista na íntegra:
       
    • By Bruna Chieco
      Virar um desenvolvedor de jogos pode ser o grande sonho dos apaixonados por games. São esses os profissionais que projetam e criam jogos para computadores, celulares e consoles, se envolvendo desde a concepção até a execução do projeto junto a uma equipe composta por produtores, designers, artistas, engenheiros de som e testadores. Essa galera trabalha para levar os melhores produtos a uma indústria que hoje é composta por 2,8 bilhões de jogadores em todo o mundo, gerando receitas de US$ 189,3 bilhões, segundo dados da empresa de pesquisa Newzoo.
      No Brasil, a Newzoo aponta que o mercado de jogos terá uma receita de US$ 2,3 bilhões em 2021. Ainda que aqui a indústria seja menor, as oportunidades para trabalhar na área estão crescendo mesmo para quem não é um aficionado pela profissão, como é o caso de Rodrigo Duarte Louro. Ao procurar estágio enquanto cursava a faculdade de Ciência da Computação, ele acabou se deparando com uma vaga em uma empresa de jogos pequena que tinha acabado de começar. 
      Na época, Rodrigo tinha 21 anos e confessa que esse não era seu sonho, mas acabou encarando o desafio. "Quando entrei na faculdade, eu não tinha muita ideia para onde ir. Nunca quis muito uma carreira específica, mas as possibilidades de mercado para quem é programador são grandes", diz Rodrigo ao Mente Binária. "Eu não manjava nada de games, mas estagiei nessa empresa por um ano, e foi onde eu comecei a gostar e aprender sobre desenvolvimento de games", conta. 
      Rodrigo saiu desse estágio para conseguir concluir a faculdade, mas no último semestre voltou a estagiar em outra empresa de games, a Tapps, onde está até hoje trabalhando com desenvolvimento de jogos para mobile. "Quando comecei a estagiar com jogos, eu gostei, e a menos que aparecesse uma oportunidade muito boa, eu decidi que não ia mais sair da área", relata.

      "A menos que aparecesse uma oportunidade muito boa, eu decidi que não ia mais sair da área" - Rodrigo Duarte Louro
      Já o caso de Murilo Costa é o mais tradicional para quem trabalha com desenvolvimento de jogos: ser apaixonado pela área. "Desde dos 12 anos de idade eu já estava certo da vida que queria trabalhar com jogos, e nessa idade já tinha começado a programar", conta Murilo ao Mente Binária. Foi assim que ele acabou fazendo um curso técnico em informática aos 15 anos. "Eu já queria entrar na área de jogos, mas no Brasil era difícil", destaca.
      Por certa falta de oportunidade, Murilo acabou entrando no mercado de TI como desenvolvedor de software, atuando nessa área por cerca de 7 anos. Enquanto isso, ele também cursou a faculdade de Ciência da Computação. "Eu tinha 22 anos quando consegui meu primeiro emprego como estagiário em jogos. Eu ia para essa profissão de qualquer jeito, mesmo que por conta própria. Mandei muito currículo, porque o mais importante era começar de algum jeito, e depois ir encontrando meu espaço", ressalta. "Eu me permiti voltar para a estaca zero quando entrei na indústria de games. Quando decidi sair do emprego de desenvolvedor de software e ir pra jogos, eu já era CLT e estava quase virando um profissional pleno dentro da empresa, mas decidi voltar a ser estagiário para começar na área", conta. 

      "Eu me permiti voltar para a estaca zero quando entrei na indústria de games" - Murilo Costa
      Murilo ficou durante 5 anos e meio nessa empresa, começando como programador de jogos mobile, e aos poucos foi crescendo internamente, até virar coordenador. "Passei a trabalhar como gestor, participava da contratação e desenvolvimento de outros programadores", diz. Mas no ano passado, Murilo decidiu que queria voltar a programar, e foi aí que começou a trabalhar no estúdio Rogue Snail como programador sênior. "O que eu gosto é da área de programação", pontua.
      O que precisa para ser um desenvolvedor de jogos
      A complexidade da profissão pode variar dependendo do tipo de jogo que será desenvolvido, mas para quem quer começar, é preciso saber o básico de programação. "Na faculdade não tem nada específico para o mercado de trabalho. Se você tem uma base de programação forte, está preparado para tudo, mas não é especialista em nada", diz Rodrigo. Ele conta que apesar disso, há cursos mais focados em jogos. "Na Tapps muita gente que trabalha comigo fez um curso de design de jogos na Fatec e na Anhembi. No meu caso, não fiz nenhum curso específico. Agora, com 7 anos de experiência, tenho uma noção das outras áreas, mas o background de programação dá total liberdade para fazer os jogos", diz.
      A dica é saber duas linguagens de programação, que são as mais adotadas em desenvolvimento de games: C# e C++. A primeira é utilizada pelo motor de jogos (game engine) chamado Unity, enquanto a segunda é utilizada pela engine Unreal. Apesar de essas serem as duas linguagens mais utilizadas, muitas empresas querem fazer suas próprias engines. "Na Unity você consegue fazer e exportar o jogo para cada plataforma específica, mas na Tapps a gente exporta só mobile, então usamos uma engine própria", diz Rodrigo. 
      O mais recomendável é estudar não somente a linguagem, mas aprender como a engine funciona e pode ser manipulada para se obter resultados. "Eu já praticava isso sozinho", diz Murilo. "Normalmente, quando as pessoas vão trabalhar com jogos, já tiveram contato com engines ou produção de algum jogo". Ele destaca que o ideal para treinar é participar de game jams, que são encontros de desenvolvedores de jogos com a proposta de planejar e criar um ou mais jogos em pouco tempo, geralmente variando entre 24 e 72 horas. "Isso ajuda as pessoas a terem contato com as engines e tecnologias. Mas precisa de um conhecimento básico em programação. Essa é uma recomendação para desenvolvedores de software no geral", destaca.
      Matemática e inglês são pré-requisitos
      Além de saber o básico de programação, é preciso ter uma noção tanto de matemática quanto de inglês para quem quer evoluir na carreira de desenvolvedor de games. "Os dois são bem importantes. Não é um impeditivo total não saber isso, mas vai facilitar muito sua vida", destaca Rodrigo. Tanto ele quanto Murilo recomendam no mínimo o conhecimento de leitura em inglês para que a atuação na área seja mais fácil. Isso porque muitos dos materiais de estudo em programação são nesse idioma. "Isso é uma barreira que pode atrapalhar", diz Rodrigo. 
      Os conhecimentos de matemática também são importantes para programação, na visão de Rodrigo. "Dependendo do jogo que você fizer, a matemática é utilizada mais ou menos na prática, mas ter esse conhecimento mais forte te faz um programador melhor sempre", afirma. Ele diz ainda que em alguns casos a geometria analítica é utilizada. "Se estou fazendo um jogo de tiro, preciso saber com qual força a bala sai da arma", explica.
      Mobile x console
      Tendo navegado no mundo mobile e agora no de jogos para computadores, Murilo conta um pouco sobre a diferença entre programar em um e para outro universo. "Jogos mobile gratuitos normalmente têm compras dentro, e os usuários podem assistir anúncios para obter recompensas. Também é preciso pensar que essa indústria é gigantesca, tanto em número de devices quanto de usuários. Você atinge o público de maneira mais global e tem que se preparar para lidar com menos recursos, porque o celular é menos potente que o console", diz. 

      Ele destaca ainda que a usabilidade é bem diferente no celular e no PC. "No mobile, precisamos pensar em como integrar compras e propagandas em tempo de execução do jogo, e games de console normalmente não têm isso. No PC, o jogo tende a ser mais fácil, por outro lado, que os demais jogos de console, por ser mais flexível em relação aos inputs de teclado, mouse, ou controle", relata Murilo.
      Mercado de trabalho
      O mercado de trabalho brasileiro para a indústria de games está crescendo, apesar das oportunidades ainda serem maiores em outros países. Na visão de Murilo, esse ainda é um setor de poucas empresas no Brasil, com algumas companhias grandes dominando, mas praticamente todas para desenvolvimento mobile, ressaltando que os jogos para celulares compõem a maior parte do mercado consolidado no país. 
      Murilo diz ainda que há alguns estúdios pequenos se desenvolvendo localmente, mas muitos ainda dependem de investimento externo ou de projetos institucionais que estimulem seu funcionamento. "Ainda temos poucas oportunidades e não temos tanta escolha". Ele adiciona que na área de programação, ainda há uma diferenciação para quem trabalha com desenvolvimento para bancos ou para web, e quem trabalha com jogos. "Tem uma procura muito alta de pessoas querendo trabalhar na área, mas a remuneração não é competitiva, e temos poucos estúdios. Mas tem crescido", avalia.
       
      "Não ter medo e não desistir da área"
      Para Rodrigo, o gargalo também aparece do lado da mão de obra especializada. "Sempre vejo vaga aberta, mas é difícil preencher. As empresas estrangeiras acabam tendo maior competitividade. Também é o sonho das pessoas trabalharem em grandes companhias como Blizzard, King, etc. O mercado de jogos mexe com o sonho das pessoas, por isso muitas delas já escolheram a faculdade porque queriam fazer games. Mas ainda vejo que faltam profissionais especializados, e isso é na área de programação em geral", pontua. 
      Mesmo com esses desafios, não ter medo e não desistir da área é a dica de Rodrigo para quem quer atuar como desenvolvedor de games. "Se você tem um background de programação, já é um programador e quer migrar de área, pesquise o mercado, pois tem muita empresa sólida. E quem não é programador e quer fazer jogos, precisa começar a estudar programação em geral, ter um nível mediano. Não precisa focar em jogos inicialmente, mas depois comece a pegar tutoriais, estudar engines e fazer jogos simples. Explore a parte criativa, porque isso gera muito conhecimento", indica.
      "A participação em game jams ajuda muito"
      Murilo também destaca a importância de tentar construir um portfólio, reforçando que a participação em game jams ajuda muito nesse sentido. "É uma oportunidade de conhecer pessoas da área, estabelecer contatos e mostrar o trabalho. É preciso ter a experiência de fazer um jogo para entender quais são as partes que precisam ser melhor desenvolvidas", ressalta. 🎮
    • By Fabiano Furtado
      Pessoal, disponibilizei no meu GitHub o meu primeiro projeto OpenSource, como forma de retornar para a comunidade o que tenho aprendido nestes últimos anos.
      O projeto se chama LIBCPF (C Plugin Framework - https://github.com/fabianofurtado/libcpf/) e se trata de uma biblioteca/framework pra gerenciamento de Plugins (".so") no Linux, feita em C. Para maiores detalhes, veja a documentação no arquivo README.md.
      Ela foi lançada utilizando-se a licença GPL v2, uma vez que não entendo muito sobre esse assunto e precisava de uma licença para o projeto.
      Espero que, de alguma forma, este projeto possa ser útil para você. Mesmo que não exista a necessidade de utilização desta lib em sua aplicação, a mesma pode ser usada para listar os nomes das funções e os offsets que existem dentro de uma shared library, algo que considero bem interessante. Veja no exemplo como isso funciona.
      Como qualquer programa em C, o desenvolvimento deu muito trabalho pois tentei desenvolvê-la com foco na segurança, tentando evitar possíveis "buffer overflows" ou qualquer outro tipo de vulnerabilidades.
      Sugestões e críticas serão sempre bem-vindas!
      Desde já, agradeço.
×
×
  • Create New...