For longer and more interactive shell interactions you can use job control, if your shell supports job control (bash, zsh and pretty much every reasonable user shell in existence). Ctrl-Z will suspend vim and drop you back into your shell, you can then unsuspend vim by running "fg" (at least in bash).
Alternatively, my own work flow consists of using tmux to have a split screen terminal, Vim left, REPL right.
:!make
Then run with:
:!./myprog
In both cases, the output will be viewable in a temporary window. You can also pipe the output of a shell command into a vim buffer (aka file) by prefixing you command with "r":
:r !./myprog
This takes all the output from ./myprog and lets you view/edit it in vim.
If your language has a more involved build process, chances are someone has written a plugin to help you and posted it on the vim scripts page: http://www.vim.org/scripts/script_search_results.php.
Enjoy :)