5 Maneiras de Aproveitar melhor os Tutoriais e Cursos



Quando iniciamos nosso processo de aprendizagem, é muito comum encontrarmos centenas de tutoriais com dicas, desde as mais simples até as mais avançadas, relacionadas com o que estamos começando a aprender, ou até sobre coisas que temos simplesmente curiosidade de saber como funcionam.
Bastam apenas algumas palavras na pesquisa do YouTube, como "Tutorial React", para recebermos uma enxurrada dos mais variados vídeos sobre o assunto e de dezenas de canais diferentes.

Nunca foi tão fácil aprender, correto? Mas...

E o que sobra depois de assistirmos a esses tutoriais? Nós ao menos realizamos o ensinado pelo tutor no vídeo? Sabemos como aproveitar aquelas dicas no dia a dia? Por que há tantos tutoriais diferentes sobre a mesma coisa (Todo list que o diga)?

É por isso que decidi escrever esse artigo e colocar aqui algumas dicas de como usar tutoriais para não só aumentar seu conhecimento (ou curiosidade) sobre um determinado assunto, mas também construir um portfólio sólido e melhorar bastante como profissional na sua área.

Me baseei para esse texto no vídeo do canal Traversy Media "5 Tips To Maximize & Move Beyond Tutorials", mas usei minha experiência para ressaltar cada um dos pontos. ;)

Dica 1# Continue o Tutorial

Use o código desenvolvido no tutorial e adicione coisas novas, modifique-o e experimente com ele.

Essa primeira dica é muito importante pois muitas vezes começamos um tutorial e nem sequer finalizamos ele, às vezes até finalizamos mas apenas fazendo Ctrl-C e Ctrl-V e depois largamos ele de lado. E isso é muito ruim. Os tutoriais estão ali para nos ensinar algo e não somente para que copiemos o código sem nos questionar nada sobre o que está sendo passado ali.

Aqui vou adicionar uma experiência minha: um dos apps que tenho publicado na Play Store, o Kazagastão, foi a evolução de um tutorial que estava fazendo quando estava estudando React Native. Na época, estava criando um clone para o YouTube, e o tutorial era bem simples e objetivo, basicamente escolhíamos um canal para receber os vídeos e adicionávamos um visual parecido ao App oficial. Daí eu fiz mudanças visuais, adicionei os logos, adicionei novas abas com informações sobre o Canal do KZG, redes sociais, etc. E lancei o App. Ou seja, além de aprender algo novo, ainda adicionei bastante ao meu portfólio e contribui com um canal que admiro muito.

Então, em resumo, não se prenda ao resultado final, use o que construiu ao longo do tutorial e o evolua para algo novo.


Dica 2# Crie algo novo

Use os Princípios que você aprendeu no tutorial para construir um projeto do zero.
Utilize coisas que você aprendeu em vários tutoriais para criar coisas novas.

Essa segunda dica está totalmente relacionada à primeira, mas aqui é importante sabermos utilizar o conhecimento adquirido ao longo dos diversos tutoriais que vimos para construir algo mais avançado.

Um exemplo que me vem à cabeça agora é construir um site ou um App que consuma alguma Api. Então, dessa forma, você conseguiria treinar seu conhecimento em desenvolvimento de interfaces construindo algo com React ou Angular e montar um servidor simples que se comunique com um servidor NodeJS ou até mesmo o Json-Server, que é muito útil para aprendermos como uma aplicação completa funciona.

Saber ou ao menos conhecer diferentes tecnologias abre muitas portas para nós desenvolvedores pois podemos enxergar diversas maneiras de solucionar um determinado problema, e isso é algo que agrega muito ao nosso currículo.

Dica 3# Pesquisas e Mais pesquisas

Não se prenda somente aos tutoriais, vá atrás da documentação, vá nos fóruns, nas comunidades e visite outros projetos.

Uma coisa importantíssima para aproveitar muito bem os tutoriais e diversos cursos que fazemos ao longo da nossa vida, é conhecer a documentação daquela biblioteca, framework, banco de dados, etc.
É muito comum vermos pessoas que se limitam somente ao curso ou a um tutorial sem se aprofundar na documentação do projeto, sem ir aos fóruns ou ter a curiosidade de verificar o código fonte de Apps que utilizam a linguagem de programação que você está aprendendo.

Muitas vezes o tutor não explica algo direito e se você não correr atrás de entender  como uma determinada função, por exemplo, funciona isso vai prejudicar muito seu aprendizado.

E, acredite, a documentação muitas vezes pode salvar sua vida e lhe ajudar a resolver um problema que você pode estar perdendo horas e horas quando a resposta estava logo ali na sua frente.

E, caso não consiga essa resposta na documentação, sempre teremos fóruns como o do StackOverflow para conseguir resolver uma bronca que apareceu para a gente mas que alguém já encontrou solução para ela em outro momento. É bem provável que apenas 10% dos problemas que você vai ter durante sua vida de programador vai ser algo totalmente inédito.

E, uma coisa importante é sabermos que nunca vamos saber de tudo, sentarmos em frente ao computador e resolvermos todos os problemas em segundos. Sempre, sempre, vamos precisar de ajuda e essas dicas vão ser muito valiosas mesmo quando for um programador "super mega power da NASA".

Dica 4# Utilize outras fontes de informação

Assista a conferências, vídeos no YouTube, Streams, leia artigos e ouça Podcast

Muitas vezes temos o péssimo hábito de ficarmos presos dentro de um mundo de cursos e mais cursos, tutoriais e mais tutoriais ou também apenas em livros ou blogs e isso é muito ruim. Obter conhecimento a partir de apenas uma ou duas fontes de informação é péssimo e limita não só o seu aprendizado de uma determinada coisa mas também limita seu crescimento profissional.

Outra coisa é que não podemos apenas querer ler e assistir coisas técnicas, é importante também ouvir sobre experiências de pessoas que estão na área e que falam da carreira, novidades, etc. E também não apenas sobre programação, mas é importante saber sobre as coisas que acontecem ao nosso redor também. Isso tudo nos faz um profissional e pessoa mais completa.

Aqui eu vou citar alguns canais do YouTube, Brasileiros e Gringos, que costumo assistir com frequência e também alguns Podcasts muito bons também:

Canais Brasileiros: DevPleno, RocketSeat e BrazilJS.
Canais Gringos: Academind, Traversy Media e FreeCodeCamp.
Podcasts: DevNaEstrada e Hipsters.tech.

Aí você não somente se aprofundará sobre as tecnologias em si mas também verá palestras, novidades e conhecimento de carreira de profissionais que fazem muita diferença no mercado.

Dica 5# Interaja com outros Desenvolvedores

Essa última dica pode ser fácil para você que já trabalha na área e em uma empresa de TI, Startup, etc. Mas para quem está aprendendo ou trabalha como freelancer, isso é um pouco mais complicado e pode custar muito a nós desenvolvedores.

Então as dicas que dou são:

  • Junte-se a um grupo no Slack/Discord ou até mesmo no Telegram ou WhatsApp. Há muitos grupos abertos que estão cheios de pessoas prontas a lhe ajudar. Só não esqueça de pedir com educação. ;)
  • Vá a Meetups. Mesmo em cidade pequenas, há grupos como o GDG que produzem eventos abertos à comunidade. Em Faculdades e IFs espalhados pelo país também muito encontros e muitos deles gratuitos também. Minha dica é se cadastrar no site Meetup.com e procurar pelos próximos encontros mais perto de você. Eles são muito importantes para se construir um Networking e poder conversar com programadores mais experientes também.
  • Faça perguntas nos StackOverflow ou qualquer outro fórum de desenvolvimento. Isso é importante que se torne um hábito, não só perguntar, mas procurar responder também. Lembre-se que sempre e em todo lugar há pessoas começando a desenvolver e que tem dúvidas que, para você, talvez já sejam bem básicas e é muito legal ajudar, é até viciante muitas vezes.
  • Contribua para projetos OpenSource. No Github há diversos projetos de código aberto para contribuir e isso agrega muito ao seu currículo. É um Ganha-Ganha, pois você ajuda o projeto, aprende coisas novas e isso vai ser um "chamariz" para seu currículo, atraindo a atenção de recrutadores do mundo todo. 
  • Faça Pair Programming (programação em tempo real com outros desenvolvedores). Isso é legal quando você tiver outros amigos que programem também e estejam dispostos a estudar em conjunto resolvendo desafios ou construir coisas novas. Isso ajuda a lidar com ansiedade e com síndrome do impostor também.

Então é isso pessoal, espero ter ajudado com essas dicas rápidas e que devem servir para abrir a mente quando o assunto é conhecimento. 

Valeu! :D



Closures em Javascript


Nesse novo artigo, tratarei das Closures, também conhecidas como funções de "Fechamento", as quais têm a possibilidade de armazenar valores internos mesmo após terem sido executadas. O que dá, aos desenvolvedores, possibilidade imensas ao criar lógica para seu código.

O Javascript, assim como outras linguagens de programação, utiliza o chamado "Escopo Léxico". E do que se trata isso de nome tão complicado e difícil de lembrar? Bom, em resumo, significa que variáveis e funções que estejam fora de um determinado escopo, ou seja, fora de uma função ou de um loop, por exemplo, podem ser acessadas por esses.

Na prática é algo como isso:

Ou seja, a função increment tem acesso à variável num, pois ela se encontra fora do escopo da função. Dessa forma, ela consegue incrementar o valor informado, no exemplo o número 20, ao valor 10 da variável num, retornando o número 30 como resultado da adição.

Já o contrário não é possível. Você não conseguiria acessar a variável inc ou qualquer outra que estivesse sido declarada dentro da função increment, fora desta.

Outro exemplo:
Ao utilizar Closures em Javascript, é possível guardar o resultado de variáveis dentro de funções que podem ser manipuladas em seguida e trazidas para um novo contexto, sem perder o estado delas.

É um pouco complicado de entender mesmo, mas vou tentar utilizar um exemplo prático para ficar mais fácil.

No exemplo abaixo, podemos ver como utilizar Closures para criar um contador simples, onde cada vez que a função é chamada, ele aumenta o valor da variável contador em 1.
Um outro exemplo mais simples ou trivial seria:
Uma analogia utilizada para entender de forma mais simples as Closures é a analogia da mochila.
Quando se cria uma função, a mesma traz consigo as variáveis em seu escopo dentro de uma  "mochila", então quando você executa essa função, ela vai lidar com essas variáveis e tudo o que fizer dentro dela, vai ser mantido e atualizado junto. 

Pois as Closures são nada mais do que uma coleção de variáveis dentro de um escopo no momento em que a função é criada.

Projetos e mais projetos - Remote Work e Kazagastão



Olá, pessoal!

Nas últimas semanas andei finalizando alguns projetos que comecei há alguns meses e que precisavam de uma atenção especial para poder sair do papel.
Por isso mesmo, decidi focar minha atenção nisso antes que perdesse o fôlego com outras coisas e acabasse as deixando de lado.

Nesse post vou falar sobre alguns de meus projetos pessoais e como aprendi, e continuo aprendendo, mesmo desenvolvendo, por vezes, apenas por diversão mesmo.

Remote Work - Trabalhe Remotamente 

Esse é o meu mais recente projeto e decidi começar citando ele justamente para demonstrar que, na maioria das vezes, uma boa ideia começa com algo muito simples ou uma necessidade básica.

Então, se trata de um App feito com React Native, um dos frameworks que citei aqui nesse post, e que serve, basicamente, para listar e salvar vagas para trabalho remoto.

Como a ideia surgiu? Bom, eu tenho vários sites que oferecem trabalho remoto nos meus favoritos, mas todas as vezes em que ia procurar por trabalho novo, precisava ir de site em site, abrindo diversas abas no meu navegador. Então eu pensei: "deve ter algum app que faça isso pra mim". Bom, na verdade não. Pesquisei por toda a Play Store e os únicos apps que ofereciam trabalho remoto eram apps de agências de emprego, ou senão eram apps que demonstravam vagas remotas e não remotas, como o próprio Linkedin.

A partir daí eu decidi fazer um app, primeiramente para meu uso pessoal, mas depois decidi lançar na Play Store (e em breve na App Store), que reunisse essas vagas num único lugar e que desse para salvá-las para verificar depois.

O que faz? Em resumo, é um projeto relativamente simples. São apenas 3 telas, por enquanto, onde reúno vagas dos sites RemoteOK e JSRemotely e também uma tela para os favoritos. Mas já estou trabalhando para adicionar novos sites.

O que aprendi? Bom, primeiramente melhorei alguns aspectos em relação ao React Native em si, principalmente em relação ao visual do app (vejam screenshots abaixo), à organização de código e o ciclo de vida dos componentes.

Quanto tempo até o lançamento? Aqui vem o mais engraçado, a primeira versão eu levei apenas 4 horas entre o conceito, desenvolvimento e lançamento na loja. A barra de busca era bem básica, não tinha botão de favoritos e nem botão de compartilhamento. Fora o visual que não tava nada agradável, embora isso seja questão de gosto, claro. Mas o legal de lançar logo é que me comprometi a melhorar o projeto diariamente, então, toda vez que tinha algum tempo livre, ia lá e melhorava algo. E assim foi evoluindo e ainda tem bastante coisa a ser feito. O app tem apenas 15 dias de lançado afinal.

Vejam vocês mesmos screenshots da primeira versão:

E agora os da nova versão:

Outra coisa legal é que, apesar de não ter feito muita divulgação fora das redes sociais e com a ajuda de alguns amigos meus, o app atingiu mais de 100 downloads em menos de uma semana e de pessoas de diversas partes do mundo. Parece pouco, mas é um app desenvolvido num fim de semana e por uma única pessoa durante seu tempo livre. Ao menos até agora pois o código fonte dele está disponível no Github para quem quiser contribuir, então fiquem à vontade para fuçar o código, mandar melhorias ou até mesmo fazer um fork e sua própria versão do app, blz?

Kazagastão - Jornalismo Rock n' Roll

Esse app é basicamente uma homenagem e uma forma que encontrei de ajudar um dos melhores canais do YouTube, na minha opinião. Quem gosta de boa música, principalmente de Rock, deve conhecer o Gastão, ex-VJ da MTV que apresentava o programa Fúria! e logo depois foi para a TV Cultura apresentar o Musicaos.

Hoje em dia o Gastão tem um canal no YouTube chamado Kazagastão, onde ele posta entrevistas, curiosidades e novidades do mundo do Rock n Roll Nacional e Internacional.

Como a ideia surgiu? Acompanho o trabalho do pessoal do Kazagastão há alguns anos já e vi que eles não tinham um App, a rede deles basicamente se resumo às redes sociais e ao YouTube. Então tive a ideia quando estava estudando como implementar a API do YouTube a um App em React-Native.

O que faz? Por enquanto, o App lista os últimos vídeos do canal e você pode assistir diretamente dele numa interface mais simples e objetiva. Também é possível acessar às redes sociais do canal em outra aba. Em breve adicionarei favoritos também ao app e notificações para novos conteúdos.

O que aprendi? Principalmente a lidar com a APIs de terceiros como a do YouTube.

Quanto tempo até o lançamento? Esse app acabou demorando mais pra sair  apesar de ter tido um desenvolvimento rápido. A questão aqui é que precisava da aprovação do Gastão, se ele curtia o visual e os recursos. Após a resposta dele é que fiz a postagem na Play Store.

Seguem as screenshots do app:

Além desses, também lancei o App chamado Bitcoin Trainee, mas esse merece um post só para ele pois foi um projeto muito grande que levou meses pra ficar pronto, então fica pra próxima.

Mas, em resumo, queria demonstrar e falar desses projetos pra ficar claro pro pessoal que está começando agora em uma nova área que, como falei em outro post, podemos conseguir experiência trabalhando em projeto próprios também, e que isso abre muito as portas para novas oportunidades de emprego mundo a fora. E, na hora em que for fazer uma entrevista, já tem coisa legal pra mostrar. 

Mesmo que seja algo simples, muito conceitos podem ser abstraídos a partir deles.

Valeu!

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!