19 pessoas já começaram a estudar hoje
1919pessoasjá começaram a estudar hoje
já começaram a estudar hoje

Enquanto você avalia,

1919pessoas já começaram a estudar hoje

Dê o próximo passo e inicie sua carreira

Dê o próximo passo e inicie sua carreira agora mesmo

Comece agora
  • Home

    Escolha seu Plano

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    Carreiras Alura

    Evolua com profundidade técnica, direção clara e aplicação prática.

    Jornadas guiadas do básico ao avançado com checkpoints práticos, desenhadas para quem busca profundidade e protagonismo técnico.

    Iniciante

    Comece do zero com uma trilha clara e progressiva.

    Fundamentos práticos para dar os primeiros passos com segurança e construir uma base sólida.

    Intermediário

    Continue sua evolução com cursos que conectam fundamentos, ferramentas e prática profissional. Ganhe autonomia, e avance para projetos mais completos.

    Avançado

    Aprofunde temas técnicos e estratégicos para enfrentar desafios mais complexos. Explore boas práticas, arquitetura, performance com visão profissional.

    Cursos

    Ver mais cursos de Back-end
    • Pensamento computacional: fundamentos da computação e lógica de programação
    • Lógica de programação: mergulhe em programação com JavaScript
    • DDD: fundamentos do design orientado a domínio
    • ASP.NET: autenticação e autorização em APIs e aplicações web
    • Microsserviços: migração de monólitos e modularização

    Cursos

    Ver mais cursos de Dados
    • Python para Dados: primeiros passos
    • Excel: domine o editor de planilhas
    • Engenharia de Dados: Orquestração de Pipelines com Apache Airflow
    • Power BI Desktop: construindo meu primeiro dashboard
    • Governança e Arquitetura de Dados

    Cursos

    Ver mais cursos de Inteligência Artificial
    • IA: Explorando o Potencial da Inteligência Artificial Generativa
    • Engenharia de Prompt: Criando Prompts Eficazes para IA Generativa
    • Claude para Análise de Dados: prompts, integrações e automações
    • Agno: criando agentes e sistemas multiagente
    • Engenharia de software na era da IA: segurança de aplicações com agentes, MCPs e código gerado por IA

    Cursos

    Ver mais cursos de Front-end
    • HTML e CSS: ambiente, estrutura e estilo
    • React: realizando testes avançados com Jest e Testing Library
    • React: integrando TypeScript em projetos
    • JavaScript: aprendendo a programar
    • React: aplicando arquiteturas de Micro frontends

    Cursos

    Ver mais cursos de DevOps
    • Sistema Operacional Linux: fundamentos e administração prática
    • Containers e Docker: empacotamento, isolamento e gestão
    • Redes: dos conceitos iniciais à criação de uma intranet
    • Linux: gerenciando diretórios, arquivos, permissões e processos
    • Cibersegurança: Fundamentos e práticas integradas

    Cursos

    Ver mais cursos de UX & Design
    • UX Research: mapeando a experiência da pessoa usuária
    • UX/UI Design: Entregando produtos digitais com IA
    • UI Design: Prototipação e animações interativas
    • Figma: Conhecendo o programa
    • Product Design: métricas e ciclo de vida do produto

    Cursos

    Ver mais cursos de Inovação e Gestão
    • Canva: Criação de landing pages e e-mail marketing
    • Agilidade: como ela pode ajudar a criar um time de alta performance
    • Google Analytics 4: Extrair insights e configurar eventos
    • Management 3.0: gerencie o ambiente, não as pessoas
    • Automação de processos com n8n: Inteligência de dados para Marketing

    Cursos

    Ver mais cursos de Mobile
    • React Native: Estilização e Layouts com Flexbox e StyleSheet
    • Flutter: Graphql e suporte offline
    • Android com Gemini: Trabalhando com textos e imagens na IA
    • Dart: trabalhando com orientação a objetos
    • React Native: Dominando Listas com FlatList e ScrollView

    Carreiras

    Ver mais carreiras
    • Especialista em IA
    • Engenharia de IA
    • Ai native software engineering
    • Arquitetura de Soluções com IA
    • AI Product Design
    • Engenharia de Machine Learning
    • Desenvolvimento Front-End React
    • Engenharia de Dados
    • Cloud Security
    • Social Media Marketing
    • Engenharia de Agentes de IA

    Cursos

    • Engenharia de Prompt: Prompts Eficazes para IA Generativa
    • Claude Code: Criando sua Primeira Aplicação
    • Python: Crie sua Primeira Aplicação
    • Git e GitHub: Compartilhando e Colaborando
    • N8N: Fluxos de Trabalho Avançados

    Cursos

    • Copilot Studio: Solução Multiagentes
    • Padrões de API HTTP e Modelagem de APIs
    • Python para Análise de Dados com SQL
    • Docker: Criando e Gerenciando Containers
    • Design com IA: Otimizando o Processo Criativo

    Cursos

    • Model Context Protocol (MCP)
    • Spec-Driven Development: Dev Assistido por Agentes
    • Arquitetura de Sistemas Distribuídos com Java
    • Governança de Modelos e Reprodutibilidade
    • Pentest: Vulnerabilidades em Aplicações Web

    Escolha seu Plano

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    Skills & Go

    O Skills & Go é para Tech Leads, Product Managers, estrategistas e early adopters que transformam ideias em soluções de alto impacto. Em cursos ao vivo e 100% online, você domina a nova era da IA em tempo real.

    Aulas ao vivo

    Saiba mais
    • Agentic Engineering: orquestre múltiplos agentes com confiabilidade
    • Building AI Products: transforme ideias em produtos reais com IA
    • AI Data Strategy: transforme dados em decisões estratégicas com IA

    Escolha seu Plano

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    Eventos Alura

    Nossos eventos são pensados para quem quer estar à frente das mudanças em tecnologia, IA e inovação. Em experiências presenciais, você acompanha tendências e se conecta com especialistas que estão moldando o futuro.

    Próximos eventos

    • IA Conference
    • Alura Signals
  • Talent Lab
  • IA

    Escolha seu Plano

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    Conteúdos gratuitos

    Explore conteúdos gratuitos para aprender tecnologia no seu ritmo. Encontre artigos com conteúdos técnicos para aprender na prática, notícias para acompanhar as principais tendências do mercado e o Alura Labs, com análises e reflexões de especialistas sobre tecnologia, IA e carreira.

    Conteúdos gratuitos

    • Artigos
    • Notícias
    • Alura Labs
  • Para Empresas
Ver planos
Links principais
  • Planos e Promoções
  • Carreiras

    Ver todas
    • Especialista em IA
    • Engenharia de IA
    • Ai native software engineering
    • Arquitetura de Soluções com IA
    • AI Product Design
    • Engenharia de Machine Learning
    • Desenvolvimento Front-End React
    • Engenharia de Dados
    • Cloud Security
    • Social Media Marketing
    • Engenharia de Agentes de IA
    Entrar Ver Planos
  • Área de Interesse

    Entrar Ver Planos
  • Aulas ao Vivo - Skills & Go

    • Agentic Engineering: orquestre múltiplos agentes com confiabilidade
    • Building AI Products: transforme ideias em produtos reais com IA
    • AI Data Strategy: transforme dados em decisões estratégicas com IA
    Entrar Ver Planos
  • Senioridade

    Entrar Ver Planos
  • Eventos Alura

    • IA Conference
    • Alura Signals
    Entrar Ver Planos
  • Conteúdos

    • Artigos
    • Notícias
    • Alura Labs
    Entrar Ver Planos
  • Links complementares do menu mobile
  • Talent lab
  • Inteligência Artificial
  • Pós Graduações
  • Para Empresas
  • Sobre a Alura
  • Grupo Alun
  • Entrar
    • Home
    • Carreiras
    • Skills & Go
    • Talent Lab
    • Inteligência Artificial
    • Pós Graduações
    • Artigos
    • Sobre a Alura
    • Grupo Alun
    LoginContato
    • Plano Pro 24
    • Plano Plus 24
    • Plano Ultra Lab 24
    • LinkedIn
    • Instagram
    • YouTube

    Institucional

    • Sobre nós
    • Trabalhe Conosco
    • Para Empresas
    • Para Escolas
    • Política de Privacidade
    • Compromisso de Integridade
    • Termos de Uso
    • Canal de Ética
    • Código de Ética
    • Fale Conosco
    • Documentos Institucionais
    • Status
    Institucional
    • Sobre nós
    • Trabalhe Conosco
    • Para Empresas
    • Para Escolas
    • Política de Privacidade
    • Compromisso de Integridade
    • Termos de Uso
    • Canal de Ética
    • Código de Ética
    • Fale Conosco
    • Documentos Institucionais
    • Status

    A Alura

    • Como Funciona
    • Inteligência Artificial
    • Plataforma
    • Depoimentos
    • Instrutores(as)
    • Dev em <T>
    • Luri, a Inteligência Artificial da Alura
    • IA Conference
    • Cursos Imersivos
    • Perguntas Frequentes
    A Alura
    • Como Funciona
    • Inteligência Artificial
    • Plataforma
    • Depoimentos
    • Instrutores(as)
    • Dev em <T>
    • Luri, a Inteligência Artificial da Alura
    • IA Conference
    • Cursos Imersivos
    • Perguntas Frequentes

    Conteúdos

    • Alura Cases
    • Imersões
    • Artigos
    • Podcasts
    • Artigos de educação corporativa
    Conteúdos
    • Alura Cases
    • Imersões
    • Artigos
    • Podcasts
    • Artigos de educação corporativa
    Uma Empresa do GrupoLogo Grupo Alun

    Outras empresas do Grupo Alun

    • FIAP
    • STARTSE
    • PM3
    • LUMINA

    Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

    Redes Sociais & Apps

    instagram
    youtube
    tiktok
    x
    appStore
    googlePlay
    Uma Empresa do GrupoLogo Grupo Alun

    Outras empresas do Grupo Alun

    • FIAP
    • STARTSE
    • PM3
    • LUMINA

    Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

    Redes Sociais & Apps

    instagram
    youtube
    tiktok
    x
    appStore
    googlePlay
    Alura

    O que você quer aprender?

    FiltrosFiltrar por:

    Tipos de conteúdo
    Categorias
    • Inteligência Artificial

      Gemma 2, Formação Google ML Kit, ChatGPT para Mac – Hipsters: Fora de Controle #63

      O Hipsters: Fora de Controle é o podcast da Alura com notícias sobre Inteligência Artificial aplicada e todo esse novo mundo no qual estamos começando a engatinhar, e que você vai poder explorar conosco! Nesse episódio conversamos repercutimos as principais notícias da semana, com direito à participação especial de Luciano Martins para comentar a disponibilização dos modelos Gemma 2. Em seguida, conversamos com Junior Martins sobre a nova formação da Alura que ensina a criar apps mais inteligentes com o Google ML Kit. Vem ver quem participou desse papo: Marcus Mendes, host fora de controle Fabrício Carraro, Program Manager da Alura, autor de IA e host do podcast Dev Sem Fronteiras Sérgio Lopes, CTO da Alura Luciano Martins, Developer Advocate do Google Junior Martins, Desenvolvedor Android e Instrutor da Alura Links: Claude 3.5 Sonnet está disponível no Poe Claude 3.5 ultrapassa o GPT-4o em alguns rankings da Chatbot Arena Claude ganha projetos compartilháveis Google disponibiliza o Gemma 2 Tech report do Gemma 2 Gemini 1.5 Pro ganha 2 milhões de contexto e execução de código Documentação de Context Caching do Gemini OpenAI libera app do ChatGPT para Mac OpenAI adia novo modo de voz do ChatGPT OpenAI mostra situação de treino de idiomas com o novo Voice Mode do ChatGPT Character AI lança conversas telefônicas para  OpenAI treinou o CriticGPT para pegar bugs no código do GPT-4 OpenAI faz parceria com a publicação Time rabbit r1 tinha APIs hardcoded Meta lanca a familia de modelos LLM Compiler Links da entrevista: Formação Android com IA: criando apps mais inteligentes com o Google ML Kit na Alura Google ML Kit Formação Android Jetpack Compose na Alura Microsoft Phi Google Gemini Nano Canal Paradoxo no YouTube Garanta o seu ingresso para a IA Conference Brasil 2024, organizada pela Alura, FIAP, PM3 e Casa do Código. Serão mais de 10 horas de conteúdo aprofundado, cases reais e palestras exclusivas, no dia 21/8 em São Paulo. Não perca! Inscreva-se hoje mesmo na Semana Carreira Tech, tenha acesso às lives entre 1º e 5/7, e descubra como graduações tech estão transformando o futuro. Inscreva-se na Newsletter Fora de Controle, e receba notícias semanais sobre Inteligência Artificial, assinada por Fabrício Carraro. Preencha o formulário com as suas sugestões para deixar o conteúdo do Hipsters: Fora de Controle ainda mais interessante. Escola de Inteligência Artificial da Alura: Mergulhe com profundidade no universo das IAs Generativas e comece a explorar todo o potencial para impulsionar a sua carreira. TechGuide.sh, um mapeamento das principais tecnologias demandadas pelo mercado para diferentes carreiras, com nossas sugestões e opiniões. Alura Cursos de Tecnologia –  Edição e sonorização: Rede Gigahertz de Podcasts

    Ainda não estuda com a gente?

    Invista na transformação da sua carreira!

    Comece agora
  • Visão global de tecnologia e Oracle One – Hipsters Ponto Tech #385

    Hoje o papo é sobre o ONE – Oracle Next Education! A sexta turma abre inscrições no dia 05/12. O ONE é um programa de educação e empregabilidade com objetivo social de capacitar pessoas em tecnologia e conectá-las com o mercado de trabalho por meio de empresas parceiras. O curso é 100% online e totalmente gratuito, feito para quem não teve acesso à educação de qualidade e deseja transformar a sua realidade social. O programa abre as inscrições 2 vezes ao ano. Cada geração de alunos cumpre uma jornada de 6 meses, dividida em 4 trilhas disponibilizadas na plataforma – ao todo são mais de 560 horas de experiência de conteúdo. Ao finalizar a participação no ONE, os estudantes ainda têm a oportunidade de fazer parte da comunidade AlumniONE para ex-alunos, com outros benefícios gratuitos e trilhas Oracle exclusivas. Ao concluir toda a jornada do programa, você receberá um certificado e poderá atuar no mercado de trabalho desenvolvendo softwares, aplicativos, redes sociais e muito mais! Conheça os beneficios do ONE: 100% online e gratuito Aulas ao vivo Comunidade de Apoio no Discord Webinars com profissionais Desafios para aplicação prática Cursos com certificado Conexão com empresas Comunidade de ex-alunos A Alura está junto da Oracle no programa ONE desde que foi lançado como um piloto no Brasil em 2019.Até o momento o ONE já tem dado a oportunidade a mais de 100 mil pessoas pelo programa dos quais 27 mil já tem se graduado. Vem ver quem acompanha a gente neste papo! Paulo Silveira, o host que não acompanha Formula 1 Gabriel Vallejo, Vice-Presidente Senior de Operações e Marketing da America Latina da Oracle Amanda Gelumbauskas, líder do programa One da Oracle Christian Velasco, Líder da operação da Alura na América Latina Links:  ONE – Oracle Next Education Veja algumas postagens do Oracle ONE no LinkedIn Conheça mais algumas histórias do Oracle ONE no LinkedIn da Amanda Gelumbauskas Confira os serviços da Oracle Cloud Infrastructure (OCI) TechGuide.sh, um mapeamento das principais tecnologias demandadas pelo mercado para diferentes carreiras, com nossas sugestões e opiniões. #7DaysOfCode: Coloque em prática os seus conhecimentos de programação em desafios diários e gratuitos. Acesse Produção e conteúdo: Alura Cursos de Tecnologia –  Edição e sonorização: Radiofobia Podcast e Multimídia

  • Gestão & Negócios

    Ideação

    Olá estudante, neste Alura+ você vai aprender mais sobre o processo de ideação, o que ele faz, qual o objetivo e técnicas que podem ser aplicadas facilmente em equipes para fomentar a criatividade e deixar o ambiente confortável para compartilhar novas ideias, desenvolver ideias que já existiam e pensar em diferentes caminhos para colocar essas ideias em prática. Para que você possa se aprofundar no tema, seguem links de conteúdos complementares: Artigos Complementares: - [Como melhorar a criatividade?]( - [Design Thinking: Inovação e criatividade]( - [8 passos para conduzir um processo de ideação]( # Transcrição Olá, tudo bem? Eu sou a Alanis, instrutora da Alura, e hoje vamos aprender sobre **ideação**. Alguma vez já aconteceu de você participar de uma atividade de trabalho que requer a elaboração de novas ideias, mas ficou com vergonha de expor suas ideias por medo de julgamento ou de serem consideradas ruins? Este é um cenário muito comum que acontece com muitas pessoas. Neste Alura+, vamos discutir a ideação, que é a terceira de cinco etapas que compõem um processo chamado ***Design Thinking***. Assim, temos a empatia, a definição, a ideação, o protótipo e o teste, que formam um processo criativo de elaboração e compartilhamento de novas ideias. > **Etapas do Design Thinking:** > > * Empatia > * Definição > * Ideação > * Protótipo > * Teste ## O que é ideação? Ideação é o pensamento inovador que não necessariamente resolve apenas um problema, mas também oferece uma forma mais eficiente de elaborar ou implementar uma ideia. Dentro do processo de ideação, temos a criação de novas ideias, o desenvolvimento de ideias existentes que ainda não estão 100% concluídas e pensar na melhor maneira de colocar essas ideias em prática. Vale lembrar que, no processo de ideação, vamos precisar do maior número possível de ideias, pois algumas serão consideradas soluções potenciais enquanto outras serão rejeitadas. Isso é normal. ## Qual o objetivo da fase de ideação? O foco do processo de ideação está na quantidade e não na qualidade das ideias. Precisamos do máximo de ideias possível para conseguirmos encontrar uma solução para resolver um problema. Portanto, em uma sessão de ideação, é importante que descubramos e exploremos novos caminhos, pensemos fora da caixa e, por motivos de inovação e criatividade, o ambiente durante a dinâmica de ideação seja uma zona livre de julgamentos. Afinal, não estamos aqui para analisar ou julgar a ideia de alguém, mas sim para tornar o ambiente o mais confortável possível para que as pessoas possam ter pensamentos criativos e compartilhar esses pensamentos. No começo da sessão de ideação, é comum compartilharmos ideias um pouco óbvias, ou talvez haja pessoas que, ao compartilhar ideias, temem o julgamento ou sentem vergonha de compartilhar uma ideia que possa ser considerada ruim. Existem várias variáveis que podem fazer com que o processo de ideação não saia como o esperado. No entanto, existem algumas técnicas que podemos usar para tornar este processo o mais produtivo possível, e vou apresentar agora três técnicas rápidas e fáceis para você aplicar no seu dia a dia, no processo de ideação. ### Brainstorming O primeiro é o *brainstorming* (chuva de ideias), que é bastante conhecido e amplamente utilizado neste processo de ideação. Vale lembrar que nem todas as pessoas se sentem à vontade para participar dessas sessões. Existem pessoas mais introvertidas, que não necessariamente ficam no fundo da sala, mas compartilham menos ideias e participam menos. Isso não significa que não estejam prestando atenção, apenas que falam menos que as outras pessoas. Enquanto isso, as pessoas mais extrovertidas participam muito e falam bastante sobre suas ideias, e queremos evitar que as pessoas se sintam desconfortáveis ao compartilhar suas ideias. Como podemos evitar que isso aconteça? Por meio de uma atividade de *brainstorming* chamada ***brain dump***. Nesta atividade, as pessoas recebem post-its e escrevem cada ideia em um post-it. No final da dinâmica, cada pessoa cola os post-its com suas ideias na parede e todas conseguem ler as ideias de todas. Outra técnica que pode funcionar é uma atividade chamada ***brainwriting***. Nela, a pessoa recebe um papel, escreve suas ideias nele e, em vez de colá-lo na parede para todos lerem, passa-o para a pessoa ao lado, que complementa sua ideia. Esse papel passará por todas as pessoas. Ao final da dinâmica, cada pessoa lê um papel e discute o que é importante, o que vai ser considerado e o que vai ser rejeitado. ### Pior ideia possível A segunda técnica é a "pior ideia possível". Esta técnica é projetada para tornar o ambiente mais descontraído e é bastante eficaz para isso. Funciona da seguinte forma: precisamos pensar na pior ideia ou solução possível para resolver um determinado problema. Isso também ajuda a reduzir a pressão entre as pessoas que estão participando da dinâmica. Vamos dar um exemplo. Suponha que precisamos pensar na pior ideia possível para um novo design de tênis para trilhas. Então, podemos pensar em tênis com palmilhas de pregos ou tênis com espelhos na sola. São ideias descontraídas, mas é exatamente isso que a atividade pede. Dessa forma, as pessoas sentirão mais conforto ao compartilhar suas ideias, sem medo de serem julgadas por outras pessoas. ### Pensamento reverso A terceira e última técnica é a do pensamento reverso. Esta técnica é mais divertida porque ela inverte o problema, fazendo com que as pessoas pensem em ideias mais inovadoras. Por exemplo, vamos supor que nosso problema, que precisa ser resolvido e de onde precisamos tirar ideias, seja: "como podemos tornar nossos cursos online mais acessíveis?". Usamos a brincadeira do pensamento reverso. Portanto, nesse caso, o questionamento a ser feito é: "como podemos dificultar o acesso dos usuários à plataforma para fazerem nossos cursos online?". As respostas geradas por esse exercício farão com que você imagine o oposto, ajudando a encontrar a solução que de fato necessita. Agora você sabe o que é a ideação, sua importância, seu objetivo e quais técnicas pode utilizar durante a ideação para torná-la muito mais produtiva. Muito obrigado por assistir e até a próxima!

  • DevOps

    Terraform no Google Cloud

    Neste Alura+ vamos aprender como podemos criar uma máquina virtual no Google Cloud Platform usando o Terraform e ver as diferenças entre o Google Cloud Platform e a AWS. * [Site do Terraform]( * [Download do Terraform]( * [Console do Google Cloud]( * [Documentação do Google Cloud no Terraform]( # Transcrição Na formação de Infraestrutura como Código, utilizamos sempre a AWS como provedora. Mas como fazemos para usar o Terraform com outros provedores, como o Google Cloud, por exemplo? Para tirar essa dúvida, vamos subir uma máquina no Google Cloud e verificar o quanto esse processo difere de uma máquina na AWS. Vamos lá? De início, vamos entrar no site do Terraform e clicar em "Tutoriais", no painel superior, para carregar os tutoriais iniciais e podermos mexer com cada plataforma. No caso, sempre usamos AWS; desta vez, acessaremos os **tutoriais do Google Cloud**. Nessa nova página, veremos todos os tutoriais disponíveis, como "O que é Infraestrutura como Código com o Terraform?" e "Instalando Terrafom". Caso você ainda não conheça o conceito de infraestrutura como código ou ainda não tenha o Terraform instalado, recomendamos dar uma olhada nesses dois primeiros tutoriais e fazer a nossa formação de Infraestrutura com Código também. Nesse vídeo, vamos direto para o tutorial "*Build Infrastructure*" (em português, "**Montando a Infraestrutura**") para começarmos a construir nossa infraestrutura com o Google Cloud. Primeiramente, há uma breve explicação sobre o que é o Google Cloud e temos um aviso inicial de que usaremos o nível gratuito (*free tier*) do Google Cloud Platform (GCP) para o provisionamento dos componentes desse tutorial. Caso comecemos a provisionar outros recursos, podemos mudar para a versão paga. No nosso caso, a máquina virtual que pretendemos provisionar faz parte do *free tier*. A seguir, temos a seção de pré-requisitos. É preciso ter uma **conta no Google Cloud Platform**. Caso você ainda não tenha, é possível criá-la no site do GCP — é de graça. Para conhecer mais sobre os serviços inclusos no *free tier*, podemos acessar a página de informações do Programa Gratuito do Google Cloud. Outro pré-requisito é ter, **no mínimo, a versão 0.15.3 do Terraform** instalada no seu computador. Se você estiver com o Terraform atualizado, já tem uma versão compatível, provavelmente 1.0 ou posterior. Atendidos os pré-requisitos, vamos checar o que precisamos para realmente começar a criar, na seção "*Set up GCP*". O primeiro item é **criar um projeto no GCP**. Vamos clicar no link disponibilizado no tutorial, que nos direcionará ao console do GCP para criar um projeto. Daremos o nome "Alura" para nosso projeto. Logo abaixo do campo de nome, será gerado um ID. No meu caso, é "alura-348223". O seu será diferente, pois os identificadores são únicos, nunca se repetem. À direita desse ID, temos a opção de editá-lo, se for de nosso interesse. Eu vou manter "alura-348223". Não vamos modificar os campos "Billing account" nem "Location", relativos respectivamente à cobrança (caso sejam criados recursos fora do *free tier*) e à organização. Podemos clicar no botão "Create" e, após alguns segundos, veremos nosso projeto criado, com todas as partes prontas. Voltando ao tutorial do site do Terraform, o segundo item é **ligar o *compute engine* do nosso projeto**. Novamente, vamos clicar no link disponibilizado no tutorial, que nos direcionará para a tela do *Compute Engine API* no console do GCP. Outra forma de chegar nessa página é acessando o menu do GCP, no canto esquerdo superior, selecionando a opção "Compute Engine". Nessa tela, clicaremos no botão "Enable" para habilitar e conseguirmos criar elementos relacionados às máquinas virtuais. Esse processo pode demorar alguns minutos, dependerá da carga sobre o Google no momento. De volta ao tutorial, o terceiro item em "Set up GCP" é **criar uma chave de serviço para nossa conta**. Clicaremos no link disponibilizado no tutorial, que nos direcionará para a página *Service Accounts*, dentro da área "IAM & Admin" do console do GCP. Outra maneira de chegar a esta tela é pelo menu do GCP, acessando "IAM & Admin > Service Accounts". Em seguida, vamos selecionar o projeto "Alura". Nessa nova página, constataremos que já temos uma conta de serviços. Para manter a organização e não nos confundirmos com as chaves e credenciais (partes de segurança muito importantes), vamos **criar outra conta de serviços**. No painel superior da tela, pressionaremos "Create Service Account". O campo relativo ao nome é opcional. Já o ID é obrigatório, como indicado pela presença do asterisco. Nosso ID será "terraform". Logo abaixo desse campo, será automaticamente criado um e-mail para essa conta de serviços. No momento, não precisamos nos preocupar com ele. A seguir, clicaremos no botão "Create and Continue". Agora, precisamos **selecionar um cargo (*role*)**. No tutorial do Terraform, no item 4 referente à criação da chave de serviço, é especificado que nesse campo devemos escolher "Project > Editor" e clicar em "Continue". Dessa forma, essa conta terá permissão para editar qualquer parte do projeto. Pressionaremos o botão "Done" para concluir a criação da conta do Terraform. Na sequência, vamos **criar uma chave para essa conta**. Seguindo o tutorial, vamos selecionar a conta de serviços e acessar a aba "Keys" (chaves) no painel superior. Em seguida, clicando em "Add Key", vamos escolher a opção "Create new key", definir o "Key Type" como JSON e clicar em "Create". O *download* da chave será feito automaticamente em nosso computador e veremos uma mensagem contendo o nome dela. Voltando ao tutorial, antes da seção "Write configuration", temos outro aviso (*warning*). Ele nos informa que ***esse arquivo da chave dá acesso total ao nosso projeto no Google Cloud Platform, então é importante o tratarmos como qualquer outra credencial secreta***, como a senha que usamos para entrar no console do GCP. Ou seja, não é uma boa prática salvar essa chave de acesso em um repositório, por exemplo, pois qualquer pessoa terá acesso ao projeto, se essa chave "vazar". Porém, caso isso aconteça, podemos acessar o menu "IAM & Admin > Service Accounts", entrar na nossa conta e apagar a chave. Depois, criamos outra. Temos a opção de criar várias chaves, só é importante mantermos o controle e a organização delas. Podemos, então, **começar a escrever as configurações do nosso projeto**. Em nosso computador, vamos criar uma pasta chamada "GCP" (abreviação de Google Cloud Platform) e abri-la no Visual Studio Code. Dentro dela, criaremos um arquivo chamado main.tf — um arquivo Terraform. Tudo que formos escrever ficará dentro dele. No tutorial, o início da seção "Write Configuration" explica como criar essa pasta e o arquivo main.tf por comandos no terminal. No caso, optamos pela criação manual. Em seguida, temos um bloco de código de exemplo: terraform { required_providers { google = { source = "hashicorp/google" version = "3.5.0" } } } provider "google" { credentials = file(".json") project = "" region = "us-central1" zone = "us-central1-c" } resource "google_compute_network" "vpc_network" { name = "terraform-network" } Vamos analisar esse trecho, composto por três blocos. De início, temos um bloco terraform referente às configurações que usaremos no projeto do Terraform. Da linha 2 a 6, constam dados do provedor: trata-se do provedor do Google, já com informações da fonte (source) e da versão (version). Da linha 10 a 16, temos o segundo bloco, com configurações desse provedor. A linha 11 contém as credenciais que serão carregadas de um arquivo .json. Na linha 13, precisamos informar o ID do projeto. Nas linhas seguintes, teremos dados relativos à região e à zona — assim como a AWS, o Google trabalha com regiões. Nesse exemplo, temos region = "us-central1" e zone = "us-central1-c", ou seja, estaremos usando o provedor do Google na região central dos Estados Unidos, na zona de disponibilidade C. Das linhas 18 a 20, temos o último bloco, com a opção de criação de um recurso, uma VPC. No momento, não queremos uma VPC, apenas uma máquina virtual. Mais adiante, consultaremos a documentação com esse objetivo. Portanto, vamos copiar apenas os dois primeiros blocos (da linha 1 até a 16) e colá-lo no arquivo main.tf. Feito isso, ainda precisamos configurar dois itens nesse arquivo: **indicar a chave de acesso na linha 11 e definir o ID do projeto na linha 13**. Vamos incluir a chave de acesso no projeto, movendo o arquivo .json para a pasta GCP. Em seguida, daremos uma olhada na estrutura e no conteúdo dessa chave. Primeiramente, ela contém um tipo, que é uma conta de serviço. Depois, temos o ID do projeto e o ID de uma chave privada. Em seguida, consta a chave privada em si, que é bastante longa. Vemos, então, o e-mail do cliente (no caso, da conta de serviço), o ID desse cliente e um link de autorização seguido de um link do *token* para poder acessar as informações. Por fim, há dois certificados, um do provedor e outro do cliente. Voltando ao arquivo main.tf, é necessário alterar a origem das credenciais, na linha 11. Como o nome do arquivo .json é muito extenso, no painel à esquerda vamos clicar com o botão direito do *mouse* sobre ele e renoméa-lo para chave.json. Desse modo, podemos modificar a linha 11 para credentials = file("chave.json"), indicando que as credenciais vêm desse arquivo. Quanto ao ID do projeto (na linha 13), podemos obter essa informação no console do Google Cloud Platform ou no arquivo chave.json, em project_id. No meu caso, a linha 13 ficará project = "alura-348223", lembrando que cada usuário terá um ID diferente. Assim, temos nosso Google Cloud configurado para uso. O próximo passo será **criar a máquina virtual**. No navegador, vamos voltar à página inicial do site do Terraform. Desta vez, no painel superior, acessaremos "Registry" — o registro Terraform. Descendo um pouco a página, temos as opções de *providers*. Vamos clicar em Google Cloud Platform. A princípio, veremos o *overview* do que é o Google Cloud. No topo da página, à direita, acessaremos a **documentação**. Na lateral esquerda, há uma lista extensa de recursos à nossa disposição. Anteriormente no Google Cloud, acionamos o *Compute Engine API*, portanto vamos expandir o tópico "*Compute Engine*" dessa lista. Dentro dele, temos uma série de recursos — estamos buscando por máquinas virtuais, que geralmente têm o nome VM (*virtual machine*) ou *Instance* (instância). No caso, encontraremos o subtópico "google_compute_instance". Clicando em "**google_compute_instance**", descobriremos que se trata de um recurso que gerencia uma instância de uma máquina virtual utilizando o Google Cloud Engine (GCE). Para mais informações, podemos acessar a documentação oficial da API. Aparentemente, este recurso faz exatamente o que precisamos. Mais abaixo nessa página, temos um exemplo de uso. Vamos deixar de lado as primeiras cinco linhas referentes à *service account* e copiar o resto. Colaremos esse trecho ao final do nosso arquivo main.tf: # código anterior omitido resource "google_compute_instance" "default" { name = "test" machine_type = "e2-medium" zone = "us-central1-a" tags = ["foo", "bar"] boot_disk { initialize_params { image = "debian-cloud/debian-9" } } // Local SSD disk scratch_disk { interface = "SCSI" } network_interface { network = "default" access_config { // Ephemeral public IP } } metadata = { foo = "bar" } metadata_startup_script = "echo hi > /test.txt" service_account { # Google recommends custom service accounts that have cloud-platform scope and permissions granted via IAM Roles. email = google_service_account.default.email scopes = ["cloud-platform"] } } Em seguida, vamos remover as partes que não são necessárias para nós. Na linha 18, temos o recurso "google_compute_instance". Vamos substituir o nome lógico "default" por "PrimeiraVM". Na linha seguinte, podemos alterar o nome que aparecerá no console do Google: em vez de "test", usaremos "PrimeiraVM" também. Em machine_type (tipo de máquina), precisamos tomar um pouco de cuidado. A máquina atual, "e2-medium", não é suportada pelo *free tier*! Então, vamos mudar para "e2-micro", que se enquadra no nível gratuito. Quanto à zona, vamos usar a mesma que especificamos anteriormente: "us-central1-c": # código anterior omitido resource "google_compute_instance" "PrimeiraVM" { name = "PrimeiraVM" machine_type = "e2-micro" zone = "us-central1-c" # código posterior omitido As tags não são necessárias, podemos removê-las (linha 23). Por outro lado, precisaremos do disco de *boot* (boot_disk), porque é o disco principal do nosso sistema. Na linha 24, temos os parâmetros iniciais: segundo o exemplo, usaremos uma imagem do Debian, na versão 9. Vamos manter desta forma. Em seguida, é oferecido um SSD local: o scratch_disk, um disco para escrever e ler itens temporários. Não precisamos disso e ele não é suportado no *free tier*, então vamos removê-lo (linhas 29 a 32). Agora, na linha 29, temos a interface de rede, necessária para a comunicação. Vamos manter network = "default" e não modificaremos o access_config, para que ele gere um IP público para nossa máquina. Os metadados (linhas 36 a 38) são desnecessários, vamos removê-los. Em seguida, temos o metadata_startup_script. Se quisermos rodar algum comando no momento de criação da nossa máquina, podemos utilizar essa *tag*. Vamos mantê-la e mudar seu valor para "echo oi > /teste.txt". Dessa forma, será escrito "oi" no arquivo teste.txt, no *root*. Por fim, a partir da linha 38, temos um *service account*. Como já configuramos anteriormente o *provider*, essa parte também não é necessária, vamos apagar da linha 38 até a 42. Então, **a segunda parte do arquivo ficará assim**: # código anterior omitido resource "google_compute_instance" "PrimeiraVM" { name = "PrimeiraVM" machine_type = "e2-micro" zone = "us-central1-c" boot_disk { initialize_params { image = "debian-cloud/debian-9" } } network_interface { network = "default" access_config { // Ephemeral public IP } } metadata_startup_script = "echo oi > /teste.txt" } Pressionando "Ctrl + S", salvaremos o arquivo. Já podemos **executar essas configurações para verificar se funcionam**. Na barra superior do VS Code, vamos em "Terminal > Novo Terminal". No terminal, vamos checar se estamos na pasta GCP. Uma vez dentro da pasta, executaremos o comando ls para verificar se os arquivos estão conforme o esperado: temos chave.json e main.tf. Tudo em ordem, vamos rodar um clear para limpar o terminal. Então, vamos **executar o comando terraform init** para iniciar todas as configurações do Terrafom, fazer o *download* da infraestrutura do provedor e deixar tudo pronto para a execução. Terminado esse processo, vamos **rodar o terraform apply**. Assim, a ideia é pegar o nosso plano e criar uma *compute instance* chamada PrimeiraVM. No console, podemos verificar todas as configurações dessa instância e, ao final, temos o plano total "Plan: 1 to add, 0 to change, 0 to destroy" (1 para criar, 0 para mudar e 0 para destruir). Para confirmar, digitaremos "yes". Durante essa operação, teremos um erro alegando que o nome "PrimeiraVM" é inválido, pois não podemos usar letras maiúsculas, apenas caracteres no padrão [a-z0-9]. Logo, na linha 19 do arquivo main.tf, vamos alterar para name = "primeiravm" e salvar. Em seguida, executaremos o terraform apply novamente, digitaremos "yes" para confirmar e esperaremos enquanto esse processo é executado. No meu caso, a operação foi rápida, apenas 11 segundos. Mas esse tempo pode variar de acordo com a conexão da internet ou da carga sobre os servidores do Google e assim por diante. Para verificar se a máquina foi devidamente criada, vamos voltar ao console do Google Cloud Platform, no navegador. No menu, vamos em "Compute Engine". Nesta página, há uma tabela com as instâncias de máquina virtual e veremos a "primeiravm". O IP dela está na coluna "External IP". Para acessá-la via SSH, selecionaremos o *checkbox* à esquerda e clicaremos no botão "SSH". Dessa forma, a chave SSH será colocada dentro da nossa máquina virtual, pois não fizemos isso antes. Essa é uma das vantagem do Google sobre a AWS: não precisamos colocar as chaves logo que criamos a máquina, ele faz esse procedimento para nós depois. Após alguns segundos, estaremos na nossa máquina. Vamos executar o comando ls / para ver os arquivos que temos dentro da máquina virtual. Um deles é o teste.txt, vamos abri-lo com cat /teste.text. Veremos o texto "oi" que configuramos anteriormente, ou seja, a instância foi criada e o arquivo .txt foi inserido no *root* da máquina virtual. Pronto, criamos a configuramos uma máquina virtual com o Google Cloud! **E se não quisermos mais essa infraestrutura?** Podemos encerrá-la por meio do comando terraform destroy, que vai **destruir a infraestrutura**. Assim, o plano não terá nada para criar ou modificar e um recurso para destruir. Vamos digitar "yes" para confirmar a ação e a máquina será apagada. No meu caso, esse processo demorou 37 segundos, mas esse tempo pode variar. Dessa forma, a infraestrutura foi destruída. O projeto não foi apagado, apenas removemos a infraestrutura, que podia gerar custos. Agora que vimos tudo isso, vamos elencar as **diferenças entre a máquina virtual que criamos no Google Cloud e uma máquina virtual que geralmente criamos na AWS**. Primeiro, no arquivo main.tf, no bloco terrafom que vai da linha 1 a 8, temos que trocar o nome do provedor, bem como o source. Além disso, o método de utilizar credenciais e fazer *login* no Google e na AWS são diferentes. Na AWS, fazemos o *login* pela linha de comando com aws configure. No Google, usamos credenciais via arquivo. O recurso criado também muda de nome entre esses dois provedores. **Na AWS, temos o EC2 Instance e, no Google, o Google Compute Instance**. São nomes e recursos diferentes e também têm configurações distintas. Por exemplo, na AWS especificamos zonas por VPC, não por máquinas. Ambos, porém, precisam de um nome e de um tipo de maáquina (machine_type). Quanto ao boot_disk, no Google definimos pela imagem. No caso, escolhemos o Debian, versão 9. Na AWS, usamos as AMIs, que são parecidas, porém têm nome diferente. Precisamos saber a AMI correta para cada região. Em questão de rede, na AWS não precisamos configurar uma interface de rede. Ele já vem com uma interface e um IP público por padrão. No Google Cloud, temos que especificar esses elementos. Ademais, temos o metadata_startup_script que determina o que será feito inicialmente, em que inserimos o código entre aspas. Na AWS, esse processo é mais complicado, temos que colocar o end_of_file ou end_of_tape, algo nesse sentido para identificar onde começa e onde termina. De forma geral, **esses provedores são bem próximos em termos de criação**. O Google também fornece uma VPC padrão, que é um jeito que de acessarmos essas máquinas. Por fim, vamos revisar tudo que fizemos nesse vídeo. Criamos um projeto e uma chave de acesso para acessá-lo. Depois, configuramos uma máquina virtual do tipo e2-micro (suportada no *free tier*) e especificamos a zona onde ela ficaria — no *datacenter* central dos Estados Unidos, na zona de disponibilidade C. Determinamos o sistema utilizado na máquina, uma interface de rede e um *script* para rodar na criação da instância. Espero que você tenham gostado. Até o próximo Alura+!

  • Mobile

    Crie seu primeiro aplicativo de IA generativa no Android Studio

    Uma das maneiras de manter as pessoas usuárias cada vez mais em nossos aplicativos é fornecer **experiências mais ricas e personalizadas**. Nesse contexto, ter uma espécie de inteligência artificial que entenda o que a pessoa usuária está fazendo e seja capaz de interagir com ela é muito útil. Vamos começar a utilizar o *Gemini* dentro de nossos aplicativos e quem vai te acompanhar nessa jornada é o Junior Martins. > **Audiodescrição**: Junior é uma pessoa de pele clara, cabelos castanho-escuros compridos, que usa óculos com armação preta e também veste uma camiseta na cor preta. Ele está à frente de uma parede branca iluminada por luzes em degradê que vão do azul ao rosa. Durante esse conteúdo, queremos mostrar especificamente o que é o *Gemini*, que, caso você não conheça, é uma **ferramenta de inteligência artificial desenvolvida pelo Google** que, como eles mesmos comentam, foi desenvolvida para concorrer com o já conhecido *ChatGPT*. Ele faz parte de um modelo de inteligência artificial que são as IAs generativas onde podemos introduzir alguma informação, como um texto, uma imagem e ela será capaz de devolver mais informações. É muito comum, por exemplo, enviar um texto e pedir para ela resumir, criar uma história, gerar algum código, resolver algum problema ou mesmo passar alguma informação, como uma imagem, e pedir para ela trabalhar em cima disso. ## Explorando o Gemini do Google O *Gemini* é dividido em **três modelos principais**: temos o *Gemini Ultra*, uma versão muito mais potente, que geralmente é feita para rodar em servidores; o *Gemini Pro*, nas versões 1.0 e, mais recentemente 1.5, que é a versão que mais costumamos usar, mas ainda é uma versão que roda em servidores; e também o *Gemini Nano*, desenvolvido especialmente para rodar em dispositivos móveis, como smartphones. Na documentação do Google, eles explicam um pouco melhor o que é o *Gemini Nano*, dando uma introdução e explicando que ele está disponível apenas para alguns dispositivos. Se deslizarmos um pouco para baixo, no tópico “Benefícios da execução do dispositivo”, é comentado que essa versão roda diretamente no dispositivo, ou seja, ele não se conecta a nada para poder funcionar, tanto que temos o acesso offline de tudo que o *Gemini* é capaz. Mas, justamente por ele ter esse poder de processamento utilizando o próprio dispositivo como base, precisaremos ter alguns dispositivos muito potentes, com hardware muito bom, para poder rodar o *Gemini Nano*. E por isso que não vamos focar muito nele, afinal poucos dispositivos hoje em dia possuem essa versão. Dentro dessa própria documentação já é descrito que caso queiramos utilizar o *Gemini* em aplicativos, mas não tenhamos um desses dispositivos ou não queiramos focar especificamente no *Gemini Nano*, podemos utilizar a outra versão do *Gemini*, que é o *Gemini Pro*, dentro de nossos aplicativos. E por isso temos uma outra documentação com alguns exemplos de código. Se subirmos um pouco para o topo, teremos um cabeçalho semelhante àquele que já conferimos do *Gemini Nano*, mas com o título “Como usar a API Gemini em apps Android (SDK do cliente)”. Ou seja, podemos colocar um código dentro do nosso aplicativo que vai acessar o *Gemini* remotamente. Nesse caso, precisaremos fazer uma série de configurações que é descrita dentro dessa documentação, como por exemplo, fazer a configuração da chave da API, entender quais são os métodos que o *Gemini* traz para utilizar no Android. Essa é uma página dedicada a ensinar como podemos utilizar o *Gemini* através de APIs REST. Mas é descrito também que o próprio Google já preparou um *SDK* do *Gemini*, então podemos ir deslizando e conhecendo um pouco melhor desse *SDK*, com alguns códigos que funcionam de maneira mais simples, sem precisarmos de implementações tão complexas para poder começar. Mesmo assim, se continuarmos deslizando para baixo, veremos que alguns passos são necessários para poder utilizar o Gemini. Pensando nisso, o Google também tem trabalhado em um novo recurso dentro do próprio Android Studio, para facilitar nosso primeiro contato com o Gemini. Acessando a página do site Android Developers, acessaremos a aba “Desenvolver > Android Studio > Visualizar” e chegaremos à página “Criar seu primeiro app de IA generativa no Android Studio”. Aqui, temos a informação de que o Android Studio possui uma nova opção. ## Iniciando o projeto Se deslizarmos um pouco para conhecer, quando clicamos em “Criar um novo projeto”, aparecerá essa opção que é a Gemini API Starter. Se continuarmos deslizando para baixo, veremos algumas imagens, um passo a passo relativamente simples, sobre como utilizar essa função e quais são os passos que podemos seguir para continuar com ela. Porém, um detalhe que precisamos ficar atentos é sobre a **versão do Android Studio** em que essa função está disponível. Estamos com o Android Studio aberto, especificamente no Android Studio Koala 2024.1.1 Canary 3. É um número de versão bem grande, mas precisamos nos atentar de que essa nova opção que acabamos de visualizar na documentação só existe por enquanto nas **versões betas do Android Studio**. Vamos deixar especificamente essa versão para você poder fazer o download, e se quiser utilizar uma versão mais recente do Android Studio que esteja em beta, recomendamos que utilize a ferramenta Toolbox, que aparece no canto direito da tela. É uma ferramenta oficial da JetBrains, e recomendamos o uso dela. Pode ser que você tenha essa mesma versão, a Koala, instalada, mas que ela esteja em alguma versão futura, Canary 10, por exemplo, e ela não tem essa opção. Então, recomendo que você utilize o Toolbox, localize o Android Studio, clique nos três pontinhos verticais do lado direito dessa opção, clique em “Outras versões” no menu suspenso. Aqui dentro, você terá uma lista de versões. Geralmente esses recursos em teste beta costumam ficar nas versões Canary mais recentes. Por exemplo, temos a Koala nesse momento, mas um recurso que já esteve em versões anteriores, como, por exemplo, a Jellyfish 2023.3.1 Beta 2, mas que, por exemplo, nessa Jellyfish Beta 2, uma versão mais recente, não está mais presente. De qualquer maneira, repito que vamos deixar essa mesma exata versão para você poder fazer o uso. Com essa versão, quando clicamos em “New Project”, temos ali a opção Gemini API Starter, ou API Starter. Quando clicamos nessa opção, podemos perceber que ela está com uma tag de preview, que está em amarelo com texto preto no topo à direita. Essa tag vem sendo adicionada em recursos beta do Android Studio, então toda parte do Material Design, do Jetpack Compose, em algum momento esteve também com essa tag, e hoje em dia está de maneira oficial no próprio Android Studio. Então, pode ser que no futuro você não tenha mais essa tag, mas a opção já esteja ali nativamente. Podemos clicar no botão “Next”, e vamos seguir então com a criação de um projeto comum. Podemos, por exemplo, definir um nome, que vamos deixar como “GenIA”, e vamos deixar o pacote com com.alura.genia, que é a nossa Generate AI. Não precisamos alterar nenhum outro parâmetro. Vamos deixar a opção de Kotlin DSL como está e clicar no botão “Next”, e aqui tem um detalhe que precisamos prestar um pouco de atenção. Quando clicarmos no botão “Generate API key with Google AI Studio”, ele vai abrir um novo site no nosso navegador. Caso você nunca tenha acessado esse site, a primeira coisa que vai aparecer é um aviso de termos de serviço, e você pode marcar a primeira caixinha para poder aceitar esses termos e poder utilizar o Gemini. Vamos clicar na opção “Continue”, depois de marcar essa primeira caixinha, recomendamos que você leia as licenças, e logo de cara já teremos então essa tela de “API keys”, e você pode clicar em “Create API Key” no centro da página. Quando fizermos isso, ele abrir uma nova aba e pedir para criar uma chave novamente, podemos clicar em “Create API key in new project”. O objetivo aqui é gerar uma chave que conecta nossa conta a algum projeto do Android, que teremos disponibilizado na plataforma da Google. Para a Google ter um controle de quem está utilizando essa API, precisamos gerar uma chave, similar ao que vários outros serviços já fazem. Essa chave é uma sequência alfanumérica e depois que ela for gerada, podemos clicar em “*Copy*” (Copiar). Agora, podemos voltar para o nosso projeto no Android Studio. De volta no Android Studio, podemos colar a chave no campo “API Key” que estava vazio. > **Atenção:** recomendamos que você não compartilhe essa chave com ninguém, porque ela está justamente ligada à sua conta da Google. Nesse caso, vamos utilizar essa chave agora, depois que terminarmos de gravar, vamos invalidá-la, então você também não vai conseguir utilizá-la. Feito isso, podemos clicar em *Finish* (Finalizar), e aguardar o projeto ser construído. Então, ele vai abrir o projeto e fazer algumas configurações, é um procedimento um pouco demorado, teremos um erro que deve surgir no projeto que foi compilado. Esse erro vai ser justamente no arquivo MainActivity, que ele deve abrir por padrão, e na nossa MainActivity, que é a nossa tela principal, o BuildConfig provavelmente não vai ser reconhecido. Isso acontece porque esse arquivo de BuildConfig está relacionado a alguma das opções que veremos lá na própria documentação do Gemini, para poder configurar as chaves de maneira segura. Não vamos aprofundar muito nisso, vamos apenas corrigir esse erro. Ele dá a opção de fazer o *Import Class* nesse momento, só que se fizermos o *Import Class* dessa classe padrão, ele provavelmente não vai funcionar. Então, recomendamos que você clique na opção para poder construir o nosso projeto novamente, no topo da interface temos o ícone de um martelo que corresponde à opção “*Make Module*”. Vamos clicar nessa opção no canto superior do Android Studio, ali na parte direita, e vamos aguardar ele fazer o *build* do Gradle na parte inferior do Android Studio. Nosso projeto terminou de fazer o *build*, e ele já trouxe o erro que está na linha 50. Para corrigir esse erro, podemos simplesmente apagar esse BuildConfig.apiKey da linha 50, e começar a escrever BuildConfig novamente. Duas opções devem aparecer, sendo que precisamos selecionar aquela que tem o com. seguido do nome do nosso pacote, que no nosso caso é o com.alura.genia. Podemos então colocar um ponto no final e deve aparecer a sugestão “*apiKey*”, podemos selecioná-lo. val generativeModel = GenerativeModel( modelName = "gemini-pro", apiKey = com.alura.genia.BuildConfig.apiKey ) Se usarmos o atalho “Ctrl + B” nesse “*apiKey*”, a mesma chave que acabamos de girar no site da Google vai estar armazenada nesse projeto, de uma maneira segura, gerada automaticamente pelo plugin do Gradle. Podemos então rodar o nosso aplicativo com o “Shift + F10”, e ver que esse projeto já está todo configurado, podemos apenas testá-lo. O nosso aplicativo rodou, já estamos indo com o nosso emulador em tela, e das várias funcionalidades que o Gemini tem, uma delas é **sintetizar um texto**, ou seja, fazer um resumo de um texto que passamos. ## Resumindo um texto com o Gemini Quando rodamos o aplicativo, a primeira coisa que ele vai sugerir nessa interface, que tem justamente um campo para poder inserir informações, é digitar um texto e pedir para ele se resumir (“Enter text or a URL to summarize”). Então, pegaremos um texto bem extenso, que é um texto da documentação do Gemini, vamos clicar na caixa de texto e colar. É um texto com várias linhas que descreve o Gemini, como ele é um concorrente do ChatGPT, e podemos clicar na opção “*Go*” depois de colar esse texto. Ele vai fazer um pequeno *loading*. Esse *loading* é basicamente o nosso aplicativo consultando a API do Gemini, mandando essas informações que a pessoa usuária, que no nosso caso somos nós, inserimos e trazendo algum resultado. Então, tínhamos um texto com várias linhas e pedimos para ele ser resumido, sintetizado. Agora temos um texto muito menor, mas que ainda contém toda a essência do texto anterior. Ou seja, o texto foi interpretado e resumido mantendo os principais pontos-chave com relação às tecnologias. Foram mantidos o *Google DeepMind*, *Gemini*, *ChatGPT*, dentre outras. Se voltarmos para o código que temos além do emulador, podemos perceber que na MainActivity é chamado o SummarizeViewModel. Podemos clicar nele e usar o atalho “CTRL + B”, que vai nos redirecionar para o arquivo “SummarizeViewModel.kt”. Dentro desse ViewModel temos um sistema muito similar ao que nós já utilizamos em vários outros cursos, seguindo a documentação oficial do Android. É dito que uma configuração específica foi feita utilizando a API do *Gemini* para que, toda vez que ele passar na linha val prompt = “Summarize the following text for me: $inputText”, ele pegar o texto que a pessoa usuária colocou e adicionar essa nova instrução, que é a de resumir o texto. Mas, se quisermos, podemos fazer o *Gemini* não ter nenhuma instrução anterior para poder entender um pouco melhor como utilizá-lo. Essa é uma ideia bem simples de adaptar nesse código: ao invés de fazer esse val prompt conter todo esse texto “Summarize the following text for me:”podemos fazer o val prompt ser igual apenas ao inputText. fun summarize(inputText: String) { _uiState.value = SummarizeUiState.Loading val prompt = inputText } E se rodarmos o nosso projeto com essa única modificação e aguardarmos ele subir, a partir de agora, dentro desse nosso emulador, temos todo acesso ao potencial do *Gemini* com relação a texto. Então, podemos dar qualquer instrução para ele que ele vai seguir. Por exemplo, vamos clicar em Text to Summarize no nosso aplicativo e colar o texto “liste as 10 primeiras versões do Android”. Vamos clicar em “Go” e o *Gemini* tem justamente todo o conhecimento sobre as versões do Android. Ele vai trazer uma lista, inclusive enumerada, com várias das primeiras versões do Android. 1. Android Alpha 2. Android Beta 3. Android Cupcake (1.5) 4. Android Donut (1.6) 5. Android Eclair (2.0-2.1) 6. Android Froyo (2.2) 7. Android Gingerbread (2.3-2.3.7) 8. Android Honeycomb (3.0-3.2.6) 9. Android Ice Cream Sandwich (4.0-4.0.4) 10. Android Jelly Bean (4.1-4.3.1) Podemos passar várias informações, pedir para ele gerar histórias, para ele organizar listas, gerar códigos. E foi muito rápido o acesso que tivemos. Podemos começar a explorar a possibilidade de utilizar o *Gemini* sem precisar fazer uma série de configurações. Inclusive essa mesma do Build Gradle que vimos, ela é um pouco mais complicada, mas já vem por padrão feita e é algo que não precisamos nos preocupar. Porém, o *Gemini* também tem a possibilidade de lidarmos com outros tipos de informação. Para isso, podemos voltar mais uma vez ao nosso código no Android Studio e se clicarmos no menu principal no canto superior esquerdo, e selecionar “File > New > Import Sample”. Ele vai abrir uma nova janela. Na caixa de texto dessa janela, podemos digitar “IA” ou “Generate” e aparecerão alguns exemplos logo abaixo. Vamos selecionar o “*Google Generative IA Sample for Android (Kotlin)*”, logo abaixo de “*Jetpack Compose Layouts*”. A inteligência artificial está em versão beta, então temos a opção “*Google Generative IA Sample for Android (Kotlin)*” duplicada, aparecendo também sob a categoria de *Artificial Intelligence*. No fim das contas, podemos clicar em qualquer um dos dois “*Google Generative*”, ele vai trazer o mesmo exemplo. Selecionando essa opção e clicando em “Next”, ele sugere que criemos um novo projeto. Esse projeto, através do samples, é bem mais completo. E vamos deixar a configuração padrão que ele escolheu. Vamos clicar em “Finish” e aguardar ele gerar esse novo projeto com esse novo exemplo. Nosso projeto terminou de buildar. Já fizemos aquelas correções também com relação à nossa chave que vimos no projeto anterior. A única diferença é que aqui ela está no “GenerativeViewModelFactory.kt”, e está em mais de um lugar. Mas foi só adicioná-la no “local properties”. Já adicionamos o apiKey e buildamos o projeto. Temos um projeto mais robusto com vários exemplos de implementação do *Gemini* que você pode adaptar e também entender melhor estudando como ele funciona. Uma diferença que teremos é que aqui já são definidos vários tipos de modelos diferentes ao longo do código deste *ViewModel*. Então temos o *Gemini Pro*, o *Gemini Pro Vision*, o *Gemini Pro Normal*. ## Outras possibilidades de uso do Gemini Ao executar o projeto que acabamos de importar neste sample, teremos o aplicativo com três opções principais: “Generate text from text-only input”, “Generate text from text-and-image input (multimodal)” e “Build multi-turn conversations (chat)”. Estamos com o meu emulador disponível. Temos algumas opções para, por exemplo, explorar o modo chat, que é a última opção. Temos a opção para poder explorar o modo texto, que é a primeira. Mas a opção mais interessante nesse caso é a do meio, *Generate text from text-and-image input* (Gerar Texto a partir de Entrada de Texto e Imagem). Se clicarmos em *Try It* (Experimente), podemos adicionar algumas imagens de texto às informações que vamos inserir. Ou seja, se você, como pessoa desenvolvedora, quer criar um aplicativo em que o usuário pode enviar uma imagem, fazer uma pergunta ou, por exemplo, trabalhar em cima de alguma resposta com base no que o usuário acabou de fotografar, este é um código que você pode utilizar de exemplo. Se clicarmos no botão *Mais* (ícone de soma do lado esquerdo do campo “Question”), ele vai trazer a galeria do Android. Temos uma foto de uma pessoa e vamos enviar essa foto. Selecionamos a imagem e vamos digitar no campo de texto uma informação que é a seguinte: “qual é o nome do principal objeto do esporte que essa pessoa praticava?”. Vamos clicar em “*Go*” e vou aguardar a resposta. Aguardamos um pouco, já temos a resposta e a resposta foi bem direta (“Bola”), mas vamos explicar rapidamente o que aconteceu: A foto que selecionamos quando clicamos no botão de *Mais* é a foto do jogador de futebol Pelé. E o que o *Gemini* fez foi basicamente pegar essa imagem, fazer um *scan* dela, entender quem era a pessoa que estava presente, depois ele foi procurar se essa pessoa jogava algum esporte, entendeu o que era o futebol, depois ele foi ver qual é o principal objeto utilizado no futebol. Então teve toda uma **linha de raciocínio** que o *Gemini* fez através da entrada de uma imagem e também de texto para poder fornecer uma resposta. Ela foi bem sucinta, mas é apenas para poder demonstrar o potencial que existe ao fazer o uso dessa ferramenta nos nossos aplicativos. Demos esse exemplo um pouco mais complexo, mas justamente para poder mostrar que se você souber aproveitar esse recurso, pode criar aplicações realmente muito úteis para o usuário final. Vamos deixar os links de tudo que visualizamos abaixo para você poder acessar. Se estiver vendo este vídeo em alguma rede social, não se esqueça de clicar nos botões de gostei para sinalizar que curtiu esse conteúdo. Muito obrigado pela sua presença e até mais! ### Outros links e informações relevantes: - [Conheça o Google Gemini.]( - [Documentação do Gemini Nano.]( - [Documentação SDK do Gemini para Android.]( - [Gemini API Starter no Android Studio.](

  • Back-end

    Quality Assurance e entrega contínua

    Neste vídeo você vai conhecer como QA e entrega contínua (continuous delivery) se encaixam. Se você quiser conhecer mais de DevOps, pode começar pela formação [Primeiros passos em DevOps]( Se você estiver estudando QA, não deixe de conferir a nossa formação [Carreira QA: processos e automação de testes]( # Transcrição *Quality assurance* (em português, garantia de qualidade) ou QA e entrega contínua. Vamos ver o que esses dois têm a ver? Olá, sou o Vinicius Dias e sejam bem-vindos à Alura. Quero bater um papo bem rápido com vocês sobre como podemos aumentar a qualidade dos nossos *deploys*, digamos assim. Quero mostrar qual a relação entre QA e entrega contínua. O que esses dois têm a ver, qual a relação entre eles e como um depende do outro. Vamos entender primeiro o que é QA. Para quem me conhece, sabe que gosto de pegar uma definição formal da internet para depois esmiuçar. Quando pesquisamos "o que é *quality assurance*?" no Google, a resposta é exatamente a seguinte: ### O que é Quality Assurance? * "Garantia da qualidade é uma forma de prevenir erros ou falhas nos produtos manufaturados e evitar problemas ao entregar soluções ou serviços aos clientes." Quando trazemos isso para o mundo de software, significa que *quality assurance*, que chamaremos pela sigla QA, é uma forma de garantirmos que o código, sistema ou produto que estamos construindo está com uma qualidade aceitável. Para isso, existem diversas técnicas, processos e práticas para assegurar que a qualidade esteja satisfatória. Quando me refiro à qualidade aceitável, isso é um ponto muito importante, porque é muito difícil dizer se um código ou produto está bom, ou ruim. Por essa razão é fundamental definirmos critérios objetivos para impedir que um código vá para frente ou que um *deploy* aconteça, por exemplo. Precisamos ter o mínimo para certificar a qualidade do que está sendo feito, isso é um processo que aprendemos quando estudamos QA. O QA pode ser o papel de uma pessoa, de uma equipe inteira ou compartilhado entre diversas pessoas de uma equipe. Logo, QA não é uma caixa fechada, digamos assim. Existem vários profissionais dessa área que trabalham em setores distintos, como automação de testes, com testes manuais e os que trabalham mais do lado do negócio ou da equipe técnica. Como já mencionado, QA não é uma caixa fechada, existem várias práticas e técnicas que podemos utilizar para garantir a qualidade de um produto. ### Quality Assurance vs Quality Control *Quality assurance* é uma forma de garantirmos a qualidade **enquanto o produto está sendo desenvolvido**. Para quem já chamou alguma vez TDD de teste depois do *deploy*, sabe ao que estou me referindo quando falo que é comum criarmos um software, escrever um código ou gerar um produto e, no final do processo, enviar para alguém testar. Isso acontece bastante, inclusive, em alguns casos existe um profissional com essa função. Para que, após o desenvolvimento do produto ou serviço, esse profissional garanta que o que foi desenvolvido corresponde com a expectativa do produto. Essa técnica não se refere a QA, chamamos ***quality control***, o controle de qualidade. **Após o desenvolvimento, é garantido que o produto foi produzido corretamente**. Já o *quality assurance* faz parte do processo, enquanto é realizado o desenvolvimento, existem práticas a serem aplicadas para garantir que está sendo desenvolvido da melhor forma. Repare que QA envolve toda a parte do processo de desenvolvimento e, de fato, faz parte do processo. Não é apenas um momento pontual que adicionamos, como o teste depois do *deploy* ou quando perguntamos para a pessoa se ela já finalizou a tarefa e ela responde: "Está pronto, só falta testar". Esse "só falta testar" é o *quality control*, o *quality assurance* vai muito além disso. Essa prática de ter uma garantia de qualidade como um processo no nosso software permite diversas coisas. Tem um ponto interessante nos "Princípios por trás do manifesto ágil", o primeiro. Em que a prioridade é satisfazer o cliente e, com isso, realizar entregas o mais cedo possível através de **entregas contínuas** um software de valor. ### Principais princípios por trás do manifesto ágil * “Nossa maior prioridade é **satisfazer o cliente**, através da *entrega adiantada e contínua* de software de valor.” Essa frase nos diz que precisamos garantir que as entregas sejam contínuas, sendo o nome de um **conjunto de práticas** também. Logo, **entrega contínua** é o conceito que você possui um processo muito bem definido com QA, também bem definido, em que a entrega do software é feita de forma contínua. Por exemplo, se temos o planejamento de uma *feature* que passa pelo desenvolvimento, em que é realizado os testes necessários, gerando um *build* que passa pelo *quality control* que pode ir para outro ambiente para a verificação, e em seguida é feito o *deploy*. Isso gera uma entrega. Todo esse processo sendo feito de forma contínua e automatizada é o princípio por trás de entrega contínua. Repare que sem o *quality assurance* a entrega contínua se torna algo utópico. Poderíamos até cogitar a possibilidade de ter algo assim, mas se não existem processos para garantir a qualidade do que está sendo feito, como teríamos confiança para realizar uma entrega de software de maneira contínua, de forma, inclusive, automatizada? Logo, precisamos de QA para atingir entregas contínuas. A entrega contínua tem como núcleo a **build pipeline**. Basicamente é uma esteira de geração, podemos chamar assim. No *build pipeline* temos algumas etapas e dentro de cada uma dessas etapas existem processos de QA. ![Esquema visual sequencial contendo as seguintes etapas: "Plan", "Develop", "Build", "Test", "Deploy" e "Operate"]( No momento do **planejamento**, há processos de QA para garantir que está sendo feito da forma correta, com a descrição do que precisamos da forma correta também. Na etapa de **desenvolvimento** temos as boas práticas de programação, criação de testes, entre outros processos. Na hora de fazer o ***build***, é como garantimos que estamos utilizando tudo do ambiente correto e como automatizamos essa mudança de ambientes. Realizar aquele **teste**, o *quality control*. Fazer o **deploy**, que pode ser feito de maneira contínua ou não. Talvez essa etapa seja manual por uma necessidade de negócio. Por exemplo, queremos agrupar diversas *features* que passaram por essa entrega contínua, logo a *feature* foi entregue, mas queremos agrupar para gerar uma versão, então o *deploy* vai ser manual. Contudo, se tivermos um *deploy* que é um **evento**, por exemplo, não podemos realizar às sextas-feiras ou perto de terminar o expediente, visto que precisa ter um desenvolvedor à disposição caso aconteça um erro. Isso significa que provavelmente está faltando a parte de *quality assurance*, o processo da garantia de qualidade no desenvolvimento do software. Quando temos um *build pipeline* utilizando integração contínua para chegar na entrega contínua, o que atingimos é o **feedback contínuo**. Isso até poderia virar um vídeo à parte, mas basicamente quando aplicamos essas práticas estamos garantindo que em cada etapa do processo temos um feedback, que estamos indo pelo caminho correto. Caso aconteça um erro, vamos errar pequeno e mais rápido. É justamente o princípio do manifesto ágil. Então, *quality assurance* leva à possibilidade de termos entregas contínuas. Esta está diretamente relacionada aos processos ágeis, sendo um assunto bem interessante. Inclusive, fica o convite que na plataforma da Alura existem treinamentos tanto de *quality assurance* quanto de entrega contínua, com vários elementos satélites, como integração contínua, testes e muito mais. Esses são os conceitos de *quality assurance* e entrega contínua.

  • Gestão & Negócios

    Como se apresentar no mundo virtual

    Neste vídeo você irá aprender as diferenças de uma apresentação presencial para uma virtual e como adaptar sua fala. Descubra quais são os principais pontos de atenção e como superá-los.# TranscriçãoOlá, pessoal! Eu sou o professor Sérgio Carvalho e hoje falaremos sobre um assunto importantíssimo: **como se apresentar no mundo virtual**.Nos últimos tempos tivemos uma maior necessidade – muita gente já era acostumada a fazer reuniões, apresentações, palestras utilizando meios digitais. Mas, com certeza, nesse momento isso foi exigido em um nível maior.Será que existe diferença entre uma apresentação presencial e uma apresentação virtual? Se existe, como fazer para extrair o melhor da nossa fala em uma apresentação virtual?## Variáveis para uma boa apresentação* Chave* Preparação* Sentimento* TécnicaComeçando pela base: a base para uma boa apresentação virtual é a mesma. Independentemente de ser presencial ou virtual. Ela envolve alguns aspectos específicos, ou melhor, pilares para ter sucesso. O primeiro desses pilares é a chave para uma comunicação eficaz, que se resume a mudar o foco de si mesmo para colocar o foco no público. Em outras palavras, é preciso pensar em quem vai receber a mensagem, se a mensagem é adequada para essa pessoa, se o formato é adequado e se está claro para ela.Dessa forma, se a pessoa que está ouvindo não compreender a mensagem, a apresentação não será eficaz. Logo, é fundamental ter cuidado ao direcionar a mensagem.Além disso, a preparação adequada torna-se essencial. Essa preparação envolve a criação de um roteiro, uma estruturação em tópicos e treinamentos para qualquer alteração necessária antes da apresentação. No momento em que estivermos falando, devemos transmitir verdade, energia e motivação, passar confiança naquilo que estamos falando.A melhor maneira de transmitir o sentimento de confiança é acreditando no que dizemos. Mas, como fazemos isso? Estudando e dominando bem o assunto e acreditando que essa é uma informação importante para a pessoa que vai ouvir.Por fim, a técnica é o último ponto nessa caminhada para uma boa apresentação. Ainda que seja importante, ela serve para aprimorar os aspectos anteriores. Então, para determinar qual é a velocidade adequada para falar, se devemos utilizar recursos visuais ou não, tudo isso é técnica e funcionará bem, desde que os outros três pilares estejam alinhados.## Apresentações presenciaisEm apresentações presenciais, a grande vantagem é a **interação** e o **feedback** ao vivo das pessoas. Se estiver falando para um público de 15, 20, 100 ou mil pessoas, poderá ver a reação delas ao que é dito.Então, se contar uma piada, poderá ver se funcionou ou não. Caso perceba que as pessoas estão perdendo o foco, poderá fazer pausas ou mudanças na apresentação, como pedir para que todas as pessoas se levantem. Esses feedbacks instantâneos são fundamentais em uma apresentação presencial, pois permitem ajustes e correções para garantir que a apresentação seja bem-sucedida.## Apresentações virtuaisPor outro lado, nas apresentações virtuais, não temos o feedback e a interação imediata das pessoas. Por isso, é preciso tomar alguns cuidados importantes e utilizar algumas ferramentas para contornar essa situação. A primeira delas é o uso de recursos visuais.Imagine que, em uma apresentação virtual, se a pessoa só estiver falando, sem apresentação visual, isso pode ser um erro. Não temos como garantir que a internet da pessoa está funcionando bem. A sua pode estar, mas a da pessoa que está assistindo pode não estar. Pode ocorrer instabilidades como cortes na conexão e problemas de áudio que prejudicam a compreensão. Muitas vezes, alguma pessoa pode estar num ambiente com barulho, o que também prejudica a participação.Para melhorar o envolvimento e o engajamento das pessoas, que tal utilizar **recursos visuais**? Você pode, por exemplo, utilizar uma apresentação, inserir músicas, vídeos, ou seja, tudo que possibilite tornar a apresentação mais dinâmica e interessante para a pessoa, mesmo que ela esteja à distância ou tenha distrações, como mexer no celular, por exemplo.A utilização de recursos visuais é sempre muito importante em apresentações virtuais.Outra sugestão é a interação com **aplicativos**. Embora você não possa interagir pessoalmente como faria num encontro presencial, existem muitas ferramentas que permitem chamar a atenção e encorajar a participação das pessoas no ambiente virtual. Você pode utilizar ferramentas de questionários, pesquisas e concursos, por exemplo.No geral, é fundamental incentivar a participação do público em suas apresentações. Embora às vezes seja possível fazer uma apresentação sem interação, caso sua apresentação seja mais longa (por exemplo, mais de 40 minutos), é recomendado que as pessoas participem. Se você está fazendo uma apresentação virtual, procure por aplicativos interativos, que possam trazer um interesse maior para o público.Além disso, também é fundamental a **fala constante**. Enquanto no ambiente presencial você pode usar o silêncio de forma interessante para adicionar drama ou suspense à sua fala, no ambiente virtual isso pode ser problemático.Isso porque, sem a garantia de que as pessoas estão ouvindo bem, ou que a internet está estável, usar o silêncio pode ser prejudicial. Não estou sugerindo que fale sem parar, mas utilizar o silêncio como uma ferramenta de comunicação não verbal, como no presencial, não funcionará tão bem no virtual.Então, aqui vão algumas dicas para uma boa apresentação virtual:* Utilize recursos visuais para tornar a apresentação mais dinâmica;* Incentive a interação do público com o uso de aplicativos;* Mantenha a fala constante.## Preparação* Posicionamento* Luz* Fundo* ÁudioA preparação prévia também é fundamental. Certifique-se de que você está posicionado corretamente em frente à câmera. Isso é algo que você deve testar antes, abrindo o vídeo, se posicionando, verificando se está adequado, com uma postura e roupas adequadas. A iluminação também é um ponto importante. Lembre-se de que a luz deve estar sempre à sua frente para que você fique bem iluminado. Se a luz estiver atrás de você, as pessoas verão apenas um borrão devido ao excesso de luz.Então, tenha cuidado com isso. A luz deve sempre ser posicionada à sua frente ou à sua lateral. Quanto ao fundo, ele está adequado? Será que há bagunça? Há algo que não deveria estar ali no contexto da apresentação? Por isso, é importante testar o seu posicionamento, a iluminação, e o fundo antes da apresentação.Contudo, aquilo que eu considero como o mais importante é o áudio. Não há nada mais desagradável do que estar numa reunião, numa apresentação, numa aula e o áudio da pessoa que está falando não funcionar bem. O áudio realmente é o que conduz a apresentação. Você pode até utilizar um slide, e isso vai ajudar, mas é a fala que conduz. Se o áudio não estiver adequado, você terá um grande problema.Então, se você tiver que priorizar algo, é melhor ter um áudio 100% funcionando. Isso garante que a pessoa está prestando atenção, está ouvindo bem, o conteúdo está fluindo bem e, por consequência, ela pode acompanhar, ainda que a sua imagem não esteja perfeita.Se você não tem um microfone profissional, utilize fones de ouvido, pois geralmente o captador de som direto do seu computador ou do celular não é tão bom. Com o fone é mais fácil ouvir as outras pessoas e também o microfone fica mais próximo de você, tornando o áudio mais direcionado. Isso também pode ajudar a evitar ruídos e outras interferências sonoras.Com certeza, com essa preparação prévia, mais os elementos específicos de uma apresentação virtual seja uma entrevista, uma apresentação formal, uma reunião, um levantamento de dados que você está mostrando para alguém, isso vai fazer com que a sua apresentação se torne muito melhor.Desta forma, você terá uma apresentação profissional, o que é fundamental, não só para o seu crescimento pessoal, mas também para o seu crescimento profissional.Eu fico por aqui. Até a próxima. Tchau!

  • Back-end

    Classe Object C#

    # Transcrição Olá, tudo bom? Meu nome é **André Bessa**, faço parte do time de instrutores da Alura. Neste vídeo, vamos tratar da **classe Object**, muito importante na plataforma .NET. Para tratar desse assunto, vamos usar o projeto de um módulo de cliente do banco ByteBank, em que definiremos novos comportamentos para a classe Cliente. Por exemplo, podemos exibir todas as informações de um cliente de uma vez só, em vez de chamar vários métodos de ConsoleWriteLine(). Essa implementação é interessante, pois outros desenvolvedores do projeto também poderão utilizar essa classe de maneira mais fácil. Com o projeto aberto no Visual Studio Community 2022, no arquivo Program.cs, notaremos que atualmente a exibição dos dados do usuário é feita com Console.WriteLine(), um método padrão para projetos console. Já no arquivo Cliente.cs, veremos que a classe Cliente é bem simples, tem apenas suas propriedades autoimplementadas com get e set: CPF, nome, e-mail e idade. Voltando ao Program.cs, a partir da linha 3, definimos um novo objeto do tipo Cliente e passamos informações para suas quatro propriedades: Cliente cliente = new Cliente(); cliente.Nome = "André"; cliente.Cpf = "111.444.666-88"; cliente.Email = "[email protected]"; cliente.Idade 23; Na sequência, para exibir esses dados, usamos Console.WriteLine() chamando cliente.Nome, cliente.Cpf e cliente.Idade: Console.WriteLine(cliente.Nome); Console.WriteLine(cliente.Cpf); Console.WriteLine(cliente.Idade); Essa construção não está muito boa, pois estamos escrevendo três linhas de código para exibir informações do nosso objeto. Nossa meta é que o desenvolvedor consiga obter esse resultado simplesmente passando o objeto cliente como parâmetro ao Console.WriteLine(). Vamos adicionar essa opção na linha 13: using ModuloCliente; Cliente cliente = new Cliente(); cliente.Nome = "André"; cliente.Cpf = "111.444.666-88"; cliente.Email = "[email protected]"; cliente.Idade 23; Console.WriteLine(cliente.Nome); Console.WriteLine(cliente.Cpf); Console.WriteLine(cliente.Idade); Console.WriteLine(cliente); Ao posicionar o *mouse* sobre um parâmetro, é possível verificar mais informações sobre ele, como seu tipo. Nos três primeiros casos, o método Console.WriteLine() está recebendo Nome (*string*), Cpf (*string*) e Idade (inteiro). Já quando passamos cliente como parâmetro, trata-se de um **objeto** — é mais complexo, porém o código não alega nenhum erro. A classe Console tem algumas sobrecargas do método WriteLine() que recebem tipos diferentes, mas será que uma delas recebe o tipo Cliente? Para investigar esse tópico, vamos acessar os **metadados** da classe Console. Basta pressionar e segurar a tecla "Ctrl" e clicar sobre a palavra Console (por exemplo, no início da linha 13). Desse modo, abrimos os metadados da classe, onde conseguimos visualizar as propriedades e os métodos disponíveis nela. A partir da linha 1667, podemos verificar as sobrecargas do método WriteLine(): há uma que recebe bool, uma que recebe decimal, outra que recebe long e, na linha 1821, encontraremos uma sobrecarga que recebe um object. A seguir, vamos entender melhor o que é o tipo object. Voltando ao Program.cs, o Console.WriteLine() não resulta em erro quando passamos como parâmetro um objeto completo (como cliente), porque Cliente é um Object. Vamos dar uma olhada nos metadados de Object também. Na linha 15, escreveremos "Object" e clicaremos nele, segurando a tecla "Ctrl". Observando os metadados, notamos que a classe Object também tem alguns métodos disponíveis. Por exemplo, na linha 22, temos public virtual bool Equals(object? obj) — considerando nossos conhecimentos das regras de sobrecarga e sobrescrita, sabemos que esse método deve ser sobrescrito. Temos também GetHashCode(), GetType(), MemberwiseClone(), ReferenceEquals() e ToString(). Se nossa classe é um object, quer dizer que temos todos esses métodos disponíveis nela! Voltando ao Program.cs, na linha 13, vamos acrescentar um **ponto** após cliente para acessar suas propriedades e métodos. Veremos Nome, Cpf, Email e também ToString, GetType, GetHashCode, entre outros. Ou seja, a classe Cliente herda de Object! **Todas as classes do . NET herdam explícita ou implicitamente da classe Object.** Vamos remover a palavra Object da linha 13, pois não vamos usá-la mais. Em seguida, vamos ao arquivo Cliente.cs para fazer um teste. Na linha 9, para indicar que a classe Cliente herda de Object, utilizaremos o operador dois pontos (**:**) seguido da classe da qual estamos herdando: public class Cliente:Object Note que não ocorre nenhum erro, porém essa construção é redundante, pois o compilador do C# já entende que essa classe herda de Object. Tanto que já tínhamos aqueles métodos disponíveis (ToString e Equals, por exemplo). Portanto, vamos apagar :Object. Vamos relembrar qual era nosso objetivo inicial: usar um método para exibir todas as informações do objeto cliente. Para tanto, após as propriedades da classe Cliente, vamos sobrescrever o método ToString() que é virtualna classe Object. Na linha 16, basta digitarmos override e pressionar a barra de espaço para o Visual Studio mostrar algumas sugestões de métodos para sobrescrever. Ao selecionar ToString(), a IDE gerará automaticamente uma estrutura que chama ToString() da classe base, isto é, de Object: public override string ToString() { return base.ToString(); } Para testar, vamos ao Program.cs e passaremos cliente.ToString() como parâmetro do Console.WriteLine(), na linha 13: Console.WriteLine(cliente.ToString()); Em seguida, vamos rodar a aplicação, clicando no *play* no menu superior do Visual Studio. O projeto será compilado e renderizado. Como resultado, serão exibidas as propriedades que passamos aos três primeiros Console.WriteLine() seguido de "ModuloCliente.Cliente", como era mostrado anteriormente. Quando passamos um objeto para o WriteLine(), ele invoca o método ToString() do objeto. Como não há implementação, ele invoca da classe base (Object), que retorna o nome da classe. Então, na classe Cliente, em vez de retornar da classe base, vamos **redefinir o método ToString()**: public override string ToString() { return $"Nome: {this.Nome}, \n" + $"Email: {this.Email}, \n" + $"Idade: {this. Idade}, \n" + $"Cpf: {this.Cpf}"; } > A expressão \n serve para criar uma quebra de linha. Assim, definimos como as informações serão exibidas, quando invocarmos o método ToString() de Cliente. Vamos salvar e testar, pressionando o *play* na parte superior do Visual Studio. A partir da quarta linha, veremos o resultado do método ToString() de Cliente. Vale lembrar que, quando passamos o objeto completo para o Console.WriteLine(), ele também invoca o ToString(): Nome: André, Email: [email protected], Idade: 23, Cpf: 111.444.666-88 Então, aprendemos que existe uma superclasse do .NET chamada Object da qual todas as classes herdam. Não somente as classes, todos os tipos do .NET também herdam de Object, por meio da classe ValueType! Por exemplo, um inteiro, um float, um double. A Struct que representa os inteiros (o int), por exemplo, herda de ValueType. Dessa maneira, o inteiro também herda de Object pelo mecanismo da herança. Basicamente, no .NET, temos dois tipos de objetos: por referência (onde entram nossas classes) e os ValueType (os tipos de valor, como inteiro): ![Diagrama sobre a classe Object. Há três níveis. No nível inferior, à direita, há um quadrado representando Struct. No segundo nível, há dois quadrados: ValueType à direita e MinhaClasse à esquerda. No nível superior, há um grande quadrado representando Class Object, com três métodos de exemplo. Há uma seta que liga Struct a ValueType, uma seta que liga ValueType a Classe Object e uma seta que liga MinhaClasse a Class Object.]( Como tem sido sua experiência aprendendo C# e orientação a objetos na Alura? Tem gostado? Não deixe de praticar bastante. Nos vemos na próxima!

  • Mobile

    Kotlin e carreira dev na Idwall

    # TranscriçãoMeu nome é Augusto Goes, sou desenvolvedor Android e hoje falaremos um pouco sobre Kotlin e toda a potência que essa linguagem de programação tem.Kotlin é uma linguagem de programação de **código aberto**, ou seja, qualquer pessoa pode utilizar, modificar, distribuir e até visualizar o código-fonte. Ele foi criado em 2010 pela Jet Brains, uma empresa líder mundial na criação de ferramentas para o desenvolvimento e sua versão estável foi lançada apenas em 2016.Em 2017, o Google anunciou que Kotlin seria oficialmente suportado para desenvolvimento de aplicativos Android. Pouco depois, em 2019, o Google anunciou o Kotlin como a linguagem principal para desenvolvedores de aplicativos. Assim, tornou-se um projeto muito sólido.O Kotlin é **gerenciado pela Kotlin Foundation**, um grupo criado pela Jet Brains e pelo Google com a tarefa de promover e desenvolver continuamente essa linguagem de programação.O Kotlin é oficialmente **compatível com o desenvolvimento do Google para Android**, o que facilita quando precisamos buscar informações, pois sempre encontramos um campo que explique como determinado recurso funciona nessa linguagem.A seguir, vamos falar sobre os pontos positivos do Kotlin. O primeiro deles é a **interoperabilidade com o Java**, o que significa que conseguimos chamar o código Java do Kotlin e vice-versa. Dessa forma, é possível converter de forma gradual, não é necessário fazer de uma única vez. Assim podemos ter um projeto tanto em Java quanto em Kotlin.Outro ponto positivo do Kotlin é o **código mais seguro**. Com o non-null e o nullable inclusos no sistema de tipos, evitamos o problema do NullPointerException. As variáveis não são nulas por padrão, permitindo a verificação nula durante o tempo de compilação, o que reduz as ocorrências do já mencionado NullPointerException durante o tempo de execução.Segundo o Google, aplicativos que utilizam código Kotlin têm **20% menos chances de apresentar falhas**. Ainda de acordo com a empresa, essa linguagem de programação moderna e estaticamente tipada é **utilizada por mais de 60% dos desenvolvedores Android profissionais**. Ela ajuda a aumentar a produtividade, a satisfação do consumidor e a segurança do código.Um estudo realizado pela Jet Brains mostrou que o Kotlin é **utilizado em 96% dos novos projetos** e que ele está **entre as 5 linguagens de crescimento mais rápido**, ou seja, a comunidade tem aderido muito bem ao Kotlin. Alguns exemplos de aplicativos desenvolvidos com Kotlin são Netflix, Evernote, Duolingo, Amazon Kindle e meuID.Na sequência, comentarei sobre a minha trajetória. Por formação, sou engenheiro civil, contudo de coração sou desenvolvedor Android, amo essa área. Comecei estudando C++ e Java na faculdade, porém nada de modo profissional. Depois de algum tempo, não estava me adaptando bem à minha antiga função e já pensava em mudar de área, conversei com amigos desenvolvedores e eles recomendaram que eu estudasse Kotlin. Segui o conselho — não voltei a estudar C++ nem Java, fui direto para o Kotlin.Uma vantagem dessa linguagem é sua **sintaxe concisa**: comparando lado a lado um código em Kotlin com outro em Java, o primeiro é visualmente mais limpo. Ademais, por ser a linguagem oficial do Google, encontramos facilmente documentações, exemplos e bibliotecas, o que facilita bastante nosso dia a dia.Agora, vamos falar sobre a **idwall**, a empresa onde trabalho. Somos uma *regtech* criada por uma dupla de desenvolvedores. Estamos sempre buscando maneiras de solucionar vários problemas enfrentados no Brasil, como desconfiança, fraudes e burocracias.Para contextualizar: a quantia de dinheiro perdida por conta de fraudes gira em torno de 213 bilhões de reais por ano e o intervalo entre uma tentativa de fraude e outra é de 16 segundos!Nossos produtos são voltados para prevenção de fraudes e de golpes de identidade. Temos como solução o reconhecimento facial, a extração de dados de imagens de documentos e a validação de informações em fontes de dados.Sob este cenário desafiador, me juntei à idwall, mais especificamente ao time de Android do **meuID**, que é o primeiro aplicativo de identidade digital que reúne os principais documentos em um único lugar.Quando esse projeto foi iniciado em 2019, depois de muita discussão chegamos à conclusão que deveríamos usar Kotlin, porque o Google trouxe muita segurança ao estabelecer essa linguagem como a principal para desenvolvimento Android. Por isso, optamos por ela e todos seus benefícios. Até hoje, não nos arrependemos dessa decisão, tem sido ótimo trabalhar com Kotlin, desenvolvendo um aplicativo de qualidade para os usuários.Desde então, não utilizamos Kotlin apenas para desenvolvimento em Android. Fizemos diversos experimentos na idwall — alguns *scripts*, algumas POCs em *back-end*. Apesar de estarmos focados no desenvolvimento Android, essa linguagem apresenta um leque de opções.Como exemplo, recentemente criamos uma ferramenta com Kotlin para nos auxiliar em nossos *releases*. Apesar de ser um projeto de *back-end* e nossa equipe estar mais focada no dia a dia em Android, foi possível dar andamento nessa ideia e criar essa ferramenta com Kotlin. De uma maneira simples, compreendemos que não precisamos ficar presos ao desenvolvimento para Android, o Kotlin é útil para outros projetos também.Se você chegou até aqui, acredito que tenha interesse em aprender mais sobre Kotlin e você está no lugar certo. Não digo como ex-aluno, pois ainda tenho uma assinatura e, quando preciso, abro o navegador e acesso alura.com.br para tirar minhas dúvidas e fazer mais cursos. Quando decidi mudar de engenheiro civil para desenvolvedor, não pensei duas vezes e procurei pelo melhor lugar para estudar: a Alura!

  • Back-end

    Empresas que aprendem

    Você sabe qual o papel do aprendizado dentro de uma organização? **O aprendizado organizacional promove tanto a adaptação às mudanças quanto o crescimento da empresa**. Mas você tem ideia de como isso pode ser feito? Neste Alura+, Priscila Stuani fala sobre qual é o papel da organização no processo de aprendizado dos seus profissionais. As organizações possuem responsabilidades no processo de aprendizado de seus colaboradores e colaboradoras. Uma das formas de atuar nesse sentido é fomentar algumas competências, como o pensamento sistêmico, o domínio pessoal, trabalhar modelos mentais, construir uma visão compartilhada, aprendizagem em equipe, e reconhecer os padrões de interação que dificultam este aprendizado, além de estimular as tecnologias componentes. **Algumas estratégias que podem ser tomadas são: ouvir novas propostas, permitir o crescimento profissional das pessoas e incentivar interações!** Está afim de ser uma empresa que aprende? Confira as sugestões abaixo: **Cursos**: - [Aprender a Aprender: Técnicas para seu autodesenvolvimento]( Para conhecer os estilos de aprendizagem, criar rotinas produtivas e usar ferramentas para uma aprendizagem de alta performance. - [Desenvolvimento de Carreira: A demanda do mercado]( Para conhecer as principais estratégias para direcionar sua carreira. - [Alavancas de gestão do conhecimento: Aprendizagem e produtividade]( Para conhecer as cinco disciplinas propostas por Peter Senge para estruturar o processo de aprendizagem e produtividade contínua organizacional. **Podcast**: - [Cultura de Aprendizado]( **Artigo**: - [O dia a dia do profissional que aprende]( Vem **Inovar** com a gente! _____ # Transcrição Olá, eu sou **Priscila Stuani**, instrutora da Alura, e hoje vamos falar sobre as empresas que aprendem. Vamos entender qual é o papel da organização no processo de aprendizagem dos seus profissionais. Para exemplificar essa questão, vamos apresentar a **Bytebank**. Imaginemos que ela é composta por várias equipes multidisciplinares, com diversas áreas dentro da organização. Neste caso, destacaremos a área de **tecnologia da informação**. Existem várias pessoas dentro da equipe com diferentes perfis profissionais, desde aquelas em seu primeiro emprego até outras que já estão no mercado há algum tempo. O que essas pessoas têm em comum? Se a sua resposta for **desenvolver novos conhecimentos na área de programação**, faz todo sentido. Afinal, precisamos contar com alguns apoios dentro da organização. Na Bytebank, por exemplo, existe a Maria, responsável pela área de treinamento e desenvolvimento. Em outras organizações, pode ser um líder ou uma líder que exerce esse papel de acompanhar as demandas que as equipes precisam suprir em relação aos treinamentos. Maria recebe muitas demandas durante o dia, pois são várias áreas, e dentro da área de tecnologia da informação, há várias equipes que precisam desse apoio. Isso começou a gerar uma certa sensação de: > "Como acompanhar todos esses avanços para apoiar o constante processo de aprendizado das equipes?" Nesse caso, trabalharemos com a perspectiva de que existem vários profissionais que investem esforço individual e até financeiro em suas carreiras, fazendo especializações, o que é fantástico e faz todo sentido, pois acreditamos que o aprendizado é o melhor investimento que podemos fazer. Mas, e as empresas? As empresas também têm responsabilidade nesse processo. Mas como podem apoiar esses profissionais? Uma dica interessante é fomentar algumas **tecnologias componentes**, ou seja, gerar inovação para as organizações que aprendem. Profissionais que têm respostas rápidas, conseguem resolver problemas complexos em um curto período de tempo e são mais assertivos nas iniciativas acabam impactando positivamente a inovação da empresa. Para entender como tudo isso pode funcionar, é importante falar das tecnologias componentes. Quando bem integradas, elas fomentam o aprendizado nas organizações. A ideia é não focar apenas em separar um dia para deslocar a equipe para fazer um curso, que sabemos ser importante e muitas vezes ajuda a resolver situações pontuais. Quando falamos de empresas que aprendem, é importante colocar isso no DNA da organização, para que o processo flua de forma mais orgânica, e que as trocas e a forma como as pessoas interagem para resolver questões pendentes possam fluir de maneira mais tranquila e orgânica. Vamos falar de algumas competências que a organização precisa ter. ## Pensamento sistêmico A primeira delas é o pensamento sistêmico, cuja raiz está na ideia de que cada parte do sistema influencia o todo. Quando temos um problema em nosso coração, não é somente ele que fica doente; podemos comprometer outros órgãos. Quando falamos de "sistêmico", é quando algo é constituído por um conjunto de partes que se influenciam mutuamente. Na organização, quando temos um pensamento sistêmico bem alinhado, as equipes passam a trabalhar de forma mais produtiva e efetiva. A criatividade e a resolução de problemas complexos podem surgir de maneira mais natural. Fomentamos a troca de ideias e experiências, contribuindo para o processo de aprendizado contínuo das pessoas. ## Domínio pessoal Outra competência a compartilhar é o domínio pessoal. A expressão "domínio pessoal" pode sugerir controle sobre pessoas e coisas, além de um certo nível de proficiência na questão em que estamos atuando. No contexto das empresas que aprendem, pessoas com alto nível de domínio pessoal têm conquistas como concretizar resultados importantes e comprometer-se com seu aprendizado. Existe uma automotivação, uma energia que nos move para atingir o objetivo esperado. Gosto muito da frase de Peter Senge que diz o seguinte: > "**Domínio pessoal** é a disciplina de continuamente esclarecer e aprofundar na sua **visão pessoal**, de concentrar nossas energias no que realmente é importante, de desenvolver paciência e de ver a realidade objetivamente." > > **Peter Senge** Quantas vezes nos deparamos com situações que fogem do nosso controle e focamos apenas no problema, em vez de buscar soluções? Muitas vezes, buscamos culpados em vez de criar meios para resolver a situação e, em outros momentos, antever falhas para evitar perda de tempo, investimento e emoções. Domínio pessoal é uma característica fundamental que precisamos desenvolver. Na Bytebank, nem sempre foi assim. Quando não temos domínio pessoal, geramos poucos estímulos para o aprendizado das pessoas e desperdiçamos recursos. O que podemos fazer para evitar esse contexto? Podemos levantar o que tem sido feito para garantir que as pessoas na organização desenvolvam e apliquem esse domínio pessoal. Como fazemos isso? **Conversando**. Isso deve fazer parte da cultura organizacional, com um trabalho de comunicação onde as pessoas se conscientizem da importância do domínio pessoal, seus ganhos e como desenvolver essa competência. Além disso, precisamos trabalhar a questão dos modelos mentais. ## Modelos mentais Se pautamos nossas ações apenas em pressupostos arraigados, fazemos generalizações e criamos imagens que influenciam nossa forma de ver e agir, muitas vezes sem consciência, agimos no piloto automático. Este vídeo é um convite para revermos nossos modelos mentais e como reagimos diante de problemas. Quando somos contrariados, como reagimos? Talvez isso esteja ligado a esses pressupostos. É importante entender que isso faz parte do processo que passamos durante a vida, construindo essas referências. No trabalho em equipe e desenvolvimento pessoal, precisamos dar um passo atrás e ver quais são essas influências e o impacto negativo que podem ter em nossa forma de trabalhar e ser como um todo. > "O trabalho com modelos mentais começa por virar o espelho para dentro; **aprender a desenvolver nossas imagens internas do mundo** e levá-las à superfície sobre uma rigorosa análise." > > **Peter Senge** Uma das frases de Peter Senge que mais me impacta é justamente essa. É um processo contínuo, precisamos olhar para dentro para ver como estamos expondo tudo isso. Isso inclui promover conversas ricas em aprendizagem, indagações e argumentações. A ideia da Bytebank é fazer com que seus profissionais extrapolem a visão do óbvio. Sei que o óbvio é relativo, mas quando começamos a propor ideias e fazer coisas de modo diferente para verificar quais os resultados, promovemos a inovação. Falo de inovação não no sentido de tornar a empresa a grande startup do mundo, mas de ações do dia a dia que trazem impacto, ajudam a ganhar produtividade, efetividade, assertividade e um diferencial competitivo mais claro. São ações que podem parecer muito simples, mas são efetivas. ## Construção de uma visão compartilhada A construção de uma visão compartilhada precisa fazer parte do DNA da Bytebank. Vamos além da missão da empresa, internalizando missão, visão e valores para criar identificação e pertencimento ao ambiente. Quando falamos de visão compartilhada, como as pessoas estão vendo tudo isso? Trata-se de uma visão genuína sobre a empresa, essencialmente verdadeira, para evitar a impressão de que a missão no quadro da parede não corresponde à prática. O mercado está seletivo, e os profissionais também. As pessoas dão tudo de si e aprendem não só por obrigação, mas porque querem, vendo os efeitos no dia a dia e como o trabalho pode ser mais leve, sem desespero diante de problemas. A colaboração e a visão compartilhada são fundamentais nesse processo. Quando falamos de aprendizado, não há espaço para visões pessoais. Não é sobre fazer um curso porque o chefe mandou, mas sim sobre agir em função de uma visão compartilhada. Mais uma frase de Peter Senge: > "A prática da visão compartilhada envolve habilidades de descobrir 'imagens do futuro' compartilhadas que estimulem o compromisso genuíno e o envolvimento, em lugar de mera aceitação." > > **Peter Senge** As pessoas estão mais seletivas, buscando algo que faça sentido para elas. Estamos evoluindo para um patamar onde não fazemos algo apenas porque foi mandado, mas porque vemos sentido e importância, empenhando-nos para realizar a tarefa. Ao dominar essa disciplina, a liderança aprende como é contraproducente tentar ditar uma visão, por melhores que sejam suas intenções. A ideia não é julgar valores, mas reconhecer que a pessoa em liderança pode ter arraigado muitas coisas que desviam da cultura que promove o aprendizado na organização. É importante que a liderança esteja em constante auto-observação, observando também a equipe, estabelecendo relações saudáveis pautadas na confiança, para que o aprendizado surja de maneira mais tranquila, suave e real. ## Aprendizagem em equipe A aprendizagem em equipe também faz parte desse contexto. Quando compartilhamos experiências, aumentamos as chances de construir novos repertórios baseados nessas experiências, atingindo objetivos e sendo mais efetivos nas ações. Sentimos a sensação de triunfo ao resolver problemas, seja individualmente ou em equipe. Como estimular a disciplina da aprendizagem em equipes? Sabemos que enfrentamos vários desafios no dia a dia, mas basicamente é conversando, ou seja, a capacidade dos membros de deixarem de lado ideias pré-concebidas e participarem de um verdadeiro pensar em conjunto. Trazemos a conversa para um nível de racionalidade, concentrando atenções em resolver problemas ou pensar em meios de evitá-los futuramente. Reconhecer padrões de interação que dificultam a aprendizagem da equipe também precisa estar no radar, seja para quem exerce liderança ou atua em desenvolvimento e treinamento. Quando percebemos que algo está emperrado, já passamos todas as referências, trocamos ideias e as coisas não avançam, talvez seja um mecanismo de defesa, uma resistência ao novo. Sabemos que isso é um processo natural. Quando alguém diz "sempre foi assim", precisamos ter cuidado e carinho ao tratar questões sensíveis, desbravando pensamentos e modelos mentais arraigados, mas através de comunicação acolhedora, apresentando vantagens e ganhos, trazendo a pessoa para perto de nós. Além disso, promovemos a busca por ideias ou identificamos problemas e, de forma conjunta, conseguimos promover soluções efetivas. Vejamos a seguinte frase: > "Para concretizar seu potencial, o pensamento sistêmico também precisa das disciplinas de construção de uma visão compartilhada, modelos mentais, aprendizagem em equipe e domínio pessoal." > > **Peter Senge** O que a Bytebank ganha com tudo isso? Ao construir uma visão compartilhada, estimulamos o compromisso a longo prazo, fazendo com que as pessoas vejam o sentido do trabalho delas. Os modelos mentais contribuem para revelar limitações em nossas formas atuais de ver o mundo. A ideia não é dizer que alguém está errado, mas trazer a pessoa para perto, apresentando benefícios, ganhos e vantagens, para que ela perceba além da visão que tem, que pode ser limitada, e comece a perceber o sentido do trabalho que estamos fazendo. Pode ser um processo lento, pois trata-se de crenças pessoais, mas o trabalho precisa ser constante, pois os ganhos podem ser surpreendentes. Quando falamos de domínio pessoal, ele é responsável pela motivação pessoal de aprender continuamente como nossas ações afetam o mundo. Chamamos a responsabilidade para nós, sem terceirizar a responsabilidade dos nossos problemas. Isso pode ameaçar a visão sistêmica, tão importante na cultura de uma empresa. ## Aprendizado organizacional Quando falamos de aprendizado organizacional, lembramos que ele promove o crescimento da organização como um todo, contribui para a adaptação do negócio às mudanças, e os líderes têm papel fundamental na criação de condições que promovam esse aprendizado. Precisa ser algo sistêmico, de dentro para fora, para que as pessoas vejam que faz sentido e que todos estão envolvidos. Como podemos fazer isso? * Ouça novas propostas * Permita a apresentação de novas ideias, tenha disposição para compartilhar e acolher experiências; * Promova rodas de conversa * Concretização. Tudo que fica no campo das ideias não é efetivo, então talvez precisemos fazer adaptações, consultar outras áreas e responsáveis para implementar, mas esse é o processo, a dinâmica do jogo. **Permita o crescimento profissional das pessoas**, estimule e facilite a aquisição de competências, ofereça autonomia para que se desenvolvam. Proporcione um ambiente para treinar competências. **Incentive interações**, pois a lenda de que profissionais focados em suas tarefas são mais produtivos pode não ser verdade. A interação entre a equipe é importante para que o conhecimento seja transmitido corretamente. Pense em plataformas para troca de ideias entre as pessoas. **Aceite que o fracasso faz parte do crescimento**. Atenção a esse ponto, pois falamos de recursos financeiros, tempo e profissionais envolvidos. Trabalhamos na intenção de acertar, mas sabemos que nem tudo sairá perfeito. Aceitar que isso faz parte do processo de aprendizagem é fundamental. Algumas iniciativas podem não funcionar, trazendo consequências como demissão ou desconto no salário, mas isso não é rotina em empresas preocupadas em fomentar o aprendizado. Reconhecer quando as coisas não vão bem evita desperdícios de recursos. Precisamos ter domínio pessoal e entender que as coisas não saíram como esperado, e isso é natural. Na próxima vez, o que podemos fazer para evitar isso? Lembre-se, domínio pessoal é a chave. A aprendizagem organizacional permite que as pessoas participem mais ativamente. Esse é o ambiente que criaremos para que os profissionais façam parte do dia a dia da organização e promovam essas iniciativas!

  • 1Página 1…211Página 211…369Página 369
    1Página 1…209Página 209210Página 210211Página 211212Página 212
    213
    Página 213
    …
    369Página 369