Canvas para projeto de algoritmos

Na Coderi, para resolver nossos problemas diários de programação utilizamos esse canvas para projeto de algoritmos criado pela HiredInTech.
A HiredInTech possui um processo metódico de desenvolvimento de software muito bem definido, confira no site deles, nós recomendamos.

A propósito, esse canvas de projeto é o ponto de partida para as questões de prática de codificação na Google Interview University.

HiredInTech – Design Canvas
Canvas para design de projeto

Adições da Coderi

Estendemos o modelo da HiredInTech e adicionamos algumas sessões para ajudar na resolução de nossos problemas e para detalhar o conjunto de estratégias especificas para cada issue atacado.

Em seguida são elencados os ítens do canvas seguido de um breve descrição, e na sequencia há uma imagem para impressão do canvas em folha A4 de frente e verso.

  • Problema: o título do problema ou um resumo do que deve-se resolver.
  • Restrições: os limites, requisitos, expectativas delineadas pelos requisitos:
    • Deve-se utilizar apenas a memória?
    • Devo utilizar uma matriz de adjacências?
    • O X deve possuir somente elementos exclusivos.
    • Etc…
  • Manutenção: informações para manter o fluxo de controle:
    • A cauda do ponteiro de uma lista encadeada.
    • Incrementar o valor ao final de uma longa iteração.
    • Etc…
  • Entradas: as entradas para um método, com tipagem, e talvez tamanhos:
    • Matriz de inteiros de 32 bits.
    • String de caracteres ASCII.
    • Etc…
  • Retorno: o que o método deve retornar 😁:
    • Retorna um inteiro, ou qualquer tipo primitivo.
    • Retorna void, mas a string de entrada X é alterada.
    • Não há retorno, mas ocorre permutações em uma cadeia de caracteres.
    • Etc…
  • Erros – N/A: o que fazer com dados de entrada incorretos, itens não encontrado, etc…
    • Lançar uma exceção.
    • Returnar false, None, NULL, nil, etc..
    • Retornar um valor sentinela: -1 ou similar.
    • Etc…
  • Ideias: escreva o resumo de suas idéias sobre o algoritmo, começando com uma versão básica de força bruta.
    • Sessão 1:
      • O algoritmo de força bruta, uma versão ineficiente inicial.
      • Já um algoritmo bem pensado, encantador, que mostre o quanto somos brilhantes e criativos.
    • Sessão 2:
      • T e S são as complexidades de Tempo e Espaço para cada algoritmo.
  • Testes: uma lista de entradas para testar o algoritmo:
    • Entradas inválidas: entrada de inteiro onde uma seqüência de caracteres é esperada.
    • Entradas vazias: ponteiro nulo, seqüência vazia, matriz vazia.
    • Entradas negativas: como -1, -33.
    • Entradas normais com 2 elementos.
    • Entradas normais com número par de elementos (para algoritmos onde você está encontrando pontos médios ou fazendo saltos, como uma busca binária ou operações de heap de array-backed)
    • Etc…
Coderi – Design Canvas
Canvas para design de projeto da Coderi

Depois de preenchê-lo, você deve estar bem preparado para começar a codificação, entendendo e tornado visível as expectativas do algoritmo desejado.

É interessante compartilhar resultado com a equipe de desenvolvimento, o background do time pode ajudar a verificar se seu algoritmo está chegando a um beco sem saída ou se há problemas com alocação de memória ou ainda problemas com a complexidade.

Abraços; Thiago Pereira Rosa.