Hacker News new | past | comments | ask | show | jobs | submit login
What if Visual Studio had Achievements? (whiletrue.com)
155 points by varunsrin on Jan 25, 2011 | hide | past | favorite | 53 comments



A lot of these are bad Valve-style achievements.

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."


Whoooooosh


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.


It already does. I use it every day. Twice a month my bank account levels up.


By... uhh... how many Experience Points?


It's not experience points, but Gold, and you can buy anything with it.


Anything, except love.


Me love you long time!


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 agree with this - it could also help in driving the adoption of new language features, like the async keyword coming out in C# 5


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.


Missing:

"The MS Employee" - Seal 50% or more of the classes in your project.


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.


The Office group at Microsoft actually did something like this. http://www.writersua.com/articles/ribbon_hero/index.html

But, in answer to the question, I would probably jeer at my old friends on the VS IDE team ;)


"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?"


For anyone curious about the Paula achievement: http://thedailywtf.com/Articles/The_Brillant_Paula_Bean.aspx


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.


I didn't get this one:

The Engineer - Killed a zombie with The Wrench

If this is a joke about Visual Studio, I must not be using it enough because I don't get it 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.


I think I'd prefer to have all the features I paid for from day one, and not have to jump through arbitrary hoops to get access to them.


This is amazing. I'm going to write a Jira plugin for achievements in bug tracking.


Check out playnice.ly, they're planning on achievements in bug tracking too.

http://eu.techcrunch.com/2010/11/17/playnice-ly-exits-beta-w...


If Visual Studio notices that you're greenspunning a project, it'd tell "you're too smart for us; go switch over to Emacs"?


Missing :

Controversial - used a goto statement

Ultimate question - nested 10 if statements


Ahh, the people who wrote this code weren't morons, just "edgy" non-conformists.


Forget VS, someone should make an emacs extension that does this.


# 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!?")


I think it was more about how many tabs are open at once, which I would suppose means in memory since they're all going to be editable.


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.


The Mozilla team could learn from this.


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.

That'd probably gain lots of traction.


100 points for grasping how Visual Studio's Configuration Manager works, or more likely... it does not.


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.


Maybe it just needs a high score table for functions based upon their cyclomatic complexity.


Fun perhaps, but any reward system for programmers not based on shipping will fail.


Successfully consuming a non .net webservice is definitely an achievement.


Not if you use RestSharp :)


using newtonsoft's json.NET would count?

edit: http://james.newtonking.com/pages/json-net.aspx


I suspect Devilboy meant SOAP web services.

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.


While they're at it why dont they use a less bloated IDE.

I suppose I'm just jaded, but doing anything in Visual Studio feels horrible. I guess I'm a *nix+vim fan boy through and through.


Learn the shortcuts and remove the toolbars.


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.


Ray tracer written in more than 30 lines of Linq (using a y combinator), malpractice perhaps but I learned from it.

http://blogs.msdn.com/b/lukeh/archive/2007/10/01/taking-linq...


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.

Just my 2¢




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: