When achievements were first released for the Medic in Team Fortress 2, players who weren't Medics suffered. Some of the achievements require the Medic to either become an offensive player, or intentionally make bad choices. The more players tried for achievements, the worse your team did. For future achievements releases, Valve changed the focus of achievements to reward class strengths, showcase new features, reward good behavior, or highlight awesome events.
A Visual Studio achievement like "Job Security" would be terrible. It just encourages bad practices. I don't want to fix a bug in a 30-line Linq query, or understand if it does exactly what you say it does. In fact, its opposite is a better achievement: "If You Linq, You Will Miss It: Write 100 Linq queries with 3 lines or fewer." It encourages users to use a great feature, doesn't punish them if they find a case where they absolutely need to write something longer, and encourages a good habit.
That being said, some of them were also good. I could see Visual Studio using "Gimme back my ASM" or "The Academic". Some also had a Valve-style personality, like "Shotgun Debugging" or "Rage Quit."
For anyone wondering what "Whoooooosh" is supposed to mean, it is a meme for "you missed the point". It is usually used of the topic was sarcasm or irony and someone did not realise that.
The article was not as good as I expected. There are arguments for achievement-like things in VS, for example unit test coverage. This article was aimless and negative.
Actually, the achievements mimicked gaming achievements fairly well. A mix of goofy, funny, ridiculous, and painful. I don't see a problem with that at all. As a humor piece, which is what it is supposed to be, it succeeds.
Humorous, yes. But it might actually be good as a learning tool, especially for beginners. Having a popup that says you earned the achievement of "Spaghetti code" might make the user delve into why that might be a bad thing. Could be useful.
I think this would be a great plug-in for teams of developers to install. Especially early career members. You could make the rewards visible to your team members in TFS so you could rag on the guy who always submits "Spaghetti code" or the "cowboy coder" who never tests their stuff.
In .NET, you want to seal as many of your classes as possible, because it reduces memory usage and allows to CLR to perform some minor optimizations when using virtual dispatch, IIRC. I think in most cases, you're better off using interfaces and (sealed) classes or structs implementing them, if only to make your code easier to break up into manageable chunks.
The bigger reason to seal classes is to limit API surface area that needs to be tested for and preserved from one version to the next. The reasoning is closely related to why virtual methods should almost always be avoided.
Inheritance is one of the closest couplings you can have between two pieces of code in an OO language. When you inherit, you're depending very deeply on the behaviour of the base class. If you're a platform vendor, having third parties deeply reliant on very specific behaviour is a nightmare. It greatly increases your testing burden and limits future flexibility, as you'll likely have to maintain buggy invariants into the future, possibly to the point of having to introduce redundant parallel functionality merely to avoid third-party breakage when trying to expand the feature set.
If any source code outside your control is going to be using your code, and you have some kind of obligation or incentive not to break their code, then I strongly recommend that you seal your classes (final in Java, etc.), or saving that, make very few methods virtual, and ensure that they have been tested and documented appropriately.
"Well Mr. Anderson, I see you only earned one achievement this year. Achievements don't lie Mr. Anderson. Visual Studio has decided you are a U/10 Mr. Anderson. Your lack of effort should be corrected, shouldn't it Mr. Anderson?"
I could never relate to the Achievements craze, but it has a real grip on some people. I PM'd someone on my Friends list to ask if the game they were playing was any good, they replied 'nah, rubbish, just playing it for the Achievement points then taking it back to the shop.' I don't know what it is about them... I never cared personally.
Although I've never played a game simply for the achievements, I do understand the appeal. My game of choice is Left4Dead 2. I've earned just about every achievement that you don't have to consciously work towards and it is cool to see that you've done something the developers deem an accomplishment in your gameplay. It shows improvement and allows you the opportunity to see how you stack up against other players. In the end it's a little about status and a little about a feeling of personal growth.
Dunno about playing un-fun games for achievements, but Civ V (for example) has achievements to push you to explore every part of the game. Going through them has me working on crazy win conditions, the 1-city challenge, different leader strengths, etc. Adds a bunch of replay value for a pretty small amount of extra effort.
Of course, if there were IDE achievements, some derp on your team would waste time racking up achievements with work that doesn't advance the project at all.
There was an old image editing program that gave points for using new features and unlocked additional features at certain point levels. I want to say it was Kai's Power Goo (which ran incredibly well on a 233MHz Pentium MMX), but that doesn't seem quite right.
# The Multitasker – Have more than 50 source files open at the same time
Why should the user distinguish between "in memory" and "on disk". That's a performance optimization for the program to decide on.
(Incidentally, I would really enjoy a "national force-ide-programmers-to-use-vim day". "Wow, you can switch between files without your whole system crashing!?")
In Eclipse, the contents of a tab are represented by an IEditorInput instance which only loads the file (or whatever the editor edits) on demand; if your Eclipse starts with a stored session of 50 tabs, it doesn't need to open 50 files.
Meh. I set my IDE to only keep 10 files open at a time. It's such an easy thing to jump into a file nowadays I don't need them all piling up in the background.
That should be a independent service with plugins for all Major IDEs (VS, XCode, Eclipse, Emacs, VIM, maybe even TextMate) and a healthy online-community where people can brag with their achievements (the positive ones, that is). I suppose nowadays Facebook-Integration would be useful too.
A fair number of those could pretty easily be managed by an extension. Others... that'd have to be one heck of an extension.
Could be a fun project to understand creating extensions better. Though I don't have 2010, and I gather that's a heck of a lot easier to make extensions for.
half of those are for realz in the project I just joined AND we have a home-grown achievement system for stuff like successful builds, broken builds, leaving the office after committing without verifying that the build was good, cursing too much, etc.
However, json.net is awesome - I'm using it to get my latest personal project to talk to CouchDB - so its json all the way from the client, through the server through to the database.
We might as well extend this to hospitals too! Achievments like "metal detector" for leaving tools inside bodies, or "No your other left" for operating on the wrong leg.
Seriously, this is beyond a dumb idea. Programming is a profession, not a game, and you do not reward malpractice (more than 10 parameters? 30 line Linq statements?) We already have achievements in our industry and it's called a C.V.
While perhaps the list was heavy on dubious "achievements", there's nothing wrong with trying to have fun with your work. Obviously more achievements for positive things would be good, but as was mentioned elsewhere in this thread, "achievements" for negative actions could have a good teaching effect.
Up-voted because I sort of agree: although it's fun to see achievements pop up, and some of these are comical ("I’m Sorry – Created a new Visual Basic Project") some others might encourage bad practices ("The Mathematician – Defined 15 local variables with a single character name"). I mean if they were just in the periphery, that's cute. But if people actually try to "achieve" these achievements, as they do in Steam games, I have a feeling that company might quickly decide to remove such functionality from their VS.
When achievements were first released for the Medic in Team Fortress 2, players who weren't Medics suffered. Some of the achievements require the Medic to either become an offensive player, or intentionally make bad choices. The more players tried for achievements, the worse your team did. For future achievements releases, Valve changed the focus of achievements to reward class strengths, showcase new features, reward good behavior, or highlight awesome events.
A Visual Studio achievement like "Job Security" would be terrible. It just encourages bad practices. I don't want to fix a bug in a 30-line Linq query, or understand if it does exactly what you say it does. In fact, its opposite is a better achievement: "If You Linq, You Will Miss It: Write 100 Linq queries with 3 lines or fewer." It encourages users to use a great feature, doesn't punish them if they find a case where they absolutely need to write something longer, and encourages a good habit.
That being said, some of them were also good. I could see Visual Studio using "Gimme back my ASM" or "The Academic". Some also had a Valve-style personality, like "Shotgun Debugging" or "Rage Quit."