I'm opposed to general usage of these things on principle. If you're getting enough sleep, you should wake up on your own when you need to. However, many of us like to both stay up late and get up in time for work/school, so these devices persist.
Alarm clocks come in 3 varieties:
- Electronic alarm clocks usually make a buzzing or beeping sound (or some other annoying yet simple waveform). Some incorporate radios and/or cd players, but these are less common and naturally cost more. These never seemed to wake me up consistently. They also tend forget everything whenever there's a power blip (better ones use a battery to prevent this).
- Mechanical alarm clocks are the kind RalphyK mentioned. These use two bells and a metal knocker that alternately hits each bell rapidly and forcefully. These are immune to power outages, but do have to be wound frequently (usually once a day). These are generally pretty effective.
- Software alarm clocks (stop laughing) are actually any of several tricks to get your computer to (for example) play a given sound at a given time. This requires that you have a computer and speakers within reasonable proximity to your sleeping arrangements (In my dorm room, my computer and speakers are under my lofted bed). In Windows XP, this can be done by setting the desired sound/song/whatever as a scheduled task for the desired time. There should be a way to do this in Linux, I just don't know how yet (/msg me if you do). Selection of the song is important. I use Fear Factory's Hurt Conveyor if I absolutely must be up at the time I set it for.
Note: I'm a very heavy sleeper. I've slept through six concurrent electronic alarm clocks before. I also nearly slept through a fire alarm in my dorm, despite there being a squawkbox just outside my room's door. Lighter sleepers will probably do fine with electronic alarms, but overkill isn't a bad thing.