Passed SCJD 391/400 (97.75%) - Finally

26 respostas
asobrab

Ola pessoal!

Depois de 10 dias uteis apos submeter meu projeto, ontem, 08-11-2009- 18:06:47 recebi meu relatório. Estou bastante feliz por ter concluído essa certificação. :smiley:
Eu li o livro do Andrew Monkhouse’s (não tudo, mas somente os capítulos mais importantes) os quais permite nos pegar algumas idéias para iniciar o desenvolvimento do projeto.
Meu projeto foi o Bodgitt and Scarper versão 2.3.1. Usei RMI para o servidor, 4 camadas (layers) (view, application, domain and data access), MVC, Observer/Observable pattern, wait/notifyAll para tranca de registros e alguns outros patterns como Domain Model, Value Object, Repository, Facade and factory.

Abaixo segue o relatório do site: https://www.certmanager.net/sun_assignment.

SUN REPORT:
[color=darkblue]This report shows the total points that could have been awarded in each section, and the actual number of points you were awarded. This is provided to give you per-section feedback on your strengths. The maximum possible score is 400; the minimum to pass is 320.

General Considerations (maximum = 100): 100
Documentation (maximum = 70): 70
O-O Design (maximum = 30): 30 [/color]
[color=red]GUI (maximum = 40): 31 [/color] :cry:
[color=darkblue]Locking (maximum = 80): 80
Data store (maximum = 40): 40
Network server (maximum = 40): 40 [/color]

Perdi uns pontinhos na GUI, talvez porque “inventei” de querer fazer coisas, além do pedido na especificação. Outra coisa que pode ter influenciado também foi usar o padrão Observer/Observable, o qual, pode ter deixado meu código um pouco mais complexo desnecessariamente. O importante aqui é: manter a GUI o mais simples quanto possível.

Quem tiver dúvidas quanto a viabilidade desta certificação, veja opiniões neste tópico.

É isso ai!

PS1: Se alguém tem alguma dúvida sobre SCJD, não hesite em enviar me uma MP. :thumbup:

26 Respostas

W

parabéns !!

score mto bom hein =)

J

Parabéns pela aprovação!!!

Alexandre_Gazola

A meu ver, por suas características, essa é uma certificação diferenciada. Parabéns pela dedicação e excelente resultado!

abraços

B

Cara parabens por está certificação!!!Ela parece ser super bacana!! :thumbup:

Paulo_Silveira

parabens! incrivel resultado!

L

Parabéns

luistiagos

quanto tempo levou pra fazer o projeto?

WRYEL

resultado fantastico! parabens.

prevejo que você já tem o pezinho dentro da SCEA :smiley:

Fernando_Romulo_da_S

Primeiramente gostaria de parabeniza-lo por mais uma vitória profissional, e que essa seja apenas mais uma dentre muitas!!!
Estou tentando tb tirar essar certificacao, e estou criando meu sistema, urlyBird 1.1.1 (sistema de hotel), em quatro camadas: visao (swing), fachada (façade), negocios (model) e persistencia. Estou acostumado a criar uma fachada padrao, usando genericos, veja:

public interface Facade<Id extends Serializable, Entidade> {

     public void insert(Entidade entidade) throws DuplicateKeyException;

     public void update(Entidade entidade) throws RecordNotFoundException;

     public void delete(Entidade entidade) throws RecordNotFoundException;

     public Entidade getById(Integer id) throws RecordNotFoundException;

    public List<Entidade> find(String[] criteria);
}

E implemento a fachada de acordo com a “Entidade”. No meu projeto estou com a duvida de fazer uma façade direto mesmo:

public interface Facade{

     public void insert(Hotel hotel) throws DuplicateKeyException;

     public void update(Hotel hotel) throws RecordNotFoundException;

     public void delete(Hotel hotel) throws RecordNotFoundException;

     public Hotel getById(Integer id) throws RecordNotFoundException;

    public List<Hotel> find(String[] criteria);

    public void book(Hotel hotel);

    public void unbook(Hotel hotel);

}

Qual forma vc usou? obrigado e até mais.

OliveirakunJava

Parabéns!!, é bem raro ver alguém tirar essa certificação, seu score foi excelente!
Abraços e boa sorte nas próximas!

Regis_A_Rocha

Parabens cara!

ViniGodoy

Vendo seu outro tópico, levanta a pergunta. E aí, o que achou do que aprendeu para fazer essa certificação?
Valeu mesmo à pena? É uma das certificações que só o que aprende para obte-la vale mais do que o diploma?

Acredito que a resposta seja sim. Eu costumo a reprovar sumariamente programadores juniores que apresentam código com “SCJP look&feel” em entrevistas de emprego. Entretanto, SCJD já me parece ser outro nível onde, como diz ali a própria proposta, “saber linguagem é uma coisa, saber programar é outra completamente diferente.”

asobrab

Muito obrigado pelos comentários! Valeu.

Muitos me perguntaram sobre livros, se vale à pena ou não, em fim. Vou tentar dar uma resposta coletiva no geral.

Livros e materiais

Apesar de que essa certificação exige mais da parte prática do que da parte teórica, ter um livro, ajudaria a “pegar” as principais idéias para iniciar o desenvolvimento. Há dois livros específicos para está certificação (parte 1/projeto): 1) Andrew Monkhouse (2005) e, 2) Terry Camerlengo,at al (2002)

O primeiro, é o mais indicado, pois está sintonizada com a última versão da SCJD e o Java 5. De novo, o livro apenas ajuda no “start up”, mas não que seja indispensável. Portanto, caso a pessoa não consiga o livro, apenas com os materiais e informações disponíveis, qualquer um consegue desenvolver o sistema. O ponto de inicio é: SCJD Reading Material e SCJD Faq

Parte 2 (prova escrita)

Na parte 2, são feitas apenas 4 perguntas (aleatórias) sobre o seu sistema. São perguntas compostas por varias sub-perguntas e, tudo tem que ser escrito. Tipo: “você usou RMI ou Sockets, quais vantagens, desvantagens de cada um”? Em fim…Quem realmente fez o projeto, não terá dificuldade de responder sobre o mesmo.

O que se aprende?

Primeiro, aprende a projetar um sistema considerando todas as variáveis propostas na especificação. A especificação deixa vários pontos em aberto, os quais lhe obriga a tomar decisões de projeto. Tipo: faço isso ou aquilo? Faço assim ou assado? Isso para mim, já é um diferencial desta certificação para com a SCJP. Como todos sabem, desenvolver, é acima de tudo uma atividade de criatividade e decisão. Como foi dito no tópico citado acima, conhecer a linguagem (SCJP) é uma coisa; saber usar a linguagem na prática é outra (SCJD).

Segundo, aprende a fazer somente aquilo que foi solicitado, na integra pelo cliente. A especificação é o roteiro geral do que deve ser feito. O cliente é o avaliador da Sun. Desse modo, o desenvolvedor aprende a pensar no cliente e a interpretar o que o cliente quer e espera de fato. Isso está no dia a dia de qualquer desenvolvedor.

Terceiro, além das questões de projeto (design) citado, você aprende a desenvolver de forma que seu sistema seja flexível para mudanças, o que, invariavelmente, acontece todos os dias. Por exemplo, na minha especificação, diz que meu sistema é para desktop, mas que, o cliente, considera a possibilidade de migra-lo para Web, sem muito impacto significativo, futuramente. Ou seja, tirar uma View e botar outra e, tudo deve continuar funcionando.

Quarto, você aprende a documentar seu sistema. A documentação envolve 3 pontos: 1) documentação do código (API completa). Neste ponto é dito que, deve-se comentar obrigatoriamente todos os métodos de Interfaces públicas e quaisquer códigos “estranhos”. É encorajado ainda, a fazer comentários somente quando realmente necessário, o que lhe obriga a pensar em nomes de classes e métodos que, se auto-documentam; 2) Documentação do usuário (manual de uso). Esse documento deve ser capaz de “pegar” na mão do usuário e faze-lo usar o sistema completamente. e; 3) Documentação de requisitos físicos (JDK, SO, etc), ou seja, o que é necessário para rodar o sistema.

Quinto, você aprende a pensar nos requisitos funcionais e não funcionais do sistema. Ou seja, você aprende a fazer perguntas como: Quais funcionalidades meu sistema deve ter? Quais recursos e habilidades? Quais confiabilidades (falhas, recuperação, concorrência, exatidão) devem ser garantidas? Quais requisitos de implementação (linguagem, padrões, API, BD etc) devem ser considerados? Quais requisitos de suportabilidade (teste, manutenibilidade, configuração, instalação, serviços) devem ser garantidos? Quais requisitos de desempenho (cache, velocidade, disponibilidade, eficiência, tempo de resposta e recuperação) devem ser garantidos e/ou considerados? Quais requisitos de usabilidade (ajuda on-line, contextual, dicas, documentação do usuário, estética) devem ser garantidos?

Sexto, você aprende a ter iniciativa e “conversar” com o cliente. Isso acontece em 4 momentos distintos: 1) A partir do momento que você está com o voucher na mão, você tem que entrar em contato (por e-mail) com o cliente (Sun), e pedir para baixar o projeto. 2) quando desenvolvendo, se necessário, você pode tirar dúvidas (por e-mail), se estas realmente fazerem sentido. Este ponto é desencorajado na própria especificação, mas há a possibilidade. Não precisei disso, pois os próprios fóruns já resolvem as dúvidas. 3) Para submeter o projeto, novamente, você tem que pedir para fazer isso. 4) Você tem marcar a prova escrita e, em um centro autorizado, novamente, responder perguntas do seu cliente sobre o projeto.

Sétimo, você aprende a confiar e defender seu trabalho. Isso acontece em dois momentos distintos: 1) ao fazer a prova escrita, como dito anteriormente e; 2) ao escrever o conteúdo do arquivo “choices.txt”, onde você deve escrever em detalhes, todas as importantes escolhas de design e códigos que você decidiu implementar. Por exemplo, no meu projeto, eu decidi validar completamente o schema do BD, uma vez que, o usuário pode escolher qualquer arquivo de BD, em qualquer lugar do SO. Isso me fez implementar uma Interface para esse fim, já considerando futuras mudanças no BD, caso o sistema fosse migrado para Web. Expliquei em detalhes essa abordagem no arquivo citado. E, para caso restasse alguma dúvida na explicação (Inglês ainda em evolução :D) , criei um diagrama UML (visto via API), onde ilustrava todos os pontos de design defendidos no arquivo supra citado.

Tempo e riscos

Normalmente, a pessoa leva de 2 a 3 meses trabalhando no projeto ou seja, mais ou menos 150 horas de trabalho (considerando uma atuação constante de 2 a 3 horas diárias). Isso porque, é muitos detalhes para ser feito por uma única pessoa, considerando que a mesma, aprecia fazer as coisas bem feitas. Não é fácil. Exige uma dedicação e atenção profunda da pessoa. Isso fica claro na especificação quando diz:

Então há a possibilidade falhar? Sim. Veja um caso recente e explícito, aqui. Mas casos de falhas são raríssimos, pois ninguém quer torrar dinheiro… :lol:

Custos ($$)

Talvez esse seja um ponto a pensar. Muitos se perguntam: será que vale a pena torrar 2 vouchers para essa certificação? Antes de fazer essa pergunta, deve-se pensar primeiro se vale à pena você provar que sabe desenvolver um sistema, considerando os pontos apresentados anteriormente. Se você tem uma “bagagem” que dispensa comentários, talvez não vale a pena. E, se falhar no projeto significa que o custo da mesma aumentará substancialmente, uma vez que precisará de um outro voucher para re-submeter o projeto. Desse modo, ao decidir encarar o projeto, deve-se entrar decidido a fazer a coisa bem feito, para não ter “surpresas”… :lol:

Finalmente, vale a pena?

No meu ponto de vista, vale e valeu. Só o fato de a pessoa ter que viver todos os pontos elencados nos itens anteriores, já vale mais que qualquer certificado. Pergunto: onde se aprende isso em uma certificação como SCJP e/ou SCWCD? Nunca! Creio (IMHO) que, essa certificação, teria que ser requisito obrigatório, para quem está começando, principalmente se a pessoa chega em uma empresa, apenas com a SCJP debaixo do braço, querendo ser programador/desenvolvedor de software sério, sem uma “bagagem” consistente anterior.

É isso ai!

A

Parabéns !!!
Excelente seu score !
E gostei das suas dicas e comentários !

:smiley:

victorwss

Cara, realmente. PARABÉNS!

Omeganosferatu

Aee parabens …

minha pergunta:

90% das pessoas que conversei implementaram uma especie de " buffer " ou seja, os dados eram carregados do disco direto pra coleções que ficavam em memoria até o momento em que o usuario finalizasse a aplicação ou o client fosse terminado, ou seja, a informação só era gravada quando a aplicação era finalizada pelo client ou quando o servidor era fechado.

Os outros 10%, faziam as gravações no momento em que realmente ocorriam, ou seja, quando o registro era atualizado na tela, automaticamente o servidor já atualizada o arquivo.db no servidor,

Gostaria de saber por curiosidade qual abordagem voce preferiu, e se possivel por que ?

Valeu … e parabens denovo…

Mr_Arthur

Cara, e sobre o inglês?
Eu costumumo estudar para as provas de certificação em livros em inglês, porém escrever ou falar mesmo eu sou um lixo.
A forma que você tem que responder as perguntas que eles fazem sobre seu projeto, a documentação do projeto… Se eu não mando tão bem assim em inglês eu tenho chance nessa prova?

Valeu.

asobrab

Omeganosferatu:
…90% das pessoas que conversei implementaram uma especie de " buffer " ou seja, os dados eram carregados do disco direto pra coleções que ficavam em memoria até o momento em que o usuario finalizasse a aplicação ou o client fosse terminado, ou seja, a informação só era gravada quando a aplicação era finalizada pelo client ou quando o servidor era fechado.

Os outros 10%, faziam as gravações no momento em que realmente ocorriam, ou seja, quando o registro era atualizado na tela, automaticamente o servidor já atualizada o arquivo.db no servidor,

Gostaria de saber por curiosidade qual abordagem voce preferiu, e se possivel por que ?


Não implementei cache no meu sistema, por três motivos:

  1. Isso não era requisito no meu sistema. Ou seja, em nenhum momento a especificação falou em performance ou sugeriu aumento de carga no futuro.

  2. Gerenciar um cache CRUD, bem feito, de um sistema em rede, considerando concorrência e etc, de coisas que deve de qualquer maneira ir para um meio persistente e definitivo, não é uma tarefa simples.

  3. Se fosse implementar um cache “básico”, eu teria que dividir a responsabilidade com o usuário (cliente e/ou servidor), pois este teria que fechar o sistema corretamente e, nada forçado poderia acontecer, como por exemplo, o SO dele travar e ter que reinicia-lo abruptamente, assim/ou, matar a JVM, o que faria o conteúdo do cache não ser salvo. Ou ainda teria que pensar num fator tempo, para descarregar os dados no BD. Isso teria que estar em todas as documentações, e assim… mais trabalho desnecessário.
    Porem, com a modularização, essa implementação seria bem tranquila, se necessário fosse.

Mr_Arthur:
Cara, e sobre o inglês?
Eu costumumo estudar para as provas de certificação em livros em inglês, porém escrever ou falar mesmo eu sou um lixo.
A forma que você tem que responder as perguntas que eles fazem sobre seu projeto, a documentação do projeto… Se eu não mando tão bem assim em inglês eu tenho chance nessa prova?

O inglês, podemos dizer que, seria mais que suficiente um “básico avançado”, se é que existe isso. Você vai precisar em três momentos distintos:

  1. Ao escrever seu código. Isto é, tudo em inglês: nomes de pacotes, classes, métodos, variáveis, comentários e JavaDocs. Desse modo, seu cliente (avaliador) não terá problemas para entender tudo o que você enviou a ele, minimizando assim, “mal entendidos”. Isso, qualquer IDE ajuda na correção.

  2. Ao escrever os manuais e documentos mais extensos (manual de usuário e “choices.txt”), você pode contar com a ajuda dos dicionários(online) instalados ou não e com a autocorreção dos editores de texto dos Office’s da vida.

  3. Ao fazer a prova escrita. Ao passar pelos itens anteriores, você sentirá que seu inglês deu “UP” mesmo que involuntário. Assim, já se sentirá mais confiante. Para cada questão e suas sub-questões, basta umas três (3) linhas ou Bullet ("*, -").

Isso não pode e nunca será um impeditivo!

É isso ai.

tralsl

sabe se o uso de IDEs é proibido, restrito ou desencorajado?

Omeganosferatu

Nenhuma das 3 opções ! hehehe

Seguinte, você pode usar qualquer IDE porém seu projeto não pode ter código que não tenha sido gerado por você (Por exemplo códigos gerados pelo editor de interfaces do netbeans ou do eclipse).

Basicamente você tem que usar java puro sem o auxilio de nenhum framework ou código gerado por frameworks.

É impraticável fazer um projeto desses sem usar nenhuma IDE.

Abraço

tralsl

é difpicil, mas com a ajuda do ant ou maven até da pra encarar

quando se faz a inscrição no site da prometric podemos marcar o dia da prova e comprar o voucher normalmente, mas essa certificação não tem prova, mesmo assim posso comprar o voucher na prometric?

Omeganosferatu

Eu não sei como anda o processo agora, depois da aquisição da oracle e etc. Mas geralmente pra essa prova você faz o seguinte, compra o voucher e entra em contato com a sun por e-mail (não me recordo o email exato agora). Eles vão te responder pedindo o seu SUN ID e o numero do voucher, depois que voce informar você receberá outro e-mail informando que o download da especificação já foi liberado no site da prometric. Então você faz o login e vai ter a opção de download SCJD. E pronto … lá se foi o seu primeiro voucher. Depois que voce terminar o projeto vai ter que entrar em contato com esse mesmo e-mail solicitando autorização pra fazer o upload do projeto. Depois que o upload for feito é hora de comprar outro voucher e marcar a prova na prometric, o ESSAY EXAM.

Espero ter ajudado.

Boa Sorte.

tralsl

sim ajudou

vlw, vou comprar o voucher primeiro

sawamu

Cara parabéns!

ainda estou estudando p/ a de programador, mas espero chegar na de developer com bons resultados como você.

congratulations!

tralsl

pessoal, pra quem estava com difiuldades como eu de por onde começar, não vão ao site da oracle, nem acessem o menu tradicional do site da prometric,
é necessário acessar essa página, https://ibt.prometric.com/oracle, de lá é possível comprar o voucher (exam 310-252A) para a primeira parte e pegar os requisitos do projeto e o arquivo do bd

Diabo_Loiro

Show de bola!

Criado 9 de novembro de 2009
Ultima resposta 3 de nov. de 2010
Respostas 26
Participantes 20