Uma das questões bem intrigantes hoje para os desenvolvedores da área mobile é a dificuldade da escolha de que linguagem de programação ou tecnologia a escolher para desenvolver nossa aplicação. Existe hoje uma variada e crescente lista de linguagens como Java, Symbian C++, Flash Lite, Widgets, Python, etc.
O mais interessante é que como existem diversas tecnologias, não há a necessidade para os desenvolvedores de ter conhecimento técnico em todas as tecnologias, visto que nem todos também desenvolvem os mesmos tipos de aplicativos. Ou seja, de acordo com o tipo de tecnologia que melhor se encaixa com a experiência do desenvolvedor e com o propósito do aplicativo, podemos decidir qual melhor tecnologia a ser usada para o desenvolvimento.
Mas isso pode ser uma faca de dois gumes. Há a possibilidade também de confudir os novos desenvolvedores que estão começando a desenvolver nesse amplo mundo de software mobile, porém fragmentado.
Em muitos fórums, geralmente ocorre esse tipo de discussão:
Questão: "Eu quero desenvolver um aplicativo que abra um arquivo e possa enviá-lo para um servidor web. O que eu posso usar para desenvolver esse aplicativo ?"
Resposta1: "JavaME, FileConnection API! Ele pode resolver seu problema."
Resposta2: "Ah, não se preocupe. Use C++ em vez de JavaME, porque senão você vai receber milhões de caixas de dialógo de permissões e segurança."
Resposta3: "Porque usar C++ quando você pode fazer a mesma coisa com Python? C++ é muito complexo ! "
Resposta4: "Mas Python não roda em aparelhos sem o sistema operacional Symbian, use Java."
Resposta5: "Para que tanto trabalho? Porque não usa logo o Flash Lite e usa a persistência já nativa baseada em servidor ("server-based persistence") ? Seu aplicativo vai sair rapidinho!"
Resposta6: "Flash Lite é muito fragmentado e de novo cai na necessidade de aparelhos Symbian. Use JavaME, mas não se esqueça de assinar (certificar) sua MIDlet ou a usabilidade do aplicativo será um lixo!"
Vejam os diversos fórums na área de desenvolvimento móvel. Está cheio dessas discussões como o exemplo acima. Baseada na minha opinião/experiência e também compilando opiniões de diversas fontes, pude juntar uma análise com pós e contras das principais plataformas de desenvolvimento da atualidade. Irei começar com JavaME, que é a mais popular dentre as existentes.
Tecnologia: JavaME
Prós:
Aplicativos para gerenciamento pessoal e produtividade - Exemplos: Gerenciadores de atividades físicas (sport trackers), aplicativos de controle de gastos, gerenciamento de informações pessoais (calendário, agenda de contatos, etc.).
Jogos - Tanto jogos casuais (advergames) como jogos complexos.
Aplicativos comerciais "enterprise" - Esses não necessitam de interfaces muito requintadas. Geralmente usam bibliotecas padrões da API (Ex: LCDUI) para atingir o maior número de aparelhos possíveis aliado com menor tempo de desenvolvimento (A preocupação fica na regra de negócio).
Prototipação Rápida - Provas de conceito e aplicativos para testes podem ser rapidamente implementados com JavaME.
Aplicativos de Rede - Leitores RSS, serviços de previsão de tempo, aplicativos de blogging, versões mobile de aplicativos web, etc.
Criação de aplicativos realmente
portáveis.
Grande quantidade de aparelhos disponíveis com o a máquina virtual JavaME.
Porque?Facilidade e simplicidade de uso e aprendizado - Um programador experiente, mesmo vindo de outras linguagens como C/C++, pode obter um bom conhecimento prático de como toda a plataforma funciona em algumas semanas e produzir aplicativos rapidamente. Isto eleva a JavaME como uma plataforma rápida pra desenvolvimento de aplicativos. Baseada na linguagem Java e orientada a objetos facilitam esse aprendizado. O framework também não é muito complexo.
Portabilidade - A idéia do Java é "Programe uma vez e rode em qualquer lugar". Embora isso seja o ideal, na prática há diferenças entre implementações, o suporte diferenciado a certos pacotes e APIS, formatos de Audio/video, etc. Mas isso não significa que você deve reescrever totalmente seu aplicativo. Com algumas linhas e algumas checagens em tempo de execução será suficiente.
GAME API - Para mim um dos frameworks matadores do JavaME. Ele combinado com algumas APIS opcionais tornam o desenvolvimento de jogos para celular bastante eficiente com ótimos resultados.
API de Networking e a facilidade de comunicação Web - O framework GCF (Generic Connection Framework) tem como essência ser o máximo possível extensível e genérico para variados tipos de conexão. Uma vez que você tenha aprendido a fazer um tipo de conexão, você está apto rapidamente a fazer qualquer tipo de conexão.
Contras:
Acesso a recursos específicos do aparelho - Exemplos: Acesso a caixa de mensagens SMS, sistema de arquivos, galerias de foto, hardware, etc.
Aplicações Multimídia - Examplos: Reprodutores (players) de video streaming, audio e gravadores de vídeo e som, aplicações de reconhecimento de vídeo/som.
Aplicativos que exigem bastante performance - Computação científica, processamento de imagens, decodificadores de vídeo, processamento de som.
Porque?
A API de Java ainda é limitada para acesso a recursos específicos no hardware do telefone. Isso existe porque qualquer funcionalidade nova em Java depende da aprovação do processo da comunidade Java (Java Community Process), logo se não existir uma API padrão disponível para que o desenvolvedor queira fazer, ele está com má sorte. Um exemplo clássico seria acessar a caixa de mensagens SMS do aparelho.
A implementação MMAPI ainda é bastante bugada. Muitas checagens em tempo de execução são necessárias ainda pelo fato de que as funcionalidades nativas do aparelho (desenvolvidas em outras linguagens) são disponíveis para máquina virtual Java e esse acesso indireto pode ter um impacto profundo em performance de aplicativos de tempo-real.
Fazer controles específicos sobre áudio, vídeo ou câmera geralmente não está disponível. Embora o JSR 234 (Advanced Multimedia Supplements) ainda consiga resolver algumas dessas dependências, ainda nem se compara com o que outras plataformas podem oferecer para os desenvolvedores. E a disponibilidade dessa API em aparelhos móveis, já que é uma API opcional, é bastante baixa.
O acesso ao sistema de arquivos é provido pela API FileConnection (
JSR-75), mas ainda é
restrito para certos tipos de acesso e requer que o MIDlet seja assinado, senão diversas caixas de diálogo de segurança pedindo a permissão do usuário aparecerão na tela. Usabilidade zero! Ah, e o processo de assinatura de um MIDlet custa $$ e tem uma burocracia envolvida, esteja preparado.
Enfim, essa é apenas uma pequena análise que eu faço hoje com JavaME, inclusive opinião de alguns desenvolvedores e fóruns que eu vejo na área. Não acho que JavaME é ruim ou melhor. Ela tem muitos prós e contras que devem ser levados quando iniciar a escolha de qual plataforma para o desenvolvimento do seu aplicativo móvel. De acordo com as suas necessidades e requisitos do seu aplicativo, a pergunta "O que eu devo escolher ou usar" será respondida através da experiência. No início realmente é complicado, mas com o tempo a escolha de qual plataforma adotar acaba sendo bastante natural. Gerenciamento de requisitos é uma ciência e não uma arte, então a escolha da plataforma de desenvolvimento irá aparecer naturalmente com a experiência.
A próxima linguagem de programação que irei citar mais detalhes é o
Python! Considero essa a minha plataforma de desenvolvimento favorita. =D