Introdução
Este livro tem como objetivo reunir/compilar os fragmentos de conhecimento/sabedoria utilizados pela profissão de Craftsman - Construtor de Software.
Os temas serão pragmaticamente voltados para o ramo Sistema de Computação, principalmente abordando a disciplina de Arquitetura de Software e Testes com foco nos dialetos da tecnologia Lisp.
Os capítulos descrevem as etapas marco de um fluxo de desenvolvimento de software, considerando uma base sólida como também os aspectos filosóficos e científicos do processo.
A Base
As tecnologias para a construção de software são divididas em: mainstream e acadêmica.
As tecnologias mainstream, tais como Java, .NET, C++, JavaScript, Python, dentre outras..., ditam o mercado de desenvolvimento de software com uma grande variedade de plataformas e ferramentas (tooling), voltadas para os requisitos de desempenho e adaptação para as máquinas atuais - são as linguagens primárias, geralmente utilizadas para a resolução de problemas.
As tecnologias acadêmicas, tais como Haskell, C, dentre outras..., ditam a evolução da tecnologia e possuem uma comunidade especializada e voltada a aprendizagem - são as linguagens secundárias, geralmente utilizadas para a prototipação, prova de conceito e experimentação de ideias.
A base do livro utiliza os dialetos Racket, Clojure e Emacs da tecnologia Lisp através dos livros texto:
- How to Design Programs (HtDP); e
- Program
- Component; e
- System
- Structure and Interpretation of Computer Programs (SICP).
=> complemento com os materiais do curso 6.005: Software Construction do Massachusetts Institute of Technology (MIT).
=> todos os livros estão no capítulo Referências.
Dentre os dialetos Lisp estão:
- Racket;
- Clojure (JVM, CLR e JS);
- Clojerl (Erlang);
- Emacs Lisp;
- Common Lisp;
- Guile (Unix);
- Kawa (JVM);
- Fennel (Lua);
- Ferret (Embedded Control Systems);
- uLisp (Embedded Control Systems);
- Cloe (Go);
- Carp (Haskel);
- Picolisp;
- Lux (JVM);
- Hy (Python);
- Gambit (C);
- Chicken (C);
- Bigloo;
- Shen;
- ...
Filosofia
A filosofia da construção de software é composta por:
Desenvolvimento Guiado por Testes - Test Driven Development (TDD): é uma técnica de desenvolvimento de software da XP, em que os testes são criados antes do código de produção;
Desenvolvimento Guiado por Comportamento - Behavior Driven Development (BDD): é uma técnica de desenvolvimento de software da XP, em que os testes são criados em paralelo ao código de produção; e
Projeto Orientado a Domínio - Domain Driven Design (DDD): aborda um compilado de experiências aplicadas ao desenvolvimento de software.
Essas ideias são aplicadas como base para as modernas arquiteturas baseadas no Ports-And-Adapters, tais como: Hexagonal, Onion e Clean Architecture.
Ciência
A ciência da construção de software é composta por:
Systematic Program Design - SPD: técnica de desenvolvimento de software geral para múltiplos paradigmas, recomendado para grupos com expertise;
Visão 4+1: modelagem das visões da arquitetura de software em análise e projeto na Linguagem de Modelagem Unificada - Unified Modeling Language (UML), com aspectos científicos para grupos médios e grandes - definida por Philippe Kruchten no artigo Architectural Blueprints - The "4+1" View Model of Software Architecture em 1995;
Metodologia Clean: metodologia apresentada por um conjunto de livros e materiais multimídia com as experiências do autor Robert Cecil Martin - conhecido por Uncle Bob;
Effective: representado pelos livros com abordagem semântica e dialética das tecnologias; e
Documentação: os famosos docs apresentados pelos desenvolvedores da tecnologia, geralmente no formato online.
Guia
O guia da construção de software são divididas em: individual e grupo.
Individual
GTD: em breve;
Writer: em breve;
Mind Maps: em breve; e
Sketch Notes: em breve.
Grupo
XP: metodologia ágil de desenvolvimento de software de proposta geral para grupos pequenos e médios;
Scrum: em breve;
Kanban: em breve; e
Lean: em breve.
Fluxo
O livro percorre as atividades da construção de software através de:
Requisitos | Arquitetura | Testes | Código | Metodologia Científica | Referências
Atualização de 12/01/2019
Página: mdssjc.github.io | Repositório: github.com/mdssjc
JVM: Java Virtual Machine.
CLR: Common Language Runtime.
JS: Java Script.
XP: Extreme Programming (Programação Extrema).