Here are my tips for taking good photos, as expressed succinctly on my Twitter feed:
#1: CROP. Cut out extraneous data along edges of photo, either in-camera or in post-production.
#2: SEPARATION OF ELEMENTS. Each person or other subject should be distinct from its surroundings. Move to make that happen!
#3: SINGLE FOCUS POINT. Each photo should have only ONE center of attention, no more. If two things are competing, cut one out.
#4: COMPRESSION. Select a viewpoint that compresses the scene into a tight area. E.g. A whole mile-long train seen from the front.
#5: ILLUSION OF DEPTH. Always put something in the foreground and something in the background.
#6: HUMANIZATION. Every photo needs a human or human-like character to give the scene perspective.
#7: HIGH CONTRAST. Search for bright colors and high contrast between colors. Avoid dull grays.
#8: IRONY. Seek the outrageous and that which is unexpected for the situation.
#9: FIND HIDDEN MESSAGES. Look for messages in the juxtaposition of objects. Change your viewpoint to bring these items together.
#10: TAKE A LOT OF FRAMES. Shoot first, ask questions later. In the digital age, it's all free, so why not?
#11: REMOVE DISTRACTIONS. Frame or crop to exclude distracting objects, or Photoshop them out.
#12: KEEP SUN BEHIND YOU. Whenever possible, stand with the sun behind you for best light.
#13: ILLUSION OF MOTION. Every photo should be "going someplace" with its main character engaged in an action.
Most of these elements are present in the photo above (from Rome, see larger version). The girl in pink is the reference point. There's depth. There's motion. Most of the people in the photo are nicely separated. The "irony" element is that this place looks surreal, yet it is real.
Also see my Guide to Photo Cropping.