Evoluir na carreira!

Concordo com o que o Bruno Mentges diz no blog dele.

Mas meu conselho vai além… quer evoluir rapidamente? não vá fazer curso, não compre livros, nem procure a melhor universidade(aliás ninguém consegue aprender nada de relevante na faculdade em via de regra).
Procure as melhores empresas de sua cidade ou região, as mais conceituadas e peça pra estagiar de graça só para acompanhar os projetos… escolha uns dois mais complexos que a empresa tenha.
Esqueça baboseiras de ideologia, de achismos ou querer faturar uma mixaria em estágios capengas, aprenda com quem sabe, com quem conhece, mande pro saco esses estágios meia-bocas que te tratarão como empregados…
Tive a sorte de iniciar minha carreira em uma empresa Internacional, pequena mas excelente, essa escola poucos podem se dar ao luxo, depois que passei em outras empresas e vi como eram tratados os estagiários, soube de fato que fui um sortudo.

Dei esse mesmo conselho a minha irmã, ela não entende que ganhar uma mixaria em um estágio fuleragem não trará nada de valor a carreira dela, a resposta dela foi: “Eu trabalhar de graça?”.
Ainda perdi meu tempo para explicar que na verdade ela estará fazendo o melhor curso que por ventura tenha no mercado e de graça, e se duvidar ainda é contratada pela empresa se demonstrar vontade.
My 2cents!

Eles não sabem onde vão se meter!

Depois de toda essa crise (na verdade não deveria ser mas a imprensa precisa vender jornal) vou postar aqui minha preocupação social com os membros do PCC.
Li recentemente que essa quadrilha (ops, movimento social) pretende lançar dois condidatos a deputado nas próximas eleições, e eu que pensei que eles já tinham eleito o presidente, mas deixa pra lá.
Tenho sérias preocupações, não é de hoje que temos uma ministra assaltadora de bancos, um ex-ministro terrorista, sequestrador e treinado por guerrilheiros cubanos, um presidente analfabeto defendido por intelectuais entre outras figuras atípicas e pitorescas do nosso sistema, mas um pobre coitado membro de um “movimento social” se meter em Brasília?
Eles são loucos? Pessoas que estão encarceradas por culpa da sociedade por serem excluídos por culpa do neo-liberalismo imperialista estadunidense(acho linda essa palavra) sem preparo para enfrentar os profissionais de Brasília.
Como esses deputados elitos conseguirão competir de igual pra igual com pessoas do calibre dos nossos governantes atuais?
Eles tão acostumados com seus rotineiros serviços paulistanos de estuprar, matar, pilhar, roubar, assassinar, sequestrar, ameaçar, corromper e extorquir conseguirão competir de igual com um deputado do PP ou do PL?
PT é sonho de consumo para eles, antes terão que estagiar num PMDB e depois um Treinee no PFL.
Se provarem que merecem e tem futuro promissor na política ingressam ou no PSDB ou PT, tudo depende da evolução deles próprios.
Quem sabe não começam pelo PV defendendo o verde, verde do dolar!
Sei não, estou inclusive pensando em criar uma ONG para defender essas pobres criaturas, eles não sabem onde vão se meter!

Inteligência Artificial

Quando entrei na faculdade de Ciências da Computação em 1999 participei de uma palestra com um especialista em IA que estava fazendo um Doutorado na Europa sobre isso, ele tinha feito sistemas especialistas para a Petrobrás entre outras grandes empresas.

Esqueci o nome dele, mas lembro bem que ele falou sobre quando havia começado, a cerca de uns 15 anos antes daquela data e seus professores falavam que até o ano 2000 estariam presenciando uma revolução na IA a l Jetsons. Ele mostrou códigos em LISP de sistemas especialistas com agentes que executavam trabalhos humanos de prospecção de erros em plataformas marítimas, etc.

Mas não passavam disso, sistemas especialistas. Sistemas que respondiam a mudanças, eventos ou mensagens externas com código preparado para aquilo que estavam programados para responder, ou seja, atividades ligadas aquele trabalho específico. Ele mesmo não tinha tanta esperança de uma evolução nessa área em menos de 50 anos. Eu sou mais pessimista, como um Schopenhaureano não acredito que aconteça uma emulação do raciocinio humano em menos de 1000 anos.

Estavamos no ano de 99, passamos o famoso “bug do milênio”, vimos cachorrinhos robôs balancarem o rabinho imitando uma emoção canina, SpaceShipOne quebrar a barreira da atmosfera para uma nave civil, Chips de 4Ghz, popularização do DVD, . . .
“Mas cadê a empregada Robô dos Jetsons que conseguia responder a todos os estímulos externos de forma satisfatória para uma máquina?”
Antes de tudo vamos fazer uma pergunta: “Como funciona o raciocínio humano?”
Faço outra pergunta melhor: “Temos condições de simular o raciocinio humano em uma máquina?” Decididamente NÃO.

Raciocinio
Só teremos evolução em IA quando desvendarmos como funciona o cérebro, nosso kernel. Acredito que todos confiam suas vidas a um médico sob uma operação delicada mesmo sabendo que ele pode errar, já que é humano, mas ninguém em sã conciência confiariam em uma máquina mesmo sabendo que ela pode acertar com um índice de probabilidade maior que o médico humano. Sabemos que se algo ocorrer fora do script o médico tem capacidades de se adaptar situação dependendo de sua experiência e talento, já a máquina não poderia se programar.
Esse é o ponto de ruptura que a IA precisa, criar um modelo computacional que permita um ser composto de bits descobrir um mecanismo de resolução de problemas e se programar para isso.
Somente simulando o raciocínio humano conseguiríamos isso, mas é somente o raciocínio que faz isso? tem algo a mais? e o inconsciente como afirma existir a psicologia? Tem ação na capacidade de resposta a estimulos?
Perguntas difíceis senão impossíveis de serem respondidas antes do nosso sol secar.
Se dotarmos as máquinas de capacidades de raciocínio elas terão o livre arbítrio como temos?

Humanidade
Gostariamos de máquinas inteligentes que fizessem tudo para nós, temos um resquício de escravismo ainda nos nossos genes, todos nascem totalitários, depois que vamos nos tornando libertários ou não. Como um ditador sanguinário que gosta de torturar seus semelhantes consegue amar? Como um pai consegue estuprar a própria filha? Como um filho consegue matar um pai que o criou com amor? Queremos máquinas que simulem o ser humano realmente? Mas para criarmos um ser que simule a capacidade de raciocínio humano temos que transformamos eles em nós. Primeiro teremos que saber viver em sociedade primeiro, o homem é um ser social, ninguém vive sozinho, pode até imaginar que não depende de ninguém, mas o café que ele toma pela manhã é trazido pelo seu João motorista de caminhão( até rimou!), o remédio que ele toma é produzido pelo José que trabalha como operário na indústria química.

Em certas listas de discussão a briga da moda é entre evolucionistas versus criacionistas, devo admitir que perdeu a graça a um tempão já, porque ambos se apegam somente a fé cega, seja a fé religiosa ou a fé científica, não há comprovação ou fatos evidentes que algum dos dois grupos conheça a verdade. Não posso acreditar que por causa de um esqueleto de um hominídio toda a espécie do Homo Sapiens descenda daquilo, quando aprofundamos nesse tema o evolucionista gagueja, não consegue saber se tal esqueleto tem 6 ou 4 milhões de anos, ora, a diferença de 2 milhões de anos é gigantesca, se a ciência não consegue nem determinar com precisão a idade do fóssil como pode querer ser levada a sério? Pior é o criacionista que prega a Bíblia ao pé da letra mesmo sabendo que os livros dela são floreados como romances para explicar a história Judáica, e defendem com unhas e dentes que o homem só tem de 5 a 8 mil anos como fala a Bíblia. Como diz o Mainardi talves descendemos de dois macaquinhos africanos chamados Adão e Eva. Mas o resumo da ópera é, ninguém conhece a verdade, de onde surgiu o ser humano, enquanto discutem o sexo dos anjos as pesquisas e experimentos ficam estagnados.

Essa briga entre religiões (considero o ateu um fanático religioso, só que sem Deus), é o atraso da humanidade, o melhor seria acabarmos com religião, cada um acredite no deus que desejar, mas não professe suas “verdades” como absolutas. A recente indignação dos Muçulmanos provocou no ocidente uma comoção pelo direito de livre imprensa, eu concordo, mas concordo que tem que ser livre mesmo, quero poder fazer chacota com Cristo tambem, quero humilhar o Deus judeu e o Deus Cristão, posso? não, há! aí já é outra coisa, o nosso é especial, é verdadeiro ! Engraçado, esculhambar o deus dos outros pode, mas o nosso não.

Engraçado que em nome da liberdade os maiores regimes sanguinários do mundo executaram tragédias sem precedentes como o Nazismo, o Fascismo e o Comunismo. Disconfio sempre de quem quer defender a liberdade, geralmente quer tirar a dos outros, disconfio de quem luta pela igualdade, quer sempre ser o líder dos iguais, portanto superior! Como dizia Nelson Rodrigues, é mais fácil amar a humanidade do que amar o próximo.

Ontem fiquei embasbacado com a máteria de ontem(21/05/2006) do Fantástico(Rede Globo), comparando o isolamento de quem sofria de Hanseníase (Lepra) com os prisioneiros do sistema penitenciário, comparação esdrúxula como se os mesmos fossem vítimas da mesma situação. Não precisa ter mais que 3 neurônios para saber que o leproso era afastado da sociedade por ignorancia e inaptidão da ciência por desconhecimento de cura para a doença que aflinge a humanidade desde tempos imemoriais e ainda hoje existe no Brasil. Já a situação do prisioneiro encarcerado numa prisão pública é por culpa dele, não me venham com essa que a culpa é da sociedade, existem pessoas que são injustamentes presas, mesmo inocentes, acontece, e para isso deve haver todo o respaldo para defesa, mas é exceção, a maioria ali é de gente cruel, inescrupulosa, que não terá a menos piedade com seu semelhante, não tem inocentes no PCC. Ninguém entrou no PCC por bons antecedentes nem caiu ali por culpa da sociedade, acredito que eles exigem até que o sujeito vá ao fórum e peça um atestado de “folha corrida” como faz a indústria, só que o processo de contratação deles é o contrário, o sujeito limpo não serve, quantos mais longa for a folha mais apto ao trabalho o sujeito é.

Saí do tema desse post para trazer a tona essas características do ser humano e fazer uma reflexão, queremos criar seres iguais a nós?

Persistencia em um domain model

Ultimamente estou usando uma abordagem diferente para a persistência. vinha adotando os pattern de ActiveRecord e Repository além do DataMapper popularmente conhecido como DAO. Aperfeiçoei com essa dica do CV no guj.
Apesar da persistência ser arquitetural e teoricamente não fazer parte do dominio dos seus processos de negócios, invariavelmente é a maior preocupação na construção de um software o “como” e “onde” um objeto tem que mudar seu estado persistido. Em outras palavras como isolar a persistência de seu domain model para que a transparência dessa operação diminua o código sem aumentar os pontos de manutenção com alta coesão e fraco acoplamento.

Estados do objeto
Os objetos do ponto de vista do modelo de um processo apresentam estados, como excluído, alterado e criado. Podemos adotar o conceito de Active Record no domain model e fazer com que seus objetos implementem uma interface que sem criatividade no momento chamarei de ActiveRecord:

public interface ActiveRecord {
	public void carregado();
	public void novo();
	public void alterado();
	public void excluido();
}

Podemos então criar uma classe abstrata seguindo o pattern Template Method para criar uma estrutura básica para todos nossos objetos que chamarei de AbstractActiveRecord:

public abstract class AbstractActiveRecord < t extends AbstractActiveRecord >
		implements ActiveRecord {

	public void carregado() {
		Repository.carregar(this);
	}

	public void alterado() {
		Repository.alterar(this);
	}
...
}

Resolvi chamar o Repository dentro do Template do ActiveRecord para deixar isolado os DAOs da aplicação de criar apenas um ponto de manutenção em comum.
O conceito de Repository deixa o sistema isolado da infraestrutura de persistência funcionando como um espécie de banco de dados em memória que os objetos se dirigem ao perguntar por alguém (Alguém esse referente a uma entidade do dominio).
Observe que as classes do meu sistema devem extender a classe AbstractActiveRecord e implentar a interface ActiveRecord, mas isso não é se prender a um framework, porque essas classes fazem parte do dominio apesar de existirem para resolver um problema arquitetural, elas são do meu sistema, e estão independente de infraestrutura porque são relativos do dominio de qualquer forma.
Uma entidade do meu sistema fica assim:

public final class Cliente extends AbstractActiveRecord implements ActiveRecord {
	private int id;
	private String nome;
	private String cpf;
	//gets e sets
}

O Shoes tinha me dado um conselho de usar o Repository junto com o Active Record e DataMapper a um tempo atrás para isolar o modelo da persistência principalmente na lista de entidades, exemplo:
Cliente cliente = RepositorioClientes.carregaListaClientes();
Mas eu resolvi criar um repositório genérico para todas as entidades e dentro dele inserir uma chamada a uma fábrica de DAOs apropriado dependendo do tipo o objeto. Código do meu Repository:

public abstract class Repository {
	public static void carregar(ActiveRecord record) {
		System.out.println("carregou quem? " + record.getClass().getName());
		//faz o trabalho de persistencia... pode fazer injeção etc...
		//pode chamar uma Fabrica para criar o DAO a partir da classe
		// FabricaDAO.criarDAO(record.getClass());
	}
...
}

realizando um teste simples para ver como se comportaria:

public class TransacaoTest extends TestCase {
	public void testTransacao(){
		Cliente christiano = new Cliente();
		christiano.setNome("christiano");
		christiano.setCpf("999.999.999-99");
		christiano.novo();
		assertEquals(1, christiano.getId());
		//acontece mais algumas coisas...
		//e lá pelas tantas...
		christiano.setNome("Christiano Martins");
		christiano.alterado();
		assertEquals("Christiano Martins", christiano.getNome());
	}
}

O resultado foi como esperado, o processo vai modificando o estado dos objetos durante a transação e tornando o código mais legível, evitando chamar DAO dentro do meu modelo ou misturar código de framework como Hibernate ao meu domínio.
Com exemplos simples em transação praticamente CRUD a coisa funciona legal, quando precisamos alterar ou pra Lazy Loading ou Eager Loading dependendo do padrão da aplicação (deixo como padrão lazy), passamos um parâmetro para a estrutura como por exemplo:

normal
Cliente cliente = new Cliente(10); // esse construtor já invoca a estrutura e carrega as informações
com lazy Loading
Cliente cliente = new Cliente(10, ActiveRecord.LAZY_LOADING); 
...
Construtor normal:
	public Cliente(int id) {
		super();
		this.id = id;
		this.carregado();
	}
Construtor parametrizavel
	public Cliente(int id, int LOADED_PARAMETER) {
		super();
		this.id = id;
		this.carregado(LOADED_PARAMETER);
	}
...

De qualquer forma podemos criar uma estrutura de modelo do domínio do meu processo isolada da arquitetura tecnológica facilitando a manutenção com padrões de projetos simples, código mais enxuto e transparência nas transações.