E a certificação hein?
Tags: java, programming, beginners
Published: 2023-01-04 16:33:35

Olá pessoal, tudo bom?
Antes de mais nada, feliz 2023! Que tudo de melhor aconteça com você <3
Faz tempo que não venho por aqui, então peço desculpas, eu tô tentando me organizar pra melhorar meus estudos no Java e tenho feito bastante experimentos com conteúdos, podcast, código, cursos, aliando isso a jornada de trabalho e por isso a coisa tá meio devagar, mas parado, nunca!
Pensando nisso, o que tô querendo executar agora por aqui é simples, tô iniciando uma leitura nova sobre o famigerado [Oracle Certified Associate (OCA)](https://education.oracle.com/pt_BR/cat%C3%A1logo-de-produtos-outrackpath-trackp_333/trackp_333), que é a certificação inicial pra quem quer se aprofundar no mundo Java, dito isso, a ideia é trazer essa leitura pra cá e trocarmos experiências sobre o meu modo de ver o que estudei, compartilhando com vocês essa visão, logo, vamos ter bastante pano pra manga, certo?! #Partiu rumo a certificação!
Bom, o lance com a certificação (pra mim) é me condicionar a perseguir o que ela pede como requisito e usar esses requisitos como norte para aprender de forma mais direcionada sobre a linguagem Java (que é um universo bem grandão, fala ai?), mas isso pode valer pra qualquer outra certificação também, beleza?

#### Plano de estudo
Aqui um material de apoio sobre plano de estudo produzido pela Zup, muito legal! recomendo a leitura: https://www.zup.com.br/blog/plano-de-estudo-zup
Você fazer um plano de estudo hoje é relativamente fácil, embora devemos ter uma cautela para não sair fazendo ele de qualquer forma. Então bora lá?

#### Teu direcionamento pra estudo, de onde vêm?
Minha principal fonte de estudo hoje, bom...será da **Alura**. [Aqui](https://cursos.alura.com.br/formacao-certificacao-java) você será direcionado para a página da Formação Certificação Java, mas caso eu use as referências de algum outro material ao longo da jornada, fica tranquilo que eu também vou colocar as referências pra gente ir seguindo juntos a cada novo tópico, beleza? Ah! e esse texto aqui não será o final, ele vai ser orgânico pra sempre que possível, ele ir melhorando...

#### Por onde começo?
Acho importante partimos do modelo conceitual pra depois a gente entender o que no detalhe o Java faz por debaixo de tudo. Hoje, se você fizer uma classe Java qualquer em um projeto, você sabe como ela se comporta e por onde ela vai até ser executada de fato? Vou te confessar que eu não, então vamos aprender juntos!?
![Imagem que mostra vários círculos um dentro do outro, no total de seis e em cada um, uma descrição que será explicada a seguir](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6af9gsdrpds4e8w0k1kv.png)
Fonte: https://foojay.io/wp-content/uploads/2020/11/image2020-11-4_13-5-7.png

Detalhando um pouco a imagem acima, no desenho vemos várias camadas e vou tentar explicar cada uma adiante no que a imagem descreve como **hierarquia de uma aplicação Java e tempo de execução** - em tradução livre.
Da camada mais interna à mais externa temos:
* **JVM** - O núcleo da aplicação que é conhecida como Java Virtual Machine ou em tradução livre Máquina Virtual Java, ou simplemente pelo acrônimo JVM. 
É na JVM que acontece a mágica do Java que ficou conhecido pelo ditado Write Once Run Anywere ou com pelo acrônimo WORA. Em outros artigos vou detalhar melhor o que é a JVM no detalhe e como ela trabalha, mas por hora, ficamos com esse conceito. É pra ela que vai todas as classes Java e independente do sistema operacional, o código será executado.
* **Java API libraries** - Nada mais são do que as bibliotecas básicas para que o ecossistema Java funcione de forma adequada; Ex.: java/javac/tools/applet e outras;
* **JRE o Runtime** - O runtime é a descrição do ambiente onde são concentradas as duas camadas anteriores (JVM + Java Lib) que são responsáveis pela de execução de um programa desenvolvido em Java. Então se você precisa executar um programa Java (um .jar da vida), por exemplo, da Receita Federal, você precisará ter um ambiente mínimamente preparado para essa execução e este ambiente é chamado de JRE runtime;
* **JDK** - Já o Java Development Kit ou JDK é o ferramental que todo desenvolvedor Java necessita. Essa camada é necessária para que o desenvolvedor seja capaz de criar suas próprias lógicas de programação, seja ela, a execução mais simples como uma soma de dois números, um hello world ou uma execução mais complexa como uma classe de controle (Controller) dentro de uma API;
* **Apache etc. Open Source libraries** - É o que a gente conhece hoje como Framwork ou até mesmo uma biblioteca adicional para uma dada execução qualquer. Ex.: **Spring Framework** ou a biblioteca para uso de logs na aplicação, o **Log4J**;
* **Application** - É o produto final, um software, que foi desenvolvido e desenhado para cumprir um propósito. É muito comum dizermos que é o resultado de um desenvolvimento dado um cenário, seja ele uma pesquisa científica ou um fluxo de negócio dentro de uma empresa, por exemplo. E vejam, o produto pode ser uma biblioteca, um game, um app desktop, um web app, etc... Java é demais ☕

Deixo aqui um podcast que complementa o artigo acima: [Podcast do Lambda3 - Ecossistema Java](https://open.spotify.com/episode/4hmVJDrRujimYx7BwqANl6?si=Kp_tHoFwTbyknwv1Z1X-9w)

Teve dúvida? coloca aí nos comentários e vamos bater um papo! 

Abraços e até a próxima 🚀