Python é uma outra boa linguagem de programação. Ir de Python para ruby, irá verificar que há um pouco mais de sintaxe a aprender do que em Python.
Similaridades
Assim com em Python, em Ruby…
- Há um prompt interactivo (chamado 
irb). - Pode ler documentos na linha de comandos (com o comando 
riem vez dopydoc). - Não há terminadores de linha especiais (excepto a usual nova linha).
 - Texto escrito literalmente pode ocupar várias linhas assim como o texto com triplas aspas em Python.
 - Parênteses rectos são para as listas, e parênteses são para dicionários (que, em Ruby, são chamados “hashes”)
 - Arrays funcionam da mesma maneira (adicionando-os entre sí, faz um
array maior, mas compondo-os desta forma 
a3 = [ a1, a2]dá-nos um array de arrays). - Os objectos são fortemente e dinâmicamente tipados.
 - Tudo é um objecto, e variáveis são apenas referências a objectos.
 - Contudo as palavras chave são um pouco diferentes, as excepções trabalham da mesma forma.
 - Tem ainda ferramentas de documentação embebida (é chamado rdoc em Ruby).
 
Diferenças
Em oposição ao Pyhton, no Ruby,…
- As strings são mutáveis.
 - Pode criar constantes (variáveis as quais o valor não pretende mudar).
 - Há algumas “case-conversions” forçadas (ex. nomes de classes começam com uma maiúsculas, variáveis começam com uma letra minúscula).
 - Há apenas um tipo de “list container” (um Array), e é mutável.
 - Texto em aspas permitem sequências de escape (tipo 
\t) e sintaxe especial “expressões de substituição” (as quais permitem inserir o resultado das expressões em Ruby directamente numa outra string sem ter de adicionar"add " + "strings " + "together"). Texto em pelicas são comor"raw strings"em Python. - Não há algo como classes de “novo estilo” e “antigo estilo”. Só um tipo.
 - Nunca há acessos directos aos atributos. Com Ruby, são tudo chamadas a métodos.
 - Os parênteses são opcionais para as chamadas a métodos.
 - Há o 
public,private, eprotectedpara forçar o acesso, ao invés do Python_voluntary_underscore__convention__. - “mixins” são utilizados ao invés das múltiplas heranças.
 - Pode re-abrir classes em qualquer momento e adicionar mais métodos.
 - Tem o 
truefalseem vez deTrueeFalse(enilem vez deNone). - Assim que testado para verdadeiro, só o 
falsee onilavaliam para um valor falso. Tudo o resto é verdadeiro (incluindo0,0.0,"", e[]), - É 
elsifem vez deelif. - É 
requireinstead ofimport. Embora outras vezes, a sua utilização seja a mesma. - O estilo comum de comentários nas linhas acima das coisas (ao invés de docstrings abaixo delas) são usadas para gerar documentos.
 - Há um número de atalhos que, embora dão mais trabalho a lembrar, irá rapidamente aprender. Eles pretende fazer o Ruby divertido e muito produtivo