Desenvolvimento Mobile - Por onde começar?


Smartphones

Quando optamos por desenvolver para smartphones, temos algumas opções em mente: o desenvolvimento nativo, que inclui uma linguagem de programação e ambientes de desenvolvimento específicos para cada plataforma; desenvolvimento multiplataforma, utilizando linguagem web como Javascript; ou ainda um Progressive Web App (PWA), ou seja, uma aplicação web de verdade pensada para esses pequenos aparelhos. 

Em meio a tudo isso, como saber as principais vantagens e desvantagens de cada forma de desenvolvimento e como ela se sai adapta à imensa variedade de aparelhos e tamanhos de tela disponíveis no mercado? 

O Boom dos Smartphones iniciado no final da década passada com o lançamento do iPhone e do sistema operacional Android, juntamente com a derrocada da gigante BlackBerry, fez desses pequenos 'computadores de mão' companheiros inseparáveis da grande maioria das pessoas. Sendo, já há alguns anos, a principal forma de acesso à internet e às redes sociais, que desenvolveram aplicativos próprios que nos notificam todas as vezes em que alguém curte nossas fotos no Instagram, recebemos solicitações de amizade no Facebook, ou até mesmo temos um tweet retuitado.

Com toda essa demanda, não é de se espantar a quantidade de possibilidades quando se trata de desenvolver para essas plataformas, correto?

Seguem as principais formas de desenvolvimento para dispositivos móveis disponíveis na atualidade, bem como suas vantagens e desvantagens:

Android-Ios


Desenvolvimento Nativo

iOS
Todos sabemos da importância do sistema operacional da Apple para a popularização dos Smartphones. Apesar de seus aparelhos não serem exatamente "populares", ao menos em termos de preço, a marca construiu uma história de evolução do seu sistema a cada novo lançamento. E não podemos deixar de citar ainda que a App Store foi a primeira loja de aplicativos disponível e que isso se provou uma das maiores revoluções na forma de distribuição de software nos últimos anos.

O desenvolvimento iOS é um dos mais fechados que temos, é necessário um computador da Apple rodando as últimas versões do sistema operacional MacOSX, de preferência, bem como domínio da linguagem Objective-C ou Swift. A Apple desenvolveu e aperfeiçoou ao longo dos anos sua IDE chamada XCode que inclui recursos muito úteis e dispõe de um simulador que consegue replicar praticamente tudo o que um aparelho físico faz, o que facilita muito o desenvolvimento e os testes.

Vantagens:
  • Ecossistema otimizado pelo fato de não ter muita variedade de aparelhos;
  • Ferramentas que auxiliam muito no desenvolvimento;
  • Desempenho muito bom mesmo em aparelhos mais antigos;
Desvantagens:
  • Necessita de um MacOSX para seu desenvolvimento;
  • Plataforma mais fechada que a concorrência;

Android
Esse sistema operacional dispensa mais comentários já que é o mais utilizado no mundo, hoje muito próximo de atingir os 90% de market share no que tange aos smartphones.

Projeto de código aberto baseado no kernel linux que foi comprado e aperfeiçoado pelo Google, sendo lançado em meados de 2008 e disponível em milhares de aparelhos de dezenas de marcas hoje em dia, e que acabou de ter sua nona versão, Android Pie, lançada no mês de agosto desse ano.

Por se tratar de uma plataforma aberta (não 100%, eu sei), o desenvolvimento Android pode ser realizado em computadores com sistema operacional Windows, Linux ou Mac. Seu desenvolvimento é feito na linguagem Java, essa que ainda é uma das mais utilizadas no mundo. Hoje também é possível desenvolver para a plataforma utilizando a linguagem Kotlin, criada pelo Google para ser a linguagem oficial desse sistema.

Além do domínio de uma dessas linguagens, também é necessário o Android Studio, ferramenta que possui, assim como o XCode, um simulador do sistema, bem como as ferramentas de desenvolvimento (Android-SDK).

Vantagens:
  • Possibilidade de desenvolver em qualquer sistema operacional;
  • Linguagem Java pode ser utilizada em inúmeros projetos fora do android, tornando-a mais "útil" que a Swift, por exemplo;
  • Plataforma de Código Aberto; 
Desvantagens:
  • Número imenso de aparelhos torna a tarefa de desenvolver e testar muito mais complexa;
  • Android Studio é um devorador de recursos e exige uma máquina relativamente boa para não travar, embora esteja melhorando nas últimas versões;

Desenvolvimento Multiplataforma


Ionic


Ionic
Esse Framework pode ser utilizado para desenvolvimento para Android, iOS e Windows 10, bem como para Progressive Web Apps, e é hoje utilizado por diversas empresas e StartUps ao redor do mundo.

Ele surgiu como um projeto paralelo ao AngularJS, framework de desenvolvimento web criado por um ex-funcionário da Google e que é, até hoje, apoiado pela gigante, e assim como o AngularJS, passou por mudanças profundas a partir de sua segunda versão, se estabilizando a partir do terceiro, e atual, lançamento.

O Ionic facilita o desenvolvimento móvel para aqueles que já dominam as tecnologias web, já que ele é basicamente HTML, CSS e Javascript, claro que tudo isso encapsulado juntamente com componentes do Angular. O problema é que ele roda em cima de uma WebView e acaba não sendo recomendado para projetos que exijam muito do aparelho.

Vantagens:
  • Fácil e rápido para desenvolver para quem já desenvolve para a Web;
  • Possui componentes que se adaptam a cada plataforma;
Desvantagens:
  • Desempenho não é dos melhores;

React Native

React Native
Esse segundo framework foi criado pelo Facebook e é uma extensão de outro projeto da gigante, o ReactJS. O RN dá a possibilidade de utilizar basicamente um código e compilá-lo para Android ou iOS. Embora, ao contrário do Ionic, não possui componentes adaptáveis a cada plataforma, o que dificulta um pouco a estilização desses.

Por ser baseado no ReactJS, utilizamos basicamente Javascript para seu desenvolvimento. O RN possui componentes próprios que são traduzidos para as plataformas de destino, se comportando bastante como um código nativo, embora não o seja, o que dá um aumento de performance quando comparado com o framework anterior.

Vantagens:
  • Desempenho superior, próximo ao nativo;
  • Relativamente rápido para aprender, já que o código é basicamente Javascript, principalmente para quem desenvolve com React;
Desvantagens:
  • Mais difícil de estilizar e adaptar que outras alternativas;

Outros Frameworks que podem ser utilizados para desenvolvimento multiplataforma incluem:
  • Flutter - Outro Framework multiplataforma que é apoiado pela Google. Ao contrário das outras alternativas, utiliza uma linguagem própria para seu desenvolvimento: Dart, o que pode afastar quem já domina outras linguagens de programação, mas pode atrair quem está iniciando agora nesse mundo. O desempenho é muito próximo do nativo e dá para utilizar o Android Studio para seu desenvolvimento;
  • NativeScript - Esse é, por assim dizer, um misto de Ionic e React Native. Utiliza bastante de componentes Angular mas também faz jus a uma camada de compilação para código nativo, o que faz com que o desempenho seja similar ao obtido pelo React Native e Flutter.
  • PWA - Progressive Web App não é bem um framework, mas é uma tendência crescente já que suas principais vantagens incluem a de que para se desenvolver um basta saber desenvolver para a Web, pode ser "instalado" tanto em Android quanto iOS, funcionando inclusive offline e também de não ser necessário de uma loja para publicar o App. O que acaba também sendo uma desvantagem, já que é necessário atrair o usuário até o site para que ele o "adicione a tela inicial" de seu sistema operacional para que esse permaneça no mesmo e possa acessar os recursos do aparelho;

Bom, com essa lista de vantagens e desvantagens de cada uma das maneiras de se desenvolver, espero ter ajudado a escolher sua próxima plataforma de desenvolvimento.

Claro que tudo depende do projeto. Se for algo rápido e que não seja muito complexo, recomendaria o Ionic, com certeza, caso contrário, o React Native. A não ser que você já esteja familiarizado com o framework React, daí o React Native é a aposta mais certa.

Quanto ao mercado de trabalho, posso dizer que a procura por esse último também está muito mais aquecida que a do Ionic, então se for para escolher uma plataforma para começar, React Native é o que recomendo sem dúvidas.

ES2015 - Promises no Javascript (Parte 1)



01 - Callbacks e Callback Hell

Há algum tempo atrás, todas as vezes em que desenvolvíamos uma aplicação com Javascript e essa começava a escalar, crescer mais e mais, agregando mais e mais funções onde cada uma estava conectada com a outra e, principalmente, dependia uma da outra, tínhamos que utilizar as chamadas Callbacks, que são, basicamente, funções que chamam outra funções em seus parâmetros.

Exemplo:


Nesse exemplo, a função forEach, que pertence ao prototype Array, chama uma função anônima que retorna cada um dos elementos precedido do seu índice.

Ok, legal, quando tempo uma função chamando outra função é tranquilo de lidar, mas imagine por exemplo se fossem 4, 5 ou mais funções sendo chamadas uma dentro de outra. Isso é que o chamamos de "Callback Hell" pois aí fica fácil perder o controle da sua aplicação já que quando for precisar escrever testes ou debugar, tudo vira um inferno para o desenvolvedor.


Foi aí que foi introduzido mais recentemente no Javascript as chamadas Promises. A princípio se tratava de uma biblioteca externa e que só depois de 2015 que foi implementada por completo na linguagem.

02 - O que são e como funcionam as Promises?

Como o próprio nome já indica, Promises são Promessas, é um indicativo de que você possa receber, ou não, algo a partir de uma solicitação feita anteriormente.

Por exemplo, vamos supor que você precise mostrar uma lista de produtos disponíveis num supermercado, a princípio você terá uma função que busca no banco de dados a lista de produtos disponíveis, com seus saldos e preços e também terá uma outra função que organiza e mostra essa lista na tela para o usuário. Bom, para essa segunda função funcionar, será necessário que a primeira tenha sido executada e tenha trazido as informações, correto? Só temos um problema aqui: o Javascript é uma linguagem assíncrona, ou seja, se você simplesmente chamar a primeira função e logo depois chamar a segunda, o que vai ocorrer é um erro.


Para evitar esse erro, utilizamos as Promises, especificando uma função anônima que recebe dois parâmetros: resolve e reject. Sendo o primeiro para tratar a informação quando recebida e o segundo para quando há um erro com o pedido.

Exemplo:



Nesse exemplo eu fiz questão de utilizar a função "fetch" pois ela em si já utiliza o protocolo de Promises.

03 - Como tratar erros em Promises?

Acima nós vemos como podemos obter as respostas a partir das promisses usando a função ".then()", correto? Ela serve para retornar o parâmetro resolve da promise. Caso precisemos tratar o erro, podemos utilizar a função ".catch()".


Por hoje é só mas pretendo aprofundar mais em posts futuros pois tem muita coisa que dá pra fazer com Promises.
Inclusive, pretendo fazer um post sobre o uso de Promises e Obervables e em qual situação usar um ou o outro.

Valeu!


Alternativas para adquirir experiência como programador



Olá, pessoal!

Hoje o post será um pouco diferente pois pretendo passar umas dicas para quem está começando agora na área de desenvolvimento, ou está mudando de carreira, mas não está conseguindo colocação no mercado pois praticamente todas as vagas de emprego são voltadas para programadores Pleno e Sênior.
Então, por muitas vezes, isso acaba gerando uma frustração muito grande na gente e acabamos por aceitar vagas de emprego em áreas que não queríamos trabalhar na TI, ou até mesmo fora dela.

Então, devido ao fato de ver muitos desenvolvedores perguntando como faz para adquirir experiência ou até trabalhando em estágios mal (ou sequer) remunerados, e até com memes surgindo aí aos montes, como esse abaixo, que decidi demonstrar os meios pelos quais se dá para conseguir obter experiência mesmo sem um emprego fixo ou um trabalho freelancer.



Então, Flávio, como obter experiência, mostrar trabalho, mostrar para o mercado que eu realmente manjo do assunto e estou pronto para essa ou aquela vaga de emprego?

1 - Não pare no tempo!

Bom, a primeira dica que gostaria de dar é a de que o desenvolvedor não pode ficar parado no tempo. Sim, eu sei que é muito difícil conseguir acompanhar  todas as novas tecnologias ou todos os novos Frameworks Javascript que saem todos os dias, todas as horas, minutos, etc. Nossa área tem essa natureza de que as coisas tem que acontecer muito rápido e tudo acontece dessa forma. Você vai pesquisar um tutorial de algo que deseja aprender e se ele tiver mais do que 6 meses de escrito talvez nem sirva mais.

Mas existem alternativas a isso. Eu, por exemplo, uso muito o recurso de criar listas no Twitter. Funciona assim: você cria uma lista personalizada para adicionar perfis de usuários que comentam sobre um determinado assunto e daí adiciona aqueles usuários da rede social àquela lista, logo, toda vez que você quiser se informar sobre algo novo, basta abrir a lista e verificar as postagens dos perfis.

Outra ideia é seguir determinados projetos e usuários no Github, isso também é algo que ajuda muito pois sempre que tem novidade naquele projeto Open Source, você recebe uma notificação no seu E-mail. Também dá para seguir usuários e grupos no Medium e ver as últimas postagens de autores específicos, que muitas vezes você conheceu no Twitter.

2 - Trabalhe sua presença online

Outra atitude importante do desenvolvedor é trabalhar na sua presença online. Então, se você ainda não fez o seu site ou até mesmo um blog como esse, ta esperando o quê? E nem sempre é preciso escrever sobre tecnologia em si ou trazer tutoriais e tal, mesmo que o assunto principal não seja desenvolvimento, um blog e um site pessoal te ajudam a construir sua marca e, consequentemente, a te divulgar.

Além do mais, seu site e blog vão acrescentar mais ainda ao teu portfólio.

3 - Construa projetos pessoais e os divulgue

Outra dica muito importante, e essa realmente pode te ajudar a conseguir trabalho mais fácil, é você criar, desenvolver projetos, mesmo que os que sejam apresentados em cursos como os da Udemy, Udacity, Rocket Seat, Devpleno, ou até mesmo no YouTube (E tem centenas lá). Não assista ao curso, crie o projeto e deixe ele engavetado isso é um ERRO! Repito: isso é um ERRO tremendo e que muitas pessoas fazem.

Os projetos passados no cursos, mesmo os mais simples, devem estar, ao menos, no seu GitHub. Mas, de preferência utilize serviços como o Firebase Hosting, AWS ou Heroku para postar seus trampos online. Esses serviços que citei tem planos gratuitos onde você pode hospedar seus projetos todos lá sem limites. Isso é uma coisa que você pode adicionar numa página no seu site e colocar no seu currículo pois mesmo sendo projetos para estudo, eles te deram alguma experiência, entende? E, caso você precise obter alguma informação para outro projeto similar, é só dar uma olhada no código que você fez quando estava estudando.

E, só para finalizar, procure também por projetos sociais como ONGs que, muitas vezes, não têm sequer um site para divulgar seus trabalhos. Trabalho voluntário ajuda muito no currículo, acredite, as empresas olham muito isso.

4 - Contribua para projetos Open Source 

Caso você se sinta seguro para desenvolver mas esteja sem ideias para criar coisas novas, procure algum projeto que você goste e ajude-o com correção de bugs, documentação, testes, etc. Isso também te ajuda a manter atualizado e ocupado adquirindo mais experiência. E, quando as empresas forem verificar seu GitHub, elas vão ver lá que você não está parado e está sempre trabalhando.

5 - Participe da Comunidade (Eventos, Palestras, Fóruns)

Outra coisa que te ajuda a aumentar teu Networking e te abrir a mente é participar de eventos de desenvolvimento, Meetups, etc. E eles acontecem em praticamente todos os lugares e cidades do país. Com certeza tem algum essa semana na cidade em que você mora ou ao menos perto dela. Se cadastra no Meetup.com e procura que com certeza vai ter algum que te agrade e não deixe de ir!

Também se inscreva para palestrar nesses eventos que isso acrescenta muito à sua carreira e você pode acabar sendo visto por alguém de alguma empresa que pode lhe fazer uma proposta de emprego.

Bem, essas são as minhas dicas por hoje. Caso você tenha mais alguma ideia, não deixe de usar a área de comentários!

Valeu!