I have started more serious programming in an integrated debugging environment, and then started programming in gcc, without using IDEs. I had to learn how to effectively debug with print statements, and now I don't want to go back to using IDEs.
One good thing about this method is that it is always readily available. I develop in many different languages (some created by myself), for many different platforms (remote servers, mobile devices), and this method always works. After getting skilled in it, it is just faster to use it than to learn the debugger for each of these situations (in some cases the debugger might not even exist). It is hard for me to see how a debugger helps with some bugs (for example, when I have no idea about the precise condition in a function called 1000000 times which leads to some bad behavior which is also hard to describe, and when it happens, I would like to see the history which led to it), and the print method is more useful there.