You're correct that self is the implied receiver when you don't specify one explicitly. The reason that you're not allowed to do self.puts is that you may not call private methods with an explicit receiver (even if that receiver is self) and as the error message says, puts is a private method.