title: Is an Initialize method a code smell?
body: <p>I'm coding a bunch of systems right now. They do not derive from a common interface.</p>
  
  <p>Some example systems: <code>MusicSystem</code>, <code>PhysicsSystem</code>, <code>InputSystem</code>, et cetera.</p>
  
  <p>Currently, <code>MusicSystem</code> loads a lot of audio files in its constructor and as a result, there may be some brief lag when the object is first created.</p>
  
  <p>Because of this, should this code loading all the audio files be placed in an <code>Initialize()</code> method instead? This allows the programmer to determine when he wants to load the audio files but then if he forgets to call <code>Initialize()</code> the program will crash.</p>
  
  <p>Because not all systems need an <code>Initialize()</code> method the programmer has to look through every system to see if the class has an <code>Initialize()</code> method and if so, invoke it. This is a bit cumbersome.</p>
  
  <p>Which approach is preferable in terms of general design principles?</p>