Qual a melhor linguagem de programação para apps

mobile-programmingTem poucas décadas que os telefones celulares passaram a fazer parte de nossas vidas e cerca de duas década desde o lançamento do primeiro smartphone (SAGER, 2012), o Simon, pela empresa IBM, permitindo o desenvolvimento e instalação de aplicativos no aparelho além dos que vinham de fábrica. Mas os smartphones, e o próprio termo, só começaram a se popularizar nos anos 2000 com o advento do uso de Internet móvel com relativa qualidade e as funções de PDA (Personal Digital Assistant) incorporadas aos aparelhos, inovação trazia pela Palm e seu Kyocera 6035 (PALMINFOCENTER, 2001).

Entretanto, ainda existiam muitas barreiras a serem rompidas para tornar o desenvolvimento de aplicativos para smartphones algo popular entre os desenvolvedores de software. O mercado de desenvolvimento para tais plataformas, até então dominado pela Sun e seu J2ME, carecia de concorrentes que impulsionassem esse mercado e que desenvolvessem maneiras de tirar o desenvolvimento de aplicações das mãos das grandes empresas e desse mais poderes aos desenvolvedores comuns. Em 2008 (HEINEN, 2012), a Apple liberou o SDK oficial de desenvolvimento para sua plataforma móvel, bem como o acesso à sua loja virtual iTunes para que qualquer desenvolvedor pudesse distribuir os aplicativos criados para a plataforma, aumentando exponencialmente seus lucros com a plataforma. Esta atitude movimentou toda a indústria em uma mesma direção, fazendo com que seus concorrentes investissem na mesma receita de sucesso, gerando frameworks cada vez mais sofisticados, complexos e numerosos.

Frente às numerosas opções de linguagens de programação disponíveis para o desenvolvimento de aplicativos para dispositivos móveis, foi realizado um estudo, cujo resultado é este artigo, elucidando as principais características, vantagens e desvantagens das três principais linguagens de programação do mercado de dispositivos móveis: Java, Objective-C e C#. Este artigo está estruturado da seguinte forma: a seção 2 apresenta uma breve definição sobre as três linguagens de programação de maior aceitação no mercado de desenvolvimento móvel atual. A seção 3 apresenta o estudo comparativo entre as linguagens. E por fim, algumas conclusões são apresentadas sobre o trabalho e as referências bibliográficas são disponibilizadas no final deste artigo.

Linguagens de programação para Dispositivos Móveis

Inúmeras são as linguagens de programação que se propõem a tornar possível o desenvolvimento de aplicativos para dispositivos móveis. Dentre elas, três estão nos centro das atenções dos desenvolvedores nos últimos anos: Java, Objective-C e C#. Enquanto que a primeira está consolidada como uma grande opção para desenvolvimento móvel desde a década de 90, a segunda é quem elevou o desenvolvimento das ditas “apps” (abreviação para applications) a outro patamar. Por fim, a última, é uma das grandes promessas para o desenvolvimento móvel sobre plataforma Windows nos próximos anos. As três linguagens são descritas brevemente nas próximas seções.

Curso React Native

Java

A linguagem Java de James Gosling foi à público na década de 90 (ORACLE, 2012) causando grande alvoroço na comunidade desenvolvedora mundial, devido à sua portabilidade para os mais variados dispositivos. Dentro da plataforma Java, a divisão Java Micro Edition foi a primeira a tornar o desenvolvimento de aplicativos móveis algo mais próximo do dia-a-dia dos desenvolvedores. A linguagem Java possui as seguintes características (LIANG, 2012):

  • Orientada à Objetos;
  • Permite herança simples e implementação múltipla com interfaces;
  • Permite programação multitarefa (multithread);
  • Fortemente tipada;
  • Genérica (Generics);
  • Código-aberto (open-source);
  • Multiplataforma (depende de máquina virtual instalada);
  • Híbrida (compilada e interpretada);
  • Coletor automático de lixo (Garbage Collector);
  • Encapsulamento de membros através de métodos;

Para saber mais sobre a linguagem Java, recomendo a leitura deste livro.

C#

A linguagem C# de Anders Hejlsberg tornou-se o carro-chefe da Microsoft em 2000 (HAMILTON, 2008), quando foi desenvolvida especialmente para a plataforma .NET, que atende às exigências de desenvolvimento web, desktop e mobile para ambiente Windows. Com o lançamento do sistema operacional Windows Phone 7 em 2011, a divisão móvel da plataforma ganhou novo fôlego, principalmente com parcerias como com a Nokia, que abandonou sua antiga plataforma, Symbian. A tendência é que nos próximos anos a linguagem C# obtenha uma grande fatia do mercado mobile junto às mais tradicionais Java e Objective-C. A linguagem C# possui as seguintes características (DUSSAD, 2010):

  • Orientada à Objetos;
  • Permite herança simples e implementação múltipla com interfaces;
  • Especificação aberta (ECMA);
  • Permite programação multitarefa (multithread), paralela e assíncrona;
  • Fortemente tipada, embora permita tipos dinâmicos e inferência de tipos;
  • Genérica (Generics);
  • Reflexiva (reflection);
  • Multiplataforma (depende de máquina virtual instalada);
  • Híbrida (compilada e interpretada);
  • Coletor automático de lixo (Garbage Collector);
  • Encapsulamento de membros através de propriedades;
  • Extensão de classes através de Extension Methods.

Objective-C

Objective-C foi criada por Brad Cox e Tom Love em 1980, propondo uma evolução à linguagem C, principalmente no que tange a adição de Orientação à Objetos (TECHOTOPIA, 2012). Mas somente em 2008, com a liberação do SDK oficial da Apple para desenvolvimento para a plataforma iOS é que o Objective-C passou a atrair a atenção de desenvolvedores do mundo inteiro estando hoje entre as linguagens de programação mais utilizadas no mundo. Entre as principais características da linguagem carro-chefe da Apple podemos citar (HEINEN, 2012):

  • Orientada à Objetos;
  • Permite herança simples e implementação múltipla com protocolos;
  • Fortemente tipada;
  • Reflexiva (reflection);
  • Linguagem compilada;
  • Programação baseada em mensagens;
  • Coletor automático de lixo (Reference Counter a partir do iOS 5);
  • Encapsulamento de membros através de propriedades;
  • Extensão de classes através de Categorias;

Comparativo entre as linguagens estudadas

O cenário de desenvolvimento de software para dispositivos móveis é um dos mais vorazes da atualidade, segundo [MCMILLAN, 2010], uma pesquisa demonstrou que 35% das empresas de TI consideram o recrutamento de profissionais para trabalhar em projetos de computação móvel como uma das três prioridades da empresa. Além disso, a mesma pesquisa revelou que 95% das empresas consideram o mercado mobile extremamente competitivo. Um dos motivos, ainda segundo [MCMILLAN, 2010] é o fato de que todos querem versões portáteis de seus softwares desktop.

Em um mercado com crescimento tão vertiginoso é natural que os desenvolvedores tenham dúvidas com relação à quais plataformas devam focar-se para que não percam tempo e tenham acesso às melhores oportunidades disponíveis. Desta maneira, um estudo breve sobre as principais plataformas do mercado pode tornar a escolha mais fácil, dependendo das habilidades prévias do desenvolvedor, de seu gosto pessoal e do potencial de mercado da plataforma.

O Quadro 1 ilustra algumas das principais diferenças entre as três linguagens estudadas, com base nas referências citadas e em experiências de desenvolvimento com as mesmas.

Java C# Objective-C
Orientada-à-Objetos Sim Sim Sim
Encapsulamento Métodos Propriedades Propriedades
Herança Simples Simples Simples
Implementação Múltipla Interfaces Interfaces Protocols
Extensão de Classes Não Extension Methods Categories
Classes Divididas Não Partial Classes Arquivos .m e .h
Reflexiva Não Sim Sim
Execução Nativa Híbrida Híbrida Compilada
Chamadas Por Referência Por Referência Por Mensagens
Coletor de Lixo Automático Sim Sim Sim (SDK v5)
Uso Explícito de Ponteiros Não Não Sim
Alocação de Memória Dinâmica Dinâmica Manual
Delegation Não Sim Sim
Forwarding Não Não Sim
Fast Enumeration Sim Sim Sim
Namespaces Não Sim Não
Classes Internas Sim Sim Não
Objetos Anônimos Sim Sim Sim
Case-sensitive Sim Sim Sim

Todas as linguagens citadas têm suas origens em outras linguagens, em especial C e SmallTalk. Desta maneira, é natural que possuam muitas semelhanças. Em especial C# e Java, que possuem inclusive sintaxe idêntica em muitos aspectos, além de arquitetura de execução similar, baseada em máquinas virtuais. Dentre as três, Objective-C é a que mais se diferencia das linguagens estudadas, principalmente devido à chamada de métodos através de mensagens e separação de classes em arquivos distintos (embora C# também permita isso). Ainda assim, a evolução de suas concorrentes trouxe alguns benefícios para a linguagem adotada pela Apple, como o coletor de lixo, presente no Java e C# desde sua criação, que foi incorporado ao Objective-C na versão 5 do SDK.

Conclusões

Muito se evoluiu no desenvolvimento de software móvel desde os primeiros smartphones na década de 90 para cá. A necessidade de aumento de produtividade e qualidade fez com que os grandes players de software do mercado desenvolvessem plataformas de desenvolvimento móvel cada vez mais completas e sofisticadas. Dentre estas, o Java da Sun (hoje Oracle), o C# da Microsoft e o Objective-C da Apple figuram entre as linguagens mais expressivas no cenário de desenvolvimento mobile mundial.

O uso de uma tecnologia específica para o desenvolvimento de sua aplicação é muitas vezes guiado pelas suas necessidades, público-alvo e objetivo final com a aplicação. Conhecer as linguagens predominantes no mercado pode lhe ser muito útil para que use a ferramenta certa para a tarefa certa. Este artigo apresentou de forma breve e resumida as principais linguagens que concorrem hoje pela atenção dos desenvolvedores de aplicativos móveis em âmbito mundial.

Pelos estudos efetuados com três das mais utilizadas linguagens do mercado móvel, pôde-se constatar que uma vez que são voltadas à famílias de dispositivos completamente distintas, não há como definir que a linguagem a é declaradamente melhor que a linguagem b, uma vez que a escolha se dará principalmente pela plataforma que se quer atingir. E embora alguns frameworks alternativos permitam desenvolvimento cross-platform, ainda não se consegue obter resultados tão bons do que com os SDKs oficiais e suas respectivas linguagens nativas.

Referências

SAGER, I.; Before Iphone and Android Came Simon, the First Smartphone, 2012. Disponível em: <http://www.businessweek.com/articles/2012-06-29/before-iphone-and-android-came-simon-the-first-smartphone>. Acesso em: 18 agosto 2012

PALMINFOCENTER; Kyocera QCP 6035 Smartphone Review, 2011. Disponível em: <http://www.palminfocenter.com/view_story.asp?ID=1707>. Acesso em: 18 agosto 2012

HEINEN, F.; Desenvolvimento de Aplicativos para iOS, 2012. Disponível em: <http://www.moodle.unisinos.br/file.php/4633/INTRODUCAO_A_PLATAFORMA_iOS/Farlei_intro_plataforma_iOS_texto.pdf>. Acesso em: 18 agosto 2012

ORACLE; The History of Java Technology, 2012. Disponível em: < http://www.oracle.com/technetwork/java/javase/overview/javahistory-index-198355.html>. Acesso em: 18 agosto 2012

LIANG, D.; Characteristics of Java, 2012. Disponível em: < http://www.cs.armstrong.edu/liang/intro6e/JavaCharacteristics.pdf>. Acesso em: 18 agosto 2012

HAMILTON, N.; The A-Z of Programming Languages: C#, 2008. Disponível em: < http://www.computerworld.com.au/article/261958/a-z_programming_languages_c_/#closeme>. Acesso em: 18 agosto 2012

DUSSAD, V.; Characteristics of C#, 2010. Disponível em: < http://www.indiastudychannel.com/resources/101182-Characteristics-C.aspx>. Acesso em: 18 agosto 2012

TECHOTOPIA; The History of Objective-C, 2012. Disponível em: < http://www.techotopia.com/index.php/The_History_of_Objective-C>. Acesso em: 18 agosto 2012

MCMILLAN, D.; Tech Companies see Dearth of Mobile-Software Developers, 2010. Disponível em: <http://www.businessweek.com/technology/content/oct2010/tc20101020_639668.htm>. Acesso em: 18 agosto 2012

Criando apps para empresas com Android

Publicado por

Luiz Duarte

Pós-graduado em computação, professor, empreendedor, autor, Agile Coach e programador nas horas vagas.