Q:

Why can I see the output of background processes?

For example, when I type ping 8.8.8.8 &, why can we see ping process working? And when I type find / -name '*test*' & , it's also seen on monitor.
Why is that? Is it not really in background?

A:

The & directs the shell to run the command in the background, i.e, it is forked and run in a separate sub-shell, as a job, asynchronously. 
Note that when you put & the output - both stdout and stderr - will still be printed onto the screen. If you do not want to see any output on the screen, redirect both stdout and stderr to a file by:
myscript > ~/myscript.log 2>&1 &

Usually you may want to discard the stderr by redirecting it to /dev/null if you are not worried about analyzing errors later. 
You can also even run commands/scripts at the same time, in separate sub-shells. For eg;
./script1 & ./script2 & ./script3 & 

A background  job can be brought back to the command line before it finishes with the command:
fg <job-number>

The job-number can be obtained by running
jobs

A:

When you use &, the process is running in background. But its standard output is still the terminal.
In fact, you may run ping 8.8.8.8 & and find / -name '*test*' & at the same time (resulting in a mixed output), but you may not run ping 8.8.8.8 and find / -name '*test*' at the same time on the same shell.
If you don't want to see anything, use something like ping 8.8.8.8 &> /dev/null &.

Additionally, you may want to learn about nohup and disown.

