-
Drew DeVault
13/11/2017 01:00
Quando falamos de portabilidade em software, estamos lidando com um conceito que vai muito além de "funciona em Windows e macOS". Como o texto bem aponta, o que realmente define a portabilidade é a adoção de padrões como o POSIX. Sem isso, seus programas vão ser mais exclusivos que o Clubhouse em 2023. E convenhamos, se seu código não aguenta rodar em várias plataformas, então ele é quase como um C quadrado: não tá indo a lugar nenhum.
-
Drew DeVault
12/11/2017 23:00
Portabilidade, como discutido, é mais do que apenas rodar um software em Windows e macOS. O autor destaca que a verdadeira portabilidade depende de padrões, com o POSIX sendo o campeão dessa batalha. Isso significa que, se você quer que seu código rode em uma infinidade de sistemas, você deve abraçar o POSIX, que é como o Esperanto do mundo dos sistemas operacionais. Se você ignorar isso, pode acabar como aquele projeto de legado que ninguém quer tocar.
-
Dan Luu
22/10/2017 23:00
Reproduzir resultados antigos sobre robustez de sistemas de arquivos é sempre uma viagem de volta no tempo, e neste caso, parece que a história se repete com pequenas melhorias. Como mencionado, "ext3, ntfs e jfs ignoraram em grande parte erros de gravação" e isso ainda é verdade, mesmo com o ext4 sendo a escolha mais comum hoje em dia. A abordagem de injeção de erros é genial para entender como os sistemas evoluíram, mas vale lembrar que se eles ainda não corrigiram tudo, talvez ainda esteja na hora de aplicar um patch nos desenvolvedores.
-
Dan Luu
15/10/2017 23:00
As promessas de teclados gamers de $100 ou mais são dignas de um filme de ficção científica, mas ao que parece, a realidade não acompanha. "Se alguém faz afirmações de desempenho sem benchmarks, provavelmente não são verdadeiras", e isso se aplica a esses teclados que juram serem mais rápidos. O que realmente importa é que, de acordo com medições comparativas, "computadores mais antigos podem ter latências melhores" do que nossas máquinas modernas, que, convenhamos, não estão lá essas coisas mesmo com todo o poder de processamento. No fim das contas, teclados são como vendedores de carros: promessas brilhantes, mas onde estão os dados que sustentam tudo isso?
-
Drew DeVault
08/09/2017 00:00
O autor finalmente disse em voz alta o que muitos de nós pensam: a complexidade é o verdadeiro vilão nas aplicações modernas. Tools do tipo Gulp e Docker parecem resolver problemas, mas muitas vezes são apenas desculpas para não entender o básico, como temos com Makefiles e scripts shell. E quem nunca se perdeu em um mar de dependências desnecessárias? Antes de sair reinventando a roda, é bom entender o que é essa roda e como ela funciona. Vamos ser mais simples, galera, menos é mais!
-
Drew DeVault
07/09/2017 21:00
A complexidade está se tornando uma epidemia e é o verdadeiro chefe final do design de software. O artigo critica ferramentas que prometem simplificar, mas muitas vezes só aumentam a confusão. Como menciona, "a adição de dependências é falível" e, no fim, você pode acabar preso em uma arquitetura que mais parece um labirinto do que uma solução. Simplificar deve ser a palavra de ordem, principalmente com o hipe pelas atualizações constantes que só tornam tudo mais lento e complicado.
-
Antirez (Salvatore Sanfilippo)
29/08/2017 11:35
É interessante ver como jogos clássicos como Wolfenstein 3D usaram uma abordagem engenhosa com registros de deslocamento de feedback linear para criar efeitos visuais. Claro, o artigo menciona que a implementação original é meio lenta e "visualmente desagradável" em algumas situações, o que nos leva à proposta de usar uma rede Feistel. Este tipo de estrutura não é exatamente um mistério de codificação, mas a ideia de transformar bits de forma invertível pode ser a chave para otimizar esses efeitos sem perder a qualidade visual. No final das contas, é como descobrir que a solução para seus problemas de desempenho pode estar mais perto do que você imagina.
-
Dan Luu
22/08/2017 21:00
Falar sobre previsão de ramificação é abrir a caixa de Pandora do desempenho do CPU. Basicamente, é a arte de chutar o que vem a seguir quando se lida com condições e instruções que podem sair do fluxo sequencial. A palestra busca deixar claro que, embora muitos de nós usemos estruturas de controle como ‘if’, poucos entendem as complexidades por trás de como o CPU lida com isso. Saber sobre previsões de ramificação é como entender os segredos de um superpoder: você pode não usar todos os dias, mas quando precisar, pode fazer toda a diferença.
-
Dan Luu
08/08/2017 21:00
O algoritmo de Sattolo é um verdadeiro trunfo para quem precisa de uma permutação com um ciclo único. Em outras palavras, é como encontrar um bug em produção onde apenas uma linha de código precisa ser ajustada para tudo funcionar. O autor acertadamente aponta que muitas explicações sobre o algoritmo se perdem em conceitos matemáticos complicados, como se estivessem buscando uma solução usando o Mjolnir dos teoremas. A simplicidade é sempre uma aliada valiosa, principalmente para aqueles que só querem entender como chegar a um resultado sem um mestrado em combinatória.
-
Dan Luu
17/07/2017 21:00
A latência em dispositivos como tablets é mais crítica do que muitos imaginam. Como mencionado, a experiência pode ser terrível com 100ms, enquanto abaixo de 10ms já traz uma sensação mais fluida. É curioso notar que, apesar dos gamers se preocuparem com latência, muitas aplicações comuns não são tão diferentes em suas necessidades. Se você está achando que não percebe latência no teclado e mouse, talvez esteja caindo na armadilha da percepção. No fim das contas, uma latência bem ajustada pode fazer toda a diferença.
-
Dan Luu
12/06/2017 21:00
A briga entre mouse e teclado sempre rende boas discussões, mas essas páginas citadas parecem mais uma guerra de bots. O autor menciona que "os sujeitos de teste relatam consistentemente que digitar é mais rápido que usar o mouse", mas diz que o mouse supera o teclado. Isso é um clássico case de um bug no código, onde a lógica precisa de um debug. Em vez de buscar um vencedor, deveríamos analisar quais tarefas são melhores com cada um. Na prática, muitos de nós já sentimos que uma digitação rápida e um bom ajuste de navegação podem fazer toda a diferença na produtividade.
-
Ruslan Spivak
Ruslan Spivak
08/05/2017 06:45
O artigo promete desbravar o tema dos escopos, que é algo fundamental para qualquer dev que já ficou perdido em closures. Afinal, "somente peixes mortos vão na correnteza": entender como gerenciar escopos é crucial para evitar bugs que parecem ter sido lançados por um troll. Dica: se você ainda não sabe a diferença entre escopos léxicos e dinâmicos, é hora de colocar isso na sua stack de conhecimentos.
-
Ruslan Spivak
Ruslan Spivak
27/04/2017 02:00
Esta parte traz uma boa dose de nuances sobre tabelas de símbolos e análise semântica. A frase "Anything worth doing is worth overdoing" poderia ser o lema de todo dev que se aventura em compiladores. Entender escopos e como eles funcionam é como entender as regras da Matrix: essencial para evitar bugs que poderiam transformar seu código em um verdadeiro agente Smith. Afinal, uma análise semântica bem feita pode ser a diferença entre um programa funcionando ou ele sendo só mais um looping sem sentido.
-
Drew DeVault
14/03/2017 21:00
A frase de Doug Gwyn resume bem: "Unix não foi projetado para te impedir de fazer besteiras", e isso vale totalmente para C. A força dessa linguagem vem acompanhada de uma responsabilidade que poucos desenvolvedores levantam a mão para assumir. O ponto sobre manter o código compreensível é fundamental; nada de malabarismos. Como ele diz, "escreva o código como se a pessoa que o mantivesse fosse você, do ano passado". E, verdade seja dita, evitar magia e manter a simplicidade é um mantra que todos os devs poderiam adotar como segunda natureza.
-
Antirez (Salvatore Sanfilippo)
28/02/2017 08:08
A discussão sobre o programador 10x sempre gera debates acalorados na comunidade: 'não existe' versus 'existem até os 100x'. A verdade é que programar é mais sobre design do que uma simples linearidade de execução. Quando um programador domina tanto o design quanto a implementação, ele realmente pode alcançar resultados surpreendentes. Mas em ambientes rígidos, a "mágica" dos 10x fica bem mais limitada; afinal, como correr 10 vezes mais rápido que outro corredor?
-
Andrew Kelley (criador do Zig)
14/02/2017 03:49
Zig tem se mostrado um alicerce interessante para aqueles que acham o C um verdadeiro labirinto de bugs. O artigo menciona uma série de exemplos de código onde Zig, com sua abordagem de segurança, oferece mensagens de erro mais claras e um controle melhor sobre ponteiros nulos. Como mostrado, com a linha "var y = ??x;", o Zig não só verifica nulos, mas também deixa claro o que acontece se você tentar extrair um valor nulo. Para os devs cansados de viver perigosamente, Zig pode ser a luz no fim do túnel, ou pelo menos uma lanterna bem posicionada.
-
Dan Luu
07/02/2017 23:00
A situação descrita é um lembrete valioso sobre como a web moderna está mais obesa do que um PC do século 90. O autor menciona que, apesar de ter uma conexão semelhante à de um modem 56k, "a vasta maioria da web não carregaria". Isso é um sinal claro de que muitos sites priorizam efeitos visuais e javascript em vez de oferecer uma experiência básica e acessível. É hora de parar de viver na nuvem e voltar a considerar a realidade de quem ainda está na terra firme da conexão discada.
-
Lua.org News
30/01/2017 08:32
Finalmente, a eterna busca pela perfeição em Lua teve mais um avanço com o lançamento da versão 5.3.4, que 'corrige todos os bugs conhecidos na versão 5.3.3'. É como um patch de segurança para a vida, a gente nunca sabe o que pode dar errado até que a primeira linha de código falhe. Para os desenvolvedores fans de Lua, essa atualização é um pequeno passo para o homem, mas um grande passo para não precisar mais lidar com bugs irritantes. E se você ainda está pensando se vale a pena atualizar, lembre-se: Bugs não são apenas características indesejáveis, são como gremlins – você acaba se arrependendo.
-
Andrew Kelley (criador do Zig)
30/01/2017 07:19
Zig está fazendo um ótimo trabalho em tornar o tempo de compilação mais relevante, com conceitos como "compile-time parameters" e "compile-time variables". Isso não só torna a linguagem mais legível, mas também a poderosa o suficiente para lidar com generics de uma maneira que faz você se sentir como se estivesse programando em um C++ bem comportado. O erro que aparece ao tentar passar um tipo conhecido apenas em tempo de execução, que é "unable to evaluate constant expression", mostra que o Zig definitivamente coloca você em seu devido lugar se você não respeitar essas regras. Para quem está buscando eficiência e segurança no código, essa abordagem da Zig é como ter um Jedi na sua equipe de desenvolvedores.
-
Drew DeVault
30/01/2017 01:00
C é um clássico que sempre terá seu lugar, mesmo com suas imperfeições. O autor ressalta que "C prefere ser conservadora com novas funcionalidades" e que, embora outras linguagens como Rust e Go tenham suas vantagens, C continua firme como minha preferida por sua simplicidade e estabilidade. O fato de que "um especialista em C poderia prever aproximadamente o código assembly produzido" mostra como essa linguagem mantém a conexão com a máquina de uma maneira que muitos novos frameworks parecem ignorar. No final das contas, C é como aquele velho computador que não precisa de atualizações para rodar seus jogos favoritos – simples e eficaz.