Aplicativos modernos

Compreendendo as opções de linguagem para o desenvolvimento de aplicativos modernos

Rachel Appel

Rachel AppelO desenvolvimento de software moderno com uma única linguagem simplesmente não acontece mais em 2013. A programação evoluiu para um modelo poliglota com DSLs (linguagens específicas aos domínios) para cada camada do desenvolvimento. Por exemplo, um cenário popular é usar SQL e C# no back-end e HTML, JavaScript e CSS como as linguagens da interface do usuário. Como um desenvolvedor, você quer poder adicionar habilidades ao seu conjunto de habilidades, mas trabalhar com muitas linguagens reduz suas habilidades em cada linguagem. Você também deseja colocar produtos no mercado rapidamente, o que sempre deixa pouco espaço para aprender uma nova linguagem e todas as suas sutilezas e, portanto, você deseja se basear nas habilidades que já tem. Ao criar aplicativos da Windows Store e do Windows Phone, você tem várias opções de linguagens para cada cenário do projeto e pelo menos uma delas complementará muito bem sua experiência. Neste artigo, mostrarei quais linguagens se encaixam em diferentes cenários de desenvolvimento. Além disso, examinarei as opções que você precisa avaliar e como fatores, como o acesso a dados ou a portabilidade de um aplicativo, afetam a linguagem que você precisa usar.

Cenário das linguagens dos aplicativos modernos

Estes são os conjuntos de linguagens disponíveis para desenvolvimento de aplicativos da Windows Store:

  • HTML, JavaScript e CSS
  • XAML e C# ou XAML e Visual Basic .NET
  • XAML e C++ ou DirectX e C++

Se você desenvolve na pilha da Microsoft, pelo menos algumas dessas linguagens devem ser familiares e, naturalmente, os desenvolvedores da Web conhecem o HTML e os amigos muito bem. Faz sentido que muitos dos mesmos conjuntos de linguagens estejam disponíveis para desenvolvimento no Windows Phone: XAML com C#, Visual Basic .NET e C++.

E o HTML, o JavaScript e o CSS para Windows Phone? Até a redação deste artigo, a única maneira de escrever HTML em um aplicativo do Windows Phone é usando um controle WebView, uma técnica normalmente vista em aplicativos híbridos (que são aplicativos mutantes meio Web, meio nativos).

Se você estiver criando um aplicativo nativo multiplataforma (não um site) fora do ecossistema da Microsoft, o cenário de linguagem muda para estas duas opções:

  • Java para Android
  • Objective-C para iOS (tecnicamente, há mais opções, mas discutirei apenas o Objective-C aqui)

Felizmente, chegou o Xamarin para salvar os desenvolvedores de .NET e Windows que desejam escrever aplicativos multiplataforma. Não há necessidade de aprender o Java (embora ele seja muito semelhante ao C#) ou o Objective-C, a linguagem de desenvolvimento de iOS (mais informações posteriormente).

Agora que você tem uma ideia sólida das linguagens disponíveis para uso, descreverei como é fácil ou difícil aprender cada uma.

Curva de aprendizado das linguagens

O caminho mais fácil é sempre o melhor caminho a tomar, e certamente será o mais rápido. As linguagens com as quais você e sua equipe estão familiarizados são uma consideração importante ao mudar para novo território. Nem todos fazem a transição facilmente de uma linguagem para outra, principalmente com linguagens que se comportam de maneiras completamente diferentes. É mais difícil para alguns desenvolvedores juniores porque eles normalmente não têm experiência com paradigmas de linguagens diferentes e, portanto, cometem erros mais frequentemente ou não conhecem as armadilhas. Até desenvolvedores experientes que mudam de uma linguagem compilada, como o C#, para o JavaScript interpretado podem encontrar muita dificuldade porque não percebem as pequenas sutilezas da linguagem, como uma palavra-chave se comportando de maneira diferente, que ocorre elevação ou uma miríade de singularidades do JavaScript.

Felizmente, os desenvolvedores da Web continuam a gostar de trabalhar com o mesmo HTML, CSS e JavaScript que trabalhariam em qualquer projeto de cliente da Web, mas a diferença ao escrever para o Windows 8 é a adição da WinJS (Biblioteca do Windows para JavaScript). A WinJS facilita a criação de aplicativos nativos no Windows 8 com linguagens da Web. Você continua a usar as mesmas APIs de padrão aberto como no desenvolvimento da Web, mas também precisa trabalhar com bibliotecas específicas do Windows para acessar a experiência nativa.

Os desenvolvedores acostumados com linguagens da Web descobrirão que o truque para os controles HTML nos aplicativos da Windows Store é que eles são simplesmente elementos marcados com atributos data-win*. O uso desses atributos permite que o código básico da WinJS e algum da CSS transformem esses elementos em belos widgets da interface do usuário que enriquecem a experiência nativa. O código da WinJS que renderiza os controles contém regas da CSS que aplicam a aparência da interface do usuário moderna do Windows 8. O código básico da WinJS também cria os controles mais complexos, como seletores e grades de datas em tempo de execução, e podem adicionar elementos HTML de vinculação de dados em matrizes ou objetos JavaScript.

Os desenvolvedores de XAML dos grupos do Windows Presentation Foundation (WPF) e do Silverlight continuam a escrever o mesmo XAML declarativo para o layout da interface do usuário ao lado do C#, do Visual Basic .NET ou do C++ como seu complemento compilado. Como você pode esperar, no XAML há novas bibliotecas e namespaces dedicados à experiência moderna do Windows 8.

Há uma grande quantidade de paridade entre as linguagens declarativas, isto é, qualquer linguagem "ML", referente à quantidade e à qualidade de controles da interface do usuário. Em geral, se você encontrar um controle no XAML, ele provavelmente existirá no HTML ou na biblioteca WinJS e vice-versa. No entanto, haverá uma ou duas diferenças entre eles.

Os desenvolvedores de XAML dificilmente observarão uma alteração, a não ser por alguns namespaces e outras alterações triviais. O Expression Blend ainda é uma boa ferramenta para criar o design da interface do usuário no XAML, enquanto que o Visual Studio é melhor para a linguagem compilada por trás dos bastidores. Existe um ecossistema de terceiros muito disseminado em torno dos controles da interface do usuário do XAML, como grades para XAML na plataforma do WPF, e muitos desses controles funcionam da mesma maneira ou de maneira semelhante entre os aplicativos da Windows Store e do Windows Phone.

Finalmente, se você for um desenvolvedor de Formulários do Windows, está na hora de aprender XAML, uma vez que praticamente não há outra opção. Não existe nenhuma linguagem de interface do usuário comparável que possa ser usada, porque o Windows Forms não tem uma, é tudo C# ou Visual Basic .NET por trás de uma paleta de design. Embora você possa continuar a usar suas habilidades gerais do .NET e de linguagem, você precisará aprender a DSL da interface do usuário: XAML. Você poderia aprender HTML, mas isso exigiria a adição do CSS e do JavaScript e, portanto, precisaria aprender três linguagens, e essa não é uma tarefa fácil.

O acesso a dados afeta a escolha da linguagem

A maneira como você acessa dados varia, algumas vezes muito, entre as linguagens, além disso, o tipo de dados com os quais está lidando determina como você os acessa. Para começar, algumas técnicas estão disponíveis apenas para um conjunto ou outro de tecnologias, como é o caso do Armazenamento na Web (também conhecido como Armazenamento DOM, do qual você pode obter mais informações na postagem de meu blog "Gerenciamento de dados em aplicativos Web com o Armazenamento da Web do HTML5", em bit.ly/lml0Ul) e do IndexedDB, os quais você pode usar apenas com linguagens baseadas em navegador, como o JavaScript.

Os Serviços Móveis do Windows Azure (dos quais você pode obter mais informações em outra postagem do blog, "Usar os Serviços Móveis do Windows Azure para potencializar aplicativos da Windows Store e do Windows Phone", em bit.ly/15nhO8d) e a plataforma do Windows Azure oferecem várias APIs nativas para todas as plataformas populares como também APIs REST que são inerentemente multiplataforma. Como o REST é um padrão aberto, você pode acessar seus dados a partir de qualquer linguagem, em qualquer lugar, em qualquer hora, por meio de uma interface consistente. As interfaces do REST facilitam o desenvolvimento multiplataforma porque, apesar da sintaxe e das sutilezas da linguagem, o código tem uma consistência ou padrão geral. As APIs públicas, como as fornecidas pelo Twitter, Facebook, serviços de meteorologia e assim por diante, normalmente retornam JSON ou XML (ou os dois) que você pode consumir via REST ou XMLHttpRequest (XHR).

O SQLite é uma opção de banco de dados local disponível em todas as plataformas e linguagens. O SQLite está disponível como um pacote NuGet para aplicativos da Windows Store e do Windows Phone no Visual Studio 2012. Também é possível acessá-lo por meio de um conjunto de ferramentas da Xamarin e usar suas bibliotecas para acessar bancos de dados do SQLite em iOS e Android. O SQLite é mais fácil de usar com aplicativos XAML do que com aplicativos HTML.

O acesso a arquivos e a E/S de arquivos na plataforma Windows estão em nível equivalente entre os aplicativos XAML e HTML da Windows Store, portanto, linguagem realmente não faz diferença quando seu aplicativo precisar ler e gravar no sistema de arquivos. Embora o HTML e o JavaScript normais no navegador tenham muitas restrições nas operações de E/S de arquivos e no acesso a recursos do sistema, o modelo de desenvolvimento de aplicativos da Windows Store permite acesso mais do que suficiente ao sistema de arquivos mantendo a segurança.

Para obter os detalhes completos sobre as tecnologias de acesso a dados para aplicativos da Windows Store e do Windows Phone consulte minha coluna de março de 2013. "Opções de acesso e armazenamento de dados em aplicativos da Windows Store", em msdn.microsoft.com/magazine/jj991982.

Considerações sobre multiplataforma

O Objective-C é sintaticamente e operacionalmente diferente de outras linguagens, enquanto o Java e o C# se comportam de maneira semelhante porque são linguagens gerenciadas. No entanto, se estiver escrevendo aplicativos multiplataforma, você não estará condenado a separar bases de código, como Objective-C para iOS, Java para Android e C# para plataformas Windows, porque as ferramentas da Xamarin mencionadas anteriormente facilitam escrever em C# e geram Java e Objective-C. A Xamarin fornece um conjunto de ferramentas de geração de código nativo para desenvolvimento de dispositivos multiplataforma (isto é, dispositivos móveis e tablets) e é o denominador comum mais baixo para desenvolvimento nativo multiplataforma. Como resultado, os desenvolvedores de quase qualquer plataforma podem mudar suas habilidades para a plataforma Windows ou para multiplataforma via Xamarin e C#. Os desenvolvedores das plataformas iOS e Android se sairão bem utilizando o C# como sua linguagem preferencial se desejarem publicar na plataforma Windows e em outras. No entanto, observe que alguns desenvolvedores em Redmond discordam, argumentando que é mais conveniente desenvolver bibliotecas no C++ e no C porque podem ser acessados pelo iOS (diretamente) e por aplicativos do Windows (por meio dos componentes de Tempo de Execução do Windows, ou WinRT). Eles destacam que essa abordagem é "gratuita" (a maioria das ferramentas da Xamarin custam dinheiro) e tem melhor desempenho que ferramentas de terceiros. Eu prefiro apenas criar e compartilhar componentes da Xamarin, uma vez que o tempo para colocação no mercado é mais importante do que os benefícios insignificantes de desempenho além de, particularmente, não gostar de usar o C++.

A portabilidade de bases de código herdadas afeta a escolha da linguagem    

Nem todos os aplicativos são inteiramente novos (isto é, novos ou reescritos). A maioria, na verdade, é recuperado, ou programas herdados, principalmente se o código que você está escrevendo for corporativo. Muitos aplicativos são, na verdade, partes de um ecossistema maior de software composto de vários aplicativos ou interfaces do usuário que interagem com a lógica dos negócios, as camadas dos serviços, as APIs públicas ou as bibliotecas.

A migração de aplicativos da Web, em particular, pode ser complicada, uma vez que sempre é necessário manter o conteúdo de um site existente intacto e ainda integrar esse mesmo conteúdo com o aplicativo cliente e fazer com que ele tenha uma experiência nativa. Isso é porque os requisitos do negócio com frequência ditam que o site ou a arquitetura original deve permanecer inalterado. Isso pode fazer com que a aparência do aplicativo seja diferente da de seu sistema operacional host tornando a utilização difícil e pode bloquear o fluxo de trabalho natural do usuário. Felizmente, se estiver portando um site ou aplicativo existente, você sempre terá a opção de integrá-lo. Se esse for o caso, a estrutura do Apache Cordova (anteriormente PhoneGap) pode ajudar. O Cordova permite criar aplicativos híbridos, nativos da Web, integrando conteúdo da Web e componentes da interface do usuário nativa e publicando entre plataformas. Por outro lado, a integração de conteúdo da Web com um aplicativo WinJS nativo da Windows Store não é difícil de realizar usando o WinJS, e a experiência é normalmente mais fácil para o usuário. Os aplicativos nativos desfrutam de uma experiência de integração mais íntima com o sistema operacional do que os aplicativos clientes da Web, porque os aplicativos nativos têm acesso a recursos de hardware modernos, como câmera, microfone, configurações de dispositivos, acelerômetros, geolocalização e assim por diante. Além disso, os aplicativos nativos têm um ciclo de vida distinto e contêm estado, enquanto os aplicativos da Web são leves e sem estado.

O objetivo do aplicativo é importante

De certa forma, o tipo e o objetivo de seu aplicativo determinam a linguagem que você usa. Jogos de alta intensidade e aplicativos gráficos são propícios para linguagens como o C++ e o DirectX (agora parte do SDK do Windows) porque você pode chegar mais perto da máquina e obter desempenho e melhor controle do dispositivo. O DirectX é uma coleção completa de APIs mais próximas do hardware que você pode acessar via C++ para criar jogos e aplicativos impressionantes. A desvantagem do C++/DirectX é o código complexo que pode se transformar em um problema para você. O C++ também não é a única opção para jogos. Os aplicativos JavaScript, sim - JavaScript, são os que têm o melhor desempenho para jogos de tela. O contêiner de aplicativos da Windows Store descarrega o processamento de script no GPU para que o JavaScript possa ser executado em paralelo, mas independente do layout feito pelo mecanismo de layout Trident. Esse conceito de descarregamento torna o JavaScript uma linguagem realmente rápida que pode executar tão bem quanto código nativo. Se o desempenho for importante para você, mas você não desejar aprender o C++, o uso da tela HTML significa que você talvez não precise.

Se você escrever aplicativos comerciais e de produtividade, você poderá escolher qualquer linguagem que seja adequada para você, porque coisas como desempenho e controles da interface do usuário são tão semelhantes. Esses aplicativos tendem a ser aplicativos comuns de formulários sobre dados. O conjunto atual de tecnologias é o que normalmente direciona as opções de linguagem e de tecnologia para esses tipos de aplicativos.

E o F#?

Você está se perguntando o que aconteceu com o F#? Embora o F# não seja um dos modelos básicos para desenvolvimento de aplicativos da Windows Store e do Windows Phone, você pode referenciar e consumir componentes criados no F#. Também é uma boa linguagem para processamento de análises e execução de código no back-end, e todos os aplicativos precisam de um back-end.

Os desenvolvedores da Web normalmente usam uma mistura de CSS para estilo, HTML e JavaScript que juntos criam interfaces do usuário modernas. Os desenvolvedores nativos também têm um conjunto de linguagens simultâneas para a mesma coisa, portanto, você é quem deve considerar todos os fatores que podem afetar seu aplicativo ao escolher uma linguagem.

Rachel Appel é consultora, autora, mentora e antiga funcionária da Microsoft com mais de 20 anos de experiência no setor de TI. Ela dá palestras em importantes congressos do setor, como o Visual Studio Live!, o DevConnections, o MIX e muitos outros. Sua experiência está ligada a soluções de desenvolvimento que alinham negócios e tecnologia com foco na pilha de desenvolvimento da Microsoft e em Web aberta. Para obter mais informações sobre a Appel, visite seu site em rachelappel.com.

Agradecemos aos seguintes especialistas técnicos da Microsoft pela revisão deste artigo: Eric Schmidt (erschmid@microsoft.com) e John Kennedy (jken@microsoft.com)