Rogick A.M.
Estarei mostrando aqui algumas dicas e experiências sobre desenvolvimento Java, Web e metodologias ágeis, além de outras nerdices da vida.
Marcadores
terça-feira, 22 de junho de 2010
Mega coleção de colas para webdesigners e programadores
segunda-feira, 31 de maio de 2010
Princípio 80/20 ou Sindrome 80-20?
Até aí beleza, mas um dia ouvi um colega meu falando do 80-20 em outro contexto na área de TI: que quando 80% do projeto está feito os outros 20% são deixados de lado (é como aquela casa que está a 10 anos ainda no emboço, ou o famoso "deixa pra depois").
Assim temos 2 tipos de "80/20", um que visa a melhor utilização do tempo e um outro que explica trabalhos inacabados! Então o que devemos fazer? Resposta: devemos aplicar o lado bom e evitar o lado ruim do 80/20. Agora vamos ver como fazer isso se tratando da área de desenvolvimento de software:
Aplicando o Princípio 80/20 (o lado bom)
Se você tiver várias tarefas, ordene-as em nível de importância e resultados e pegue primeiro as tarefas mais importantes que vão dar mais resultados (acreditem, isso não é redundante)*. Vamos imaginar o cenário em que sua equipe precise desenvolver um sistema J2EE gerenciamento de consultas médicas on-line para um grupo de hospitais (já tendo o modelo especificado e toda a infraestrutura preparada) e fazer uma apresentação dele em 2 meses e seu gerente quer uma versão rodando até a apresentação. Ao menos que os membro de sua equipe trabalhe 20 horas/dia, não vai dar tempo! Aí e que entra o tal do Princípio 80/20: já que só vai dar para fazer uma parte do trabalho, faça a que vai gerar mais resultados! Que resultados? Um sistema testado, rodando e apresentável! Neste cenário o cliente quer que o paciente entre no site, cadastre-se de acordo com o convênio, agende uma consulta, daí o médico pegue a lista de pacientes agendados para o dia de serviço e possa colocar alguma observação e dar a consulta como encerrada. Vejamos algumas dicas:
1º - Não dê idéias mirabolantes do tipo "eu posso fazer uma funcionalidade que o médico poderá colocar as imagens dos exames de terceiros apresentados na consulta dentro do sistema", faça o mais simples para o mais complexo.
2º - Evite fazer um "canivete suiço" (classes Megazord, etc,
3º - Faça os CRUDs que serão realmente utilizados no momento, os CRUDS das tabelas que serão pouco utilizadas podem ficar para a 2ª fase (Ex: Cadastro de Tipo de Pagamento).
4º - Concentre-se no funcionamento da regra de negócio, neste caso é criar o processo de cadastramento, agendamento e realização da consulta, o processo deve estar bem definido e de fácil utilização, nesta fase talvez seja aceitável relatórios com fraca apresentação, porém funcionais.
5º - Não deixe para testar por último: se não quiser usar TDD ou JUnit (que são altamente recomendados), faça mesmo assim testes a cada finalização de tarefa. E depois faça um teste geral só p/ garantir.
6º - No seu planejamento, não distribua as tarefas esperando que a equipe renda sempre 100% e reserve uma porcentagem (20%, por exemplo) do tempo para imprevistos. O Scrum usa algo do tipo porcentagem de produtividade da equipe, que eu não vou abordar aqui.
7º - Aplique o mesmo princípio para cada tarefa, se dedicando ao máximo nos dias e períodos em que é mais produtivo.
Fazendo isso é provável que terminará o que precisa antes do prazo e terá tempo para implementar mais coisas e assim surpreender seu cliente e seu gerente também!
Evitando a Sindrome 80-20 (o lado ruim)
Já aconteceu com você algo do tipo de ver uma aplicação em produção, olhar para um caso de uso que você fez e daí sentir um frio na espinha pensando "Caramba! Esqueci de implementar isso aqui!"? Não é nada agradável. Isso acontece porque quando vemos que uma tarefa está quase concluída
nosso cérebro já conclui que já terminamos, ou que "isso pode ficar para depois". O mesmo acontece em nível sistêmico, que quando um sistema está
1º - Faça sempre uma lista de sub-tarefas de cada grande tarefa e a marque como feita ou não-feita. Ex: Para o cadastro de Médico podemos ter as sub-tarefas: Criar a infraestrutura(entity, persistência, etc), Criar as regras de negócio(validações, assinaturas de métodos), Criar o controlador de ação, Criar o front-end(jsp, javascript), etc. Podendo o teste ficar como uma sub-tarefa e talvez testando cada sub-tarefa quando possível.
2º - Coloque a lista de tarefas e sub-tarefas bem acessível (de preferência ao alcance dos olhos e das mãos)
3º - Não pule para outra tarefa ao menos que tenha terminado a tarefa anterior ou que aja uma necessidade excepcional para isso (ex: seu colega faltou e terá que terminar a parte dele para fazer o deploy no final do dia)
4º - A equipe deve estar ciente do que os membros estão fazendo, isso ajuda a diminuir a competição, e cada um fica mais concentrado na sua tarefa sabendo da importancia dela para o projeto como um todo.
5º - Se não der para fazer tudo até o prazo, procure entregar o que tem se possível, marque um novo prazo para entregar o restante e esforce-se em cumprí-lo.
6º - Se "travar" peça ajuda, pesquise, e só deixe para depois se ver que poderá ser produtivo em outras tarefas. Nota: esse "depois" é no mesmo dia ou no dia seguinte! Não deixe para o acaso, senão você poderá esquecer de fazer ou fazer de qualquer jeito
7º - Não faça de "qualquer jeito" as tarefas só para cumprir com o prazo, retrabalho ou correr no final requer o dobro do esforço do que fazer certo na 1ª vez!
Enfim é isso!
Conclusão
Temos muitas distrações hoje em dia e o nosso tempo é muito corrido devido a vida dinâmica que levamos, aplicando o Princípio 80/20 e evitando a Síndrome do 80-20 conseguiremos produzir melhor e teremos menos estresse ao lidar com a difícil tarefa se tornar o mundo mais fácil para nossos usuários.
Abraços,
Rogick
-------
* Nem todos os casos dá para aplicar esse princípio,
quinta-feira, 31 de dezembro de 2009
Um pouco de etimologia
Etimologia (do grego antigo ἐτυμολογία, composto de ἔτυμον e -λογία "-logia"[1]) é a parte da gramática que trata da história ou origem das palavras e da explicação do significado de palavras através da análise dos elementos que as constituem. Por outras palavras, é o estudo da composição dos vocábulos e das regras de sua evolução histórica.
Algumas palavras derivam de outras línguas, possivelmente de uma forma modificada (as palavras-fontes são chamadas étimos). Por meio de antigos textos e comparações com outras línguas, os etimologistas tentam reconstruir a história das palavras - quando eles entram em uma língua, quais as suas fontes, e como a suas formas e significados se modificaram.
Os etimologistas também tentam reconstruir informações sobre línguas que são velhas demais para que uma informação direta (tal como a escrita) possa ser conhecida. Comparando-se palavras em línguas correlatas, pode-se aprender algo sobre suas línguas afins compartilhadas. Deste modo, foram encontrados radicais de palavras que podem ser rastreadas por todo o caminho de volta até a origem da família de línguas indo-européias.
A própria palavra etimologia vem do grego ἔτυμον (étimo, o verdadeiro significado de uma palavra, de 'étymos', verdadeiro) e λόγος (lógos, ciência, tratado).
quarta-feira, 10 de junho de 2009
Teoria do infinito
AVISO: Isso é uma teoria do meu irmão!
Tah bom que não muda nada, continua como eu disse, " A matemática eh ilógica" (ateh agora , eh claro)
Antes de podermos dizer qual é o resultado de uma operação, há que nos perguntarmos o que significa exactamente. O que significa subtrair dois infinitos? Para tentarmos fazer uma ideia, vamos a aproximar-nos da questão a partir de dois pontos de vista diferentes: um analítico e outro de conjuntos.
Aproximação analítica
Infinito pode ser o resultado de uma passagem ao limite. Podemos ver o que se passa quando subtraímos duas sucessões de limite infinito.
Sejam as sucessões seguintes:
- an = n;
- bn = n2;
- cn = n + k, onde k é um número real qualquer.
- lim an = lim bn = lim cn = +∞
Agora, se subtrairmos as sucessões e tomarmos limites, temos: - lim (bn - an) = lim (n2 - n) =+ ∞
- lim (cn - an) = lim (n + k - n) = lim k = k
Conclusão provisória: ao subtrairmos duas sucessões de limite infinito, a sucessão resultante pode ter por limite qualquer coisa.
Aproximação conjuntista
O Infinito também pode ser o cardinal de um conjunto, ou seja, o número de elementos que esse conjunto tem. A ideia agora é tomarmos um conjunto de cardinal infinito, subtrair-lhe subconjuntos de cardinal também infinito, e ver qual é o cardinal do conjunto resultante. Não é muito diferente do que fazemos quando para explicar a uma criança quanto é três menos dois lhe dizemos: “se tenho três maçãs e como uma, com quantas maçãs fico?”.
Sejam os conjuntos seguintes:
IN = {1, 2, 3, 4 ...}, ou seja, o conjunto dos números naturais .
P = {2, 4, 6, 8 ...}, ou seja, o conjunto dos números pares.
I = {1, 3, 5, 7 ...}, ou seja, o conjunto dos números ímpares.
A1 = IN - {1}, ou seja, o conjunto dos naturais excepto 1.
A2 = IN - {1,2}, ou seja, o conjunto dos naturais excepto 1 e 2.
An = IN - {1, 2,..., n}, ou seja, o conjunto dos naturais excepto 1, 2, 3, ... ,n
Entenderemos por A - B o conjunto resultante de tirar ao conjunto A os elementos do conjunto B. Vejamos alguns casos:
1. IN - IN = Ø
Se ao conjunto dos números naturais lhe tirarmos todos os números naturais, o que nos sobra? Nada, claro. Ao conjunto que não tem elementos em matemática chamamos conjunto vazio.
Portanto, ∞ - ∞ = 0.
2. IN - P = I
Está claro - se aos números naturais lhe tirarmos os pares ficam os ímpares.
Então: ∞ - ∞ = ∞.
3. IN - A1 = {1}
Ao conjunto dos números naturais tiramos-lhe todos os naturais excepto 1.
Então: ∞ - ∞ = 1.
4. IN-An = {1, 2, ..., n}
Ao conjunto dos números naturais tiramos-lhe todos os naturais excepto 1, 2, 3, ... n.
Então: ∞ - ∞ = n.
Conclusão: se a um conjunto com uma quantidade infinita de elementos lhe tirarmos una quantidade infinita de elementos, o conjunto resultante pode ter... qualquer quantidade de elementos, inclusive nenhum.
Conclusão provisória:
Nenhuma das duas aproximações nos dá uma ideia de como podemos definir a diferença de infinitos para que tenha sentido. Eu não conheço nenhuma, mas isso não quer dizer nada, claro.
Infinido = nada
Não, não tenho certeza se tah certo, tô mandando esse e-mail pq tô revoltado de tanto estudar, mas é uma boa perda de tempo
note
0,999... = x
(0,999...).10 = x .10
(9,999... ) -x = 10x - x (lembrando que x = 0,999...)
9 = 9x
x = 9/9 = 1 (tah, isso a matemática explica, tudo bem, mas eu, em minhas pertubações mentais pensei)
imagine um número infinito que vou representar por '§' (a representação real é outra, mas não tem no teclado)
então
x . 10 = §.10
10x = § (já que o infinito vezes qualquer número real é infinito)
10x - x = § - x
9x = 0 (infinito - infinito = 0)
x = 0/9 = 0 logo infinito é igual a nadaaaaaaaaaaaa!!!!!!!!!!!!!!!!!!!!!!!