Python도 매우 좋은 범용 프로그래밍 언어입니다. Python에서 Ruby로
넘어오면 Python을 배울 때보다 조금 더 구문이 늘었을 뿐이라는 걸
알게 될 것입니다.

### 비슷한 점

Python처럼, Ruby에서도...

* 대화형 프롬프트가 있습니다(`irb`라고 부릅니다).
* 커맨드 라인에서 문서를 읽을 수 있습니다(`pydoc` 대신 `ri` 명령을
  사용합니다).
* 라인 종결이 없습니다(일반적인 줄 바꿈 제외).
* 문자열 리터럴은 Python의 따옴표 세 개로 감싼 문자열처럼 여러 줄에 걸쳐
  입력할 수 있습니다.
* 대괄호는 리스트에, 중괄호는 사전형에 사용합니다.(사전형은 Ruby에선
  "해시"라고 부릅니다.)
* 배열은 같은 동작을 합니다(배열을 더하면 하나의 긴 배열을 만들지만,
  `a3 = [ a1, a2 ]`처럼 구성하면 배열의 배열이 됩니다).
* 객체는 강 타입인 동시에 동적 타입입니다.
* 모든 것은 객체이며, 변수는 객체의 참조일 뿐입니다.
* 키워드는 조금 다르지만, 예외는 거의 비슷하게 동작합니다.
* 내장형 문서화 툴이 있습니다(Ruby에서는 rdoc이라 부릅니다).
* 일급(first-class) 함수, 익명 함수, 클로저와 함께 함수형 프로그래밍 지원이
  뛰어납니다.

### 다른 점

Python과는 다르게, Ruby에서는...

* 문자열은 변경 가능합니다.
* 상수(변경할 의도가 없는 변수)를 만들 수 있습니다.
* 강제적인 대소문자 규칙이 있습니다(예를 들어, 클래스 이름은 대문자로
  시작해야 하고, 변수는 소문자로 시작해야 합니다).
* 한 종류의 리스트 컨테이너(배열)밖에 없으며 배열은 변경 가능합니다.
* 큰따옴표를 사용한 문자열은 (`\t` 같은) 이스케이프 시퀀스와 특수한 "표현식
  치환" 구문을 사용할 수 있습니다(이는 `"add " + "strings " + "together"`처럼
  적을 필요 없이 Ruby 표현식을 문자열 사이에 넣을 수 있게 합니다).
  작은따옴표는 Python의 `r"raw strings"`와 같습니다.
* "새로운 스타일", "옛날 스타일" 클래스가 없습니다. 한 종류입니다.
  (Python 3 이상은 이 문제가 없습니다만, Python 2와의 완벽한 하위 호환은
  되지 않습니다.)
* 속성에 직접 액세스할 수 없습니다. Ruby에서는 전부 메서드 호출입니다.
* 메서드를 호출할 때의 괄호는 대부분 생략 가능합니다.
* Python의 `_자발적인_` 밑줄 `__규칙__` 대신 `public`, `private`,
  `protected`로 액세스를 강제할 수 있습니다.
* "믹스인"은 다중 상속 대신 사용합니다.
* 빌트인 클래스에 메서드를 추가하고 수정할 수 있습니다. 두 언어 다 어느 시점에서든
  클래스를 열고 수정할 수 있지만, Python은 빌트인 클래스의 수정을 방지하고
  있고, Ruby는 아닙니다.
* `True`나 `False` 대신 `true`나 `false`를 사용합니다. (그리고 `None` 대신
  `nil`을 사용합니다.)
* 참 거짓을 평가할 때 `false`와 `nil`만이 거짓 값으로 평가됩니다.
  (`0`, `0.0`, `""`, `[]`를 포함해) 나머지는 전부 참입니다.
* `elif` 대신 `elsif`입니다.
* `import` 대신 `require`입니다. 그것 말고 사용법은 같습니다.
* (아래의 docstring 대신) 코드 *위의* 일반적인 주석은 문서를 생성하는 데
  사용합니다.
* 좀 더 기억해야 하지만, 빨리 배울 수 있는 많은 단축 명령이 있습니다.
  단축 명령은 Ruby를 좀 더 재미있고, 생산적이게 합니다.
* (Python의 `del`문처럼) 한 번 설정한 변수를 해제하는 방법은 없습니다.
  오래된 값을 가비지 컬렉션하도록 변수를 `nil`로 리셋할 수는 있지만
  변수는 스코프가 끝날 때까지 심볼 테이블에 남습니다.
* `yield` 키워드가 다르게 동작합니다. Python에서는 함수의 호출 스코프 바깥으로
  반환해서 실행하게 됩니다. 해당 함수로 다시 돌아오는 건 외부 코드의 책임입니다.
  Ruby에서는 `yield`가 마지막 인수로 전달된 다른 함수를 실행하고, 그 즉시 함수로
  돌아옵니다.
* Python은 익명 함수로 람다 하나만을 지원하지만, Ruby는 블록, 프록, 람다를
  포함합니다.
