Git Product home page Git Product logo

blog-posts's Introduction

Hey, sou Letícia 👋

Ferramentas e Tecnologias que estou desenvolvendo

blog-posts's People

Watchers

 avatar

blog-posts's Issues

Node.js e a revolução do desenvolvimento web

*Texto de Beatriz Clasen
redatora de conteúdo na Rocketseat.

Toda grande história no universo da programação começa com um problema. A nossa profissão é conhecida pela busca constante de soluções e formas de facilitar tarefas do cotidiano. Quando o assunto é o nosso trabalho, a situação não é diferente.

Aqui neste artigo nós vamos te contar uma breve história sobre a origem do Node.js e como essa ferramenta serviu como uma revolução no desenvolvimento web.

Tudo começa com Ryan Dahl, um programador que se viu observando as limitações dos servidores web na época: o manejo de solicitações HTTP pelo Apache HTTP Server causava uma baixa eficiência ao lidar com muitas conexões simultâneas.

Enquanto o JavaScript já estava bem estabelecido no front-end, essa não era a realidade para o back-end. Mas isso estava prestes a mudar.

Na segunda metade dos anos 2000, era comum que os servidores mais populares, como o Apache, tratassem as solicitações de entrada de forma síncrona, bloqueando a execução do servidor até que cada solicitação fosse concluída. Isso resultava em ineficiência quando muitas conexões eram feitas simultaneamente.

Inspirado pelo conceito de eventos e influenciado pelo estilo de programação baseado em eventos, padrão do JavaScript, Dahl decide criar um ambiente de execução JavaScript que operava de forma assíncrona e não bloqueante. Ele usou o motor de JavaScript V8, do Google Chrome, por sua velocidade e por ter o código-fonte disponível.

Assim nasce o Node.js, um ambiente de tempo de execução JavaScript, de código aberto, que permite a criação de servidores web eficientes.

Pela primeira o Node.js é apresentado ao mundo. Isso acontece em 2009, na conferência de desenvolvedores JSConf, que é realizado ao redor do mundo até hoje, quando Dahl demonstrou um "Hello, World" do servidor HTTP:

const http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello, World\\n');
}).listen(1337, '127.0.0.1');

console.log('Server running at <http://127.0.0.1:1337/>');

A simplicidade do código, somado à eficiência e escalabilidade oferecida pela arquitetura baseada em eventos do Node.js gerou um grande entusiasmo na comunidade dev.

As primeiras versões do Node.js já estavam equipadas com recursos como a API Stream, que permitia o processamento eficiente de grandes volumes de dados, e a API Buffer, para manipulação de dados binários, uma necessidade para muitos servidores.

O npm (Node Package Manager), lançado no ano seguinte, em 2010, trouxe mais um diferencial ao permitir a reutilização código, incentivando a colaboração de outros devs e reduzindo o tempo necessário para o desenvolvimento de novos projetos. Mais tarde, o npm se tornaria o gerenciador de pacotes padrão que conhecemos hoje.

Tudo isso permitiu a fácil reutilização do código entre projetos, impulsionando a produtividade e a colaboração entre eles.

Não demorou muito para que o Node.js crescesse em popularidade. Empresas como LinkedIn, Groupon, PayPal e Netflix começaram a adotar o uso da tecnologia para construir partes significativas de sua infraestrutura. Com esses gigantes embarcando no uso do Node.js, logo veio a popularização dele em outros projetos.

Ao longo dos seus quase 15 anos de existência, o Node.js nunca parou de evoluir. Novas versões são lançadas regularmente para melhorar a eficiência e apresentar novos recursos. Podemos citar algumas, como:

  • Versão 0.10.0 (2013): Streams, uma nova maneira de lidar com I/O (Entrada/Saída) em Node.js;
  • Versão 4.0.0 (2015): a primeira versão estável do Node.js após a reconciliação do projeto com o io.js e a introdução do suporte para ECMAScript 6;
  • Versão 6.0.0 (2016): melhorias de desempenho significativas, atualizações de segurança e um melhor suporte para promessas;
  • Versão 8.0.0 (2017): finalmente chega o Async/Await, facilitando a escrita de código assíncrono em Node.js;
  • Versão 10.0.0 (2018): nessa versão conhecemos uma nova API de sistema de arquivos experimental;
  • Versão 12.0.0 (2019): introduz suporte privado de classe privada ECMAScript, melhora a velocidade de inicialização e adiciona recursos para diagnóstico de aplicações;
  • Versão 14.0.0 (2020): melhorias na performance do V8, suporte experimental para o ECMAScript Modules e melhorias no diagnóstico.

Além disso, em 2015, o Node.js foi incorporado ao JS Foundation, garantindo o futuro da plataforma como um projeto de código aberto com a contribuição da comunidade global de desenvolvedores.

Atualmente, Node.js é uma ferramenta vital para desenvolvedores web. Não só pela sua capacidade de executar JavaScript no servidor, juntamente com seu modelo de I/O não bloqueante, que o torna ideal para a criação de aplicações web de alto desempenho e altamente escaláveis, mas também pelas possibilidades de integração com inteligências artificiais, característica indispensável no cenário atual.

Tanto na forma de bibliotecas de machine learning como através de APIs de IA externas, as oportunidades de experimentar o uso de IAs em Node.js permitem a criação de aplicações web sofisticadas e inteligentes.

Em resumo, o Node.js mudou a forma como construímos a web. Graças à sua eficiência, escalabilidade e versatilidade, o Node.js se estabeleceu como uma escolha confiável para desenvolvedores web em todo o mundo.

Com ele, Ryan Dahl não só introduziu uma nova forma de construir servidores web, mas também elevou o JavaScript a um novo nível, permitindo sua execução fora do navegador. Isso abriu novos horizontes para o JavaScript, transformando-o em uma das linguagens de programação mais populares e importantes do mundo

Se você quer dar os seus primeiros passos ou começar a sua especialização em JavaScript e Node.js, te convidamos a conhecer o Rocketseat ONE, uma nova era de aprendizado contínuo, totalmente alinhado com as expectativas do mercado, preparando o caminho do zero à especialização fullstack em um único lugar, numa só assinatura. Conheça mais sobre o Rocketseat ONE clicando aqui.

JavaScript data types and data structures

Programming languages all have built-in data structures, but these often differ from one language to another. This article attempts to list the built-in data structures available in JavaScript and what properties they have. These can be used to build other data structures. Wherever possible, comparisons with other languages are drawn.

Dynamic typing

JavaScript is a loosely typed and dynamic language. Variables in JavaScript are not directly associated with any particular value type, and any variable can be assigned (and re-assigned) values of all types:

let foo = 42;   // foo is now a number
foo = 'bar';    // foo is now a string
foo = true;     // foo is now a boolean

Boas práticas para devs em início de carreira

As principais lições e dicas compiladas para quem está começando na programação ou migrando para a área.

*Texto por Camila Coelho

Hoje devs são peças fundamentais de todo negócio, estão nas startups e nas pequenas e médias empresas que buscam soluções tecnológicas para seus produtos e serviços.

Em uma busca rápida, é possível encontrar centenas de notícias e pesquisas que apontam a falta de mão de obra qualificada na área. A conclusão das matérias é a mesma: sobram vagas no Brasil e chovem oportunidades internacionais.

Quem se destaca pode nadar de braçada nesse oceano de possibilidades. Nesse artigo estão reunidos todos os ensinamentos para você iniciar sua carreira em programação com o pé direito.

Defina sua jornada

Antes de tudo, você precisa saber para onde está indo. Iniciantes na programação costumam se perder em meio a tanta informação. Você precisa ter objetivos bem definidos para traçar a melhor rota de evolução na carreira.

Certifique-se de ter uma base sólida nos fundamentos da programação. Só depois de conhecer o básico, você saberá para onde seguir. Esse curso gratuito ensina programação desde o marco zero, para quem nunca teve contato com tecnologia e ajuda a consolidar conhecimentos padrões.

Escolha uma linguagem

Conhecer uma única tecnologia profundamente vai te ajudar mais que saber várias superficialmente. Isso não significa que você nunca poderá aprender outras no futuro, apenas que vai direcionar seu foco para um objetivo de aprendizagem.

Dominando uma linguagem você se aproxima de empresas que costumam buscar por pessoas que cumpram papéis específicos em um time de tecnologia.
Acompanhando a evolução das ferramentas que usa, você não deixa que suas aplicações fiquem ultrapassadas e continua relevante para o mercado.

Organize seus estudos

Tenha em mente que a tecnologia está em constante evolução, devs precisam continuar estudando mesmo depois de ingressar no mercado. Ter o hábito de se dedicar aos estudos irá fazer toda a diferença no seu crescimento de carreira.

Crie um cronograma de estudos

Defina um plano de estudos que faça parte da sua rotina da melhor forma possível. Dicas para construir seu cronograma de estudos:

  • Entenda sua rotina. Faça um planejamento realista. Liste suas tarefas, refeições, obrigações e reserve um tempo de foco profundo para se dedicar ao código.
  • Organize seu cronograma conforme pequenos objetivos. Separe seu tempo para absorver conteúdos, praticar, testar e revisar o que aprendeu nos últimos dias.
  • Use ferramentas de organização. Plataformas como o Notion são ótimas opções para planificar sua agenda e para documentar seus materiais de estudo, links úteis e ideias de projetos.
  • Aplique a técnica Pomodoro. Esse método te ajuda a aproveitar tempos de estudo sem nenhuma interrupção, intercalando com momentos de descanso. Cronometre 25 minutos de estudos, quando o tempo terminar, faça uma pausa de 5 minutos e retome os estudos por mais 25 minutos.

Tenha constância nos estudos

Ter frequência nos estudos é mais relevante para o seu aprendizado que focar por grandes períodos de tempo.

Estudar todos os dias o ajudará a fixar conhecimentos ao manter-se em contato recorrente com o que precisa aprender. É preferível que você estude por um período de tempo menor por dias recorrentes, que por muitas horas em um único dia da semana.

Pratique e Pratique

Não tem jeito, programação é uma disciplina prática. Apenas codando que você vai conseguir desenvolver suas habilidades técnicas. A teoria virá a partir da prática, não ao contrário. Praticar também vai te ajudar a desenvolver o pensamento crítico necessário para resolver problemas e priorizar tarefas.

Conte com a comunidade

Se envolver em comunidades será um divisor de águas para sua carreira. Ajudar outras pessoas desenvolvedoras vai fazer com que você fixe melhor seu aprendizado. A comunidade vai te dar suporte frente a problemas desafiadores para você.

Evoluir em comunidade também é uma ótima oportunidade para você se preparar para trabalhar em um ambiente de Pair Programming.

Pair Programming é uma técnica de desenvolvimento ágil em que devs trabalham em pares, em uma única estação de trabalho. Em algum momento da sua carreira você vai ter contato com o trabalho em par, use a comunidade para sair na frente e se preparar para ele.

Dica: abra em nova aba ou favorite esse guia prático de como contribuir para o ecossistema de tecnologia. Ele tem dicas super úteis para você que está começando a programar.

Networking é tudo!

Em toda e qualquer carreira, fazer Networking é uma das principais estratégias de visibilidade para profissionais. Em desenvolvimento não seria diferente.

Ao passo que ganha relevância na comunidade, melhores oportunidades chegarão até você. Ou talvez, você possa encontrar aquela pessoa que vai criar sociedade com você para empreender conforme seus objetivos, e se conectar com profissionais que você conhece as competências.

Desenvolva suas soft skills

Soft Skills são as habilidades comportamentais, aquelas que vão além dos seus conhecimentos técnicos. Não negligencie suas habilidades de comunicação, atitude, pensamento crítico, criatividade e outras que não podem ser substituídas pelo domínio da programação.

Parece complicado para quem se acostumou a lidar apenas com a sua própria tela, a boa notícia é que você verá o desenvolvimento dessas habilidades fluir sempre que você estiver presente em comunidade, compartilhando conhecimento.

Impulsione sua carreira

Pense na sua carreira profissional como uma marca. Sua marca precisa ser sólida, ter credibilidade e ser divulgada. Para se destacar no início da sua carreira ou em qualquer outra etapa dela, avance por alguns atalhos como Eventos de Tecnologia, Hackathons e Projetos Pessoais.

Eventos de tecnologia - Basta acompanhar as comunidades para ficar por dentro dos principais eventos de tecnologia. Desde workshops, para você aprender praticando, a empreendedorismo e conversas, para você acompanhar o avanço da tecnologia. O Networking é outro ponto positivo de fazer parte dos eventos sempre que possível.

Hackathons - Esses são eventos que podem ser definidos como uma disputa prática para profissionais de tecnologia. Os Hackathons te ajudam a ganhar experiência no desenvolvimento de soluções em grupo, indo da ideação ao produto final.

Projetos pessoais - Os projetos pessoais são uma forma de você desenvolver suas habilidades técnicas, criatividade e pensamento crítico. Tudo que você construir se torna bagagem para seu currículo e casos reais para o seu portfólio.

Importante, adicione tudo que você fizer ao Github e escreva um bom README.

Todos seus projetos contam como experiência para seu portfólio, independentemente da complexidade. Como toda sua evolução, a construção do seu portfólio também começa com um primeiro passo e vai avançando de nível.

Mesmo que você acredite que não tem por onde começar, comece. Com o tempo seu conhecimento e projetos vão ganhando forma.

Tá sem ideia de projetos e já quer começar a se desafiar? Entre no Discover, você terá acesso a dezenas de desafios com instruções de como realizá-los.

Clean code, por onde começar?

*Texto de Luziane Freitas
Desenvolvedora front-end júnior na Convenia e membro do SpaceSquad da Rocketseat

Se você é desenvolvedor(a), com certeza já ouviu falar em código limpo, mas afinal o que é isso?

O clean code ou código limpo é um conjunto de práticas na escrita de código que podem ser aplicados para uma maior legibilidade e manutenibilidade do seu projeto. Fazendo uma simples analogia, podemos pensar que o código é seu quarto e o clean code são ações que você executa para organizá-lo da melhor forma possível, facilitando seu dia a dia.

Mas antes de falar sobre código limpo, precisamos entender o porquê utilizá-lo.

Um código ruim pode causar problemas que afetam não só o dia a dia do desenvolvimento e o desempenho de um time, mas também a usabilidade do software.

Entre as primeiras dificuldades que encontramos ao trabalhar com um código ruim, podemos citar a resolução de bugs e demora em executar tarefas simples. Isso acontece pois quando lidamos com um código ruim temos dificuldades na leitura e entendimento do que está acontecendo.

Além disso, com o passar do tempo o software pode ficar defeituoso, causando problemas não só para o desenvolvedor mas para a empresa como o todo, levando em consideração os custos envolvidos em todos os processos.

Dessa forma devemos sempre estudar e praticar a escrita de um código bom para nos tornarmos um bom profissional.

Como identificar códigos ruins?

Para quem está iniciando nessa área, identificar um código ruim nem sempre será fácil, mas com o passar do tempo e com prática isso se tornará possível e corriqueiro. Podemos começar analisando alguns pontos que são mais simples de reconhecer no começo, como por exemplo:

  • O código não possui organização em sua escrita, como por exemplo quebra de linhas entre blocos de funções, importações e declaração de variáveis etc;
  • O código não segue um padrão na escrita das variáveis, funções que não seguem ou misturam sem uma justificativa camelCase, snake_case e etc;
  • O código não tem um padrão de indentação. Lembre-se que quanto mais profunda a indentação em um bloco de código, é sinal que, provavelmente, ele precisa ser refatorado;
  • Números ou strings mágicos, ou seja, aqueles valores obscuros espalhados pelo código e que não dizem o que de fato eles são.

Esses são alguns dos muitos pontos que são analisados para identificar melhorias no código.

Refatoração

Agora que já sabemos como identificar possíveis códigos ruins, vamos entender como melhorá-los e, para isso, precisamos entender o conceito de refatoração, pois ela será nossa amiga durante esse processo.

A refatoração é um processo de modificação de um código existente, que tem como objetivo melhorar sua estrutura e qualidade sem alterar sua funcionalidade. Ela pode ser aplicada desde as coisas mais simples, como renomear variáveis, até as mais complexas, como a organização de códigos em funções e módulos menores e também a remoção de códigos desnecessários, entre outros.

Esse é um processo muito importante por ajudar a manter o código limpo e organizado, facilitando a manutenção e a adição de novas funcionalidades. É claro que saber identificar o código sujo e saber o que é refatoração não garantem que você vá saber escrever um código limpo. Mas a intenção deste artigo é te ajudar a começar a praticar, para que, no futuro, você tenha mais habilidades que te auxiliem nesse processo.

Exemplos para iniciar sua prática

Aqui vou apresentar alguns pontos que já foram abordados anteriormente e alguns exemplos práticos. irei utilizar o JavaScript para exemplificar, mas você poderá usar a base a seguir como modelo para outras linguagens, seguindo suas respectivas nomenclaturas.

Então aqui vão alguns exemplos do que evitar ao escrever seu código.

  • Mistura de idiomas.

Como mencionado anteriormente, é ideal seguir um padrão dentro do nosso código, inclusive para o idioma escrito. Entre os padrões que podemos citar, um deles é o inglês tanto para a escrita de código quanto para documentações. Normalmente as linguagens possuem como padrão comandos e palavras-chave em inglês.

Evitar:

let moeda = {
  value: 10,
  country: 'USA'
} 

Fazer:

let currency = {
  amount: 10,
  country: 'USA'
} 
  • Dê nomes significativos e dentro do contexto aplicado evitando a abreviação.

Evitar:

const fName = 'Sheldon Lee Cooper'

Fazer:

const fullName = 'Sheldon Lee Cooper'

Evite nomes redundantes

Evitar:

let person = {
  personName: 'Sheldon',
  personLastName: 'Lee Cooper',
  personAge: 42,
}

Fazer:

let person = {
  name: 'Sheldon',
  lastName: 'Lee Cooper',
  age: 42,
}

Evite colocar tipos no nome da variável

Evitar:

let arrayOfFruits = [ 'banana', 'morango', 'manga' ]

Fazer:

let fruits = [ 'banana', 'morango', 'manga' ]

Utilize um padrão para escrever e crie constantes para os números mágicos.

Evitar:

function calcMedia (a, b) {
  const media_notes = (a + b) / 2

  if (media_notes >= 6) {
    return 'Media alcançada'
  }
  return 'Media não alcançada'
}

Fazer:

function calculateAverage (noteA, noteB) {
  const minValue = 6
  const success = 'Media alcançada'
  const noSuccess = 'Media não alcançada'
  const average = (noteA + noteB) / 2

  return (average >= minValue) ? success : noSuccess
}
  • Evite encher seu código de comentários que não sejam relevantes

Utilize os comentários a seu favor, como, por exemplo, para explicar regras de negócio, decisões e motivações que foram escolhidas para o contexto que determinada funcionalidade foi escrita.

Evitar:

 /*
  função que entra em contato com a API de conversões 
  de moeda.
  @params
  valor da moeda, pais
  @return
  valor da moeda convertido
*/
  function currencyCoin(coin, country) {...}
  • Tente escrever funções menores, delegando a elas apenas uma tarefa, assim o código fica mais claro durante a leitura.

Evitar:

Neste primeiro exemplo é feita a separação de números pares e impares, assim como suas somas e multiplicações, o que pode tornar mais dificil a compreensão

function splitArrayNumbers (list) {
  let pairs = []
  let odd = []
  let pairSum = 0
  let oddMultiplication = 1
	
  for (let item of list) {
     if (num % 2 === 0) {
       pairs.push(num)
       pairSum += num
     } else {
       odd.push(num)
       oddMultiplication *= num
     }
  }
	
  return {
     pairs,
     odd,
     pairSum,
     oddMultiplication
  }
}

Fazer:

Para melhorar, podemos fazer um ajuste simples, separando em funções especificas para cada funcionalidade

function splitNumbers (list) {
  let pairs = []
  let odd = []
	
  for (let item of list) {
     if (item % 2 === 0) {
       pairs.push(item)
     } else {
       odd.push(item)
     }
  }
	
  return { pairs, odd }
}

function calculate (list) {
  let pairSum = 0
  let oddMultiplication = 1
	
  for (let item of list) {
     if (item % 2 === 0) {
       pairSum += item
     } else {
       oddMultiplication *= item
     }
  }
	
  return { pairSum, oddMultiplication }
}
  • Evite inserir parâmetros demais nas funções

Uma função idealmente deve receber no máximo 2 parâmetros, caso seja necessário passar mais, o ideal é fazer então com que essa função receba um objeto ou array como parâmetro, dependendo da funcionalidade.

Evitar:

function calculateAverage ( note1, note2, note3, note4) {
  let average = (note1 + note2 + note3 + note4 ) / 4
  return average
}

const name = “Jhony Test”
const average = calculateAverage (8,10,6,4)

console.log(`A média do aluno ${name} é ${average}.`)

Fazer:

function calculateAverage ( notes) {
  let sum = 0
  for (let note of notes) {
     sum += note
  }
	
  let average = sum / notes.length
  return average
}

const name = “Jhony Test”
const notes = [8, 10, 6, 4]
const average = calculateAverage (notes)

console.log(`A média do aluno ${name} é ${average}.`)
  • Priorize passar valores padrão

Quando se está escrevendo uma função, tente priorizar a prática de passar valores padrão, isso evita que o código quebre caso algum dado esteja com o valor errado.

Neste exemplo, caso um dos valores não seja passado para a função, poderá ocorrer erros durante a execução:

function calculateTotalPrice (value, quantity, rate) {
  const priceWithoutRate = value * quantity
  const priceWithRate = priceWithoutRate + (priceWithoutRate * rate)
  return priceWithRate
}

Atribuindo valores padrão, mesmo que um dos parâmetros não seja passado, a função irá calcular com os valores padrões:

function calculateTotalPrice (value, quantity = 1, rate = 0.1) {
  const priceWithoutRate = value * quantity
  const priceWithRate = priceWithoutRate + (priceWithoutRate * rate)
  return priceWithRate
}

calculateTotalPrice(100); // Saída: 110
calculateTotalPrice(50, 2); // Saída: 110
calculateTotalPrice(50, 2, 0.2); // Saída: 120

Assim como ter um padrão para escrever as variáveis as funções se encaixam neste item, então padronize a escrita e as nomenclaturas de funções.

Evitar:

getuserData()
getProductRecord()
get_email_info()

Fazer:

getUserData()
getProductData()
getEmailInfoData()

Esses são alguns exemplos que podem te ajudar no começo dos seus estudo de Clean Code, mas lembre-se se não se prender somente a eles, pois temos uma variedade de possibilidades quando falamos dessa prática.

Conclusão

Agora já sabemos um pouco do conceito de código limpo, código sujo e seus malefícios. Além disso, conseguimos identificar alguns pontos para melhoria de código e algumas práticas para escrever códigos melhores.

Você pode se aprofundar ainda mais nesse tema lendo o livro Código limpo: Habilidades práticas do Agile Software, de Robert C. Martin, e praticando ao aplicar a teoria na prática.

E aí, curtiu o conteúdo?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.