Slide 1

Slide 1 text

Modelagem de domínios como construção de teorias

Slide 2

Slide 2 text

Talysson Oliveira Software architect & Chief Learning Officer na Codeminer42

Slide 3

Slide 3 text

codeminer42.com @codeminer42

Slide 4

Slide 4 text

Peter Naur, 1985 "Programming as Theory Building"

Slide 5

Slide 5 text

"[...] Programação deve ser considerada como a produção de um programa e determinados outros textos." "[...] Programação deve ser considerada apropriadamente como uma atividade onde a pessoa programadora forma ou encontra algum tipo de insight, uma teoria, sobre os assuntos em questão." VS

Slide 6

Slide 6 text

O que é uma teoria?

Slide 7

Slide 7 text

“ Uma pessoa que possui uma teoria […] sabe como fazer determinadas coisas e além disso pode sustentar o que é realmente feito com explicações, justificativas, e respostas a indagações sobre a atividade em questão "The Concept of Mind", Gilbert Ryle

Slide 8

Slide 8 text

O que é realmente construído por quem programa? - Não é código, especificações e documentações, etc. - Uma teoria de como algumas questões do mundo são tratadas por um programa

Slide 9

Slide 9 text

Convergência de ideias

Slide 10

Slide 10 text

Convergência de ideias - O que Naur chama de "questões do mundo": - "a área em que o usuário aplica um programa" - "uma esfera de conhecimento, influencia ou atividade" - Esta é a definição de domínio no livro Domain-Driven Design (2003), de Eric Evans

Slide 11

Slide 11 text

Domínio (Questões do mundo) Sistema de abstrações que descrevem aspectos específicos do domínio, e pode ser usado para resolver problemas relacionados ao domínio Avião (Domínio) Aeromodelo Modelo de domínio (Teoria) Aeromodelo

Slide 12

Slide 12 text

Avião (Domínio) Aeromodelo (Modelo) Asa Trem de pouso Combustível Empuxo Assento Bagagem Cinto de segurança Luz de leitura Tripulação Pouso e Decolagem Radar Caixa-preta Finger - Relevância para o negócio - Presença em conversas: linguagem ubíqua - Regras de negócio associadas

Slide 13

Slide 13 text

Código, especificações e documentação são transcendidos pelo conhecimento da pessoa programadora sobre a teoria em pelo menos 3 áreas — Peter Naur

Slide 14

Slide 14 text

Código, especificações e documentação são transcendidos pelo conhecimento do time sobre o modelo em pelo menos 3 áreas

Slide 15

Slide 15 text

Quem tem a teoria pode explicar como a solução se relaciona com as questões do mundo que ela ajuda a resolver 1

Slide 16

Slide 16 text

Explicar como a solução se relaciona com o problema - Conhecer a teoria envolve entender como o domínio é representado no modelo - Conceitos são enraizados no conhecimento dos especialistas de domínio, destilando-o - O modelo não se expressa com texto, deve viver no conhecimento compartilhado do time 1

Slide 17

Slide 17 text

Quem tem a teoria pode explicar porque cada parte do programa é como é 2

Slide 18

Slide 18 text

Explicar o porque a solução é como é - Conhecer o modelo envolve sustentar a explicação de porque um conceito do domínio é representado da forma como é em código - Esta representação deve ser o mais alinhada com o modelo quanto possível - Isto tem um impacto muito importante no uso de design patterns em código de domínio 2

Slide 19

Slide 19 text

Quem tem a teoria é capaz de responder construtivamente a qualquer demanda por modificação do programa para suportar as questões do mundo de uma maneira diferente 3

Slide 20

Slide 20 text

Responder a mudanças - Um bom modelo acomoda elegantemente novos conceitos do mesmo domínio - Um código pode ser modificado sem seguir o modelo, mas causa o apodrecimento dele - Só faz diferença pra quem conhece a teoria - Refatoração do modelo impacta em refatoração do código, e isso é bom! 3

Slide 21

Slide 21 text

A vida e morte de um modelo

Slide 22

Slide 22 text

“ A construção de um programa é o mesmo que a construção da sua teoria pelo time e no time "Programming as Theory Building", Peter Naur

Slide 23

Slide 23 text

A vida e morte de um modelo - A dissolução de um time marca a morte da construção de um programa - Código, documentação e especificações não são capazes de comunicar a teoria ou modelo - O modelo pode ser transmitido através de convivência do time antigo com o novo

Slide 24

Slide 24 text

Programação não é sobre produzir texto

Slide 25

Slide 25 text

“ [...] É importante ter um entendimento correto do que a programação é. Se o seu entendimento é incorreto, iremos entender errado as dificuldades que surgem na atividade e nossas tentativas de superá-las darão origem a conflitos e frustrações "Programming as Theory Building", Peter Naur

Slide 26

Slide 26 text

Programação não é sobre produzir texto - Programar é sobre construir uma teoria, não sobre produzir o código do programa - A teoria é criada pelo time e no time - Não é possível obter a teoria sem participar desta atividade

Slide 27

Slide 27 text

Programação não é sobre produzir texto - A forma que a teoria toma é influenciada por fatores técnicos, sociais, políticos, econômicos… - O código não contém a teoria - LLMs que produzem código não são capazes de construir e entender teorias - O que não quer dizer que não possam ajudar na tarefa de escrever código*

Slide 28

Slide 28 text

Não é a primeira vez que várias dessas ideias se repetem

Slide 29

Slide 29 text

"Programming as Theory Building" Peter Naur "Domain-Driven Design" Eric Evans 1985 2003 1986 "No Silver Bullet" Fred Brooks (Autor de The Mythical Man-Month) "Eu acredito que a parte difícil de construir software está na especificação, design e teste do construto conceitual, e não na tarefa de representar e testar a fidelidade das representações" 1990 "Designing C++ libraries" James M Coggins "[...] tem-se construído classes como listas encadeadas ou conjuntos (sets), em vez de classes como interfaces do usuário, ou feixe de radiação, ou modelo de elementos finitos. [...] Meus colaboradores oftalmologistas não se importam com pilhas (stacks), eles se importam com as descrições do formato polinomial de Legendre de córneas"

Slide 30

Slide 30 text

Conclusões - Construa teorias: o entendimento de como e porque um programa resolve um problema - Construir uma teoria é análogo à modelagem - Orientar o desenvolvimento pelo modelo faz com que tenhamos soluções mais precisas - Programar não é produzir texto

Slide 31

Slide 31 text

Obrigado! @talyssonoc | @codeminer42

Slide 32

Slide 32 text

Referências - "Programming as Theory Building", Peter Naur - "Domain-Driven Design", Eric Evans - "The Mythical Man-Month, 20th Anniversary Edition", Fred Brooks - "Go read Peter Naur's "Programming as Theory Building" and then come back and tell me that LLMs can replace human programmers", Dave Gauer