I have mixed feelings about it. They make it incredibly easy to fall into temptation, you see. We can roughly categorize the achievements available into three categories.
You've got your grinding achievements, that reward you just for showing up and doing what you're supposed to do on a bare minimum level. Heal X points or cause X kills over your gaming career, achieve X achievements (achievements for getting achievements, how droll!), and so forth. Pure time investments. The temptation here is moderate. For the really big numbers, it's all or nothing. Either you ignore them until you get them naturally, or you plop yourself down and farm for hours in achievement servers - efficient, but tedious. I managed to avoid that little waste of my life! On the other hand, when it's just ten, twenty numbers to click... yeah, I fell to the Dark Side there. Just a few minutes of my life gone, along with my achievement integrity, of course.
You've got your competence achievements, which reward you for not just playing, but for playing well. Killing guys with a medic without using your invincibility power even though it's available. Particularly great shots as a sniper. Capturing map objectives as a fast-running scout. These things are often very hard to do in game, because they require the cooperation of your allies and, most importantly, enemies who are worse than you. If you're, like me, new to the game, and only picking it up after four years of it being out, there aren't many people who are worse than you. If you like to dabble in different classes and maps, the learning curve is even bigger. So again what could take hours, days, weeks, or even months of regularly playing the 'real' game can be done in a few minutes on a server designed to just hand you the achievements. Yeah, couldn't resist there, either. However, many of these require such specific circumstances that they're not farmable without help, and I've avoided asking for any so far, which leaves me plenty to still earn the fair way.
Then there's the totally random pure luck stuff, or stuff that's there just to be there. These achievements are silly, funny, but not easy to get at all. You can't deliberately try to set a spy on fire while he's flicking a cigarette in every match you join... well, you can, but you'll die a heck of a lot and be a burden to your team. These I also don't feel bad about farming. Once again, the time ratio for the 'fair' way to the 'cheat' way heavily nudges one over to cheat, if one cares about such things.
So, the common thread here is that if you make it too hard to get legitimately, and it's easy to get illegitimately, people will naturally tend more towards the illegitimate. This brings up the question, should we not have hard achievements, or achievements that take long periods of time, if we can't 'protect' them from being gamed? The thing is, designers are always making achievements in the spirit of the game, but players often don't play in the spirit. This is an ongoing war without any resolution that I can possibly think of. No matter what kind of achievement you make, you can't make it impossible for it to be gamed.
So you should, I think, do the next best thing, and not make them too excessively grindy or luck-based on the one hand, and not too easy to game on the other. Rather than achieving unbreakable formula of hoop jumping, one should just make the hoop jumping time and effort investment as reasonable, intuitive, and pleasurable as possible.
To this end, Team Fortress 2 did a lot of things right, and a few things wrong. The very existence of luck-based achievements is highly infuriating. I see no reason for them, personally. And especially I see no reason for them to exist within the class milestone structure, which is what grants tangible rewards - weapons. If they have to be in there, they really should be separate from the achievements that offer real rewards and operate by rewarding actual desirable in game behavior and not the random blessing of that whore Lady Luck.
Grinding ones aren't necessarily bad, but they were implemented clumsily here. There should never be an achievement like this: "Do X thing a Huge Amount Of Times to get this achievement." That encourages botting, kill farming, and basically letting your eyes glaze over while you operate on autopilot. Instead, the ultimate number should be broken up into tiers. "Kill a small amount of things." "Kill a medium amount of things." "Kill a large amount of things." So you get steadily rewarded each step of the way and don't feel the need to rush, rush, rush to the top as fast as you can.
Ultimately my favorite kind of achievement is the one where you're rewarded for playing well and achieving goals in the intended fashion, both cooperatively and competitively. In proper matches, they definitely serve as guidelines to keep player behavior on track. However, the more conditions you put into place on these achievements, the more of a temptation it is to farm them with the help of getting a buddy on the other team or going to a server dedicated to such things. Circumstantial factors, such as enemy team composition, need to be included with a light hand, to avoid taking the ability to accomplish the achievement too far out of the player's personal control.
Then there's the class milestone rewards. They're a pretty good idea, but inconsistently implemented:
Some classes have harder or easier achievements, more or less achievements, and require fewer or more to to attain milestones and get the weapon. It'd be a lot easier to balance these things if, at the start of designing the system, you just sat down and made sure each class had equal numbers of achievements of a particular rough difficult level, with equal effort for equal rewards. If you reach a bottleneck where it seems like you can't think of enough easy, hard, or fun achievements for a particular class, then that's probably a good sign that the class needs to be given more depth at a baseline level. It also helps players to see that every class is treated equally, and gives them a better idea of how each one is supposed to be played, and what the designers intend to be easy or challenging to accomplish. What the designers intend will likely not match up with reality, but intentions can be adjusted, and I maintain transparency in designer-player relations as a high virtue.
Ultimately I've resigned myself to a mixture of cheating and fair play. I'll do whichever is more convenient right up until that last milestone, and at that point I'll just let them accumulate naturally. There's nothing wrong with tangible rewards for achievements, but in something like a first person shooter, the desire for an even playing field is just too high. The skill difference between myself and the other players is enough of a barrier without me needing a weapons loadout difference to deal with, too.
Despite the barriers to newcomers mentioned, TF2 is still a remarkably friendly game. The majority of classes can still function fine without special weapon drops, and some of them even operate best with the default loadout. Another thing that helps is that some classes are well and truly easier to contribute with than others, in various ways. You can have the hand-eye coordination of a half-blind wombat having a seizure and still be a great engineer who tops the charts and helps his team secure victory. Yeah, I'd recommend it despite relatively minor imperfections, for those who enjoy fast-paced adrenaline junkie gameplay. It's a very unique, stylish, and enjoyable fusion of rpg and shooter. And those five dollar Christmas sales? Exquisite. Just don't go in expecting to own faces, because you're going to die.