DevicesToolkits[1]

Bom dia a todos !

Durante anos, o desenvolvimento de aplicações vem sofrendo o efeito pendular do desenvolvimento ora centralizado no cliente (client-centric), ora centralizado no servidor (server-centric). Hoje, com proliferação dos dispositivos móveis (smartphones, tablets) e a liderança pelos sistemas operacionais como iOS, Android, WP7, podemos notar que as aplicações necessitam de uma arquitetura cliente-servidor híbrida.

Este movimento significa que os desenvolvedores/empresas precisam juntar mais peças do que antes. Como conciliar linguagens, necessidades, frameworks, alta-disponibilidade em uma aplicação para smartphones ? Em resposta a esta pergunta, sentimentos o surgimento de plataformas que procuram tratar a funcionalidade híbrida de uma maneira mais transparente e produtiva. Estas plataformas procuram incluir desde armazenamento de dados, notificar acontecimentos e até mesmo autenticar os usuários em múltiplos serviços.

Do Cliente, passando pelo servidor para o Híbrido

Apesar de eu ser relativamente novo (35 anos), passei por alguns momentos importantes das indústria da computação no Brasil. Em me lembro no final dos anos 80 para 90, que comecei a trabalhar com ambientes caracteres e algumas vezes baseados no ambiente cliente. Naquele período, o mundo era menos conectado, as redes locais ainda estavam aparecendo aos poucos (LANtastic, Netware e Windows NT), naquele momento os usuários acreditavam que as aplicações podiam rodar em modo offline, e que os dados deveriam estar armazenados nos seus discos locais (algumas vezes, nos disquetes de 5 1/4 ou 3 1/2).

À medida que as redes locais aumentavam o seu desempenho e os sistemas operacionais ganharam novas capacidades, algumas atividades que antes eram feitas no cliente passaram para o servidor, exemplo clássico, processamento e armazenamento de dados em banco de dados relacional (surgem os bancos Oracle, Sybase, SQL Server e outros). Este movimento tornou-se cada vez mais forte com o aparecimento da Web. Na realidade, a Web (meados de 00’s), criou-se a rede das redes, aplicações foram aos poucos se movendo para a Web afim de compartilhar entre si os seus dados (mesmo que de maneira muito rudimentar).

Neste momento, é que vemos a transformação do browser no cliente de vital importância na perspectiva do usuário, de qualquer lugar, bastava abrir o browser, ir para uma URL e pronto ! Da perspectiva do desenvolvedor, o pêndulo se moveu para o desenvolvimento centralizado no servidor (server-centric). Basicamente, estamos falando um modelo de browser requisita uma ação, o servidor a processa e retorna o resultado. Quem nunca, começou a desenvolver os seus formulários para receber dados no padrão (post->->action->result). O ASP (Active Server Pages) foi um modelos mais comumente usados neste período e com a sua ferramenta de desenvolvimento Visual Interdev.

Avançando no tempo até os nossos dias atuais, a rede e a disponibilidade da comunicação tornaram parte vitais de várias empresas. Em recente podcast, ouvi que devemos mudar a contabilização de tempo na Internet para tempo que não estamos conectados. Afinal de contas, através do seu celular você recebe notificações de e-mail, recados do Facebook, tweetes que te colocam em destaque e assim vai (always on). É claro, que esta disponibilidade ainda não é totalmente presente no Brasil (basta viajar para interior de Minas Gerais, e ver que estamos carentes de infraestrutura de telecomunicações), mas apesar desta “questão”, as nossas redes evoluíram muito (de modens de 9.600bps para redes de 1 MB mesmo no interior de Minas Gerais, é eu sei pois estive lá há 4 dias atrás).

Nesta jornada, os desenvolvedores/empresas encontram uma necessidade diferente, os nossos usuários querem que suas aplicações em smartphones estejam sempre online e acessível de qualquer lugar. Querem estar conectados conectados 24 horas por dia para receber as informações, dados e notificações mesmo que a rede não esteja disponível.

Desenvolvimento para uma arquitetura híbrida é complicado

Para os desenvolvedores/empresas reunir as capacidades online e offline não é tarefa fácil. Isto significa reunir para o desenvolvimento de uma simples aplicação: estilos de desenvolvimento em múltiplos ambientes (celular e nuvem), múltiplas linguagens de programação (C#/Silverlight, Object-C, Java) e até mesmo em IDEs diferentes (Eclipse, Visual Studio e outros). Além disso, o modelo deve contemplar a conexão, sincronização de dados de maneira que aparentam sempre disponíveis (online), com centralização de dados em modo offline; e manter sempre um ambiente de alta-disponibilidade para que os dados nunca se percam.

Combinando todos estes aspectos, ficou claro que a taxa de produtividade ficou baixa. E com este “problema” em mãos que podemos ver o surgimento das plataformas de nuvem para desenvolvedores.

As Plataformas

Nestes últimos anos, vemos o surgimento de várias plataformas de nuvem. Há várias no mercado, que vão desde de amplo uso (Amazon, Azure, AppEngine), até as mais centralizadas em frameworks/linguagens (Heroku, Mailgun, dotCloud). Todas estas plataformas de nuvem tem um próposito em comum: aumentar a produtividade dos desenvolvedores/empresas, permitindo que eles se concentram no desenvolvimento da aplicação ao invés de detalhes de uma infraestrutura.

No caso do Windows Azure, é ele quem cuidará dos detalhes da redundância dos dados, conectividade na Internet, alta-disponibilidade do serviço e etc. O que um desenvolvedor/empresa precisa apenas é aprender um conjunto de APIs (Application Programming Interface) para consumir os seus serviços. Sim, uma parte de sua arquitetura você deixará de ter o controle e delegará para um terceiro, mas afinal de contas não é este o movimento natural do mercado? Nem todo mundo consegue reunir em uma mesma cabeça: perfeito pizzaolo, desenvolvedor, executivo e especialista em reatores nucleares. Em algumas funções nos concentramos mais e em outras simplesmentes deixamos para que o mercado possa fazer por nós.

Aumentar a produtividade através da concentração no desenvolvimento da aplicação é dos principais motivadores da inovação na Plataforma Windows Azure. A Microsoft vem lançado continuamente plugins, APIs, bibliotecas e todo o vasto material para que desenvolvedores/empresas possam mover de maneira mais adequada e eficiente suas aplicações para a nuvem. Veja os anúncios mais recentes.

O que venho encontrando em várias palestras, reuniões com clientes/parceiros, desenvolvedores e comunidades é alto interesse no desenvolvimento para Smartphones + Windows Azure. Por outro lado, com toda a mudança no mercado, existem os “receios”. Uma mensagem que sempre procuro mostrar são as dores que muitas tem, mas se acostumaram a sentir. Quem nunca preciso conectar aplicações entre si? Quem nunca teve um site que caiu por excesso de acesso ? Quem nunca precisou integrar dados, aplicações e dispositivos e sentiu o parto que foi? Acredito que precisamos pensar além do óbvio, a produtividade é algo inerente ao mercado, quanto mais rápido, melhor e eficiente; maior a tendência de ter sucesso. Quem nunca gostou de mostrar “what the next big thing”?

Onde busco mais informações?

Para que aquelas empresas/desenvolvedores que gostaram do post, deixo aqui alguns links para download :

abs e T+
Condé

versão 1.0