terça-feira, 31 de maio de 2011

Notação em administração de TI

Conforme visto anteriormente, expressar bem um conceito ou idéia é um problema de notação. Em minha opinião é uma demonstração de inocência a crença de que as notações existentes são suficientes para se expressar de maneira unívoca todas as nossas necessidades.

Uma demonstração da seriedade do problema é que o DARPA frustrado com a ineficácia das linguagens atuais está investindo 400 milhões de dólares na pesquisa de uma nova notação.

Para vários autores (Aritóteles, Heidegger e Habermas entre outros) a primeira característica que uma boa notação deve ter é ser denotativa, e não conotativa. Sempre que houver margem de interpretação haverá problemas. Na ausência disso, estabelecer uma semântica coerente já é um bom paliativo, e é exatamente nesse sentido que concebi esta postagem.

Como eu já citei em outra postagem, a maior parte dos usos para a palavra “sinônimo” é metafórica. As palavras são diferentes para expressar diferenças. Conotativamente elas podem ser equivalentes, mas raramente o são denotativamente. Esse fato é importante quando pretendemos ser claros, e idealmente unívocos.

Parece-me ideal começar com os componentes da denotação, visto ser a denotação a mais básica definição. Os elementos que tratarei nesta postagem apesar de sua grande abrangência, não circunscrevem o assunto, mas já darão suficiente clareza para que eu possa prosseguir a progressão das idéias nas próximas postagens.

Minha intenção é separar alguns conceitos de denotação que hoje estão embaralhados dentro de duas classes, abaixo identificadas como elementos ativos e passivos:

Elemento ativo

Elemento passivo

Ação

Propriedade

Serviço

Atributo

Procedimento

Valor

Operação

Característica

Capacidade

Variável

Função

Registro

Método

Dado

Responsabilidade

Significado

Atuação

Domínio

Competência

Sentido

Processo

Parâmetro

Quando todas as palavras significam a mesma coisa, ou quando cada palavra significa tudo, na verdade nenhuma significa nada. Qual a diferença entre um método e um procedimento? Ou entre um atributo e uma propriedade? Dado e valor não são a mesma coisa? Competência ou responsabilidade? Esses elementos são todos parecidos, porém não são iguais. Desconhecer o porquê de sua similitude e diferença é fonte de dificuldades. Tanto administradores como desenvolvedores de software falham vergonhosamente nessa compreensão (pesquisem qualquer um desses termos no google para verem o resultado!).

Os significados são circunstanciais e discricionários. Cada uma dessas palavras listadas no quadro tem uma história de interpretação. A separação que eu faço é literalmente uma arbitragem, pois em contextos e momentos históricos diferentes cada uma dessas palavras foi utilizada de forma particular. Pode parecer brincadeira, mas existe uma hermenêutica dos significados desses elementos, pois os contextos de uso podem ser (ou já foram!) perdidos.

Sendo uma arbitragem, ela não é uma verdade do tipo pela qual as pessoas se apaixonam, elas apenas podem aceitar ou não, mediante sua conveniência.

Como já escrevi um pouco acima, inevitavelmente em postagens futuras terei de me utilizar desses termos, assim é útil expor como eu compreendo e me utilizo de cada um deles.

Minha intenção com os argumentos a seguir é convencer da conveniência do uso que faço desses termos:

  • O primeiro argumento nesse sentido é dar as palavras significados unívocos, em outras palavras, abolir as conotações.
  • O segundo é de caráter metodológico, manter o vocabulário coerente com o contexto.
  • O terceiro é epistemológico, se estabelecer uma semântica bem definida acelera e facilita a comunicação.
  • Por fim, a minha intenção é estabelecer um glossário para que se possa saber o que esta sendo dito sem a necessidade de repetidas explicações adicionais.

Assim seguem algumas sugestões de significado (minhas arbitragens de sentido) que considero úteis e uma rápida indicação de onde eu obtive a interpretação:

  • Banco de dados não tem registros, tem tuplas. Uso assim porque na teoria de SGBD, há cálculo relacional de tuplas, álgebra relacional e basicamente não há uso do elemento registro.

  • Registro é uma especialização de tupla. Bons exemplos do uso são ADA, F# e Pascal.

  • Objetos são reais, logo método é só de objeto, nunca de classe, assim como atributo. Da teoria de orientação à objetos, principalmente COAD e SmallTalk.

  • Classes são sempre abstratas e têm responsabilidades e propriedades. Idem.

  • Parâmetros são valores em trânsito, parâmetros sempre são passados. “The art of computer programming”. Evitamos a palavra argumento pelo fato dela ter um sentido bem estabelecido em lógica e oratória.

  • Rotinas têm funções. A linguagem C implementa isso de forma bem explícita, pois nela não há programa nem procedimento. Essa separação pode parecer sem sentido a princípio, mas facilita por ser consistente, permitindo, por exemplo, que rotinas sejam invocadas com parâmetros. “The C Programming Language” K&R

  • Valor é atômico e escalar. É preferível à palavra conteúdo, pois o significado conteúdo é mais amplo, podendo ser muitas coisas além do valor. Assim é preferível dizer que uma variável tem valor e não conteúdo. Como contra-exemplo um vetor de ariedade cinco tem como conteúdo cinco valores.

  • Atributo é um tipo de conteúdo, ou em outras palavras, um conjunto (um ou mais) de valores.

  • Variável é a materialização no programa de um atributo. Apesar de em matemática se ter variáveis de funções, é mais explícita a forma de parâmetros para as mesmas, além de ser prática em programação.

  • Todo problema tem um domínio e competências para sua resolução. Da DDD, e do “How to solve it” do Polya.

  • Operação e valor para cálculo é um conceito direto da teoria matemática e da computação.

  • A solução tem ações e características. A explicação para isso que usei é a de Jensen.

  • Uma abordagem necessita de sentido e de atuação. De estratégia e projeto de algoritmos.

  • A necessidade sempre é atendida por serviços e significados. De orientação à serviços e pesquisa de negócios.

  • O que determina o aspecto são as capacidades e registro que temos dele. Da Orientação à Aspecto e ontologia da realidade.

  • Um fenômeno tem processo e dados, pois pode ser observado e registrado. Da fenomenologia e epistemologia.

Abaixo ofereço uma tabela com as associações da sugestão:

Contentor

Elemento ativo

Elemento passivo

Programa

Procedimento

Variável

Rotina

Função

Parâmetro

Objeto

Método

Atributo

Classe

Responsabilidade

Propriedade

Cálculo

Operação

Valor

Problema

Competência

Domínio

Solução

Ação

Característica

Abordagem

Atuação

Sentido

Necessidade

Serviço

Significado

Aspecto

Capacidade

Registro

Fenômeno

Processo

Dado