16 pontos por GN⁺ 2024-05-21 | 5 comentários | Compartilhar no WhatsApp
  • UNIX, Git, Emacs, Boost.Graph, Bazel
  • Como programador, interajo diariamente com ferramentas de software, mas a maioria delas serve apenas para realizar o trabalho no limite do necessário
  • Às vezes, encontro softwares que vão além da utilidade simples, estimulam a imaginação, abrem novas possibilidades e influenciam a forma como projetamos sistemas
  • Chamo esse tipo de software de Enlightenmentware
  • Para programadores, a fonte mais comum desse tipo de despertar é a linguagem de programação que usam, inclusive linguagens aprendidas por hobby
  • Ao lidar com linguagens de programação como MASM, C, Prolog e Idris, vivi muitos momentos de revelação
  • Como a influência do aprendizado de linguagens na expansão do pensamento já é conhecida há muito tempo, este texto decide se concentrar não nas linguagens, mas apenas em softwares que provocam esse tipo de despertar

UNIX

Unix é amigável com o usuário — ele apenas escolhe bem os amigos.

Anônimo, "Art of unix Programming" por Eric S. Raymond

  • Em 2008, enquanto estudava na universidade, comecei a procurar meu primeiro emprego em programação.
  • A maioria das vagas exigia conhecimento de UNIX e socket.
  • Como não havia disciplinas sobre unix ou sistemas operacionais no currículo da universidade, decidi estudar por conta própria.
  • Entrei no mundo do unix por meio do livro "The unix Operating System", de Andrey Robachevsky e outros.
  • Ao instalar o Mandriva Linux, passei a explorar o ambiente unix.
  • Desde então, unix esteve presente em todas as fases da minha vida.
  • A maior parte do software roda em ambientes unix, e ainda hoje consulto o livro "Advanced Programming in the unix Environment".

Git

Com git é fácil dar um tiro no próprio pé, mas também é fácil voltar ao pé anterior e fazer merge com a perna atual.

Jack William Bell

  • No início de 2009, tive meu primeiro contato com um sistema de controle de versão usando Rational ClearCase.
  • O ClearCase era extremamente confuso e só atendia aos requisitos mínimos.
  • Depois passei a usar Subversion e aprendi com o livro "Version Control with Subversion".
  • O Subversion era fácil de entender e de usar, mas era inconveniente para projetos pessoais.
  • Depois disso, descobri o Git.
  • O Git tinha uma curva de aprendizado íngreme e era confuso, mas era um tipo de confusão diferente do ClearCase.
  • O Git removeu o atrito do uso de controle de versão, tornando possível versionar tudo o que vale a pena.
  • Seu design era atraente por ser uma mistura elegante de sistema distribuído, grafo acíclico e armazenamento endereçado por conteúdo.
  • Aprender o funcionamento interno do Git foi tão divertido que isso me levou a me interessar por outros sistemas de controle de versão.
  • A principal desvantagem do Git é sua abordagem orientada a snapshots, que torna mais difícil entender merges.

Emacs

Qualquer editor de texto consegue salvar arquivos, mas só o Emacs consegue salvar a alma.

Per Abrahamsen

  • Editei meu primeiro programa na amigável janela azul do Turbo Pascal 7.0.
  • Na universidade, aprendi programação usando Pascal e depois passei para C++ e Java.
  • No meu primeiro emprego como programador, usei NEdit, mas logo comecei a me interessar por Vim e Emacs.
  • O Vim era desafiador, mas divertido, como tocar um instrumento musical.
  • O Emacs funciona como uma máquina Lisp que oferece edição de texto e gerenciamento de janelas.
  • A estrutura interna do Emacs é limpa, bem organizada e bem documentada.
  • Estendê-lo com Emacs Lisp é muito mais fácil do que em outros editores.

Boost.Graph

Tenho um forte preconceito contra a moda do código reutilizável. Acho que "código reeditável" é muito melhor do que caixa-preta ou toolkit.

Donald Knuth, em entrevista com Andrew Binstock

  • Na véspera de Ano-Novo de 2013, li a Boost Graph Library.
  • A maioria das bibliotecas de algoritmos depende de representações específicas de dados, o que dificulta sua integração em projetos existentes.
  • A Boost.Graph resolve esse problema usando programação genérica.
  • Nunca cheguei a usar a biblioteca na prática, mas seu design aprofundou minha compreensão do design da STL e da programação genérica.

Bazel

Se o make não funciona como você esperava, há uma boa chance de o makefile estar errado.

Adam de Boor, "PMake—A Tutorial"

  • Em 2009, escrevi meu primeiro Makefile para um projeto de pesquisa.
  • A complexidade do make me fez desejar uma ferramenta melhor.
  • Tentei vários sistemas de build, mas todos me deixaram insatisfeito.
  • Em 2016, entrei no Google e passei a usar o blaze.
  • O Bazel foi a última peça que faltava no quebra-cabeça dos sistemas de build.
  • O Bazel é rápido, preciso, fácil de usar e independente de linguagem.

Conclusão

  • Características em comum de um bom enlightenmentware:
    • Resolve problemas profundos e lida com questões que enfrentamos no dia a dia.
    • Coloca muito volume em uma superfície pequena.
    • Convida e incentiva a explorar seu interior.

Opinião do GN⁺

  • Importância do UNIX: UNIX é usado como sistema operacional básico em muitos ambientes de programação e é essencial para entender os fundamentos da programação de sistemas.
  • Curva de aprendizado do Git: Git é difícil no começo, mas é indispensável como ferramenta poderosa de controle de versão. É especialmente útil em sistemas distribuídos e ambientes colaborativos.
  • Flexibilidade do Emacs: Emacs oferece muito mais do que um editor de texto e é especialmente recomendável para quem tem interesse em programação Lisp.
  • Programação genérica no Boost.Graph: Boost.Graph é um exemplo poderoso de programação genérica e permite aprender formas eficientes de implementar algoritmos complexos.
  • Eficiência do Bazel: Bazel é uma ferramenta capaz de maximizar a eficiência do sistema de build em projetos de grande escala, sendo particularmente útil em grandes empresas como o Google.

5 comentários

 
zihado 2024-05-23

No Windows, talvez seja o Everything mesmo haha

 
bus710 2024-05-23

O quão bom o Magit é para entrar nessa lista de softwares-primas? Como não uso Emacs, não tenho como saber. No Nvim, dizem que o Neogit foi influenciado pelo Magit, então talvez eu devesse experimentar pelo menos esse...

 
bbulbum 2024-05-23

Também recomendo o lazygit hehe

 
bus710 2024-05-23

Obrigado.
No fim de semana, vou instalar o superfile e o lazygit para dar uma olhada.

 
GN⁺ 2024-05-21
Opiniões do Hacker News

Resumo dos comentários do Hacker News

  • Compiler Explorer:

    • O Compiler Explorer mudou bastante as discussões sobre compiladores e otimização de desempenho.
    • Teve um impacto positivo na qualidade das discussões em fóruns.
    • Afirmações ousadas podem ser verificadas rapidamente por meio de links.
    • Ferramentas como llvm-mca e uiCA também são úteis.
  • Opiniões sobre o uso do Windows:

    • Apresenta uma visão equilibrada sobre o Windows.
    • O Windows da linha NT é um excelente sistema operacional.
    • Mantêm o Windows instalado para jogos.
  • Docker:

    • O Docker economizou muito tempo ao longo de uma carreira em consultoria.
    • Permite executar projetos antigos rapidamente.
    • Elimina a necessidade de instalar vários servidores de banco de dados.
    • Torna ambientes Python reproduzíveis e executáveis em paralelo.
  • Spring Framework:

    • O Spring Framework atrapalha a compreensão do conceito de injeção de dependência.
    • Faz muitos desenvolvedores Java acharem que frameworks complexos são necessários.
    • O próprio Spring é útil, mas pode tornar o software mais complexo e menos portável.
  • Nix:

    • Com Nix e Nixpkgs, é possível realizar muitas tarefas complexas.
    • Facilita coisas como builds estáticos de binários Rust.
    • Oferece várias opções de build e recursos de cache.
    • O Nix é muito útil, mas o NixOS deve ser abordado com cautela.
  • Emacs:

    • O Emacs transforma o trabalho de corrigir bugs em prática técnica.
    • Torna tarefas entediantes mais divertidas.
  • Conceito de 'Round':

    • O conceito de 'Round' oferece a maior área possível de interface com o menor volume central possível.
    • O núcleo do Emacs e do Git é pequeno, simples e poderoso.
  • Magit:

    • O Magit é um exemplo didático de simplicidade, eficácia e facilidade de descoberta.
    • Expõe melhor as funcionalidades do Git.
    • Não introduz terminologia nem fluxo de trabalho próprios.
  • Comparação entre SVN e Git:

    • A experiência de usar SVN foi muito negativa.
    • O Git foi muito mais intuitivo e fácil de entender.
    • O fluxo de trabalho melhorou ao usar Git.
  • Experiência usando Linux, Emacs, Bazel e Magit:

    • Trabalha no Linux usando Emacs e Bazel.
    • Procura blogs, salva o trabalho no Emacs e escreve mensagens de commit com o Magit.
    • Faz push para o repositório Git.