Kurt Vonnegut's Commencement Address at MIT

  "Ladies and gentlemen of the class of '97: 

  Wear sunscreen. 

  If I could offer you only one tip for the future, sunscreen would be it. The
  long-term benefits of sunscreen have been proved by scientists, whereas the
  rest of my advice has no bsis more reliable than my own meandering
  experience. I will dispense this advice now.

  Enjoy the power and beauty of your youth. Oh, never mind. You will not
  understand the power and beauty of your youth until they've faded. But trust
  me, in 20 years, you'll look back at photos of yourself and recall in a way
  you can't grasp now how much possibility lay before you and how fabulous you
  really looked. You are not as fat as you imagine.

  Don't worry about the future. Or worry, but know that worrying is as
  effective as trying to solve an algera equation by chewing bubble gum. The
  real troubles in your life are apt to be things that never crossed your
  worried mind, the kind that blindside you at 4 pm on some idle Tuesday.

  Do one thing every day that scares you. 

  Sing. 

  Don't be reckless with other people's hearts. Don't put up with people who
  are reckless with yours.

  Floss. 

  Don't waste your time on jealousy. Sometimes you're ahead, sometimes you're
  behind. The race is long and, in the end, it's only with yourself.

  Remember compliments you receive. Forget the insults. If you succeed in
  doing this, tell me how.

  Keep your old love letters. Throw away your old bank statemnts. 

  Stretch. 

  Don't feel guilty if you don't know what you want to do with your life. The
  most interesting people I know didn't know at 22 what they wanted to do with
  their lives. Some of the most interesting 40-year-olds I know still don't.

  Get plenty of calcium. Be kind to your knees. You'll miss them when they're
  gone.

  Maybe you'll marry, maybe you won't. Maybe you'll have children, maybe you
  won't. Maybe you'll divorce at 40, maybe you'll dance the funky chicken on
  your 75th wedding anniversary. Whatever you do, don't congratulate yourself
  too much, or berate yourself either. Your choices are half chance. So are
  everybody else's.

  Enjoy your body. Use it every way you can. Don't be afraid of it or of what
  other people think of it. It's the greatest instrment you'll ever own.

  Dance, even if you have nowhere to do it but your living room. 

  Read the directions, even if you don't follow them. 

  Do not read beauty magazines. They will only make you feel ugly. 

  Get to know your parents. You never know when they'll be gone for good. Be
  nice to your siblings. They're your best link to your past and the people
  most likely to stick with you in the future.

  Understand that friends come and go, but with a precious few you should hold
  on. Work hard to bridge the gaps in geography and lifestyle, because the
  older you get, the more you need the people whoi who knew you when you were
  young.

  Live in New York City once, but leave before it makes you hard. Live in
  Northern California once, but leave before it makes you soft. Travel.

  Accept certain inalienable truths: Prices will rise. Politicians will
  philander. You, too, will get old. And when you do, you'll fantasize that
  when you were young, prices were reasonable, politicians were noble, and
  children respected their elders.

  Respect your elders. 

  Don't expect anyone else to support you. Maybe you have a trust fund. Maybe
  you'll have a wealthy spouse. But you never know when either one might run
  out.

  Don't mess too much with your hair or by the time you're 40 it will look 85. 

  Be creful whose advice you buy, but be patient with those who supply
  it. Advice is a form of nostalgia. Dispensing it is a way of fishing the
  past from the disposal, wiping it off, painting over the ugly parts and
  recycling it for more than it's worth.

  But trst me on the sunscreen."
