Unix script (11 chars)
I am not exactly sure if this disqualifies as You can't just read the source file and print it, but it certainly is a nice one. Taken from http://research.swtch.com/zip.
#!/bin/cat
@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ If "read the source code so it can be executed" counts as "reads it's source code," then yes, it does so. But so do all other submissions on this page.
@FUZxxl For the one I posted, first the shebang gets read, then cat executes the program. Every program, while being executed, reads its own source code, and prints it, in cat. Your program will actually print hello world.
No, programs don't generally read their own source code, interpreters do. In cat though, the source is automatically printed, thus the programs read their own source code. Every character is an argument to a function that prints its argument, without a trailing newline. Thus, the program reads its own source, because the function is part of the program.