The listener will be called when the watcher is initialized, in that case, newValue === oldValue, so you need to check that as follow:
$scope.name = 'Nick';
$scope.$watch('name',function(newValue, oldValue){
if (newValue !== oldValue) {
alert('name changed');
}
});