Na ultima semana, em um projeto interno da empresa onde trabalho, mais uma vez me dei conta de como conceitos basicos e bem consolidados podem fazer realmente a diferenca entre algo simples ou complexo e sobre uma solucao ser boa ou ruim.Conversando com a galera da empresa sobre frameworks web modernos, tecnologias atuais e o ciclo das tecnologias, tal como acontece nas artes, pude ver o quao a minha ideia realmente fazia sentido.Principio da LocalidadeBasicamente a localidade define o melhor aproveitamento da hierarquia de memoria em um sistema definindo assim o conceito de cache.O principio da localidade de referencia diz que o dado usado mais recentemente tem grande probabilidade de ser acessado novamente num futuro proximo (localidade temporal). Favorecendo-se o acesso a tais dados, aumenta-se o desempenho do sistema.Ja o principio da localidade espacial diz que um endereco em memoria , tende a ter enderecos proximos acessados em um futuro proximo, devido a natureza dos loops(repeticao) e das estruturas de dados de armazenamento sequencial(vetores).Uma definicao mais simples de cache poderia ser: uma area de armazenamento temporaria onde os dados frequentemente acedidos sao armazenados para acesso rapido.O uso do Memcached se justifica devido a tudo isso, tornando aplicacoes que possuam muitos acessos ao banco de dados incrivelmente performaticas.Quando o assunto for alta disponibilidade do banco de dados, o Memcached tambem pode ser uma otima pedida.Estrutura de DadosSaber implementar e entender as estruturas de dados faz grande diferenca na hora de solucionar problemas.Saber onde e porque usar uma Stack, uma Queue, um Map, um Set ou uma Tree, suas politicas de uso e seus variados tipos de interface pode fazer voce pensar Out-of-The-Box =).Na hora de parsear texto, inverter strings, trabalhar com interpretacao de linguagens, ou automatizar etapas , usar Stack/Pilha com politica LIFO e preciso!Em um contexto de concorrencia, eventos do tipo Publish/Subscribe,caixa de email e computacao distribuida em geral, vale a pena dar uma boa olha em Queue/Fila com politica FIFO.Cache , Sessoes, DNS entre outras aplicacoes ficam a cargo dos HashMaps.Para Foruns , Conceitos de Memoria, e Logica em Geral vale a pena estudar sobre Arvores e Heaps.Existem milhares de aplicacoes individuais e conjuntas destas estruturas de dados e um bom conhecimento sobre suas interfaces e aplicacoes pode fazer a diferenca em muitos casos.Teoria da ComputacaoCoisas como O(1), O(n),O(logn) podem ser horriveis se voce nao gosta de matematica ou nao entende seus algoritmos e sua complexidade.Porem , se voce olhar , mesmo que intuitivamente para seus algoritmos, podera entender o que pode estar acontecendo e quem saber fazer isso acontecer mais rapido.Em uma dada tarefa, eu e meu gerente percebemos que em um script de deploy automatizado com o Fabric, possuiamos um repositorio de estaticos, que devia ter sua consistencia preservada apos varios redeploys.O primeiro ataque ao problema foi copiar todo o repositorio para um repositorio auxiliar e posteriormente copia-los de volta. Basicamente um swap, que pra quem ja viu alguns algoritmos de ordenacao, pode ser custoso, ja que em principio,neste caso, quanto maior o numero de arquivos estaticos, o tempo da tarefa passa a ser quadrado O(n2).O segundo ataque, em