Certainly not a load of them, one works well enough.
// CSS
#not_here {
display: none;
}
// Input
<input name="vanish" type="text" id="not_here" />
And then just check to make sure it’s blank.
if ($this->input->post('vanish') !== '')
{
log_message('info', 'Spam submission by: '.$this->input->ip_address());
exit;
}
It really depends on the amount of spam you’re getting. A simple bot will be stopped by the above. Something targeted directly at your site will have no problems getting through. If someone is desperate enough, they will get their spam in somehow, even if they have to do it manually.
You’ll need to assess how much of a target your site is. My approach is to start with something very user-friendly (captchas just aren’t), and make it more challenging if/when the amount of spam increases.
A blacklist and/or a system like akismet can do wonders without affecting the end-user.