{"id":1861,"date":"2016-11-01T07:56:34","date_gmt":"2016-11-01T10:56:34","guid":{"rendered":"http:\/\/www.milfont.org\/tech\/2016\/11\/01\/os-musculos-do-javascript\/"},"modified":"2016-11-01T07:56:34","modified_gmt":"2016-11-01T10:56:34","slug":"os-musculos-do-javascript","status":"publish","type":"post","link":"https:\/\/www.milfont.org\/tech\/2016\/11\/01\/os-musculos-do-javascript\/","title":{"rendered":"Os m\u00fasculos do Javascript"},"content":{"rendered":"<p>Existem v\u00e1rias reclama\u00e7\u00f5es sobre a <a href=\"https:\/\/hackernoon.com\/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f#.pydfcdd5v\" target=\"_blank\" rel=\"noopener noreferrer\">Fadiga do Javascript<\/a>, que seria um excesso de bibliotecas pra aprender.<\/p>\n<p>O choro \u00e9 livre principalmente para quem detesta estudar e aprender coisas novas, mas Javascript ainda est\u00e1 longe de atingir o grau de maturidade de outras plataformas e necessita de muito mais.<\/p>\n<p>Resolvi postar sobre isso depois de ouvir caras que respeito muito falando sobre algo que discordo vorazmente no <a href=\"http:\/\/hipsters.tech\/single-page-applications-hipsters-16\/\" target=\"_blank\" rel=\"noopener noreferrer\">Hipsters.tech #16<\/a> sobre essa linha de racioc\u00ednio de excesso de bibliotecas e sobre <a href=\"https:\/\/en.wikipedia.org\/wiki\/Single-page_application\" target=\"_blank\" rel=\"noopener noreferrer\">SPA<\/a> no geral, &#8220;ouva&#8221; l\u00e1 antes e volte aqui.<\/p>\n<h3>MVC n\u00e3o \u00e9 o que voce\u00a0pensa<\/h3>\n<p>Algu\u00e9m citou e isso tem sido<a href=\"https:\/\/medium.freecodecamp.com\/is-mvc-dead-for-the-frontend-35b4d1fe39ec#.rkho1kd03\" target=\"_blank\" rel=\"noopener noreferrer\"> recorrente que o MVC acabou<\/a> ou que o React \u00e9 outra abordagem.<\/p>\n<p>Vamos ao b\u00e1sico, o padr\u00e3o de 3 camadas se confunde muitas vezes com o MVC no conhecimento de muitos desenvolvedores, mas as camadas s\u00e3o: <a href=\"https:\/\/en.wikipedia.org\/wiki\/Multitier_architecture\" target=\"_blank\" rel=\"noopener noreferrer\">Apresenta\u00e7\u00e3o, neg\u00f3cio e persist\u00eancia<\/a>.<\/p>\n<p>Na camada de apresenta\u00e7\u00e3o voc\u00ea tem o padr\u00e3o MVC que tem a ver com responsabilidades, n\u00e3o artefatos. JSF era MVC, n\u00e3o \u00e9 porque \u00e9 Component-based que n\u00e3o faz MVC.<\/p>\n<figure>\n<p><img decoding=\"async\" data-width=\"511\" data-height=\"397\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*FOUwt3LtOAOMnBU5ZXmZFw.png\"><br \/>\n<\/figure>\n<p>Esse padr\u00e3o que foi criado por <a href=\"https:\/\/en.wikipedia.org\/wiki\/Trygve_Reenskaug\" target=\"_blank\" rel=\"noopener noreferrer\">Trygve Reenskaug<\/a> em 1979, sim, em <a href=\"http:\/\/heim.ifi.uio.no\/~trygver\/themes\/mvc\/mvc-index.html\" target=\"_blank\" rel=\"noopener noreferrer\">mil-novecentos-e-setenta-e-nove<\/a>, j\u00e1 demonstrava que fazer MVC n\u00e3o \u00e9 criar classes\/objetos pra cada uma das responsabilidades, pode inclusive ter tudo em um componente s\u00f3 ou n\u00e3o.<\/p>\n<p>Talvez o que alguns garotos queiram dizer se refere ao Model 2 popularizado pela finada Sun (seus esp\u00f3lios s\u00e3o da Oracle) no final do mil\u00eanio passado, mas nem isso \u00e9 o fim porque no lado <strong><em>Frontend<\/em><\/strong> nunca foi realmente igual.<\/p>\n<h3>2M de Javascript s\u00f3 incomoda quem faz blog ou site de\u00a0not\u00edcias<\/h3>\n<p>Existem necessidades que s\u00e3o bem distintas, um blog ou site de not\u00edcias de um jornal s\u00e3o bem claros. Voc\u00ea pode at\u00e9 usar um React no server-side pra renderizar aquele conte\u00fado, mas no lado do cliente, no navegador dele h\u00e1 bem pouca utilidade de um SPA. Talvez na \u00e1rea administrativa, por isso o pr\u00f3prio <a href=\"https:\/\/developer.wordpress.com\/calypso\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress tem dado uma guinada ao mundo do SPA no seu wp-admin<\/a>.<\/p>\n<p>Para webapps como E-commerce o campo j\u00e1 fica meio nublado, parte \u00e9 apresenta\u00e7\u00e3o de conte\u00fado como um site de not\u00edcias, mas parte \u00e9 de gerenciamento das vendas, \u00e9 um h\u00edbrido entre o admin e a landscape. Esse tipo de segmento \u00e9 mais dif\u00edcil de avalia\u00e7\u00e3o.<\/p>\n<p>Mas o mund\u00e3o Enterprise, o da gravata com planilha, o <a href=\"https:\/\/coporacao.wordpress.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">coporativo<\/a> raiz, IDE toquinho de lado, form-grid-report arte, esse \u00e9 t\u00e3o claro pra definir quanto not\u00edcias. Aqui n\u00e3o tem rapap\u00e9 de otimiza\u00e7\u00e3o de kb pra abrir a landscape mais r\u00e1pida e n\u00e3o perder 1% de vendas.<\/p>\n<p>Essa \u00e1rea \u00e9 justamente tornar a vida do desenvolvedor mais f\u00e1cil pra n\u00e3o criar features que devem durar meses, sen\u00e3o anos, intoc\u00e1veis e cheias de bugs. Se voce vive a realidade de ag\u00eancias, aqui \u00e9 a outra extremidade.<\/p>\n<h3>Faltam bibliotecas<\/h3>\n<p>Hoje temos tradutores de especifica\u00e7\u00f5es novas que ainda n\u00e3o foram implementadas nos navegadores, al\u00e9m de traduzir extens\u00f5es bacanas como <a href=\"https:\/\/medium.com\/google-developers\/exploring-es7-decorators-76ecb65fb841#.70ua3w1t1\" target=\"_blank\" rel=\"noopener noreferrer\">decorators<\/a>. Grite a plenos pulm\u00f5es um <strong><em>G&#8217;d Save the <\/em><\/strong><a href=\"https:\/\/babeljs.io\/\" target=\"_blank\" rel=\"noopener noreferrer\"><strong><em>Babel.js<\/em><\/strong><\/a>.<\/p>\n<p>Uma plataforma no terminal do seu computador pra rodar tudo isso, al\u00f4 <a href=\"https:\/\/nodejs.org\/en\/\" target=\"_blank\" rel=\"noopener noreferrer\">Nodejs<\/a>. Um gerenciador dessa plataforma, seja bem vindo <a href=\"https:\/\/github.com\/creationix\/nvm\" target=\"_blank\" rel=\"noopener noreferrer\">nvm<\/a>.<\/p>\n<p>Um gerenciador das dependencias acoplado, o <a href=\"https:\/\/www.npmjs.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">npm<\/a> que mata nossa inveja do Maven, sim, pra ver como a vida era dura, t\u00ednhamos inveja do Maven. N\u00e3o satisfeito com a performance, o Facebook at\u00e9 criou um melhor em cima, o <a href=\"https:\/\/yarnpkg.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">yarn<\/a>, mas que na altura desse post ainda tem alguns probleminhas.<\/p>\n<p>Voc\u00ea tem um validador moderno, <a href=\"http:\/\/eslint.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">eslint<\/a>, que o <a href=\"https:\/\/github.com\/airbnb\/javascript\" target=\"_blank\" rel=\"noopener noreferrer\">Airbnb<\/a> preparou excelentes configura\u00e7\u00f5es.<\/p>\n<p>V\u00e1rios pr\u00e9-processadores pra tornar o lixo que \u00e9 o CSS em algo produtivo. <a href=\"https:\/\/github.com\/postcss\/postcss\" target=\"_blank\" rel=\"noopener noreferrer\">Postcss<\/a> funciona bem com <a href=\"http:\/\/stylus-lang.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Stylus<\/a> se voc\u00ea for conservador e detestar ser Early Adopter. Se voc\u00ea quiser explorar mais pode entrar no <a href=\"https:\/\/github.com\/css-modules\/css-modules\" target=\"_blank\" rel=\"noopener noreferrer\">mundinho do inline<\/a> entrando cada <a href=\"https:\/\/formidable.com\/open-source\/radium\/\" target=\"_blank\" rel=\"noopener noreferrer\">vez mais a fundo<\/a>.<\/p>\n<p>Usar especifica\u00e7\u00f5es do <a href=\"https:\/\/material.google.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Material Design<\/a> do Google j\u00e1 prontas em alguma implementa\u00e7\u00e3o como o <a href=\"http:\/\/www.material-ui.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Material-UI<\/a>.<\/p>\n<p>Ecossistema completo com <a href=\"https:\/\/facebook.github.io\/react\/\" target=\"_blank\" rel=\"noopener noreferrer\">React<\/a>, <a href=\"https:\/\/github.com\/ReactTraining\/react-router\" target=\"_blank\" rel=\"noopener noreferrer\">react-router<\/a>, <a href=\"http:\/\/redux.js.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">redux<\/a> (estado dos dados), <a href=\"https:\/\/github.com\/yelouafi\/redux-saga\" target=\"_blank\" rel=\"noopener noreferrer\">redux-saga<\/a>, etc.<\/p>\n<p>Ecossistema de testes com <a href=\"http:\/\/airbnb.io\/enzyme\/\" target=\"_blank\" rel=\"noopener noreferrer\">Enzyme<\/a>, <a href=\"http:\/\/sinonjs.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">sinon<\/a>, <a href=\"http:\/\/chaijs.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">chai<\/a>, <a href=\"https:\/\/mochajs.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">mocha<\/a>, <a href=\"https:\/\/github.com\/istanbuljs\/nyc\" target=\"_blank\" rel=\"noopener noreferrer\">nyc<\/a> e <a href=\"https:\/\/istanbul.js.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">istanbul<\/a> que formam o ambiente mais produtivo que j\u00e1 trabalhei pra Unit tests.<\/p>\n<p>Nem falei sobre o <a href=\"https:\/\/webpack.github.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Webpack<\/a>, grunt, gulp\u2026<\/p>\n<p>Poder\u00edamos passar o dia falando sobre libs aqui que tornam nossa vida mais f\u00e1cil. Se n\u00e3o conhece nada disso e quer come\u00e7ar, s\u00f3 precisa instalar o <a href=\"https:\/\/github.com\/facebookincubator\/create-react-app\" target=\"_blank\" rel=\"noopener noreferrer\">create-react-app<\/a> que tem tudo embutido magicamente pra voc\u00ea enquanto se familiariza, se \u00e9 que um dia pode precisar abrir o cap\u00f4 e olhar o motor.<\/p>\n<h3>O que\u00a0falta?<\/h3>\n<p>Ainda temos um longo caminho, apesar de specs como <a href=\"http:\/\/caniuse.com\/#feat=serviceworkers\" target=\"_blank\" rel=\"noopener noreferrer\">Service Workers estarem fora do radar do Edge<\/a>, temos um grande ganho nos \u00faltimos anos pra trabalhar offline, <a href=\"http:\/\/caniuse.com\/#feat=webworkers\" target=\"_blank\" rel=\"noopener noreferrer\">thread no processamento<\/a> sem bloquear a p\u00e1gina e <a href=\"http:\/\/caniuse.com\/#search=history\" target=\"_blank\" rel=\"noopener noreferrer\">navega\u00e7\u00e3o sem precisar usar o cerquilha<\/a> (#).<\/p>\n<p>Agora que chegamos no n\u00edvel de produtividade que uma comunidade Java, por exemplo, chegou em 2006. Agora vamos resolver problema s\u00e9rios de como particionar Apps, gerenciamento de depend\u00eancias em microservices no Frontend que ningu\u00e9m ainda consegue ter uma id\u00e9ia que seja padronizada.<\/p>\n<p>Web Socket \u00e9 algo invi\u00e1vel tamb\u00e9m num mundo com Mindset stateless e async, long poling \u00e9 ainda a t\u00e9cnica mais usada infelizmente.<\/p>\n<p><a href=\"https:\/\/facebook.github.io\/react\/docs\/jsx-in-depth.html\" target=\"_blank\" rel=\"noopener noreferrer\">Mas falei sobre JSX<\/a>?<\/p>\n<p>Espero que a pr\u00f3xima spec de Web Components reconhe\u00e7a que o React \u00e9 superior a todas as outras abordagens e fa\u00e7a como o pessoal do JCP l\u00e1 no Java fez, assuma que Hibernate + Spring eram superiores e refa\u00e7am as specs copiando o que eles ditaram mesmo que mudando os nomes dos m\u00e9todos e classes s\u00f3 pra n\u00e3o dar o bra\u00e7o a torcer.<\/p>\n<p>Antes de reclamar, principalmente se entrou no \u00f4nibus agora e j\u00e1 quer sentar na janela, estude, s\u00f3 isso.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Existem v\u00e1rias reclama\u00e7\u00f5es sobre a Fadiga do Javascript, que seria um excesso de bibliotecas pra aprender. O choro \u00e9 livre principalmente para quem detesta estudar e aprender coisas novas, mas Javascript ainda est\u00e1 longe de atingir o grau de maturidade de outras plataformas e necessita de muito mais. Resolvi postar sobre isso depois de ouvir [&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\/1861"}],"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=1861"}],"version-history":[{"count":0,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/1861\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/media?parent=1861"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/categories?post=1861"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/tags?post=1861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}