Vaga desenvolvedor Ruby on Rails

Galera, já faz quase um ano que estou trabalhando para a nu design e nós estamos contratando programadores ruby \0/

A nu é um estúdio de design gráfico de São Paulo, com um trabalho forte em web. O estúdio é consagrado pelo bom desenho e por ter uma pesquisa permanente, também na área do desenvolvimento. Informal e descontraído –porém extremamente profissional e produtivo– o estúdio mantém uma equipe de ponta que trabalha duro (apenas durante a semana!) para entregar o próximo projeto sempre melhor que o anterior.

desenvolvedor ruby on rails

requisitos

– experiência em ruby
– testes automatizados
– xhtml / css
– javascript / jquery

diferenciais

– mongodb
– rspec (tdd e bdd)
– práticas ágeis (scrum e xp)
– nginx e passenger

é seu perfil? envie seu cv e usuário do github para contrata@nudesign.com.br

Erros que cometi nesse sprint

Estou há mais de um mês sem postar nada por aqui, sim, sempre a mesma desculpa da falta de tempo. Trabalhando bastante, vários trabalhos na faculdade, alguns projetos paralelos e outras coisas estão consumindo grande parte do meu tempo.

Bom, desculpas a parte, arranjei um tempinho para compartilhar um pouco dos problemas que tive essa semana no trabalho. Acho que tão útil quanto compartilhar coisas boas que aconteceram é bom compartilhar o que não foi tão bom assim, afinal aprendemos bastante com os erros, talvez os meus erros te ajudem a errar menos =)

Eu passei os últimos três anos da minha vida trabalhando no desenvolvimento do Guia SPMais (sim fizemos outros projetos na Seek, mas esse era o principal). Boa parte do que eu aprendi sobre desenvolvimento web, programação, SEO entre outras coisas foi desenvolvendo o SPMais. Fizemos muitas coisas boas, com destaque para a migração de PHP para Ruby on Rails. Eu gostava bastante de trabalhar na Seek, afinal lá trabalhei com amigos como o Godinho, a Cássia e o Hary.

Há cerca de dois meses mudei de emprego (vários os motivos que podem se tornar um post separado). Agora estou trabalhando na Nu Design em São Paulo/SP. A Nu é uma agência com um time de desenvolvimento fantástico (Rails é claro =p), estou tendo vários novos desafios e aprendendo muito com caras como Marco, Samuel e com a consultoria do Carlos também.

Toda essa introdução só para ficar mais claro o contexto hahahah. Basicamente a Nu tem um processo de desenvolvimento bastante maduro (no meu ponto de vista). Apesar dos contratos dos projetos ainda serem de escopo fechado, utilizamos SCRUM e alguns conceitos de metodologias ágeis.

Essa semana cometi alguns erros que comprometeram (não tão drasticamente assim) a entrega desse sprint. Vou listá-los abaixo.

- Comecei várias tarefas ao mesmo tempo

Sem dúvida o meu maior erro foi dar start em mais de uma tarefa ao mesmo tempo. No meio do sprint fiquei travado esperando um layout para terminar a minha tarefa, então comecei a fazer a modelagem que iria utilizar para as próximas tarefas, o problema foi que eu startei quatro tarefas (estimadas em 13 pontos) ao mesmo tempo. Ou seja, peguei uma carga de trabalho maior do que fui capaz de fazer e “impedi” que outra pessoa pegasse alguma desssas tarefas.

- Estimei mal o prazo

Estimar prazos é sempre complicado, as vezes queremos ser a Mãe Diná e tentamos prever o futuro, mesmo que seja algo próximo, cometi um baita erro estimando um prazo que não fui capaz de cumprir. Fiquei até mais tarde no trabalho e nem isso resolveu o problema da minha estimativa. Provavelmente por não entender o problema completamente.

- Cometi falhas na comunicação

Sem dúvida um dos principais objetivos das metodologias ágeis é melhorar a comunicação. Quando há falha na comunicação, há problemas sérios. O erro que cometi foi não me comunicar tanto com os outros desenvolvedores quanto com o PO, então tive dificuldade na parte técnica e a minha implementação não atendeu o esperado da funcionalidade.

- Não escutei as pessoas

Um erro comum do ser humano é não escutar as outras pessoas, principalmente aquelas que tem bem mais experiência que você, dentro de uma equipe de desenvolvimento não é diferente. No meio do sprint o Carlos identificou o problema de eu ter pego mais de uma tarefa ao mesmo tempo, mas fui teimoso acreditando que isso não iria atrapalhar. Cometi outro erro.

Lições que aprendi nesse sprint:

– Não tente abraçar o mundo, faça uma coisa de cada vez, uma tarefa por vez.
– Não se comprometa a fazer mais do que você é capaz.
– Investigue o problema de maneira profunda, sua estimativa será melhor.
– Converse com as pessoas, pergunte, questione, compartilhe e faça com que compartilhem com você.
– Escute as pessoas, quem tem mais experiência pode ter passado por problemas que você ainda não passou.
– Estude e aprenda sobre metodologias ágeis, nunca ache que você já sabe o suficiente.

E o mais importante

- Programar em par pode parecer “mais lento”, mas ajuda a diminuir problemas como esses.

Sinatra – Uma DSL Ruby

Quem não está muito ligado na comunidade Ruby talvez só tenha ouvido falar sobre o Rails. É claro que o Rails é o framework mais famoso de Ruby e vem ajudando a alavancar o crescimento da linguagem, porém existem outros frameworks e DSLs em Ruby. Uma DSL muito boa é o Sinatra. O Sinatra é uma DSL para se criar aplicações web de maneira rápida e com o mínimo de esforço. (eu aprendi a utilizá-lo com o Anderson Leite da Caelum)

O Sinatra possui algumas diferenças com relação ao Rails como por exemplo, não segue o padrão MVC. Seu uso é recomendado para resolver problemas pequenos e é realmente bem fácil utilizá-lo.

Vamos supor que você precise fazer algo simples como criar uma listagem qualquer ou qualquer outra coisa simples não compensando o desenvolvimento em Rails. (hoje eu precisei criar um sitemap com alguns dados da minha aplicação, bem simples, algo que não seria necessário agregar ao escopo da minha aplicação Rails).

Antes de começar é necessário instalar o Sinatra

sudo gem install sinatra

Vou utilizar também o MySQL e o Data Mapper como ORM

sudo gem install dm-core
sudo gem install dm-mysql-adapter

Supondo então que quero fazer uma simples consulta em uma tabela posteriormente criada e com dados cadastrados.
Crie o arquivo my_sinatra.rb com seu editor preferido

require 'rubygems'
require 'sinatra'
require 'dm-core'

#conexao com mysql
DataMapper.setup(:default, "mysql://user:pass@localhost/database")

#classe qualquer
class Product
  include DataMapper::Resource

  property :id, Serial
  property :name, String
  property :status, String

  def self.active
    all(:status => "A")
  end
end

#listando produtos ativos
get '/' do
  @products = Product.active 
  erb :index
end

#utilizando SQL diretamente
get '/sql' do
  @products =  repository(:default).adapter.select("SELECT * FROM produtos WHERE status = 'A'")
  @products.collect{|p| p.id.to_s + " "}
end

Crie também uma pasta chamada views e o arquivo index.erb

<% @products.each do |p| %>
  <%= p.name %><br />
<%  end %>

Para startar a aplicação

ruby my_sinatra.rb

O Sinatra roda na porta 4567 (http://localhost:4567/)
Repare que as urls são definidas no início do bloco: get ‘/’ do

Para complementar o post, recomendo a leitura:
http://www.sinatrarb.com/intro
http://datamapper.org/getting-started