Estimativa de uma realidade paralela

Java, uma tecnologia criada há 12 anos é nada mais que uma linguagem de promoção se baseando em uma arquitetura orientada a objetos, e o Java Development Kit (JDK) 1.0 só veio ao mundo no início de 1996, mas a tecnologia Java só tomou proporções importantes no mercado a partir de 1997 com o JDK 1.1.x, e ainda assim, só passaria a ser referenciado depois de exibir um desempenho e funcionalidades que competiam com outras tecnologias, como o C++ a partir do ano de 2000 com a versão Java 2 (JDK 1.2).

Contudo, o mercado mundial de desenvolvimento de software virou de pernas para o ar, e não foi só na adoção do Java mas ao mesmo tempo explodia o que hoje a humanidade fascina diante dela, a Internet. Caminhando por fora, nascia a idéia de software livre e openSource. Então nos perguntamos, o que será de novo daqui a uns 8 anos? Tentarei mostrar um pouco das novas tendências e chegar em um conclusão.

Primeiro, nenhuma nova linguagem não é inventada por nada, como se fosse um brinquedo. Existem, de fato, duas importantes forças que incentivam a criação e modificação dessas linguagens: a Evolução da Tecnologia e a Pressão das demandas de mercado. Mas isso é o que acontece nos dias de hoje, nos próximos anos, acredito veemente o incremento de mais algumas importantes forças.

Dentre as possíveis forças que irão entrar no mercado, uma delas são as adequações aos novos hardwares, sendo mais específico, a Escalabilidade por paralelismo. Podemos definir esta escalabilidade pelos padrões modernos de construção de hardware, basta imaginarmos que há alguns anos não tinhamos processamento em paralelo, e mais, hoje em dia está virando febre mundial os processadores com 2 ou 4 núcleos, é o caso da Intel lançando para o mercado comercial de computadores domésticos o Intel Core-Duo, o Intel Core 2 Duo (ambos com dois núcleos de processamento), e o Intel Quad-Core (este com 4 núcleos de processamento).

Mas, o que isso tem a ver com a programação? É simples, toda e qualquer programação, ou melhor dizendo, todo programa executa uma série de trechos de códigos no processador, e, por exemplo: quando você está executando uma música, abrindo fotos, navegando na internet, na verdade o processador do seu computador está trabalhando a uma velocidade tão alta, mas tão alta que você tem a sensação de que tudo acontece ao mesmo tempo, mas na prática isso não acontece (no caso dos processadores com apenas um núcleo). O processador pega um “pouco de código aqui e executa, logo em seguida pega mais um pedacinho de código ali e executa”, e assim vai a uma velocidade monstruosa. A esses pequenos trechos de códigos que são executados pelo processador damos o nome de thread.

Então, quando se trata de um processador com dois núcleos, ou com mais núcleos - existe um chip Vega2 da empresa Azul Systems, que possui 48 núcleos, sinceramente, eu nunca vi um. Voltando ao assunto, quando se trata de um processador mult-core neste caso sim, podemos ter threads sendo executadas ao mesmíssimo tempo, com certeza você está se perguntando, mas isso não seria uma coisa boa? Sim, com certeza isso é um avanço e uma coisa ótima, entretanto, a programação desse código deve ser também de fato adequada ao tipo do processamento, basta pensarmos e analisarmos, uma thread pode estar executando uma função e uma outra thread do mesmo programa também está sendo processada, o maior problema é que alguns dados que fazem a segunda thread funcionar corretamente dependem da resposta da primeira thread. Fazendo um analogia, é como se um atacante de futebol (segunda thread) precisasse da bola (dados resultantes da primeira thread) para fazer o gol, mas a bola está com o zagueiro (primeira thread) do outro lado do campo, e aí? O que fazer? Tem jeito?

Citei o Java no início do post, pela tecnologia estar mais adequada ao controle das threads (não quero dizer que o .net ou qualquer outra linguagem não seja capaz disso, apenas digo que o Java, atualmente está mais preparado ao controle de threads e o seus específicos detalhes), enfim, o Java através de sua tecnologia de controle de thread, pode funcionar e trabalhar em processamento paralelo através de palavras reservadas e métodos da biblioteca disponível no JDK. No caso do Java, usando synchronized, como palavra reservada ao declarar os métodos e objetos que serão trabalhados por uma thread, e os métodos da biblioteca do Java wait/notify, o programador pode construir um aplicativo capaz de rodar em diferentes processadores sem que haja grandes riscos ao código. Mas devo dizer que o nível de conhecimento nos dias de hoje é praticamente insuficiente, até mesmo para os “monges do Java”. Escrever um código com 200 linhas de códigos é algo tranquilo, mas escrever um sistema com milhares e milhares de linhas de código (esse número varia bem, podendo a chegar na casa dos milhões) e, com esse emaranhado de código o programador sincronizar a sua lógica com os vários processadores do computador é algo tecnicamente imporvável. Aí está o X da questão. Mesmo com a maravilhosa tecnologia que temos hoje, mesmo que a princípio ela dê o suporte necessário para acompanhar a evolução da tecnologia de hardware, mesmo que tenhamos programadores feras do mercado estudando com o material que temos hoje, acredito que não teremos uma evolução realmente marcante em um prazo de tempo curto, o que eu acredito é que:

Com a demanda de mercado crescendo em números altíssimos, com a nova gama de tecnologia de hardware e com o devido investimento, podemos enfim elaborar ou melhorar uma nova linguagem, de fácil manuseio nos novos hardwares. Hoje, linguagens como Java, .NET, Ruby e etc estão em constante evolução e inovação, então creio que essas linguagens se adaptarão aos novos hardwares, e que elas serão as nossas novas tecnologias daqui a alguns anos, talvez com outro nome, talvez apenas com uma nova versão. E quem ganha com isso somos nós, usuários. Toda evolução tecnológica só nasce para trazer benefícios.

Obrigado, e aguardem por novos posts

Leave a Reply