logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog

follow us in feedly

Talvez você ache interessante ver a lista com todos os posts ou minha lista com os melhores posts.

11 anos depois: C++
Ah, o C++... A linguagem que desperta amor e ódio, excitação e pavor. A linguagem que nunca passa desapercebida, a linguagem sobre qual todos gostam de falar, todos gostam de opinar. Afinal, a maioria do software que as pessoas usam é feita em C++. Não dá pra não ter uma opinião.

Só pra recordar a história, C++ foi só uma das linguagens orientadas a objetos que nasceram nos anos 80, junto com o SmallTalk. Ela venceu a batalha pela mente dos programadores por um motivo bem pragmático: nasceu compatível com a linguagem C desde o primeiro dia. As primeiras versões do C++ foram feitas usando o pré processador do C, para fazer o que era chamado de C com classes. E as mesmas características continuavam: você tinha construções de alto nível mas era possível até escrever assembly dentro do seu código fonte. Você tinha funções e um sistema de tipos mas podia manipular a memória diretamente usando um void*.

Em 2004, ano de fundação do 1bit.com.br, nós tínhamos o C++98, um padrão ISO. A comunidade de forncedores de compiladores era uma bando de competidores e a qualidade das implementações variava bastante. O Microsoft Visual C++ tinha uma boa IDE, um suporte horrendamente péssimo ao padrão ISO mas um compilador atendia muito bem as necessidades dos usuários Windows (onde eu me incluo). A Borland tinha o C++ Builder, cujo compilador era tão cheio de bugs que até hoje o código fonte do Boost é cheio de #ifdefs para contorná-los. No mundo Linux o GCC era um bom compilador que atendia o padrão corretamente, talvez o único compilador mainstream a fazer isso (não, o Comeau não conta).

O cenário de desenvolvimento mudou bastante nesses 11 anos. Em 2001 a Microsoft apresentou ao mundo o C#, uma linguagem inspirada no Java, que por sua vez era inspirada no C++. Em 5 anos de existência o C# evoluiu mais que todas as outras linguagens do mundo juntas. E isso foi, claro, muito bom para os usuários de C# - onde eu me incluo. Mas acabou sendo ótimo para os usuários de todas as outras linguagens, já que a rápida evolução do C# gerou uma imensa pressão no mercado. Até o Java, que já estava virando o COBOL do século 21, acabou evoluindo. O Java apresentou seu generics meia boca (que por dentro ainda usa Object e boxing/unboxing) e os responsáveis pelo C++ dentro do comitê ISO (principalmente o Herb Sutter, que foi para Microsoft depois de um tempo) resolveram acelerar o C++. É isso mesmo, se você gosta de C++11, C++14, C++17 e tudo mais agradeça à Microsoft e ao C#.

Foi assim que o C++ evoluiu, acrescentando uma tonelada de novos recursos, mas sem quebrar a compatibilidade com os fontes antigos. Hoje em dia o C++ é uma linguagem moderna, onde gerenciamento de memória manual pode ser coisa do passado. Mas toda a bagagem de mais de 30 anos ainda está ali. Você pode deixar a linguagem trabalhar para você, mas tem a opção de continuar sendo um maloqueiro.

(Inclusive foi essa a motivação para que o Rob Pike criasse o Go. Houve uma apresentação sobre C++11 no Google. Ele assistiu a apresentação e pensou "Sério que vocês querem resolver o C++ COLOCANDO MAIS COISAS NELE?" Ele saiu da reunião e começou a esboçar uma nova linguagem que virou o Go. Linguagem essa que eu não posso usar na Intelitrader por causa da porcaria do Garbage Collector...)

Então veio o C++0x, onde o x seria, junto o com o zero à esquerda, o ano de lançamento do novo padrão. Atrasou (como todo projeto de software) e virou o C++11, o grande upgrade que a linguagem precisava. Auto, constexpr, lambda, modelo de memória, initializer list e uma nova sintaxe para definir classes e estruturas. A lista de coisas novas é gigantesca. Além das melhorias na linguagem, várias libs do Boost foram incorporadas ao padrão, como a shared_ptr, tuple, thread e regex. Nasceu então o tal do Modern C++.

Hoje o C++ suporta vários paradgimas: programação procedural, orientada a objetos, genérica e até funcional. Sim, várias construções de linguagens funcionais se tornaram possíveis com auto e lambda. O Bartosz Milewski escreve bastante sobre programação funcional em C++.

Ironicamente, enquanto o C++ evoluiu bastante nesses 11 anos, meu site continua usando PHP e MySql (que como diz meu amigo Gianni, é um bando de dados)...

Em 13/08/2015 08:01 - Comentários (0)

C++11: lambda

Lambda é uma função inline, anônima, que você pode definir dentro de qualquer lugar no código.

Usos:

  • Manter o código que trata o callback de uma função perto da chamada da função, para deixar o código mais legível;
  • Definir o código da função de uma thread diretamente na chamada que cria a thread, também para legibilidade;
  • Substituir os functors de forma mais simples, já que as lambdas no C++ podem guardar estado também. Ajuda na legibilidade do código, também devido à proximidade do código. Eu já expliquei functors antes;
  • Nunca mais precisar usar Boost.Bind, que gera aproximadamente 375 erros de compilação se você esquece uma vírgula ou algum _1.

Vamos à sintaxe:

Por partes:

  • Captura: nessa parte você determina quais varíaveis dos escopos exteriores estarão disponíveis dentro do lambda. Na maioria das linguagens (como JavaScript e C#) a captura é implícita, ou seja, é só usar a variável dentro do lambda que ela está capturada. Em C++, pra variar, você tem mais controle sobre isso, podendo especificar ainda se a captura será por valor ou por referência;
  • Parâmetros: Aqui definimos os parâmetros. Funciona da mesma forma que a declaração de parâmetros de uma função;
  • Tipo de retorno: Essa parte é opcional, não precisa colocar caso essa lambda não retorne nada. Essa é a nova sintaxe C++ para definir tipo de retorno, que fica depois dos parâmetros. Isso possibilita, entre outras coisas, o uso de decltype() em cima dos parâmetros e coisas assim. Dá pra escrever um artigo inteiro sobre isso, então vou omitir detalhes sórdidos por enquanto;
  • Corpo da função: é a parte do [insira seu código fonte aqui]. Você escreve seu código como em uma função comum, com return e tudo mais;

Como um trecho de código vale mais que 0,14% de álcool no sangue, vamos ao que interessa:

Em 03/08/2015 09:53 - Comentários (4)

Sobre o cancelamento da trilha de C e C++ do TDC

A trilha de C e C++ do TDC foi cancelada. Muita gente tem me perguntado sobre isso, então vou explicar tudo detalhadamente aqui para encerrar esse assunto de uma vez.

Todas as informações relativas a esse assunto estão documentadas em uma thread da lista de discussão do grupo C & C++ Brasil. Thread essa que eu postei no Twitter. Mas como a thread é longa, as pessoas não estão lendo a thread inteira e tirando conclusões erradas sobre o assunto. Eu achei que o conteúdo da thread fosse suficiente para que as pessoas chegassem à mesma conclusão que eu cheguei. Mas não foi o que aconteceu, cada pessoa que me pergunta fala uma coisa diferente.

Timeline

  • Foi criada uma thread para informar os membros da lista sobre a aprovação das palestras. (link)
  • Algumas pessoas da nossa lista usaram essa thread para falar do descontentamento com o preço do TDC (link 1, link 2, link 3)
  • Um membro da nossa lista postou uma mensagem na lista de Python perguntando se o sentimento lá era o mesmo. Nessa mensagem ele citou um possível boicote ao TDC (link)
  • Como a palavra "boicote" foi usada, várias pessoas entraram em pânico pelo Brasil inteiro (link)
  • Eu enviei uma mensagem para lista perguntando o motivo do descontentamento e dizendo que eu não achava o evento caro (link)
  • Pessoas da lista fizeram críticas ácidas sobre o TDC, expressando a opinião de que o grupo deveria sair do TDC (link)
  • Uma pessoa da organização do TDC se inscreveu na nossa lista e enviou uma mensagem nada amigável (link)
  • Um dos palestrantes, membro da lista, cancelou a participação no evento (link)
  • Eu expliquei que aquilo era uma discussão em curso, não uma posição oficial do grupo (link)
  • Mais pessoas da organização do TDC entraram na nossa lista para defender o evento. A discussão continuou, já que se trata, afinal, de uma lista de discussão (link)
  • Uma pessoa da organização postou a seguinte mensagem no Facebook, que foi apagada algumas horas depois (link) :
    "pessoal em lista de discussão de C / Python propondo boicote ao‪ TheDevConf‬ 
    por conta do preço... "Eu estou ficando enojado com esse preço 
    exagerado da TDC. Ainda mais que palestrantes não tem sequer benefício 
    a não ser uma camiseta, o que torna o evento uma máquina de lucros 
    exorbitantes pros organizadores." 
    Melhor começar a programar Java ou .Net hein. Começou a temporada do 
    Mimimi do #TheDevConf SP, terra dos reclamões senior. Ah, lembrando 
    que o sanduba do subway é frio e na dúvida entre ir e encher o saco ou 
    ficar na firma, fique na firma! Grato." 
    
  • Depois do tiroteio começou uma operação panos quentes para resolver o problema (não tem link, essa parte foi em pvt)
  • Eu fiquei extremamente puto com as mensagens da organização do TDC (link 1)
  • Houve uma tentativa de resolver a situação e pedido de desculpas por parte do pessoal do TDC (sem link, isso também foi em pvt). Respondi que as desculpas foram aceitas mas que eu não tinha mais a menor vontade de participar do evento
  • Eu fiquei na dúvida. Para resolver minha dúvida li a mensagem novamente. Ela dizia "... o sanduba do subway é frio e na dúvida entre ir e encher o saco ou ficar na firma, fique na firma!". Resolvi então ficar na firma e me retirei da organização da trilha
  • A trilha acabou sendo cancelada

Se você quer tirar algum juízo de valor, leia a thread inteira, todas as mensagens. Tudo que é preciso saber sobre o acontecido está nessa thread, inclusive os links para as mensagens da lista de Python e o conteúdo da mensagem do Facebook. A única coisa que não está na thread são as várias tentativa de remediar a situação por parte da organização do TDC, algo que aconteceu principalmente fora da lista.

No final todo mundo saiu perdendo, principalmente a comunidade de C e C++. O grupo C & C++ Brasil vai tentar fazer mais eventos para compensar isso. Inclusive, o 12º Encontro de Programadores C & C++ acontece no Rio de Janeiro dia 15 de Agosto de 2015.

Em 24/07/2015 12:05 - Comentários (3)

11 anos depois

Faz 11 anos do primeiro post no 1bit.com.br.

"Eu tardo, mas não falho". Eu costumava dizer isso bastante quando eu era um adolescente que sonhava em ser hacker. Acho que essa antiga expressão vale para essa volta ao blog, que estou planejando faz anos. Espero que blogs ainda sejam alguma coisa e que alguém ainda tenha meu feed em algum leitor de RSS... :-)

Comecei o 1bit em 2004. A ideia inicial era fazer um site para escrever artigos sobre programação junto com o Alfred Myers na época em que trabalhavamos juntos. Acho que o nome seria CodeTalk ou algo assim. O domínio estava livre até o dia em que eu tentei registrá-lo... O Alfred desanimou totalmente, eu não. Então resolvi seguir sozinho e ter um blog em uma época em que quase ninguém tinha blog de programação no Brasil. Blogs eram coisas para você falar de você e colocar fotos do seu cachorro fofinho e seus amigos.

Esse tempo longe do blog coincide com o tempo que eu resolvi seguir outro sonho: ter minha própria empresa, onde as coisas não funcionariam como nas empresas por aí ( escrevi bastante sobre isso). Eu precisava seguir meu próprio caminho para continuar programando, já que a pressão para ser um gerente burocrático cresceu e se tornou a única forma de aumentar o salário. Eu nunca quis parar de programar. Além disso, essa palhaçada de ter horário rígido e perder mais tempo agradando diretor do que programando me embrulhava o estômago. Minhas empresas estão bem, pago minhas contas com o dinheiro delas desde 2011 e, apesar da crise, tudo vai muito bem, obrigado. Meu LinkedIn diz "sócio programador", e meu próximo cartão de visitas vai dizer o mesmo. Ah, pretendo escrever sobre empreendedorismo para programadores também.

Aprendi bastante coisa nesse tempo que fiquei distante. Trabalhei em vários projetos, atendendo vários clientes. Dei aulas de C++ e Python, onde os alunos faziam perguntas sobre coisas impensáveis. E tudo isso aumentou bastante minha vivência com desenvolvimento de software, desde à concepção até a codificação em si. Uma das ideias é compatilhar aqui tudo que aprendi nesses anos à frente da Intelitrader e da BitForge.

Tenho várias ideias para essa volta. Falar sobre C++ e Python, sobre gerência de projetos e engenharia de software, empreendedorismo, algoritmos e eteceteras. Estou até pensando em fazer uns vídeos sobre programação, com live coding e tudo mais. Peço que vocês me ajudem com isso, dando sugestões sobre conteúdo e formatos.

Eu aprendi bastante nesses anos e espero compartilhar o máximo possível de conhecimento aqui. Espero que vocês gostem. Bora escovar bits.

Em 21/07/2015 07:04 - Comentários (7)

Proposta aos favoráveis à regulamentação da profissão de Analista de Sistemas

Li recentemente uma pesquisa que diz que a maioria dos profissionais da área são a favor da regulamentação da profissão de analista de sistemas. Eu, sendo um cara otimista e de boa fé, me acalmo pensando que esse número é grande por pura desinformação.

De qualquer forma, ao invés de simplesmente debater com argumentos, coisa que já fiz bastante, deixo aqui uma proposta:

Concorda que só pessoas com formação acadêmica na área de TI possam fazer sistemas?
Comece desinstalando da sua máquina todos os programas feitos por programadores não formados.

Fechado? Não esqueça de desinstalar o sistema operacional também.

Argumente a vontade na área de comentários, acho que esse assunto precisa ser mais discutido. Mas lembre-se que sou formado em Ciências da Computação e acho que uma faculdade ajuda bastante na formação profissional. O resto dos argumentos já coloquei em outro post.

Em 09/08/2012 17:15 - Comentários (17)


Posts anteriores >>
rebarba rebarba
  ::::