Clojure é uma linguagem de programação que promete resolver muitos problemas comuns da programação moderna:
- Hierarquias de classes incompreensíveis
- Bugs causados por mutação de estado (heisenbugs)
- Condições de corrida (race conditions)
- Problemas de concorrência
Para dominar Clojure, você precisa navegar por quatro áreas fundamentais:
- Objetivo: Configurar um ambiente de desenvolvimento eficiente
- Conteúdo: Setup do ambiente, REPL, editores
- Por que importante: Feedback rápido acelera o aprendizado
- Objetivo: Dominar sintaxe, semântica e estruturas de dados
- Conteúdo: Sintaxe Lisp, macros, construções de concorrência
- Por que importante: Base fundamental para programar em Clojure
- Objetivo: Construir, executar e distribuir programas
- Conteúdo: Build tools, bibliotecas, JVM, interop com Java
- Por que importante: Criar aplicações reais e reutilizar código
- Objetivo: Pensar como um Clojurista
- Conteúdo: Programação funcional, filosofia Lisp, simplicidade
- Por que importante: Resolver problemas de forma eficaz e elegante
- Ferramentas e conceitos para começar imediatamente
- Programas reais desde o início
- Aprendizado prático e imediato
- Não assume experiência com JVM
- Não assume conhecimento de programação funcional
- Não assume experiência com Lisp
- Explica tudo em detalhes
- Ao invés de exemplos "do mundo real"
- Exercícios divertidos e memoráveis
- Exemplos: atacar hobbits, rastrear vampiros brilhantes
- Cap. 1: Building, Running, e o REPL
- Cap. 2: Como Usar Emacs
- Cap. 3: Crash Course - sintaxe básica e estruturas
- Cap. 4: Funções centrais em profundidade
- Cap. 5: Programação funcional
- Cap. 6: Organização de projetos e namespaces
- Cap. 7: Leitura, avaliação e macros
- Cap. 8: Escrevendo macros
- Cap. 9: Programação concorrente e paralela
- Cap. 10: Gerenciamento de estado (Atoms, Refs, Vars)
- Cap. 11: core.async
- Cap. 12: Interoperabilidade com Java
- Cap. 13: Abstrações (Multimethods, Protocols, Records)
- Sintaxe minimalista baseada em s-expressions
- Código é dados (homoiconicidade)
- Macros poderosos para metaprogramação
- Imutabilidade por padrão
- Funções como cidadãos de primeira classe
- Evita efeitos colaterais
- Acesso a todo ecossistema Java
- Performance da JVM
- Interoperabilidade com Java
- Estruturas de dados imutáveis
- STM (Software Transactional Memory)
- Ferramentas como core.async
- Use o REPL constantemente - especialmente Cap. 3-8
- Digite os exemplos - não apenas leia
- Experimente variações - mude os exemplos
- Pratique imediatamente - aplique o que aprendeu
- Semanas 1-2: Ambiente + Crash Course (Cap. 1-3)
- Semanas 3-4: Funções + Programação Funcional (Cap. 4-6)
- Semanas 5-6: Macros (Cap. 7-8)
- Semanas 7-9: Tópicos Avançados (Cap. 9-13)
- Código mais simples: Menos complexidade acidental
- Menos bugs: Imutabilidade reduz erros
- Concorrência segura: Ferramentas built-in para paralelismo
- Produtividade: REPL-driven development
- Expressividade: Macros permitem criar DSLs
- Netflix (sistemas distribuídos, microserviços, UIs)
- Empresas que precisam de alta concorrência
- Sistemas que requerem confiabilidade
- Projetos que se beneficiam de programação funcional
Próximo: Capítulo 1 - Building, Running, and the REPL