¿Cuándo exactamente un método tiene efectos secundarios?

Como siempre lo entendí, cualquier cambio en el estado de los programas (o cualquier cosa que tenga que ver con IO) es un efecto secundario. No importa si el cambio se produce en una variable global o en un campo privado del objeto al que se llama el método. Se deduce que todos los métodos que no devuelven nada no hacen nada o tienen un efecto secundario.
Mi confusión proviene de uno de los instructores de nuestra universidad (que todavía es un estudiante y, por lo tanto, todavía no es omnisciente;)) diciéndome que los setters no tienen efectos secundarios.

Respuestas a la pregunta(3)

Su respuesta a la pregunta