SlideShare une entreprise Scribd logo
1  sur  105
Télécharger pour lire hors ligne
Ferramentas de
Desenvolvimento com
Boa Usabilidade:
É POSSÍVEL?
André Willik Valenti
DevCamp 2013 | Campinas-SP
DevInSampa 2013 | São Paulo-SP
Sobre mim
● André Valenti
● "Fi"
● São Carlos-SP
Sobre mim
● UFSCar
○ Bacharelado em Ciência da Computação
○ 2003-2007
● UNICAMP
○ Mestrado em Ciência da Computação
○ 2008-2011
Sobre mim
● Histórico profissional recente
○ 2013: SIn - UFSCar (São Carlos)
○ 2012: Daitan Group (Campinas)
○ 2010-2012: Dextra (Campinas)
Sobre mim
● Experiências recentes
○ Groovy / Grails
○ PostgreSQL
○ Jogos HTML5
○ JavaScript / Node.js / CoffeeScript
Por que esta palestra?
● Bibliotecas, frameworks, automação de
build...
● Você já passou por algum destes problemas
ao tentar usar uma ferramenta de
desenvolvimento nova?
○ Erros bizarros
○ Documentação ilógica
○ Conceitos obscuros
Por que esta palestra?
● Anos e anos de frustração com falta de
usabilidade em ferramentas
● Sonho de mudar esse cenário
Início
Alguém conhece estes celulares?
iPhone & Galaxy
● Satisfação
● Produtividade
● Confiabilidade
● Fidelidade
iPhone & Galaxy
● Satisfação
○ Uso o produto porque fico feliz com o resultado
● Produtividade
○ Resolvo rápido o que eu preciso resolver
● Confiabilidade
○ Boto fé que o produto continuará funcionando bem
● Fidelidade
○ Voltarei a ter outro produto desses ou produtos
similares da mesma marca
iPhone & Galaxy
● Não é assim com todo mundo, claro!
● Mas é assim com muita gente
E este aqui?
Siemens CF62
● Frustração
● Improdutividade
● Desconfiança
● Aversão
Siemens CF62
● Frustração
○ Só uso porque sou obrigado
● Improdutividade
○ Demoro uma vida para fazer qualquer coisa
● Desconfiança
○ A qualquer momento, posso ficar na mão
● Aversão
○ Na primeira oportunidade, tchau!
Siemens CF62
● Não é assim com todo mundo, claro!
● Mas é assim com muita gente
Usabilidade
● Primeiro resultado no Google Imagens:
Ferramenta de desenvolvimento
● Bibliotecas
● Frameworks
● Automação de build
● Utilitários em linha de comando?
● Linguagens de programação?
● Sistemas operacionais?
Ferramenta de desenvolvimento
● No contexto desta palestra:
○ QUALQUER software que seja usado para
desenvolver software
Usabilidade
● De celulares
● De ferramentas de desenvolvimento
○ Semelhanças?
○ Diferenças?
Exemplo 1
● Joãozinho está trabalhando em um projeto
Java para web, de compras online
● Ele precisa gerar emails para os clientes do
site quando alguém faz uma compra
● Como ele vai implementar isso?
Exemplo 1
● Precisa ficar mais ou menos assim:
<html>
<body>
<p>Olá, Maria</p>
<p>Pedido de número 1234 enviado!</p>
</body>
</html>
Exemplo 1
● Joãozinho disse:
○ Legal! Vou usar esse tal de Velocity aí...
● Será que foi uma boa ideia?
○ Vamos descobrir...
Demonstração
Apache Velocity
Quais foram os problemas?
● Site complicado
● Documentação prolixa
● API complexa
● Configuração difícil
Usabilidade ruim
● Frustração
○ Só uso porque sou obrigado
● Improdutividade
○ Demoro uma vida para fazer qualquer coisa
● Desconfiança
○ A qualquer momento, posso ficar na mão
● Aversão
○ Na primeira oportunidade, tchau!
Usabilidade ruim
● Não é assim com todo mundo, claro!
● Mas é assim com muita gente
Aspectos de uma
ferramenta
Três aspectos principais
● Site oficial
● Configuração
● Documentação
● Qual o papel de cada um?
Site oficial
● O que é?
○ Primeiro e principal meio de comunicação
○ Visto por 99% dos usuários
○ Cartão de visitas da ferramenta
● Qual o objetivo?
○ Fornecer todas as informações básicas do projeto
■ Quais?
Site oficial
● MINIMAMENTE, precisa deixar claro:
○ Que problemas a ferramenta resolve
○ Como instala
○ Como roda um exemplo básico ("Hello, World")
● Altamente desejável incluir também:
○ Por quê vale a pena usá-la
○ Quando vale a pena usá-la
○ Quando NÃO vale (melhor usar outra ou nenhuma)
Site oficial
● Se o site oficial não responder nenhuma
dessas perguntas...
Site oficial
● Para refletir:
○ "Propaganda eu vejo na televisão. Fala logo o que a
ferramenta faz e deixa que eu decido se uso ou
não!" (Andrei Tognolo)
Configuração
● O que é?
○ Mecanismo de ajuste para que a ferramenta faça
exatamente o que se quer
● Qual o objetivo?
○ Adequar a ferramenta às necessidades do usuário
■ Ou seja: configs devem fazer sentido para ele
■ (encapsulamento? serviços?)
● Deve ser:
○ Óbvia de encontrar
○ Fácil de entender
○ Fácil de modificar
Configuração
Configuração
● Vamos pensar em dois tipos de
configuração:
a. Mínima
b. Padrão
Configuração
● Tipos de configuração:
○ Mínima
■ O estritamente necessário para a ferramenta
funcionar
○ Padrão
■ Aquela que vem de fábrica com a ferramenta, ou
que pode ser gerada com um comando óbvio
Configuração
● Mínima
○ A exigida para um "Hello, World"
○ Deve ser óbvia de achar ("Getting Started")
○ Idealmente, é vazia (faz o básico sem configuração)
● Padrão
○ A que já vem embutida no pacote da ferramenta
■ Ou gerada por comando que venha embutido
(rails new app, grails create-app app)
○ Idealmente, é a mínima + recursos úteis (logging,
cores, atalhos de teclado etc.)
■ "Usável, por padrão"
Configuração
● Padrão ⊇ Mínima (contém)
○ É só baixar e já pode brincar
○ :)
● Padrão ⊉ Mínima (não contém)
○ Só pode brincar depois de fazer a lição
○ :(
Configuração
● Padrão ⊇ Mínima (contém)
○ Evita decoreba
○ Evita trabalho repetitivo do desenvolvedor
○ (alguma relação com encapsulamento?)
● Padrão ⊉ Mínima (não contém)
○ Obriga o desenvolvedor a escrever sempre a
mesma coisa quando for usar a ferramenta
○ É o tal do boilerplate
○ Exemplos:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/xhtml1/DTD/xhtml1-
transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type"
content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
</body>
</html>
Configuração
#ifndef _MINHACLASSE_H
#define _MINHACLASSE_H
...
#endif
Configuração
● Por que é bom a padrão oferecer recursos
úteis já configurados (logging, cores, atalhos
de teclado etc.)?
○ Ninguém sabe da existência de todas as
funcionalidades ao começar a usar algo
○ Muitas funcionalidades, porém, são úteis para todos
○ Não espere que alguém procure-as. Exponha-as!
○ Entregue a ferramenta "Usável, por padrão"
Configuração
Configuração
● Para refletir:
○ "Se você não consegue decorar a configuração
mínima, está complicada demais." (André Valenti)
○ "A configuração padrão é a que será usada por 90%
dos usuários." (André Valenti)
■ Duvida?
Configuração
● Para quem usa terminal com Bash:
○ Você gosta do ls colorido?
Configuração
● Para quem usa terminal com Bash:
○ E do grep colorido?
Configuração
● Olhe o seu ~/.bashrc:
○ alias ls='ls --color=auto'
○ alias grep='grep --color=auto'
Configuração
● Você sabia disso?
● Mais importante:
○ Você PRECISAVA saber disso?
● Mais importante ainda:
○ Você saberia da existência dessa funcionalidade se
ela não viesse ativa por padrão?
○ Alguém já pensou nisso e entregou-nos o Bash
"Usável, por padrão"
Configuração
● Se você usa Git, por acaso ele está assim?
Configuração
● Sabia que dá para deixá-lo assim?
Configuração
● E como é que faz isso?
○ git config --global color.ui auto
● Como eu descobri isso?
○ Eu usava Windows + Git Bash (MSYS modificado)
■ Git Bash já vinha colorido de fábrica
■ Ao mudar pro Linux, não vi cores no git
■ Googlei "git colors" e descobri o comando acima
○ Pergunta pra mim se eu teria imaginado sozinho
que o git tinha o recurso de cores
Documentação
● O que é
○ Detalhamento da ferramenta e de suas partes
● Quais os objetivos?
○ Ensinar a ir além do básico
○ Indicar soluções para problemas mais específicos
○ Explicar detalhes da API
Documentação
● Minimamente, deve ser:
○ Óbvia de encontrar
○ Fácil de pesquisar
● Idealmente, deve:
○ Possuir seções autocontidas
Documentação
● Para refletir:
○ "A melhor documentação é a ausência de
[necessidade de] documentação." (André Valenti)
■ Duvida?
Documentação
● Git
○ Numa instalação zerada
○ Ao fazer seu primeiro commit:
○
○
Committer: André Willik Valenti
<fi@deskdofi.(none)>
Your name and email address were configured
automatically based on your username and
hostname. Please check that they are accurate.
You can suppress this message by setting them
explicitly:
git config --global user.name "Your Name"
git config --global user.email you@example.com
After doing this, you may fix the identity
used for this commit with:
git commit --amend --reset-author
Documentação / Configuração
● Compare com uma instalação zerada do
PostgreSQL:
Documentação / Configuração
fi@deskdofi:~$ sudo apt-get install
postgresql
...
fi@deskdofi:~$ psql
psql: FATAL: role "fi" does not exist
(Hein?)
Documentação / Configuração
(Procura no Google... Procura no
Google...)
(Ah, tá! Não existe ainda o meu
usuário no banco.)
(Ah tá! Já vem um usuário chamado
postgres. Tenho que logar como ele.)
Documentação / Configuração
fi@deskdofi:~$ psql -U postgres
psql: FATAL: Peer authentication
failed for user "postgres"
(Hein?)
(Procura no Google... Procura no
Google...)
Documentação / Configuração
(Ah tá! Preciso pôr a senha, que é
postgres também!)
fi@deskdofi:~$ psql -U postgres -W
Password for user postgres: ********
(Agora vai!!)
Documentação / Configuração
psql (9.1.9)
Type "help" for help.
postgres=#
(Aêee!!!)
Documentação / Configuração
● Penamos um pouquinho, mas conseguimos
entrar no console do Postgres!
● Só que...
○ ...não
○ Esse desfecho não é o verdadeiro!
○ O verdadeiro foi assim:
Documentação / Configuração
fi@deskdofi:~$ psql -U postgres -W
Password for user postgres: ********
psql: FATAL: Peer authentication
failed for user "postgres"
psql: FATAL: Peer
authentication
failed for user
"postgres"
Documentação / Configuração
(O certo é...)
fi@deskdofi:~$ sudo -u postgres psql
Documentação / Configuração
psql (9.1.9)
Type "help" for help.
postgres=#
Documentação / Configuração
(ou configurar o pg_hba.conf)
Alguns exemplos de
ferramentas usáveis
(ao menos em alguns aspectos)
Ferramentas usáveis
● Mustache
● Jasmine
● Flyway
● jQuery
Mustache
● http://mustache.github.io/
● Processador de templates
● Similar ao Velocity
● Implementações em diversas linguagens
● Demonstração no próprio site
Jasmine
● http://pivotal.github.io/jasmine/
● Framework de BDD (Behavior-driven
Development) para JavaScript
● Documentação
○ A própria ferramenta especificando a si mesma
Flyway
● http://flywaydb.org/
● Framework de migração de banco de dados
para Java
● Tem seções explicando:
○ O que é migração de banco de dados
○ Como a ferramenta funciona
○ Como começar a usar
jQuery
● http://jquery.com
● API extremamente intuitiva
Ideologia
Ideologia
● Merecemos ferramentas da hora!
● Merecemos satisfação e produtividade!
● Merecemos soluções intuitivas!
Ideologia
● Software
○ Feito por seres humanos para seres humanos
● Comunicação é falha
○ Lide com isso
○ Esclareça, repita, frise
● Erro é inevitável
○ Verifique suas premissas (Pragmatic Programmer)
○ Avise o que deu errado
○ Sugira maneiras de corrigir
Ideologia
● Pessoas têm diferentes níveis de
conhecimento
○ Presuma o mínimo de conhecimento prévio
○ Explique brevemente os conceitos básicos
■ Ex: Flyway
○ Ou referencie páginas que os expliquem
Ideologia
● Desenvolvedores querem:
○ Soluções simples e intuitivas
○ Resolver um problema de cada vez
○ Ler manuais quando realmente necessário
Exemplos!
Ideologia
● Dê exemplos!
○ De preferência, do mundo real
○ Exemplo: Jasmine
■ Especifica a si mesmo usando a si mesmo
Ideologia
● Evite exemplos bobos e batidos:
○ OO: classe Ponto
■ { private x; private y; getX, getY, setX, setY }
○ TDD: soma
■ { assert soma(a, b) == a + b }
○ BDD: pilha
■ { when i push('x') then pop().should_equal 'x' }
Ideologia
● Prefira exemplos concretos e úteis:
○ OO: nós de uma árvore (p. ex., sintática)
■ { public abstract String gerarCodigo(); }
○ TDD: teste um algoritmo complicado
■ { arvore.inserir(nóEsquisito);
assert arvore.indiceDeBalanceamento == 7 }
○ BDD: teste uma regra de negócio
■ { when i buy(product) from seller then
seller.points.should_have increased_by 100
and buyer.notifications.should_include
confirmationEmail }
Ideologia
● DEAE:
○ Didática: saiba explicar, saiba ensinar
○ Empatia: coloque-se no lugar do usuário
○ Agilidade: entregue uma funcionalidade por vez
○ Encapsulamento: somente informação relevante
Conclusão
Conclusão
● Ferramentas de Desenvolvimento
com
Boa Usabilidade:
É POSSÍVEL???
Conclusão
SIM!
Conclusão
● A resposta curta é:
○ Coloque-se no lugar do seu usuário!
Conclusão
● A resposta longa é DEAE:
○ Didática: saiba explicar, saiba ensinar
○ Empatia: coloque-se no lugar do usuário
○ Agilidade: entregue uma funcionalidade por vez
○ Encapsulamento: somente informação relevante
Conclusão
● Vários desafios envolvidos:
○ Alcançar simplicidade
■ Dá trabalho!
○ Escrever documentação objetiva e completa
■ Dá trabalho!
○ Conciliar boa curva de aprendizado com evolução
de funcionalidades
■ Dá trabalho!
Conclusão
● Grande fonte de inspiração:
○ Inventing on Principle (Bret Victor)
■ http://vimeo.com/36579366
○ "Creators need an immediate connection to what
they are creating"
Obrigado :)!
● André Valenti / Fi
● Contatos:
○ awvalenti@gmail.com
○ @awvFi

Contenu connexe

En vedette

Tópicos Avançados de Administração
Tópicos Avançados de AdministraçãoTópicos Avançados de Administração
Tópicos Avançados de Administração
Sayurï Yamane
 
Aula 3 tópicos avançados - negócio e liderança
Aula 3   tópicos avançados - negócio e liderançaAula 3   tópicos avançados - negócio e liderança
Aula 3 tópicos avançados - negócio e liderança
Angelo Peres
 
Empresas familiares dentro da nova ordem econômica mundial
Empresas familiares dentro da nova ordem econômica mundialEmpresas familiares dentro da nova ordem econômica mundial
Empresas familiares dentro da nova ordem econômica mundial
Conselho Regional de Administração de São Paulo
 
A necessidade de uma gestão de recursos humanos
A necessidade de uma gestão de recursos humanosA necessidade de uma gestão de recursos humanos
A necessidade de uma gestão de recursos humanos
Samuel Moreira
 
Cultura organizacional
Cultura organizacionalCultura organizacional
Cultura organizacional
rubenm93
 
Nocoes de organizacao e gestao de pessoas
Nocoes de organizacao e gestao de pessoasNocoes de organizacao e gestao de pessoas
Nocoes de organizacao e gestao de pessoas
Adriana Vasconcelos
 
Fluxograma de atividades
Fluxograma de atividadesFluxograma de atividades
Fluxograma de atividades
Vanessa Barbosa
 
50 perguntas empresas familiares. Sintese
50 perguntas empresas familiares. Sintese50 perguntas empresas familiares. Sintese
50 perguntas empresas familiares. Sintese
efconsulting
 
Modelos de gestão organizacional
Modelos de gestão organizacionalModelos de gestão organizacional
Modelos de gestão organizacional
Rafael Marinho
 
Teoria geral de sistemas
Teoria geral de sistemasTeoria geral de sistemas
Teoria geral de sistemas
Diego Carrara
 

En vedette (20)

Tópicos Avançados de Administração
Tópicos Avançados de AdministraçãoTópicos Avançados de Administração
Tópicos Avançados de Administração
 
Modelo de responsabilidade organizacional t13 0630-3592
Modelo de responsabilidade organizacional   t13 0630-3592Modelo de responsabilidade organizacional   t13 0630-3592
Modelo de responsabilidade organizacional t13 0630-3592
 
Aula 3 tópicos avançados - negócio e liderança
Aula 3   tópicos avançados - negócio e liderançaAula 3   tópicos avançados - negócio e liderança
Aula 3 tópicos avançados - negócio e liderança
 
Empresas com sistema_aberto_e_fechado
Empresas com sistema_aberto_e_fechadoEmpresas com sistema_aberto_e_fechado
Empresas com sistema_aberto_e_fechado
 
Empresas familiares dentro da nova ordem econômica mundial
Empresas familiares dentro da nova ordem econômica mundialEmpresas familiares dentro da nova ordem econômica mundial
Empresas familiares dentro da nova ordem econômica mundial
 
A necessidade de uma gestão de recursos humanos
A necessidade de uma gestão de recursos humanosA necessidade de uma gestão de recursos humanos
A necessidade de uma gestão de recursos humanos
 
Cultura organizacional
Cultura organizacionalCultura organizacional
Cultura organizacional
 
7 topicos especiais em administracao
7   topicos especiais em administracao7   topicos especiais em administracao
7 topicos especiais em administracao
 
Manual de Perguntas e Respostas sobre Empresas Familiares
Manual de Perguntas e Respostas sobre Empresas FamiliaresManual de Perguntas e Respostas sobre Empresas Familiares
Manual de Perguntas e Respostas sobre Empresas Familiares
 
Nocoes de organizacao e gestao de pessoas
Nocoes de organizacao e gestao de pessoasNocoes de organizacao e gestao de pessoas
Nocoes de organizacao e gestao de pessoas
 
Fluxograma de atividades
Fluxograma de atividadesFluxograma de atividades
Fluxograma de atividades
 
50 perguntas empresas familiares. Sintese
50 perguntas empresas familiares. Sintese50 perguntas empresas familiares. Sintese
50 perguntas empresas familiares. Sintese
 
Sistemas (aberto e fechado) - Química
Sistemas (aberto e fechado) - QuímicaSistemas (aberto e fechado) - Química
Sistemas (aberto e fechado) - Química
 
Política e prática de rh
Política e prática de rhPolítica e prática de rh
Política e prática de rh
 
Fluxogramas
FluxogramasFluxogramas
Fluxogramas
 
Introdução a OSM
Introdução a OSMIntrodução a OSM
Introdução a OSM
 
Modelos de gestão
Modelos de gestãoModelos de gestão
Modelos de gestão
 
Modelos de gestão organizacional
Modelos de gestão organizacionalModelos de gestão organizacional
Modelos de gestão organizacional
 
Introdução Organização Sistemas e Metodos
Introdução Organização Sistemas e MetodosIntrodução Organização Sistemas e Metodos
Introdução Organização Sistemas e Metodos
 
Teoria geral de sistemas
Teoria geral de sistemasTeoria geral de sistemas
Teoria geral de sistemas
 

Similaire à Usabilidade de Ferramentas

Formando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosFormando Desenvolvedores Efetivos
Formando Desenvolvedores Efetivos
Diego Santos
 

Similaire à Usabilidade de Ferramentas (20)

Contribuindo para a comunidade Elixir
Contribuindo para a comunidade ElixirContribuindo para a comunidade Elixir
Contribuindo para a comunidade Elixir
 
It's all about the game
It's all about the gameIt's all about the game
It's all about the game
 
P01 - Como ser um desenvolvedor melhor
P01 - Como ser um desenvolvedor melhorP01 - Como ser um desenvolvedor melhor
P01 - Como ser um desenvolvedor melhor
 
It skills para rh aprender e contratar
It skills para rh  aprender e contratarIt skills para rh  aprender e contratar
It skills para rh aprender e contratar
 
Criando software para o futuro com DDD, Arquitetura, Patterns, e Atitude
Criando software para o futuro com DDD, Arquitetura, Patterns, e AtitudeCriando software para o futuro com DDD, Arquitetura, Patterns, e Atitude
Criando software para o futuro com DDD, Arquitetura, Patterns, e Atitude
 
UI Design para Desenvolvimento Mobile & Games
UI Design para Desenvolvimento Mobile & GamesUI Design para Desenvolvimento Mobile & Games
UI Design para Desenvolvimento Mobile & Games
 
III CAFÉ e CODE - PROVOCAÇÕES DO MESTRE
III CAFÉ e CODE - PROVOCAÇÕES DO MESTRE III CAFÉ e CODE - PROVOCAÇÕES DO MESTRE
III CAFÉ e CODE - PROVOCAÇÕES DO MESTRE
 
Programação Orientada a Gambiarra
Programação Orientada a GambiarraProgramação Orientada a Gambiarra
Programação Orientada a Gambiarra
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Trabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonTrabalho sobre a linguagem Python
Trabalho sobre a linguagem Python
 
Coding Dojo - Aprendendo a programar programando
Coding Dojo - Aprendendo a programar programandoCoding Dojo - Aprendendo a programar programando
Coding Dojo - Aprendendo a programar programando
 
Contribuir com o django é mais simples do que voce imagina!
Contribuir com o django é mais simples do que voce imagina!Contribuir com o django é mais simples do que voce imagina!
Contribuir com o django é mais simples do que voce imagina!
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtiva
 
Fatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwareFatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um Software
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Arduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoArduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremo
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
Formando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosFormando Desenvolvedores Efetivos
Formando Desenvolvedores Efetivos
 
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 

Plus de André Willik Valenti

Plus de André Willik Valenti (6)

JavaScript Firme: Módulos com RequireJS e BDD com Jasmine
JavaScript Firme: Módulos com RequireJS e BDD com JasmineJavaScript Firme: Módulos com RequireJS e BDD com Jasmine
JavaScript Firme: Módulos com RequireJS e BDD com Jasmine
 
Minicurso de Encoding - resolvendo problemas com acentuação (#TDC2012 Goiânia)
Minicurso de Encoding - resolvendo problemas com acentuação (#TDC2012 Goiânia)Minicurso de Encoding - resolvendo problemas com acentuação (#TDC2012 Goiânia)
Minicurso de Encoding - resolvendo problemas com acentuação (#TDC2012 Goiânia)
 
Minicurso Encoding - TDC2012
Minicurso Encoding - TDC2012Minicurso Encoding - TDC2012
Minicurso Encoding - TDC2012
 
Minicurso encoding
Minicurso encodingMinicurso encoding
Minicurso encoding
 
Minicurso de Expressões Regulares
Minicurso de Expressões RegularesMinicurso de Expressões Regulares
Minicurso de Expressões Regulares
 
Minicurso de jQuery
Minicurso de jQueryMinicurso de jQuery
Minicurso de jQuery
 

Usabilidade de Ferramentas

  • 1. Ferramentas de Desenvolvimento com Boa Usabilidade: É POSSÍVEL? André Willik Valenti DevCamp 2013 | Campinas-SP DevInSampa 2013 | São Paulo-SP
  • 2. Sobre mim ● André Valenti ● "Fi" ● São Carlos-SP
  • 3. Sobre mim ● UFSCar ○ Bacharelado em Ciência da Computação ○ 2003-2007 ● UNICAMP ○ Mestrado em Ciência da Computação ○ 2008-2011
  • 4. Sobre mim ● Histórico profissional recente ○ 2013: SIn - UFSCar (São Carlos) ○ 2012: Daitan Group (Campinas) ○ 2010-2012: Dextra (Campinas)
  • 5. Sobre mim ● Experiências recentes ○ Groovy / Grails ○ PostgreSQL ○ Jogos HTML5 ○ JavaScript / Node.js / CoffeeScript
  • 6. Por que esta palestra? ● Bibliotecas, frameworks, automação de build... ● Você já passou por algum destes problemas ao tentar usar uma ferramenta de desenvolvimento nova? ○ Erros bizarros ○ Documentação ilógica ○ Conceitos obscuros
  • 7. Por que esta palestra? ● Anos e anos de frustração com falta de usabilidade em ferramentas ● Sonho de mudar esse cenário
  • 10. iPhone & Galaxy ● Satisfação ● Produtividade ● Confiabilidade ● Fidelidade
  • 11. iPhone & Galaxy ● Satisfação ○ Uso o produto porque fico feliz com o resultado ● Produtividade ○ Resolvo rápido o que eu preciso resolver ● Confiabilidade ○ Boto fé que o produto continuará funcionando bem ● Fidelidade ○ Voltarei a ter outro produto desses ou produtos similares da mesma marca
  • 12. iPhone & Galaxy ● Não é assim com todo mundo, claro! ● Mas é assim com muita gente
  • 14. Siemens CF62 ● Frustração ● Improdutividade ● Desconfiança ● Aversão
  • 15. Siemens CF62 ● Frustração ○ Só uso porque sou obrigado ● Improdutividade ○ Demoro uma vida para fazer qualquer coisa ● Desconfiança ○ A qualquer momento, posso ficar na mão ● Aversão ○ Na primeira oportunidade, tchau!
  • 16. Siemens CF62 ● Não é assim com todo mundo, claro! ● Mas é assim com muita gente
  • 18.
  • 19. Ferramenta de desenvolvimento ● Bibliotecas ● Frameworks ● Automação de build ● Utilitários em linha de comando? ● Linguagens de programação? ● Sistemas operacionais?
  • 20. Ferramenta de desenvolvimento ● No contexto desta palestra: ○ QUALQUER software que seja usado para desenvolver software
  • 21. Usabilidade ● De celulares ● De ferramentas de desenvolvimento ○ Semelhanças? ○ Diferenças?
  • 22. Exemplo 1 ● Joãozinho está trabalhando em um projeto Java para web, de compras online ● Ele precisa gerar emails para os clientes do site quando alguém faz uma compra ● Como ele vai implementar isso?
  • 23. Exemplo 1 ● Precisa ficar mais ou menos assim: <html> <body> <p>Olá, Maria</p> <p>Pedido de número 1234 enviado!</p> </body> </html>
  • 24. Exemplo 1 ● Joãozinho disse: ○ Legal! Vou usar esse tal de Velocity aí... ● Será que foi uma boa ideia? ○ Vamos descobrir...
  • 26. Quais foram os problemas? ● Site complicado ● Documentação prolixa ● API complexa ● Configuração difícil
  • 27. Usabilidade ruim ● Frustração ○ Só uso porque sou obrigado ● Improdutividade ○ Demoro uma vida para fazer qualquer coisa ● Desconfiança ○ A qualquer momento, posso ficar na mão ● Aversão ○ Na primeira oportunidade, tchau!
  • 28. Usabilidade ruim ● Não é assim com todo mundo, claro! ● Mas é assim com muita gente
  • 30. Três aspectos principais ● Site oficial ● Configuração ● Documentação ● Qual o papel de cada um?
  • 31. Site oficial ● O que é? ○ Primeiro e principal meio de comunicação ○ Visto por 99% dos usuários ○ Cartão de visitas da ferramenta ● Qual o objetivo? ○ Fornecer todas as informações básicas do projeto ■ Quais?
  • 32. Site oficial ● MINIMAMENTE, precisa deixar claro: ○ Que problemas a ferramenta resolve ○ Como instala ○ Como roda um exemplo básico ("Hello, World") ● Altamente desejável incluir também: ○ Por quê vale a pena usá-la ○ Quando vale a pena usá-la ○ Quando NÃO vale (melhor usar outra ou nenhuma)
  • 33. Site oficial ● Se o site oficial não responder nenhuma dessas perguntas...
  • 34.
  • 35. Site oficial ● Para refletir: ○ "Propaganda eu vejo na televisão. Fala logo o que a ferramenta faz e deixa que eu decido se uso ou não!" (Andrei Tognolo)
  • 36. Configuração ● O que é? ○ Mecanismo de ajuste para que a ferramenta faça exatamente o que se quer ● Qual o objetivo? ○ Adequar a ferramenta às necessidades do usuário ■ Ou seja: configs devem fazer sentido para ele ■ (encapsulamento? serviços?)
  • 37. ● Deve ser: ○ Óbvia de encontrar ○ Fácil de entender ○ Fácil de modificar Configuração
  • 38. Configuração ● Vamos pensar em dois tipos de configuração: a. Mínima b. Padrão
  • 39. Configuração ● Tipos de configuração: ○ Mínima ■ O estritamente necessário para a ferramenta funcionar ○ Padrão ■ Aquela que vem de fábrica com a ferramenta, ou que pode ser gerada com um comando óbvio
  • 40. Configuração ● Mínima ○ A exigida para um "Hello, World" ○ Deve ser óbvia de achar ("Getting Started") ○ Idealmente, é vazia (faz o básico sem configuração) ● Padrão ○ A que já vem embutida no pacote da ferramenta ■ Ou gerada por comando que venha embutido (rails new app, grails create-app app) ○ Idealmente, é a mínima + recursos úteis (logging, cores, atalhos de teclado etc.) ■ "Usável, por padrão"
  • 41. Configuração ● Padrão ⊇ Mínima (contém) ○ É só baixar e já pode brincar ○ :) ● Padrão ⊉ Mínima (não contém) ○ Só pode brincar depois de fazer a lição ○ :(
  • 42. Configuração ● Padrão ⊇ Mínima (contém) ○ Evita decoreba ○ Evita trabalho repetitivo do desenvolvedor ○ (alguma relação com encapsulamento?) ● Padrão ⊉ Mínima (não contém) ○ Obriga o desenvolvedor a escrever sempre a mesma coisa quando for usar a ferramenta ○ É o tal do boilerplate ○ Exemplos:
  • 43. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/xhtml1/DTD/xhtml1- transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title></title> </head> <body> </body> </html> Configuração
  • 45. ● Por que é bom a padrão oferecer recursos úteis já configurados (logging, cores, atalhos de teclado etc.)? ○ Ninguém sabe da existência de todas as funcionalidades ao começar a usar algo ○ Muitas funcionalidades, porém, são úteis para todos ○ Não espere que alguém procure-as. Exponha-as! ○ Entregue a ferramenta "Usável, por padrão" Configuração
  • 46. Configuração ● Para refletir: ○ "Se você não consegue decorar a configuração mínima, está complicada demais." (André Valenti) ○ "A configuração padrão é a que será usada por 90% dos usuários." (André Valenti) ■ Duvida?
  • 47. Configuração ● Para quem usa terminal com Bash: ○ Você gosta do ls colorido?
  • 48. Configuração ● Para quem usa terminal com Bash: ○ E do grep colorido?
  • 49.
  • 50. Configuração ● Olhe o seu ~/.bashrc: ○ alias ls='ls --color=auto' ○ alias grep='grep --color=auto'
  • 51.
  • 52. Configuração ● Você sabia disso? ● Mais importante: ○ Você PRECISAVA saber disso? ● Mais importante ainda: ○ Você saberia da existência dessa funcionalidade se ela não viesse ativa por padrão? ○ Alguém já pensou nisso e entregou-nos o Bash "Usável, por padrão"
  • 53. Configuração ● Se você usa Git, por acaso ele está assim?
  • 54. Configuração ● Sabia que dá para deixá-lo assim?
  • 55. Configuração ● E como é que faz isso? ○ git config --global color.ui auto ● Como eu descobri isso? ○ Eu usava Windows + Git Bash (MSYS modificado) ■ Git Bash já vinha colorido de fábrica ■ Ao mudar pro Linux, não vi cores no git ■ Googlei "git colors" e descobri o comando acima ○ Pergunta pra mim se eu teria imaginado sozinho que o git tinha o recurso de cores
  • 56. Documentação ● O que é ○ Detalhamento da ferramenta e de suas partes ● Quais os objetivos? ○ Ensinar a ir além do básico ○ Indicar soluções para problemas mais específicos ○ Explicar detalhes da API
  • 57. Documentação ● Minimamente, deve ser: ○ Óbvia de encontrar ○ Fácil de pesquisar ● Idealmente, deve: ○ Possuir seções autocontidas
  • 58. Documentação ● Para refletir: ○ "A melhor documentação é a ausência de [necessidade de] documentação." (André Valenti) ■ Duvida?
  • 59. Documentação ● Git ○ Numa instalação zerada ○ Ao fazer seu primeiro commit: ○ ○
  • 60. Committer: André Willik Valenti <fi@deskdofi.(none)> Your name and email address were configured automatically based on your username and hostname. Please check that they are accurate. You can suppress this message by setting them explicitly: git config --global user.name "Your Name" git config --global user.email you@example.com After doing this, you may fix the identity used for this commit with: git commit --amend --reset-author
  • 61. Documentação / Configuração ● Compare com uma instalação zerada do PostgreSQL:
  • 62. Documentação / Configuração fi@deskdofi:~$ sudo apt-get install postgresql ... fi@deskdofi:~$ psql psql: FATAL: role "fi" does not exist (Hein?)
  • 63. Documentação / Configuração (Procura no Google... Procura no Google...) (Ah, tá! Não existe ainda o meu usuário no banco.) (Ah tá! Já vem um usuário chamado postgres. Tenho que logar como ele.)
  • 64. Documentação / Configuração fi@deskdofi:~$ psql -U postgres psql: FATAL: Peer authentication failed for user "postgres" (Hein?) (Procura no Google... Procura no Google...)
  • 65. Documentação / Configuração (Ah tá! Preciso pôr a senha, que é postgres também!) fi@deskdofi:~$ psql -U postgres -W Password for user postgres: ******** (Agora vai!!)
  • 66. Documentação / Configuração psql (9.1.9) Type "help" for help. postgres=# (Aêee!!!)
  • 67. Documentação / Configuração ● Penamos um pouquinho, mas conseguimos entrar no console do Postgres! ● Só que... ○ ...não ○ Esse desfecho não é o verdadeiro! ○ O verdadeiro foi assim:
  • 68. Documentação / Configuração fi@deskdofi:~$ psql -U postgres -W Password for user postgres: ******** psql: FATAL: Peer authentication failed for user "postgres"
  • 70.
  • 71. Documentação / Configuração (O certo é...) fi@deskdofi:~$ sudo -u postgres psql
  • 72. Documentação / Configuração psql (9.1.9) Type "help" for help. postgres=#
  • 73. Documentação / Configuração (ou configurar o pg_hba.conf)
  • 74. Alguns exemplos de ferramentas usáveis (ao menos em alguns aspectos)
  • 75. Ferramentas usáveis ● Mustache ● Jasmine ● Flyway ● jQuery
  • 76. Mustache ● http://mustache.github.io/ ● Processador de templates ● Similar ao Velocity ● Implementações em diversas linguagens ● Demonstração no próprio site
  • 77.
  • 78.
  • 79.
  • 80. Jasmine ● http://pivotal.github.io/jasmine/ ● Framework de BDD (Behavior-driven Development) para JavaScript ● Documentação ○ A própria ferramenta especificando a si mesma
  • 81.
  • 82. Flyway ● http://flywaydb.org/ ● Framework de migração de banco de dados para Java ● Tem seções explicando: ○ O que é migração de banco de dados ○ Como a ferramenta funciona ○ Como começar a usar
  • 83.
  • 84.
  • 85. jQuery ● http://jquery.com ● API extremamente intuitiva
  • 86.
  • 87.
  • 89. Ideologia ● Merecemos ferramentas da hora! ● Merecemos satisfação e produtividade! ● Merecemos soluções intuitivas!
  • 90. Ideologia ● Software ○ Feito por seres humanos para seres humanos ● Comunicação é falha ○ Lide com isso ○ Esclareça, repita, frise ● Erro é inevitável ○ Verifique suas premissas (Pragmatic Programmer) ○ Avise o que deu errado ○ Sugira maneiras de corrigir
  • 91. Ideologia ● Pessoas têm diferentes níveis de conhecimento ○ Presuma o mínimo de conhecimento prévio ○ Explique brevemente os conceitos básicos ■ Ex: Flyway ○ Ou referencie páginas que os expliquem
  • 92. Ideologia ● Desenvolvedores querem: ○ Soluções simples e intuitivas ○ Resolver um problema de cada vez ○ Ler manuais quando realmente necessário
  • 94. Ideologia ● Dê exemplos! ○ De preferência, do mundo real ○ Exemplo: Jasmine ■ Especifica a si mesmo usando a si mesmo
  • 95. Ideologia ● Evite exemplos bobos e batidos: ○ OO: classe Ponto ■ { private x; private y; getX, getY, setX, setY } ○ TDD: soma ■ { assert soma(a, b) == a + b } ○ BDD: pilha ■ { when i push('x') then pop().should_equal 'x' }
  • 96. Ideologia ● Prefira exemplos concretos e úteis: ○ OO: nós de uma árvore (p. ex., sintática) ■ { public abstract String gerarCodigo(); } ○ TDD: teste um algoritmo complicado ■ { arvore.inserir(nóEsquisito); assert arvore.indiceDeBalanceamento == 7 } ○ BDD: teste uma regra de negócio ■ { when i buy(product) from seller then seller.points.should_have increased_by 100 and buyer.notifications.should_include confirmationEmail }
  • 97. Ideologia ● DEAE: ○ Didática: saiba explicar, saiba ensinar ○ Empatia: coloque-se no lugar do usuário ○ Agilidade: entregue uma funcionalidade por vez ○ Encapsulamento: somente informação relevante
  • 99. Conclusão ● Ferramentas de Desenvolvimento com Boa Usabilidade: É POSSÍVEL???
  • 101. Conclusão ● A resposta curta é: ○ Coloque-se no lugar do seu usuário!
  • 102. Conclusão ● A resposta longa é DEAE: ○ Didática: saiba explicar, saiba ensinar ○ Empatia: coloque-se no lugar do usuário ○ Agilidade: entregue uma funcionalidade por vez ○ Encapsulamento: somente informação relevante
  • 103. Conclusão ● Vários desafios envolvidos: ○ Alcançar simplicidade ■ Dá trabalho! ○ Escrever documentação objetiva e completa ■ Dá trabalho! ○ Conciliar boa curva de aprendizado com evolução de funcionalidades ■ Dá trabalho!
  • 104. Conclusão ● Grande fonte de inspiração: ○ Inventing on Principle (Bret Victor) ■ http://vimeo.com/36579366 ○ "Creators need an immediate connection to what they are creating"
  • 105. Obrigado :)! ● André Valenti / Fi ● Contatos: ○ awvalenti@gmail.com ○ @awvFi