Weird characters in serial monitor indicate a baud rate mismatch.
Either the serial monitor and your sketch are set for different baud rates (the serial monitor must be set to match the baud rate set in Serial.begin()), or you compiled code for a different clock speed than your board is running at, and somehow managed to upload it (this often fails, because when uploading over serial, the baud rate usually depends on the clock rate that you've selected - but if uploading via an ISP programmer, or if the board you selected happens to use the same baud rate for serial uploads at two different clock speeds, you can end up in this situation.). But usually, you just set the serial monitor to a different baud rate and forgot.
This can also be caused by things that are interfering with pins 0 and 1 - for example, if you have another serial device connected to them that's trying to talk at the same time - even if the baud rates match, if two things are trying to talk via the same wire, the result will be gibberish.
Finally, you'll get gibberish if you're using an external serial adapter - say, it's a pro mini, which doesn't have the serial adapter on-board, the board is powered externally, and you forgot to connect the grounds.
(as an aside, someone experienced with debugging serial, using a serial monitor that shows the char codes for non-printing characters (the arduino serial monitor is garbage - it's convenient, but not good enough for anything other than basic use cases. I use hterm, which is a swiss-army-knife-and-a-half of a serial terminal), can often differentiate between these ;-) )