Archive

Posts Tagged ‘Dojo’

Dojo – Ruby

Fala pessoal,

Nesta quinta-feira 09/02 participei de um dojo numa empresa de desenvolvimento, e aqui estou para compartilhar com vocês essa experiência que a propósito foi muito legal apesar de eu ter apanhando para o teclado do Mac :D.

Antes de mais nada uma breve explicação sobre o que é um dojo

De acordo com o site DojoPuzzles.com dojo nada mais é que um encontro onde um grupo de programadores de vários níveis de conhecimento se reúne para treinar, em um ambiente inclusivo e colaborativo boas técnicas e metodologias de desenvolvimento de software através da solução de um pequeno desafio de programação.

O problema:

FizzBuzz

Neste problema, você deverá exibir uma lista de 1 a 100, um em cada linha, com as seguintes exceções:

  • Números divisíveis por 3 deve aparecer como ‘Fizz’ ao invés do número;
  • Números divisíveis por 5 devem aparecer como ‘Buzz’ ao invés do número;
  • Números divisíveis por 3 e 5 devem aparecer como ‘FizzBuzz’ ao invés do número’.

definição de dojo e problemas para dojo você pode encontrar aqui

Ruby

A linguagem Ruby foi escolhida pois a empresa trabalha com esta linguagem.
De acordo com a Wikipedia Ruby é uma linguagem de programação interpretada multiparadigma, de tipagem dinâmica e forte, com gerenciamento de memória automático, originalmente planejada e desenvolvida no Japão em 1995, por Yukihiro “Matz” Matsumoto, para ser usada como linguagem de script. Matz queria uma linguagem de script que fosse mais poderosa do que Perl, e mais orientada a objetos do que Python.
___

Minha opinião: Se você ja tem um pouco de lógica de programação, você não terá muitas dificuldades se iniciar em Ruby, eu diria que Ruby tem uma curva de aprendizado muito semelhante ao Python: em “J”, e por esta razão é gostosa de se aprender. Apesar de não ter explorado a linguagem, fiquei com uma boa impressão.

Resolução:

Como eu nunca tinha programado em ruby na minha vida, só sabia fazer um “Hello Word”, chamar uma função, criar uma classes, coisas simples, o problema foi bem simples, e a resolução não poderia ser diferente.
Em um ambiente orientado a testes, o dojo foi resolvido por 4 pessoas, e posteriormente um quinto elemento se juntou a nós.
Não vou “codar” aqui, pois não tenho o código exato de como ficou o dojo, e se eu postar algo diferente aqui estaria mentindo.

O que fizemos basicamente foi criar nossa classe FizzBuzz e dentro dela um método para verificar se o número era divisível de resto zero por 3 por 5 e por ambos.
Primeiramente foi usado alguns “ifs” e “elses” e dentro de cada um retornavamos fizz, buzz ou fizzbuzz conforme o número.
Ao termino do problemas refatoramos o problema usando a ideia dada pelo quinto elemento que citei acima.
Se o numero fosse divisível por 3 ou 5 era criada uma String vazia, que se o número for passado for divisível por 3 adiciona “Fizz” a string e se por 5 for, é adicionado a string “Buzz” se ele for divisível pelos dois retornamos a string concatenada com “FizzBuzz”.

Conclusão

Dojos são muito divertidos, programar é sensacional e eu só tenho a agradecer ao pessoal que entendeu que eu não saco de Ruby (ainda) e escolheu um probleminha simples, que me renderam uma boa hora numa quinta feira.

Por hoje é só,
Abraços e volte sempe 😉
Gil.

Categorias:Diversos Tags:,

Django humanize & Dojo Python

Olá, estava vendo a documentação do Django, conhecendo as ferramentas que ele me oferce, quando me deparei com o Django.contrib.humanize clique aqui para ver a documentação original (inglês), segundo a documentação do Django o django.contrib.humanize é: Um conjunto de úteis template filters  para adicinoar um “toque humano” aos dados (tradução própia).

Exemplo retirado da docs.djangoproject :

apnumber

For numbers 1-9, returns the number spelled out. Otherwise, returns the number. This follows Associated Press style.

Examples:

  • 1 becomes one.
  • 2 becomes two.
  • 10 becomes 10.

Lendo isto lembrei de um dojo que fiz há um tempo com meu amigo Uriel (@urieljuliatti), bom não finalizamos no tempo desejado e me decepcionou o fato de não saber coisas simples com o Python. Apesar de ter ficado decepcionado com os resultados, percebi que tinha que estudar mais, e que dojos são um ótimo termômetro para saber como você esta se saindo, além de serem divertidos pelo simples fato de serem desafiadores.

Algumas coisas que pude tirar proveito daquele dia foram que dificuldades e dúvidas irão aparecer, se preparar para elas é essencial (ter uma lista com fontes de pesquisa ajuda muito) e nem sempre a tua solução é a melhor, admitir isto pode ser difícil mas não adianta, trabalhar em equipe é isso, agregar  experiências e idéias.

Dojo

O objetivo do Dojo era contar quantas letras existem nos números de um a mil.
ex: um => duas letras
dois => quatro letras
total = 6 letras.

Resolução:
Após a frustração com o Python, o Uriel começou a rabiscar algo em Ruby, e eu em python, chegamos no fim do dia sem uma resolução. O Uriel me mostrou a linha de raciocínio dele, confesso que no momento não entendi – respondi assim: Sim, sim ah tá – nunca respondam assim, nunca fique com dúvidas.

Chegando em casa, começei a pensar na solução do Uriel e percebi que ele estava certo, dei uma “rabiscada” em python e saiu algo mais ou menos assim:

-*- coding: utf-8 -*-
#! /usr/Python/Python2.7
# gilgomesp@gmail.com

# sys para usar o argv
import sys

# numeros por extenso

numeros = [{0:””, 1:”um”, 2:”dois”, 3:”três”, 4:”quatro”, 5:”cinco”,
6:”seis”, 7:”sete”, 8:”oito”, 9:”nove”, 10:”dez”,
11:”onze”, 12:”doze”, 13:”treze”, 14:”quatorze”, 15:”quinze”,
16:”dezesseis”, 17:”dezessete”, 18:”dezoito”, 19:”dezenove”},
{2:”vinte”, 3:”trinta”,
4:”quarenta”, 5:”cinquenta”, 6:”sessenta”, 7:”setenta”, 8:”oitenta”,
9:”noventa”},
{1:”cento”, 2:”duzentos”, 3:”trezentos”,
4:”quatrocentos”, 5:”quinhentos”, 6:”seissentos”, 7:”setessentos”,
8:”oitocentos”, 9:”novecentos”}]
def unidades(numero):
n = str(int(numero)) # converte para string
numeroString = ‘0’ * (3 – len(n)) + n # gera uma string numeroString = 83
u = int(numeroString[-1:])
if numeros[0].has_key(u):
unidade = numeros[0][u]
return unidade

def dezenas(numero):
n = str(int(numero))
numeroString = ‘0’ * len(n) + n
d = int(numeroString[2:-1])
dez = int(numeroString[2:])
if numeros[1].has_key(dez):
dezena = numeros[0][dez]
return dezena
else:
dezena = numeros[1][d]
return dezena

#def centenas(numero):
#n = str(int(numero)) #converte para str
#numeroString = ‘0’ * (3 – len(n)) + n
#c = int(numeroString[-2:])
#if numeros[2].has_key(c):
#centena = numeros[2][c]
#return centena
#else: print ‘invalido’

def extenso(numero):
if numero >= 20:
return dezenas(numero)+ ‘ e ‘+ unidades(numero)
elif numero < 20:
return unidades(numero)
elif numero >99:
return centenas(numero)
def main():
numero = 99 # OU sys.argv[1]
print extenso(numero)

if __name__ == ‘__main__’:
main()

Não ficou pronto, não por incapacidade, mas sim por ter perdido o objetivo para mim que era a conclusão em dupla do Dojo, o prazer de resolver meu primeiro desafio fora da faculdade com meu amigo Uriel.
Para finalizar gostaria de deixar claro que não vejo essa experiência como frustante, mas sim como uma grande oportunidade de aprender, e acredito ter evoluído mais um pouquinho nessa caminha rumo ao infinito que é o aprendizado e evolução pessoal.

Abraços deste que vos fala, até a próxima.

Categorias:Diversos, Django Tags:, ,