[Estudo/Dicas] – 140 questões usadas nas entrevistas do Google

Estava eu a ler meus Feeds, RSS,  Reader e listas de discussão pela manhã (como é de costume e hábito assaz “viciante”…rs), quando achei uma notícia bem interessante, enviada pelo usuário Rafael Torres na lista de discussão de JavaME do SOUJava, onde o assunto da thread era “Como avaliar candidatos?”.

Eis que o mesmo sugere dar uma lida no post “140 Google Interview Questions e fazer extração de algumas perguntas para entrevistas, por exemplo. Interessado pelo título (é claro…rs) fui dar uma olhada lá no site…

O cara que escreveu o post chama-se Lewis Lin. O mesmo já trabalhou no Google, Citibank, Accenture  e hoje está na Microsoft(!). Ele transcreveu algumas questões que são feitas em entrevistas do Google para os mais diversos cargos.

O nível intelectual/profissional exigido para entrar no Google é impressionante. Só pelas perguntas você já consegue parametrizar o seu nível de conhecimento, sabendo se está muito ou pouco atualizado na sua área (ou para um cargo similar no Google). Esse é o objetivo de eu estar compartilhando esse material.

Portanto não perca tempo e dê uma lida no post do Lewis!

Ou você é capaz de me responder o que é um “dead beef” (pergunta feita para o cargo de Engenheiro de Sofware!)? Não vale procurar no Google hein…rsrs!

Até mais!

Como avaliar candidatos?

Certificação ou faculdade?

Artigo para reflexão sobre carreira profissional, retirado do site iMasters, e escrito por Fabiano de Santana. Apreciem a leitura abaixo na íntegra.

O objetivo desse artigo não é responder à pergunta do tema, uma vez que não existe apenas uma resposta para essa questão. Queremos apenas ampliar a visão sobre qual a melhor opção para cada caso.

Hoje em dia, uma das grandes dúvidas que os iniciantes da área de TI carregam com si por um longo tempo é a seguinte:

Faculdade ou Certificação? Qual a melhor opção?

Isso é fato, e todos já sabem: o mercado de trabalho está cada vez mais competitivo. As empresas exigem cada vez mais de seus funcionários. O profissional de hoje em dia deve ser flexível, estar adaptado a mudanças, saber parar no meio de uma tarefa e iniciar outra. Ser paciente com seus amigos de trabalho, educado. Ou seja, levar harmonia para o ambiente empresarial. Esses e muitos outros fatores são de extrema importância para um profissional, independente de sua área. E com certeza esses fatores são um dos primeiros a serem analisados por uma empresa durante a contratação de um funcionário.

Lógico que essas qualidades estão relacionadas com a personalidade de cada um. Nem todos possuem todas elas, porém possuem outras. O ponto chave é colocar em prática, dar a devida utilidade às qualidades que se tem.

Além da personalidade, outro ponto fundamental para um profissional é sua experiência prática. Existem alguns tipos de profissionais, vejamos alguns:

  • Profissional com muita experiência prática em seu ramo, porém sem universidade e sem certificação.
  • Profissional com muita experiência prática em seu ramo, formado em uma universidade e sem uma grande certificação.
  • Profissional com muita experiência prática em seu ramo, formado em uma universidade e com uma grande certificação.
  • Profissional sem muita experiência prática em seu ramo, porém formado em uma universidade e com uma grande certificação.

Qual seria o perfil ideal? Profissional formado em uma universidade? Ou profissional com uma bela certificação, como MCSE, CCNE, etc.? Ou uma combinação entre universidade, certificação e experiência?

Não tenham dúvidas, a combinação citada acima (universidade, certificação e experiência) é a combinação ideal hoje em dia.

Como citado anteriormente, o mercado de trabalho necessita de profissionais completos, com vasta experiência em sua área e uma bela formação. Além disso, paciência, inteligência, coragem, esforço, harmonia, etc. devem estar presentes na personalidade dos profissionais.

Mas para quem está iniciando não é tão simples assim. Uma faculdade dura cerca de 4 anos; para obter uma certificação MCSE, iniciando do zero, ou seja, fazendo treinamentos, estudando bem para os exames, um ano e meio é suficiente.

Aí surge a grande dúvida: “o que fazer primeiro?” Essa é uma pergunta extremamente complicada de ser respondida. Mesmo com 10 anos de experiência, formado em Análise de Sistemas e com as certificações MVP, MCP, MCSA e MCSE, não tenho uma conclusão do que realmente seja melhor. Sempre que me perguntam sobre esse tema, respondo o seguinte: “você deve fazer o que achar melhor, pense por si mesmo e decida”.

Não existe fórmula, e depende de caso para caso. Se você precisar de um emprego rapidamente, com certeza a certificação seria uma boa opção. Agora, se você deseja uma formação mais sólida, e o emprego não é prioridade, a faculdade seria a melhor opção.

Agora, para quem tiver condições, o ideal seria fazer a faculdade e ao mesmo tempo se preparar para a certificação. Não é uma tarefa fácil, pois geralmente quem faz faculdade trabalha o dia inteiro para “bancar” o curso, estudando à noite. Como conseguir tempo para se preparar para uma certificação? Realmente é complicado, mas nada impossível. É só querer.

No meu caso, fiz a faculdade primeiro. Após concluída, comecei me preparar para a certificação. Dedicava-me integralmente à certificação, ou seja, não trabalhava, apenas estudava para a certificação. Meu primeiro exame foi em 02/04/2004 e o sétimo exame, com o qual obtive a certificação MCSA e MCSE, foi em 26/11/2004. Ou seja, com dedicação total aos estudos para a certificação, em apenas 7 meses obtive a certificação MCSE. Não me arrependo de forma alguma, muito pelo contrário, achei essa decisão uma das mais importantes da minha vida.

Acredito que vale a pena o esforço de se dedicar integralmente aos estudos para uma boa certificação. Os resultados serão ótimos, com certeza.

Posso estar enganado, mas as faculdades estão ultrapassadas hoje em dia. A maioria dos cursos universitários não são específicos. Por exemplo, em um curso de Sistemas de Informação são ministradas matérias de redes, banco de dados, multimídia, análise de sistemas, programação, sistemas operacionais etc. Ou seja, quem faz esse curso não é especialista em nada… Ele apenas sabe um pouquinho de cada área. Aí está o problema, como é que essa pessoa vai conseguir um bom emprego? Podemos ir mais longe, em qual área ela vai procurar um emprego? Redes? Programação? Internet?

Entre as empresas existe algo chamado “Mente Coletiva”. Ou seja, um bom profissional obrigatoriamente deve ser formado em uma universidade. Quem disse isso? De onde surgiu isso? Ou seja, a grande maioria simplesmente faz uma faculdade sem saber o porquê. Fazem porque as empresas só contratam quem tem um curso superior. Um profissional com experiência, certificação MCSE, com uma personalidade boa, tem um salário até 10 vezes maior do que um profissional que possui apenas uma faculdade.

É preciso coragem para sair dessa “Mente Coletiva” e fazer aquilo que realmente achamos melhor. Em nosso mundo não existem pessoas iguais, todos são diferentes. Portanto, cada um tem que tomar suas decisões, por si próprio. Ou seja, ampliar o entendimento de que muitas vezes tomamos decisões que não partiram de dentro de nós mesmos.

Vejam que nosso mundo não é simples. Por isso eu torno a dizer: façam aquilo que acharem melhor, e não aquilo que os outros acham melhor.

Até a próxima.

Por que alguns programadores não gostam de escrever testes automatizados?

Quebrar um paradigma de formação não é difícil, mas não é impossível.

Como tratamos de assuntos ligados as metodologias ágeis, vou abranger os testes automatizados e o que o mesmo poderá beneficiar o programador.

Os teste automatizados são uma maneira de garantir a qualidade de código, sendo assim, cliente e programadores ganham. O cliente vai ganhar um produto com qualidade melhor e o programador terá um aliado que são os testes automatizados para garantir que seu código tem qualidade.

Testes automatizados contribuem para princípios ágeis com software funcionando, adaptação a mudança, colaboração com o cliente e indivíduos em interações.

Problemas sem testes automatizados:

  • Muito tempo na depuração;
  • Erros encontrados tardiamente;
  • Difícil repetir testes;
  • Demorado;
  • Cansativo;
  • Executado poucas vezes.

Benefícios dos testes automatizados:

  • Segurança para mudanças de código e externa;
  • Aumento o tempo de vida útil do software;
  • Testes executados a qualquer momento;
  • Ajuda a encontrar erros;
  • Aumenta a velocidade de programação.

E como deve ser código do teste?

O código do teste merecem os mesmos cuidados que o código do sistema.

O código do teste sofre manutenção e também pode ter erros, portanto deve ser legível e simples.

Tipos de testes

O tipo de teste que o programador geralmente faz na metodologia ágil são os testes de unidade, que possuem as seguintes características:

  • Encontra muitos erros;
  • Tipo focando na funcionalidade(caixa-branca).

O demais testes são:

  • Aceitação;
  • Interface  do usuário;
  • Mutação;
  • Desempenho;
  • Estresse;
  • Segurança;
  • Integração.

Os demais testes o programador pode até fazer, mas necessita-se de um analista de teste, pessoal de infraestrutura ou arquiteto, conforme o teste e experiência requerida. Também existem diversos softwares (frameworks) para os demais testes, sendo um exemplo o JUnit e outros para testes de unidade.

Colegas programadores, com os testes automatizados você somente tem a ganhar na execução do seu trabalho e na formação profissional. Tendo uma visão focada nos negócios, além de tecnologias.

Qualquer funcionalidade que não possui testes automatizados simplesmente não existe.

Kent Beck

Revista PC&Cia agora é gratuita para download

Agora uma das maiores publicações brasileiras em termos de Hardware, Sistemas Operacionais, Notícias, Análise de Produtos, Telecomunicações, Mobile, Manutenção, Periféricos, Administração e Segurança de Sistemas / Redes está sendo disponilizada integralmente no formato digital (pdf). A revista é a PC & CIA.

Abaixo coloco alguns trechos retirados da página explicativa da revista, falando acerca das novidades:

“Nossa intenção é disponibilizar grátis a revista completa em PDF, mudando o nosso modelo de negócio para uma revista custeada pelas publicidades. A revista continuará a ser editada impressa em papel para àqueles que ainda prefiram, mas terão de pagar por isto.
Em vista da PC & Cia ser a única revista técnica de informática remanescente no mercado brasileiro que continuará impressa em papel e será disponibilizada gratuitamente sua edição Freemium, procuramos e conseguimos apoio de diversas empresas e entre elas, das maiores do mercado mundial para apresentar o projeto da edição Freemium ( Free + Premium ) da revista PC & Cia. Com isto oferecemos para os anunciantes em 2.010, além dos leitores da edição impressa em papel outros da edição digital em PDF que ultrapassam 300.000 downloads e por um preço de tabela menor do que 2.009. O nosso custo por mil leitores passa a ser imbatível.”


Perfil do leitor de PC & Cia:
– 50,2 % Profissionais de Serviços de TI, Integradores, Analistas, Técnico de Suporte de Hardware e Software
– 17,0 % Administrador de Sistemas plataforma Windows e Linux
– 22,0 % Universitários, Usuários Avançados e Professores
– 10,8 % Consultor de TI

Interessado nas áreas de abrangência e no conteúdo da revista? Acesse a página principal e a seção de downloads dos exemplares! Achei de grande valor e desde já parabenizo a revista pelo posicionamento e nova estratégia de participação no mercado.

Minhas impressões – Sun Tech Days 2009/2010 – Dia 1 (08-12-09)

Caros colegas,

Participei na última semana do Sun Tech Days 2009/2010, evento que aconteceu aqui em São Paulo, contando com a presença de grandes engenheiros da Sun e de ícones da comunidade Java do Brasil, e que tive o privilégio de me inscrever por um “golpe de sorte”, pois abriram-se entre o dia 02 e 03 de dezembro 200 inscrições gratuitas do evento, e tive sorte de me inscrever com sucesso 🙂


Vou disponibilizar para vocês agora um resumo de tudo o que aconteceu de acordo com a minha ótica.

Panorama 1: Para chegar até o local…

Para chegar até o local não foi as mil maravilhas no dia 08 de Dezembro…

Na madrugada/dia dessa data em SP choveu demais e tivemos um índice pluviométrico não esperado para o período, totalmente fora dos padrões. Portanto, vias principais congestionadas e o conseqüente problema do transporte público sobrecarregado. Levei quase 2h30 para chegar até o local (saída: 6h50 – chegada: 9h10!). Graças ao Google, GPS e Maps consegui encontrar o local, pois não conhecia a região e este foi meu primeiro Sun Tech Days 🙂

Panorama 2: Após a chegada

Presenciei uma organização/sinalização de locais/palestras/auditórios muito boa, fora a prestatividade dos envolvidos. Para pegar o crachá de conferencista não demorei muito tempo, além do espaço ser abrigador da chuva (acima de tudo…rs). De cara pude comtemplar as presenças do Marcelo Leal (SUN), Carlos Fernando Gonçalves (JavaNoroeste), Jorge Diz, Vinicius Senger e Yara Senger (Globalcode). Andando mais um pouco visualizei o mito James Gosling (!). Esperei mais 10 minutos até poder adentrar ao auditório principal. Nesse “meio tempo” fui visitar os estandes dos expositores, alguns como OpenSolaris, Oracle (é claro), Sun (é claro [2]) e Locaweb.

Após isso adentrei ao auditório principal para a primeira palestra do dia. Para saber sobre todos os palestrantes acesse esse link.

Boas Vindas ao Sun Tech Days – Luiz Fernando Maluf


Para dar as boas vindas ao pessoal do evento, o diretor para a América Latina da Sun Microsystems, Luiz Fernando Maluf, fez uma rápida apresentação mostrando o cenário no qual se encaixam os desenvolvedores Java (e usuários de tecnologias SUN) e como eles estão relacionados com o panorama do mercado, retorno profissional, técnico e financeiro, visando aproveitar as oportunidades que surgem no mercado de hoje: fim da crise, uso e expansão da plataforma Java pela linguagem Java (e outras) e abordagens acerca de novas tecnologias, como TV Digital, por exemplo. Agradeceu aos JUG leaders de comunidades, caravanas e o público do evento que estava presente.

Showcase de Tecnologia: Inspire-se! – Simon Ritter e Angela Caicedo

Antes do “pai do Java” falar sua “visão futurista” da plataforma, Simon Ritter e Angela Caicedo apresentaram alguns exemplos de aplicação das tecnologias Java e Sun do momento.  As implementações e demos foram mostradas para o público.

Simon mostrou como JavaFX pode ser produtivo, gerando animações com figuras ou vídeos, para Web ou Desktop, sem escrever uma linha de código e usando apenas uma “interface amigável de arrastar, soltar, colocar botões e etc.”. No fundo é o JavaFX Platform Suite, que pode ser usado como plugin para ferramentas pagas como Adobe Photoshop, Illustrator e etc. O objetivo era mostrar a produtividade da ferramenta com o objetivo de criar aplicações RIA com pouco “trabalho” (vulgo escrita de código).

Angela Caicedo mostrou uma tecnologia que achei bem interessante: uma “lousa mágica” usando JavaFX. Se trata de uma lousa de vidro, transparente, que por trás dela havia um projetor multimídia (projetando um quadro negro, lousa) com um Wii Remote em cima captando sinais de movimento e toque feitos com uma luva (a qual ia tocando a lousa ou “escrevendo” na mesma). As respostas eram enviadas via bluetooth para um notebook que processava as coordenadas e passava para uma aplicação JavaFX. Com isso era possível relacionar na aplicação o ponto tocado e a significância disso: se era um botão ativado da aplicação que deveria abrir uma paleta de cores, se era para limpar o quadro e etc.

Esse exemplo mostrou a sinergia de algumas tecnologias, além de Java e soluções SUN, que podem gerar modelos inteligentes tão bons quanto o apresentado.

O que está acontecendo com o Java? – James Gosling


Após o showcase James Gosling subiu ao palco para o frissom dos presentes, que puderam comtemplar o “mito”. O overview de James Gosling estava relacionado com as novidades da plataforma Java: mais de um assunto foi abordado, como JavaFX, NetBeansGlassfishJava EE6 e etc.

Sobre o Glassfish foi mantido o discurso de ser o servidor de aplicação mais rápido, baixado e performático do mercado (lógico…rs). Foram mostrados “gráficos e informações comprovando”. O mesmo está a muito tempo na versão V2, mas a versão V3 (lançada no dia 10/12) terá suporte a Java EE 6. Gosling fez algumas demos mostrando um menor tempo de redeploy para as aplicações, quase instantâneo, evidenciando uma melhoria na capacidade de criação e manutenabilidade de projetos via Glassfish.

Uma das novidades mostradas pelo mesmo foi o lançamento da JavaStore, que no momento está disponível apenas para o público americano, mas que tem previsão de abrangência maior e sair da fase beta no ano de 2010.

Gosling e Tim Boudreau, especialista em Java Card, fizeram uma demo mostrando o novo suporte para contenção de aplicações Web, http e https, embarcados (um servidor web dentro de um chip!).

O NetBeans foi citado como IDE padrão e está na sua versão 6.8 com suporte a Java EE6 também (Gosling indica “jogar no lixo” o EmacsViEclipse, inclusive…rs).

No final da apresentação, e de praxe para eventos da Sun, muitos brindes foram jogados para o público (Camisas da Sun e “Dukes“).

Glassfish V3: O servidor de aplicativos de última geração – Sang Shin


Sang é um velho conhecido do Brasil e de Sun Tech Days: essa foi a sua oitava viagem ao Brasil. Ao olhar para o mesmo sabia que conhecia ele de algum lugar. Voilá! Me veio a lembrança de já ter visto um vídeo no youtube dele “dançando” em uma das edições do Sun Tech Days. Confiram abaixo e tirem suas conclusões…rs.

Alguns pontos a ressaltar da apresentação

  • O objetivo do Glassfish V3 é ser o melhor servidor de aplicações do mercado: é compatível com Java EE 6, modularizado (baseado em OSGi e usando Apache Felix), sem limites de containeres e pode rodar containeres Java ou não-Java;
  • Glassfish tem suporte a mais de 200 bundles OSGi e podem ser desenvolvidos outros mais;
  • Existem 3 tipos de bundles: relacionados a kernel, containeres ou serviços;
  • Monitoramento e gerenciamento através de console web e asadmin;
  • Facilidades de um ambiente composto por Netbeans 6.8 + Glassfish v3 + Java EE 6, tendo-se desenvolvimento e deploy de aplicações “sem dor” e com muito mais rapidez. O deploy/redeploy automático mantém sessões e informações existentes de sua aplicação, mesmo após restart do servidor.

Os demos executados durante a apresentação, e que embasavam a teoria passada, se encontram no site mantido pelo próprio Sang Shin, o javapassion.com (não acessar java.passion.com…é NSFW…rs.). Eis alguns abaixo:

No final de sua apresentação Sang convidou para subir ao palco Jerome Dochez, principal engenheiro da Sun no desenvolvimento do Glassfish, para responder algumas perguntas do público e apresentar o seu overview da nova versão.


Para os interessados, a apresentação de Sang se encontra disponível para download por este link.

JDK7: O futuro da plataforma Java – Simon Ritter


Simon Ritter trouxe um overview para o público com as novidades do JDK7. Os pontos mais relevantes escrevo abaixo:

  • JDK7 está pronto, aberto e em constante desenvolvimento pela comunidade, o JSE7 ainda não está pronto e precisa de alguns pontos para ser resolvido (no JCP);
  • Sobre a linguagem as mudanças são: annotations on java types (JSR308); Project coin e modularidade (JSR294). Vale lembrar que todas as mudanças estão aprovadas;
  • Sobre o core: Projeto Jigsaw (a JSR294 impacta tanto no core quanto na linguagem. Modularidade = Jigsaw); atualização em concorrência e collections (JSR166); novas API’s a respeito de IO (NIO2);
  • Suporte a linguagens dinamicas (da vinci machine project) e Garbage G1 são bem importantes e de grande relevância também;
  • Uma das mudanças interessantes foi o uso de números binários de forma declarativa (int b = 0b01010101, binary b = 0X09AB), separação de grupos de números long por underscore (Long l = 9_938_827_122) e Switch usando string;
  • Gerenciamento automático de recursos: cláusulas try/catch que sempre precisam de um finally para fechar algum recurso (alguma_coisa.close) agora não mais precisam. A JVM gerencia isso (!);
  • Multi catch (2 cláusulas de exceção com o mesmo tratamento): talvez possa voltar no JDK7;
  • Invoke Dynamic bytecode (JSR292).

Sobre o projeto Jigsaw, em particular:

  • O JDK é grande, muito grande (só no JDK6 temos 47 pacotes toplevel e mais de 4000 classes), um problema em relação a tempo de download de pacotes e tempo de startup de algumas aplicações, por se usar bibliotecas demais;
  • Há dificuldade de se criar uma “plataforma fina, concisa e leve”, principalmente para dispositivos mobile dos dias de hoje, por exemplo. Para isso foi criado o projeto Jigsaw.
  • Já existe um projeto  de OpenJDK baseado no JigSaw;
  • A intenção de “código modular” é criar código limpo e bem direcionando para uso, criando uma não dependência de código e uso de bibliotecas entre programadores (commiters) ou código implantado em cliente, não dando propósito a erro. Os módulos terão versionamento, portanto você poderá definir no seu código qual a versão do módulo que você vai querer usar na sua aplicação.

Nessa versão foi bastante pensado nas mudanças a serem feitas, para não cair no erro do assert (java 1.4) e enum  (java 1.5), fato que “quebrou muitos códigos” antigamente. Simon reiterou que “trabalhar mudando e adaptando java é realmente pesado”.

O Lançamento final do JDK está marcado para Setembro de 2010. A plataforma Java tende a fica mais poderosa e abrangente, sem dúvida.

Ginga, Lwuit, JavaDTV e você – Dimas Oliveira & Tamir Shabat


Dimas Oliveira é um grande conhecido da comunidade Java no Brasil quando o assunto é TV Digital. Referência, esteve presente no Profissão Java, Java@TV Digital e OpenTDCTamir Shabat, especialista em desenvolvimento com Lwuit e TV Digital foi palestrante no Java@TV Digital. Em todos esses eventos eu estive presente e vocês podem acompanhar os posts pelos links anteriores (o Java@TV Digital ainda hei de escrever). Nesse Sun Tech Days a apresentação de ambos foi um “compilado” do que já tinha sido apresentado nesses eventos. Abaixo algumas informações dessa apresentação:

  • Perspectiva de no próximo ano termos 25 milhões de tv’s ligadas ao sinal digital, ou seja, é uma oportunidade palpável e direta para desenvolvedores gerarem aplicações, sendo que no ano que vem o Ginga estará mais maduro e a disponibilidade de set-up-boxes tende a ser maior;
  • Histórico da TV Digital não é de hoje: desde 2005 há desenvolvimento;
  • Para que já conhece Java é preciso aprender cerca de 8% a mais de Java para desenvolver para TV Digital;
  • TV interativa = TV + aplicações (não é simplesmente um browser com acesso a internet na TV);
  • Locais de estudo: Forum SBTVDjavatv-developers.


No final da apresentação Tamir mostrou uma demo, usando NetBeans + Lwuit (for TV Digital), de uma aplicação interativa para TV Digital baseada em uma aplicação real que a Rede Globo estaria disposta a usar. Um set-up-box foi usado para demostrar ao vivo os exemplos de interatividade desta aplicação.

Ajuste no desempenho do GC – Simon Ritter


Simon baseou-se para sua apresentação em 4 pontos:

  • Opções para a JVM da Sun;
  • Garbage collector;
  • Garbage first;
  • Dicas para tunning do GC.

No início foi exposta a evolução do gerenciamento de recursos, onde antigamente o desenvolvedor era responsável por alocar e desalocar memória (em C: malloc and free; em C++: new and delete). Hoje no Java só é preciso criar os objetos (“new”). A JVM se encarrega de gerenciar a memória (Garbage Collector).

Basicamente temos 3 tipos de opções, quando gerenciamos o GC:

  • Standard options:  todas plataformas;
  • -X options: não são aplicáveis a todas as plataformas;
  • -XX options: -não são aplicáveis a todas as plataformas e podem precisar de privilégios adicionais para usá-las.

Para maiores detalhes, favor consultar a documentação da Sun.

As dicas mais importantes passadas pelo Simon foram:

  • multi processos e cores criam objetos novos (todos tentam acessar o eden ao mesmo tempo): Solução: -XX:TLABSize=size-in-bytes ou -XX:ResizeTLAB;
  • Serial: indicado para maioria das aplicações para desktop;
  • Paralelo: indicado para maquinas com multiplos cores e bastante memória;
  • “JVM ergonomics”: comece usando -XX:+UseParallelGC e -XX:+UseAdaptiveSizePolicy;
  • Rode a opção -server;
  • As opções -XX:MaxGCPauseMillis=n e -XX:GCTimeMillis=n podem performar, mas não são garantidas;

Sobre GC e escolhas de Design:

  • Serial (-XX:+UseSerialGC);
  • Paralelo (-XX:+UseParallelGC). Para Tuning: -XX:UseParNewGC  e -XX:ParallelGCThreads=n, onde n é o número de CPU’s;
  • Concurrent (-XX:+UseConcMarkSweepGC). Para Tuning: -XX:ParallelCMSThreads=n, onde n é um quarto do número de CPU’s ; -XX:CMSInitiatingOccupancyFraction; -XX:+CMSIncrementalMode (off); -XX:+CMSIncrementalDutyCycle=n% (indicado n=50));
  • Stop the world;
  • Compacting (-XX:+UseParallelOldGC);
  • Non compacting;
  • Coping.

Sem dúvidas o G1 terá melhorias consideráveis para performance e foram mostrados exemplos de diagramas de alocação de memória com as respectivas legendas. Para saber mais, faça o dowload de um paper da Sun sobre o G1, por esse link.

Programação JavaFX para dispositivos móveis – Angela Caicedo


A apresentação foi bastante técnica e com muitos exemplos de código e demos. Foi uma sessão voltada para desenvolvedores que já conhecem a plataforma JavaFX e a plataforma de desenvolvimento de dispositivos móveis. Em resumo foi passado:

  • Introdução a MIDlets, MSA e JavaFX Mobile;
  • Conceitos de Mobile RIA , MVC, “stage e scene” e construção de UI’s;
  • Migrando aplicações de JavaFX desktop para JavaFX mobile;
  • Melhores práticas de performance;
  • Mobile samples e adição de mídias;
  • Demos.

A idéia central é: existem várias aplicações e modos de aplicar JavaFX para mobile devices, e essa é uma tendencia do mercado.

É preciso saber trabalhar com Java Micro Edition,  MIDP e aplicações e Wireless Toolkit (JavaME SDK). Algumas API’s de Java são essenciais: java.lang e java.io, além das específicas para desenvolvimento mobile: java.microedition. Com isso você consegue criar, editar, compilar, debugar, empacotar, testar e fazer deploy de aplicações (ou seja, tudo…rs).

O ambiente indicado para isso: Netbeans 6.8 + WTK (Wireless Toolkit) 2.5.2/JavaMe SDK 3.0.


Em termos de desenvolvimento:

  • Java ME MSA platform (JSR248 – Mobile Service Architechture). Essa é a base e dá suporte a tudo: audio, vídeo, camera, SIP, bluetooth, etc;
  • Para construir aplicações  de UI no MSA use API de alto nível (MIDP 2.0 widgets): é fácil, rápido e tem a beleza nativa de UI;
  • Há outras API’s disponíveis: JSR226 (SVG Tiny 1.1), JSR184 (3d graphics API) e OpenGL, por exemplo;
  • JavaFX mobile cria RIA para mobile;
  • Ao invés de trabalhar com aplicações de media (gimp, photoshop), passar as imagens para o MIDP  e só depois portar para o celular, agora você pode usar qualquer ferramenta de media (gimp, photoshop, adobe), passar pelo editor de media do JavaFX e portar isso para JavaFX mobile direto ou trabalhar via Netbeans para depois portar;
  • Modelo MVC pode ser implementado: Model (dados e sua lógica), View (Rich UI) e Controller (regras de processamento).

Para maiores detalhes e exemplos: http://javafx.com/samples

Linguagens de criação de scripts: opções para a JVM – Simon Ritter


Finalizando o primeiro dia (ufa!) o lema foi: Languages everywhere. Para o JDK7 é imprescindível saber o poder das linguagens dinâmicas e as mudanças que elas trarão. No caso são 4 que se destacam, ou melhor, são as que realmente são levadas em conta: Groovy, Ruby, Scala e Clojure.

Mas porque o número excessivo de linguagens? Liberdade de escolha e diferentes linguagens resolvem problemas de tipos diferentes. Java + todas elas + JVM : muitos poderes! (domain specific languages).

Abaixo um resumo de cada uma delas:

GROOVY

  • Linguagem OO;
  • Sintaxe é muito similar a Java, além de ser compacta e concisa;
  • Groovy herda classes Java e implementa interfaces Groovy ;
  • Permite closure e sobrecarga de operadores (-, +, * ou /), uma “máxima” das linguagens de script;
  • Integração com Java via JSR223;
  • Use groovy quando precisar de novas features que Java não tem pois os códigos se aproximam muito;
  • Meta object protocol – MOP (provê comportamento dinâmico para groovy);
  • Livro indicado: Groovy in Action (Dierk Konig).

RUBY

  • Imperativo, funcional e reflexivo (suporta muitos paradigmas programacionais);
  • Excelente suporte a metaprogramação e reflexão;
  • Suporte a continuação (“congela” um ponto e pode voltar a um anterior);
  • Tudo em ruby é objeto;
  • Tudo é chamada de método (obj.fred é o mesmo que obj.send(:fred));
  • Métodos podem ser invocados com ou sem parênteses.

SCALA

  • Puramente orientada a OO e tudo é objeto;
  • Scala não permite overload do operador true;
  • Array index é acessado por () e não [];
  • Não tem pré ou pós incremento (i++ ou ++i);
  • Arrays são mutáveis (ao contrário de Java);
  • Scala não suporta membros staticos (usar singletons no caso!);
  • Scala não requer construtor (pode ser definido implicitamente num código anonimo e se quiser fazer overload pode usar this).

CLOJURE

  • Modelada em Lisp;
  • Linguagem functional;
  • Funções são stateless;
  • Todos os dados são imutáveis;
  • Tem algumas complicações pois é uma linguagem onde se deve conhecer “onde se colocar as chaves, parênteses, ou chaves”.

A “sacada” é estar por dentro do JDK7 que vai dar suporte a linguagens dinâmicas de forma mais aberta (InvokeDynamic bytecode – JSR292).

Conclusão do dia 1

Como não podia deixar de ser, uma “avalanche” de informação…rs. Apesar de já ter visto muitos dos termos apresentados em outros eventos, sempre é bom revê-los por outras pessoas e com outras explicações. O primeiro dia foi de bom grado para mim, até uma camisa da Sun eu ganhei 🙂 . E a volta para casa mais tranqüila…rs.

Amigos leitores, essa foi a primeira parte do meu relato desse evento. Agradeço desde já os que deram uma passada por aqui e publicarei o mais breve possível a parte 2 da história.

Até logo!

Ultimas notícias sobre TV Digital e as novidades

Atualizado em 11/12/09, as 16h44:

Mais duas notícias:

A importância da motivação no trabalho em números

Motivação: essa é a palavra! Artigo simples  e direto retirado do site Carreira de TI.

“Já trabalha numa boa empresa, tem salário em dia, tá reclamando do quê? quer maior motivação que isso? ” Essa é uma das frases mais comuns que jorra da boca de gestores omissos, mal preparados, não apenas da área de TI, infelizmente.

Bem, não é isso que dizem (e nos ensinam) os números da pesquisa que você verá logo a seguir. Aliás, nada surpreendente, por sinal:

Motivação é a tônica

Uma pesquisa recente da consultoria especializada em gestão de carreira Right Management, a motivação dos profissionais é a chave do sucesso. Após consultar cerca de 30 mil pessoas de 15 países, sendo 100 delas brasileiras, o levantamento detectou que pessoas motivadas são 50% mais produtivas.

Também na lista de fatores que deixam os profissionais motivados aparece a questão de entender exatamente o que a empresa espera do trabalho dos profissionais e compreender como pode contribuir para atender às demandas dos clientes.

E para quem pensa ainda que basta pagar bem para garantir a motivação do funcionário, a questão da remuneração, por sua vez, aparece em sexto lugar no ranking de comportamentos que influenciam a motivação daos profissionais, segundo a pesquisa.

Claro que essas coisas são importantes para nos auxiliar a cumprir nossas obrigações…Mas o problema é que cumprir apenas a obrigação do dia-a-dia de nossas atribuições não resolve num ambiente externo tão competitivo.

Enquanto muitas empresas ainda pensam de forma tão retrógrada (ah sim, se o gestor pensa assim e continua na posição, esse é o pensamento da empresa!) seus concorrentes correm para se reinventar, sejam seus produtos, forma de atendimento ao clientes, otimizar processos com vistas a redução de custos…são muitas ações para sair do lugar comum, para aparecer, se fazer notado no meio da multidão.

Agora se você, colega, não se sente motivado para realizar um trabalho que exceda as expectativas atuais, algo deve ser feito. Encontre essa motivação, nem que seja externa aos interesses da empresa. Faça por você, o conhecimento adquirido você o levará consigo, é seu tesouro que o ajudará a encontrar melhores oportunidades na carreira. Ou de forma mais radical, mude de emprego, de departamento, de gestor…

O que não pode é se entregar à gestão omissa e responder com mediocridade no trabalho. Perde a empresa, perde você.

Veja mais detalhes da pesquisa no artigo da ComputerWorld

Top 100 Tools for Learning 2009

“Pinçado” do blog do Prof. Douglas Frari. E vemos que muitas dessas ferramentas usamos no nosso dia a dia…

O básico do SCRUM (legendado)

Achei o vídeo muito legal! “Pinçado” do Cantinho do Agile, como sempre…rs.

Wikipedia, open source e a importância de ambientes colaborativos

Texto simples e direto. Achei bastante interessante. Retirado do blog Profissionais de TI.

“Open source é filosofia de vida”: está aí uma frase tão dita, tão debatida, tão passada, tão pouco compreendida e que eu acredito bastante. :)

Quando as pessoas vêm ao software livre e toda essa ideia revolucionária de que um mundo colaborativo é possível, outros respondem: “não é possível, isso de abrir a ideia, disponibilizar a forma como você construiu algo é loucura”. Qualquer tentativa de aplicação da colaboração é mal vista. A Wikipédia, por exemplo, é uma porcaria, não é?!

Em 2005, a Wikipédia foi considerada tão ruim quanto a Britannica [1]. Você nunca ouvir falar na Britannica? Trata-se da mais antiga enciclopédia escrita em inglês, sendo reconhecida em alguns livros ([2] e [3]) como a enciclopédia mais acadêmica do planeta. A Britannica é escrita e mantida por acadêmicos ingleses e alguns peritos. A Wikipédia é escrita e mantida por nós.

Então, no meio disso tudo, qual o problema com a Wikipédia? O maior é o preconceito. Pergunte a uma pessoa que odeia a Wikipédia o porquê de ela odiar a Wikipédia, você certamente vai ouvir “Ah, porque qualquer um pode mexer lá.”. O triste é que essa pessoa provavelmente nunca leu um verbete da Wikipédia. O preconceito é o maior problema quanto a qualquer construção colaborativa e à liberdade envolvida nisso. Vamos desenvolver um software em equipe e disponibilizar o código dele na internet, vamos escrever livros e disponibilizá-los publicamente na internet, vamos formar uma banda e por no nosso site os arquivos em formato mp3 para as pessoas baixarem. Se as pessoas acharem nossos softwares, livros e músicas, e quiserem colaborar, vamos deixar que elas colaborem. Isso parece filosófico demais para as pessoas. Existe um preconceito de que isso de “vida colaborativa” é apenas uma ideia bonita que não pode ser aplicada, por que na prática o que realmente importa é o dinheiro. O socialismo é bonito, o comunismo é legal, a anarquia é interessante, mas nos convém seguir o capitalismo, afinal de contas, o mundo é capitalista e o dinheiro é prazeroso.

Open source não é comunismo, open source não é socialismo. Open source também faz você ganhar dinheiro, e você não precisa passar por cima das pessoas. Certa vez, uma questão foi levantada ao Linus Torvalds: “Linus, muito se fala em software livre, Linux e comunismo. O Linux é comunista? Você é comunista?. E ele respondeu: “Se acreditar que o conhecimento não deve ficar preso em nossas mentes, mas sim que as pessoas devem ter livre acesso a ele e construí-lo juntas é ser comunista, por favor me considere comunista.”. Quando defendo o open source, não estou defendendo Cuba, estou defendendo o avanço intelectual da humanidade de forma colaborativa.

Referências
[1] http://www.bbc.co.uk/portuguese/ciencia/story/2005/12/051215_wikipediacomparacaofn.shtml;
[2] Marian Sader. Encyclopedias, Atlases, and Dictionaries. New Providence, NJ: R. R. Bowker (A Reed Reference Publishing Company), 1995. ISBN 0-8352-3669-2;
[3] “Encyclopedias and Dictionaries”. Encyclopædia Britannica (15th edition) 18. (2007). Encyclopædia Britannica, Inc.. 257–286.
http://www.bbc.co.uk/portuguese/ciencia/story/2005/12/051215_wikipediacomparacaofn.shtml;

Post original: http://blog.franciscosouza.net/2009/08/viva-colaboracao.html