Metaprogramming có thể được hiểu là "dùng code để sinh ra code", với mục đích là giúp source code của chúng ta trở nên ngắn gọn hơn, giảm thiểu lặp lại những đoạn code giống nhau.

Metaprogramming được sử dụng để thêm, chỉnh sửa hoặc thay đổi mã của chương trình ngay cả khi nó đang chạy. Ta có thể làm mới hoặc xóa các method hiện có trên các object, sửa đổi các class hiện có, xử lý các method không tồn tại, và có 1 hệ quả là source code của chúng ta sẽ trở nên khó hiểu hơn ...