Shrinking and growing database files cost you resources and have other side effects as well. I have a technical description http://www.karaszi.com/SQLServer/info_dont_shrink.asp if you want to get into details about it. Sure, you can have valid reasons to shrink, after archiving lots of data and needing to free some disk space for example. But even after pointing to my article I see people doing this at a regular basis, hence this analogy. The analogy uses transaction log file as example, but the same basic principles applies to data files:
Say you have a leaking roof at the office. You need to put a bucket for the water under the leak (the bucket is your database file, a log file, .ldf, for this analogy).
Ever so often, you need to empty the bucket (backup log if in full or bulk logged recovery model, or when checkpoint occurs if you are in simple recovery model). Emptying the bucket doesn't make the bucket smaller. The bucket still consumes the same amount of cubic cm of your office space.
You can of course have one of the office workers (the machine resources) take an angle grinder and make the bucker physically smaller when you empty it. This consumes resources. But you would now have an office worker to use a welder, perhaps every 10 minutes or every hour to make the bucket larger, as you have more and more water in the bucket.
I don't know anyone who had a leaking roof, but if I were in that situation, I sure wouldn't make this bucket larger and smaller all the time. I'd use a bucket with a size necessary to accommodate the water that builds up between when I empty the bucket. This is how I handle my database files as well.