{"id":1846,"date":"2017-12-27T16:22:51","date_gmt":"2017-12-27T19:22:51","guid":{"rendered":"http:\/\/www.milfont.org\/tech\/2017\/12\/27\/radar-front-end-2018\/"},"modified":"2017-12-27T16:22:51","modified_gmt":"2017-12-27T19:22:51","slug":"radar-front-end-2018","status":"publish","type":"post","link":"https:\/\/www.milfont.org\/tech\/2017\/12\/27\/radar-front-end-2018\/","title":{"rendered":"Radar Front-End 2018"},"content":{"rendered":"<p>Esse post \u00e9 uma compila\u00e7\u00e3o de experi\u00eancias de 2017 (e nos \u00faltimos anos pra falar a verdade) como um guia de recomenda\u00e7\u00f5es para o foco em 2018. Analisando as respostas do &#8220;<a href=\"https:\/\/stateofjs.com\/2017\/introduction\/\" target=\"_blank\" rel=\"noopener noreferrer\">State of JS<\/a>&#8221; para <a href=\"https:\/\/medium.freecodecamp.org\/i-just-asked-23-000-developers-what-they-think-of-javascript-heres-what-i-learned-9a06b61998fa\" target=\"_blank\" rel=\"noopener noreferrer\">validar<\/a> nosso Feeling com dados.<\/p>\n<h4>Linguagem<\/h4>\n<p>Javascript se tornou uma linguagem madura com um ecossistema rico de recursos auxiliares que a tornam presente no servidor, navegador e no seu celular.<\/p>\n<p><a href=\"https:\/\/medium.com\/@milfont\/usaremos-babel-pra-sempre-f827604762fb\" target=\"_blank\" rel=\"noopener noreferrer\">Babel<\/a> se tornou um padr\u00e3o de fato para termos sempre as \u00faltimas novidades do JS, Typescript retornando com sucesso vencendo a concorr\u00eancia contra o <a href=\"https:\/\/flow.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Flow<\/a> e <a href=\"https:\/\/webpack.js.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Webpack<\/a> como Module Bundler tem aos poucos tornado obsoleto os anteriores (Grunt, Browserify e Gulp).<\/p>\n<figure>\n<p><img decoding=\"async\" data-width=\"1382\" data-height=\"768\" src=\"https:\/\/cdn-images-1.medium.com\/max\/2560\/1*a0V5qYI8U8XLBJXakm5HCA.png\"><br \/>\n<\/figure>\n<p>Indiferente da disputa hist\u00f3rica entre tipos din\u00e2micos e tipos est\u00e1ticos, uma recomenda\u00e7\u00e3o \u00e9 sobre o <a href=\"https:\/\/medium.com\/@dtinth\/immutable-js-persistent-data-structures-and-structural-sharing-6d163fbd73d2\" target=\"_blank\" rel=\"noopener noreferrer\">pensamento imut\u00e1vel<\/a> com <a href=\"http:\/\/facebook.github.io\/immutable-js\/\" target=\"_blank\" rel=\"noopener noreferrer\">Immutablejs<\/a>.<\/p>\n<h4>Design Patterns<\/h4>\n<figure>\n<p><img decoding=\"async\" data-width=\"772\" data-height=\"478\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*mwP59Yo9SW_r2rybDTOvng.png\"><br \/>\n<\/figure>\n<p><a href=\"http:\/\/dddcommunity.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Domain Driven Design<\/a> e outras colet\u00e2neas consagradas de padr\u00f5es est\u00e3o entrando na estante de livros do desenvolvedor Front agora com a maturidade do ecossistema e os <a href=\"https:\/\/micro-frontends.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Micro-frontends<\/a> se tornando poss\u00edveis com algumas tecnologias como Import Async, seja utilizando o <a href=\"https:\/\/webpack.js.org\/api\/module-methods\/#import-\" target=\"_blank\" rel=\"noopener noreferrer\">Webpack<\/a> ou diretamente do <a href=\"https:\/\/www.npmjs.com\/package\/babel-plugin-syntax-dynamic-import\" target=\"_blank\" rel=\"noopener noreferrer\">Babel<\/a>.<\/p>\n<figure>\n<p><img decoding=\"async\" data-width=\"1000\" data-height=\"722\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1200\/1*eVhB84D4alBM_53R3IKmOg.png\"><br \/>\n<\/figure>\n<p>Sempre existiu uma grande necessidade do mercado em conservar c\u00f3digo legado em vez de sempre reescrever tudo e agora a tecnologia nos permite uma evolu\u00e7\u00e3o mais suave de como fazer isso.<\/p>\n<p>Eu e a <a href=\"https:\/\/medium.com\/u\/22305afc282d\" target=\"_blank\" rel=\"noopener noreferrer\">Kete Martins Rufino<\/a> apresentamos &#8220;<a href=\"https:\/\/www.infoq.com\/br\/presentations\/transformando-um-front-end-legado-em-uma-react-spa\" target=\"_blank\" rel=\"noopener noreferrer\">Transformando um front-end legado em uma React SPA<\/a>&#8221; no <a href=\"http:\/\/reactconfbr.com.br\/\" target=\"_blank\" rel=\"noopener noreferrer\">ReactConfBR<\/a> em outubro que tra\u00e7a algumas dicas e abordagens de como realizar essa evolu\u00e7\u00e3o.<\/p>\n<h4>Frameworks<\/h4>\n<p>Falando em <a href=\"https:\/\/reactjs.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">React<\/a>, junto com <a href=\"https:\/\/vuejs.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Vue<\/a> s\u00e3o as abordagens mais indicadas para focar em 2018 devido a sua recep\u00e7\u00e3o e crescimento aliado a esse pensamento de constru\u00e7\u00e3o em blocos na evolu\u00e7\u00e3o de legados em vez de um Framework de prop\u00f3sito geral que tenta resolver tudo. \u00d3bvio que a escolha de um ecossistema envolve diversos aspectos, inclusive opini\u00e3o pessoal.<\/p>\n<figure>\n<p><img decoding=\"async\" data-width=\"942\" data-height=\"610\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*VYjVzVx_MpT8tct4BJkzbg.png\"><br \/>\n<\/figure>\n<p>Ou\u00e7a o <a href=\"https:\/\/hipsters.tech\/react-o-framework-onipresente-hipsters-66\/\" target=\"_blank\" rel=\"noopener noreferrer\">Hispters.tech sobre React<\/a> que tentamos explicar um mundo de coisas sem c\u00f3digo.<\/p>\n<p>Algumas tecnologias como <a href=\"https:\/\/reasonml.github.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Reason<\/a>, <a href=\"http:\/\/elm-lang.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Elm<\/a> e <a href=\"https:\/\/clojurescript.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Clojurescript<\/a> s\u00e3o interessantes, mas a realidade \u00e9 que s\u00e3o relevantes apenas se voc\u00ea tem interesse especificamente em algumas poucas empresas que as utilizam.<\/p>\n<h4>Redux e\u00a0Vuex<\/h4>\n<p>Se voc\u00ea abrir a lista de empresas que usam <a href=\"https:\/\/github.com\/react-brasil\/empresas-que-usam-react-no-brasil\" target=\"_blank\" rel=\"noopener noreferrer\">React<\/a> ou <a href=\"https:\/\/github.com\/vuejs-br\/empresas-que-usam-vue-no-brasil\" target=\"_blank\" rel=\"noopener noreferrer\">Vue<\/a> no BR e fizer um search vai perceber que praticamente 99,99% delas usam Redux e Vuex respectivamentes, que s\u00e3o um Centralized State Management.<\/p>\n<figure>\n<p><img decoding=\"async\" data-width=\"701\" data-height=\"551\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*vmhxmp5jRp-4Rtfh3skrgQ.png\"><br \/>\n<\/figure>\n<p>Em outras palavras isso significa isolar o c\u00f3digo que transforma e manipula seus dados para evitar acoplar nas suas Views tornando a manuten\u00e7\u00e3o e evolu\u00e7\u00e3o bem mais robusta pela organiza\u00e7\u00e3o dessa abordagem.<\/p>\n<p>Em composi\u00e7\u00e3o a esse Mindset de coes\u00e3o e baixo acoplamento tamb\u00e9m \u00e9 recomendado um Middleware\/Plugin que manipula chamadas ass\u00edncronas chamado de Saga, seja <a href=\"https:\/\/redux-saga.js.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Redux<\/a> ou <a href=\"https:\/\/www.npmjs.com\/package\/vuex-redux-saga\" target=\"_blank\" rel=\"noopener noreferrer\">Vuex<\/a>, para evitar c\u00f3digo dentro das Views.<\/p>\n<p>Um Centralized State Management ainda facilita o <a href=\"https:\/\/medium.com\/rivendel-tecnologia\/monitoramento-e-manipula%C3%A7%C3%A3o-de-erros-no-pwa-com-react-e-redux-3c9b41d1464b\" target=\"_blank\" rel=\"noopener noreferrer\">Track e monitoramento de errors<\/a> para PWA.<\/p>\n<figure class=\"wp-caption\">\n<p><img decoding=\"async\" data-width=\"1409\" data-height=\"802\" src=\"https:\/\/cdn-images-1.medium.com\/max\/2560\/1*I2-FrsFa1QHgcgPwxfeeGA.png\"><figcaption class=\"wp-caption-text\"><a href=\"https:\/\/m.uber.com\/looking\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/m.uber.com\/looking<\/a><\/figcaption><\/figure>\n<h4>Progressive Web\u00a0App<\/h4>\n<p>PWA n\u00e3o \u00e9 uma tecnologia, \u00e9 uma abordagem para construir Mobile Apps com os padr\u00f5es WEB. No artigo &#8220;<a href=\"https:\/\/medium.com\/@milfont\/progressive-web-apps-a-palavra-chave-%C3%A9-progressive-n%C3%A3o-app-ou-web-dbfa25b1ebd2\" target=\"_blank\" rel=\"noopener noreferrer\">Progressive Web Apps: a palavra-chave \u00e9 Progressive, n\u00e3o App ou Web<\/a>&#8221; tem links, audio, video e slides sobre o tema.<\/p>\n<p>Uma s\u00e9rie de Apps j\u00e1 tem sua vers\u00e3o PWA: Twitter, Telegram, Instagram, Uber, Pinterest,\u2026 at\u00e9 o <a href=\"https:\/\/medium.com\/@addyosmani\/a-tinder-progressive-web-app-performance-case-study-78919d98ece0\" target=\"_blank\" rel=\"noopener noreferrer\">Tinder<\/a>.<\/p>\n<h4>Middlewares<\/h4>\n<div class=\"embed-twitter\">\n<blockquote class=\"twitter-tweet\" data-width=\"450\" data-dnt=\"true\">\n<p lang=\"pt\" dir=\"ltr\">Qual conceito\/tecnologia de Front voc\u00ea tem prefer\u00eancia em focar no ano da gra\u00e7a de nosso senhor de 2018?<\/p>\n<p>&mdash; Christiano Milfont (@cmilfont) <a href=\"https:\/\/twitter.com\/cmilfont\/status\/940589662619537409?ref_src=twsrc%5Etfw\">December 12, 2017<\/a><\/p>\n<\/blockquote>\n<p><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/div>\n<p>Com o lan\u00e7amento do <a href=\"https:\/\/aws.amazon.com\/pt\/appsync\/\" target=\"_blank\" rel=\"noopener noreferrer\">AWS AppSync<\/a> agora no \u00faltimo re:Invent o <a href=\"http:\/\/graphql.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">GraphQL<\/a> demonstrou que chamou a aten\u00e7\u00e3o e veio se consolidar como o Backend para o Frontend daqui pra frente.<\/p>\n<p>\u00c9 poss\u00edvel que <a href=\"https:\/\/firebase.google.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Firebase<\/a>, serverless campe\u00e3o da atualidade, venha a oferecer GraphQL em breve.<\/p>\n<figure>\n<p><img decoding=\"async\" data-width=\"849\" data-height=\"567\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*efQB4bKjHT7QV-ZLyWRo3g.png\"><br \/>\n<\/figure>\n<p>Indiferente se voc\u00ea deseja continuar especialista em Front ou ganhar proefici\u00eancia no Backend pra se tornar um Full Stack, n\u00e3o vai poder ignorar Elasticsearch.<\/p>\n<p>Esse motor de buscas \u00e9 mais que uma DSL, hoje um mecanismo importante no Mindset imut\u00e1vel de constru\u00e7\u00e3o dos seus Data Transfer Objects junto de Centralized State Management.<\/p>\n<h4>Automatizado<\/h4>\n<figure class=\"wp-caption\">\n<p><img decoding=\"async\" data-width=\"1387\" data-height=\"428\" src=\"https:\/\/cdn-images-1.medium.com\/max\/2560\/1*D7BxpNVK_9vlb8eejYXUMw.png\"><figcaption class=\"wp-caption-text\">Integra\u00e7\u00e3o Cont\u00ednua Ass\u00edncrona com\u00a0Jenkins<\/figcaption><\/figure>\n<p>Por fim e n\u00e3o menos importante, um Front-end moderno n\u00e3o pode deixar de ser totalmente automatizado, desde o boilerplate gerador de build como o <a href=\"https:\/\/github.com\/facebookincubator\/create-react-app\" target=\"_blank\" rel=\"noopener noreferrer\">create-react-app<\/a>, passando pelo Pipeline de CI com Jenkins (ou o seu preferido) a uma publica\u00e7\u00e3o em CDN como <a href=\"https:\/\/aws.amazon.com\/pt\/cloudfront\/\" target=\"_blank\" rel=\"noopener noreferrer\">AWS Cloudfront<\/a>.<\/p>\n<p>Espero que esse guia de recomenda\u00e7\u00f5es seja \u00fatil para sua evolu\u00e7\u00e3o, deixe suas d\u00favidas nos coment\u00e1rios para complementarmos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esse post \u00e9 uma compila\u00e7\u00e3o de experi\u00eancias de 2017 (e nos \u00faltimos anos pra falar a verdade) como um guia de recomenda\u00e7\u00f5es para o foco em 2018. Analisando as respostas do &#8220;State of JS&#8221; para validar nosso Feeling com dados. Linguagem Javascript se tornou uma linguagem madura com um ecossistema rico de recursos auxiliares que [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/1846"}],"collection":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/comments?post=1846"}],"version-history":[{"count":0,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/1846\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/media?parent=1846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/categories?post=1846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/tags?post=1846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}