SlideShare a Scribd company logo
1 of 128
Download to read offline
Analisando Complexidade de
         Código Ruby
                    Utilizando Métricas para Encontrar Código que Fede




                                    Cássio Marques
                                 RubyMasters Conf 2011


Saturday, February 26, 2011
Cássio Marques
                     • código + comida vegan + livros + skate +
                              música
                     • Taoweb
                     • Lime
                     • http://cassiomarques.wordpress.com
                     • @cassiomarques
Saturday, February 26, 2011
Porque analisar o
                                  código?


Saturday, February 26, 2011
http://www.flickr.com/photos/rovingi/312078231/
Saturday, February 26, 2011
Como analisar o
                                 código?


Saturday, February 26, 2011
Estética



Saturday, February 26, 2011
Dificuldade de
                               Manutenção


Saturday, February 26, 2011
Chute



Saturday, February 26, 2011
Abstrações



Saturday, February 26, 2011
Métricas



Saturday, February 26, 2011
Medir alguma
                     propriedade específica
                           do código


Saturday, February 26, 2011
Objetivo: Quantificar o
                   que antes era abstrato


Saturday, February 26, 2011
Métrica ABC



Saturday, February 26, 2011
Analisa Complexidade



Saturday, February 26, 2011
flog
                              github.com/seattlerb/flog




Saturday, February 26, 2011
Assignement
                              Definir o valor de uma variável explicitamente




Saturday, February 26, 2011
=    +=
                              *=    <<
                              /=   etc...
                              -=

Saturday, February 26, 2011
Branching
                              Criar um novo fluxo de execução




Saturday, February 26, 2011
if
                                      or
                         else
                                    rescue
                    elsif (argh!)
                                     until
                        case
                                     while
                         and

Saturday, February 26, 2011
Calls
                              Chamadas a métodos




Saturday, February 26, 2011
(Outras implementações usam Condition)




Saturday, February 26, 2011
|ABC| = sqrt((A*A)+(B*B)+(C*C))




Saturday, February 26, 2011
Mas em Ruby temos
                               mais do que isso!


Saturday, February 26, 2011
eval & cia
                              (pontuação alta!!!)
                               define_method
                                     eval
                                 module_eval
                                  class_eval
                                instance_eval



Saturday, February 26, 2011
blocos/yield



Saturday, February 26, 2011
Introspecção
                                  instance_method
                                  method_defined?
                              private_instance_method
                               privante_class_method
                              public_instance_method
                                        etc...


Saturday, February 26, 2011
Hooks
                              Module#included
                              Module#extended
                               Class#inherited
                              method_defined
                                    etc...



Saturday, February 26, 2011
Ou seja...



Saturday, February 26, 2011
Ou seja...
                  METAPROGRAMAÇÃO É COMPLEXO E DIFICULTA
                         A MANUTENÇÃO DO CÓDIGO




Saturday, February 26, 2011
Quando verificar isso
                          no seu código?


Saturday, February 26, 2011
Frequentemente



Saturday, February 26, 2011
(já deixei para a fase final
                  de um projeto e o
              resultado foi traumático)


Saturday, February 26, 2011
Complexidade
                               Ciclomática


Saturday, February 26, 2011
saikuro
                              http://saikuro.rubyforge.org/




Saturday, February 26, 2011
Mede o número de
                   segmentos linearmente
                      independentes na
                     execução do código

Saturday, February 26, 2011
Grafo direcionado para
                      representar os
                  caminhos de execução


Saturday, February 26, 2011
1 def some_method(value)
                          2   if value % 2 == 0
                          3     value.times { |i| puts i }
                          4   else
                          5     while value >= 0
                          6        puts value
                          7        value -= 1
                          8     end
                          9   end
                         10 end




Saturday, February 26, 2011
Início


                                            value % 2 == 0


                              value.times { |i| ...         while value >= 0

                                                                         puts value
                 puts i

                                                                   puts value -= 1
                                                      Fim

Saturday, February 26, 2011
C = A - V + 2P
                                  C => Complexidade ciclomática
                                     A => Número de arestas
                                     V => Número de vértices
                              P => Número de componentes conectados




Saturday, February 26, 2011
Pode ser utilizada para
                     definir o número de casos
                     de teste necessários para
                       ter total cobertura do
                               código

Saturday, February 26, 2011
Métrica procedural,
                  mas pode ser usada em
                  código OO no escopo
                       de métodos

Saturday, February 26, 2011
Duplicação de código



Saturday, February 26, 2011
flay
                              http://ruby.sadi.st/Flay.html




Saturday, February 26, 2011
Pesquisa por códigos
                            SEMELHANTES


Saturday, February 26, 2011
Resultados são bons
                                candidatos para
                                  refactoring


Saturday, February 26, 2011
Código que muda com
                      muita frequência


Saturday, February 26, 2011
churn
                              github.com/danmayer/churn




Saturday, February 26, 2011
Código que muda
                              muito == problemas


Saturday, February 26, 2011
Indica quantidade de
                    alterações ao longo do
                            tempo


Saturday, February 26, 2011
Métodos
                              Classes
                              Arquivos


Saturday, February 26, 2011
git/mercurial



Saturday, February 26, 2011
Code Smells



Saturday, February 26, 2011
Sintoma que indica
                         algum problema mais
                                sério


Saturday, February 26, 2011
O código pode feder
                          por vários motivos


Saturday, February 26, 2011
reek
                              github.com/kevinrutherford/reek




Saturday, February 26, 2011
Aceita opções sobre
                   quais smells identificar/
                           ignorar


Saturday, February 26, 2011
Atributos



Saturday, February 26, 2011
readers/writers (ou
                   getters/setters) podem
                      expor demais seus
                           objetos

Saturday, February 26, 2011
Variáveis de Classe



Saturday, February 26, 2011
1 class MyClass
  2   @@my_class_variable = 1
  3
  4   class << self
  5     attr_accessor :my_other_class_variable
  6   end
  7 end




Saturday, February 26, 2011
Aumenta o escopo
                                   global


Saturday, February 26, 2011
Classe Longa



Saturday, February 26, 2011
Muitas linhas



Saturday, February 26, 2011
Muitas variáveis de
                                   instância


Saturday, February 26, 2011
Muitos métodos



Saturday, February 26, 2011
*provavelmente*
                       fazendo coisa demais!


Saturday, February 26, 2011
Método Longo



Saturday, February 26, 2011
Lista de Parâmetros
                                     Longa


Saturday, February 26, 2011
1 def pay_with_credit_card(number, security_code, holder_name, expiration, value)
           2   # ...
           3 end




Saturday, February 26, 2011
Possíveis soluções



Saturday, February 26, 2011
Passar um hash



Saturday, February 26, 2011
Encapsular em um
                                   objeto


Saturday, February 26, 2011
Baixa Coesão
                                Feature Envy




Saturday, February 26, 2011
1 class Cart
                              2   def price
                              3     @item.price + @item.tax
                              4   end
                              5 end




Saturday, February 26, 2011
Baixa Coesão
                                Utility Function




Saturday, February 26, 2011
Método que não
                     depende do estado do
                            objeto


Saturday, February 26, 2011
1 class Oven
                              2   def formatted_temperature(sensor)
                              3     "#{sensor.temperature} #{sensor.unit}"
                              4   end
                              5 end




Saturday, February 26, 2011
Polimorfismo Simulado



Saturday, February 26, 2011
1 def some_method(value)
                               2   if value > 10
                               3     if value < 20
                               4       if value != 15
                               5         puts "duh"
                               6       else
                               7         puts "meh"
                               8       end
                               9     end
                              10   end
                              11 end




Saturday, February 26, 2011
switch também :)
                                (o reek ainda não identifica)




Saturday, February 26, 2011
Uncommunicative
                                  Names


Saturday, February 26, 2011
Nomes não refletem a
                      intenção do código


Saturday, February 26, 2011
1 class SomeClass
                               2   def some_method
                               3     # ...
                               4   end
                               5
                               6   def some_method_2
                               7     # ...
                               8   end
                               9
                              10   def another_method
                              11     a = 10
                              12     aLocalVariable = 25
                              13   end
                              14 end




Saturday, February 26, 2011
Pode ser configurado com
           uma lista de regexps
                              default [/^.[0-9]*$/]




Saturday, February 26, 2011
Cobertura de Teste



Saturday, February 26, 2011
!= “bem testado”



Saturday, February 26, 2011
rcov
                              http://eigenclass.org/hiki.rb?rcov




Saturday, February 26, 2011
Pode indicar trechos do
                   código que foram
                     negligenciados


Saturday, February 26, 2011
Too Simple To Break



Saturday, February 26, 2011
Novas funcionalidades
                      são adicionadas, mas
                       continua sem testes


Saturday, February 26, 2011
Saturday, February 26, 2011
Saturday, February 26, 2011
Outros smells
                                     e
                              erros de estilo


Saturday, February 26, 2011
roodi
                              github.com/martinjandrews/roodi




Saturday, February 26, 2011
Atribuição de valor
                            dentro de uma
                         estrutura condicional


Saturday, February 26, 2011
1 # Deveria ser foo == 100
                              2 if foo = 100
                              3   # ...
                              4 end




Saturday, February 26, 2011
1 # Falso positivo...
                              2 def some_method(value)
                              3   if @value = value
                              4     # ...
                              5   end
                              6 end




Saturday, February 26, 2011
case sem cláusula
                                   else


Saturday, February 26, 2011
1 def some_method(value)
                              2   case value
                              3   when 1..10
                              4     puts "Entre 1 e 10"
                              5   when 11..20
                              6     puts "Entre 11 e 20"
                              7   end
                              8 end




Saturday, February 26, 2011
Classes com muitas
                               linhas de código
                                 (por padrão limita em 300)




Saturday, February 26, 2011
Padrão para nome de
                          classes e módulos
        (verifica se o nome das classes e módulos está em CamelCase)




Saturday, February 26, 2011
cláusulas rescue
                                    vazias


Saturday, February 26, 2011
1 def calculate_factor(number)
                              2   begin
                              3     SOME_CONSTANT / number
                              4   rescue
                              5
                              6   end
                              7 end




Saturday, February 26, 2011
1 def calculate_factor(number)
      2   begin
      3     SOME_CONSTANT / number
      4   rescue => e
      5     # Tratar a exceção de alguma forma...
      6   end
      7 end




Saturday, February 26, 2011
Uso de loops com for



Saturday, February 26, 2011
1 def print_list(list)
                              2   for value in list do
                              3     puts value
                              4   end
                              5 end




Saturday, February 26, 2011
1 def print_list(list)
                     2   list.each {|value| puts value }
                     3 end




Saturday, February 26, 2011
Métodos com muitas
                           linhas de código
                              (por padrão limita em 20)




Saturday, February 26, 2011
Padrão para nomes de
                           métodos
                    (verifica se os nomes dos métodos estão snake_case)




Saturday, February 26, 2011
rails_best_practices
                               github.com/flyerhzm/rails_best_practices




Saturday, February 26, 2011
Ok...



Saturday, February 26, 2011
Mas é muita coisa para
                          gerenciar!


Saturday, February 26, 2011
metric_fu
                              http://metric-fu.rubyforge.org/




Saturday, February 26, 2011
saikuro + flog + flay + rcov
        + reek + roodi + churn +
           rails_best_practices


Saturday, February 26, 2011
rake metrics:all



Saturday, February 26, 2011
Integração Contínua



Saturday, February 26, 2011
Métricas ao longo do
                                tempo


Saturday, February 26, 2011
Relatórios!



Saturday, February 26, 2011
Saturday, February 26, 2011
Saturday, February 26, 2011
Saturday, February 26, 2011
Saturday, February 26, 2011
Problema:



Saturday, February 26, 2011
O metric_fu acaba
            virando uma dependência
                 do seu projeto


Saturday, February 26, 2011
metrical
                              github.com/iain/metrical




Saturday, February 26, 2011
$ gem install metrical
                              $ cd /path/of/your/project
                              $ metrical




Saturday, February 26, 2011
Dúvidas?



Saturday, February 26, 2011
Obrigado!



Saturday, February 26, 2011

More Related Content

Recently uploaded

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 

Recently uploaded (20)

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Analisando Complexidade de Código Ruby