Enlisting Game Hackers Instead of Fighting Them
CVG recently spoke with Christofer Sundberg, co-founder of Avalanche Studios, the company behind Just Cause and its sequel. Sundberg expressed his disdain for both DRM and poor cross-platform ports, and talked about how he sees the hacker community as more of an ally than publishers do. Quoting:
"'... 50 percent of the people that work for me come from a hacker background - that's true.' When asked whether approaching leading hackers and asking them to put their programming skills to good use was a wise idea, Sundberg added: 'Oh yeah. I absolutely think that's a fair approach, to think about how these people can fit on the right side of the law. It's one way, at least. Perhaps the truest pirates are too much down the road of anarchy to ever work with you in a proper way; these are the guys who see us as evil! But in Sweden the [hacking] scene was huge... As a studio, we've found that there's definitely a lot of talent [in that community].'"
My cat, Joe, is a proficient hacker.
Hebrews 11:8
Jeremiah 33:3
this article used two words wrongly: Hacker and PC - http://www.gnu.org/philosophy/words-to-avoid.html#Hacker - http://www.gnu.org/philosophy/words-to-avoid.html#PC
"The DRM does not stop piracy," he said, "it just punishes the people who have actually paid for the game. It's completely useless."
Agreed. So that must be why Just Cause 2 doesn't use any DRM.
Oh, wait, it does. And it punishes people who have actually paid for the game.
So at least his customers agree with that statement.
That being said, Just Cause 2 is a lot of fun. Unfortunately, the Square Enix taint is already there, and you get half a game out of the box with the rest being released as an endless stream of DLC.
And now that they're published by Square Enix, I wonder how long until we hear about Just Cause 2 2?
At least Square Enix has a fairly simple form of DRM that they employ. The just make games no one in their right mind plays.
Farewell, cracking. You gave it a valiant go. Alas, they do not want you.
Hacking is an honourable past-time, in which the hacker "tinkles at the ivories" to see what comes out. There's intrinsically nothing wrong with that.
It's the mainstream media who have usurped the meaning of hacker to mean someone who exploits vulnerabilities in systems (without permission.) I say there's a better term: criminal.
--Newall (a hacker, and proud of it.)
I wonder how much of his coders come from the cracking scene, and how much from the demo-scene.
The cracking scene has always had some ties with the demo scene (and in some cases demo groups where the 'legal-branch' of some hacking groups) but cracking PC games does not bring much skill for game coding. (or is x86 assembly code really such a special skill these days?)
The fact of the matter is that in the 21st century, media & games companies have set goals of ensuring that customers don't hang to things for too long & are always clamouring for the next upgrade with wads of money in their hands - we've already seen the results of this with the movie & music industries.
In the movie industry, it's about rechurning concepts that bring in vast profits quickly - a constant barrage of 3D movies, CGI animations with cute animal characters & endless sequels.
In the music industry, it's about elevating unknowns to pop star fame in very short periods of time, then dropping them after a year or two when they probably start getting too belligerent & demanding too much money.
The games industry is no different, games companies do not want their customers hanging on to games for too long - because they want customers demanding the next release as soon as possible. Unfortunately, the difference here is that the average new game costs at leasts 3 times as much as a new music CD, a new movie DVD or a cinema ticket.
Games hackers are therefore seen as enemies of games companies because the "nice" hackers create (at least for PC versions of games) mods that can prolong the life of a game many times over, resulting in customers being entertained for a lot longer before buying the next game, whilst the "naughty" hackers break games open so that others can copy & play them.
This is precisely why games companies (for the most part) have worked hard to convert PC gamers to console gamers because a console gamer can be restricted in what he/she does with the game a lot more than a PC gamer can be - consequently, this is why the number of PC games titles have tailed off dramatically over the past few years, despite there probably being more people than ever who own PCs and who play games. In other words, it's an artificially induced extinction of PC gaming to suit games company coffers.
As a PC gamer in my 40s, I wouldn't for one minute want to compare myself to teenage or younger gamers. But I still play a lot of PC games today despite buying very few (in all honesty, the only PC games titles I sit in anticipation of are the Fallout series ones) but I don't copy or pirate any either. All I do is enjoy playing and replaying old titles with community mods & levels, I also do a lot of retrogaming.
If the youngsters of today need better & better graphics in a game for better immersion then good luck to them & I'm not one to argue with them - if anything, graphics were something that appealed very much to me when I started computer gaming on the ZX Spectrum & the Commodore Amiga.
But ultimately, it all comes down to the hackers who write mods & emulators that allow me to satisfy my gaming needs without my having to buy any new games - not to mention, as a mostly Linux user anyway, the large number of Open Source games like Alien Arena and World Of Padman where, if I feel like a little multiplayer gaming, I can dive online for a half hour or so without having to spend weeks in an MMORPG or the like.
Gentoo Linux - another day, another USE flag.
I know, it's really tough to generalize like that but I ask this question because of an experience I am having right now and it's the very burning question I seek perspectives on.
My programming background is more formal. When I plan a project, I plan the UI, the data structures, the program code and of course, the intended functionality. Only after that do I start coding.
When I started in programming, I was a kid -- I just wanted to write code and see what I could make it do but I eventually outgrew the idea. But the more I did that, the more I realized I didn't know what I was doing and the more complex my programs became, the more lost in them I became. Those problems led to my needing to become better educated and more systematic in my approach to coding.
I have a co-worker who is absolutely enamored with hacking and cracking. He is by all definitions a script kiddie. He has managed to generate some simple apps which are useful, but when I look at the code, I am ... well, there is no kind way to put it -- it looks like a teenage boy's bedroom. And while he is coding his current project, he is routinely banging his head on the keyboard trying to figure out why he is getting segfaults and the like until he gets himself through that step of that module of code.... (I presume there is going through steps and modules) I have watched him kill himself over not knowing when to use an ampersand to pass a pointer or what have you. That's when it hit me -- he still has no grasp of C coding fundamentals -- it is not a part of his inherent thought processes when his is "thinking code into an editor" which is what a good programmer should be able to do.
As I said, I have seen his source code in PHP projects... not good. I have seen where he left output generated by program unclean and incomplete. Now I see he simply doesn't think in code at all --- he spits out commands and then tries to get them to work. All he does it hacking and cracking... he actually uses metasploit and meterpreter scripts in administrating PCs on the network.
And it goes without saying that none of this is documented particularly well if at all.
So the question is one I believe I already know the answer to -- are hackers/crackers better programmers? I think no. But what does anyone here think? I am pretty sure some will take the opposing view point and I suspect they will be the same people who once asserted that validating your input is a waste of processing and code execution time.
The issue of DRM would be solved overnight if a lot more people grew backbones - sorry, just just how badly does a company have to treat a customer before they just turn around, walk away & take their money elsewhere?
There is not one thing that I can think of that I would consider to be something I must pay to possess no matter what - if something is priced at a price I'm not prepared to pay or if that something is crippled in such a way that my enjoyment is crippled in some way, then I just don't buy it.
Nobody forces anyone to buy a DRM-crippled game, that's entirely a decision made by the customer. And if enough people didn't buy enough games because of DRM crippling, then DRM would disappear overnight as a commercial failure and none of us would ever hear of it again.
It's that simple.
Gentoo Linux - another day, another USE flag.
I have a co-worker who is absolutely enamored with hacking and cracking. He is by all definitions a script kiddie.
You pretty much answered your own question: he is a script kiddie, not a hacker or cracker. Hackers are elegant and, in my experience, have a higher sense of intelligence and thought process. That's often the divide for people who go to school to earn their degree in computer science and the ones that are successful programmers without going to school to earn their degree; the formally educated feel like they deserve some bonus credit because they blew tens of thousands of dollars getting a piece of paper. Don't get me wrong, going the degree route is the smarter choice overall, but it certainly doesn't give merit to your skills. In fact, I'd probably hire a seasoned hacker over someone with less than 10 years of school-earned programming experience.
words are abused terribly for media hypenosys affect. ms shills here use italics, a lot. not subtle here.
so, when one is backing both sides in a world war, it can be tricky to decide who to side with at any given moment. do we really need all this, to make us safe? from? alah? gays? the truth? what?
And we might not always tell you what you want to hear.
Back in The Day, I wrote a borg client ("Rogerborg") for Netrek which used a man-in-the-middle attack (and a bit of library overriding) to spoof the RSA authentication scheme used to detect blessed client binaries - Netrek was decades ahead of its time with regard to security.
It was a great learning experience, and convinced me that trusting the client is futile; there are always more people out there trying to crack it than you have developers to protect it. I kind assumed that in the 18 or so years since then that lesson would have been learned, but even to this day, we still see game after game released that try to play whack-a-hack on the client side.
Please take it from me: you can't win that fight. And that counts double if you have to pay developers to effectively fight against the enthusiasm of your playerbase. The more successful your game, the more potential crackers you have.
Saying "Yeah, put some checks in the binary, or ship it with Punkbuster and we'll fix it later."? That's a great strategy if you're planning for failure.
Secure the servers, come up a network protocol that designs out the ability for cracked clients to profit, and you're done. If your game doesn't lend itself to that design - like a twitch FPS where an aimbot can get an auto-kill - then bad news: You. Are. Screwed. Just try to make your costs back before your client gets raped and your game collapses under the weight of the bots.
If you were blocking sigs, you wouldn't have to read this.
I think you're sort of answering your own question. He's not good at what he does, and evidently can't work or think in a structured manner, so he's a bad hacker/cracker/programmer/what-have-you. Personally, even though I don't have a formal programming education I think that it's intuitively self-evident that any "competent programmer" can learn to break copy-protection/write exploits/etc, not because "it's easy" but because most security holes that can be exploited are perfectly evident if you actually understand the systems that incorporates them. You could think of hacking/cracking as a specialized subset of programming.
Buffer overflows and stack/heap smashing attacks are as obvious as brute-forcing passwords or SQL injections if you understand how the processor and OS executes code and manages memory. But of course learning those things requires structured, hard work.
Emotions! In your brain!
If you live in America/England you probably haven't met any crackers before - not good ones at any rate. Most of the talent is foreign, predominantly RU.
This "divide" is probably the one I've been hearing about where some people just can't program. As in, they can "type in commands" as the parent described but they can't program in the abstract. This is probably the same people (again, heard about, never met one) who fail the FizzBuzz test, yet claim to have worked as programmers for a very long time - that would mean that these people must have hunkered through their career by copying code of the internet and altered it until it works.
Now, most people who become programmers without a degree probably either succeed or fail, and most in the above category probably just give up and try something else - but if you have a degree from a university that (in the eyes of the people doing the hiring) says that "you are a competent programmer", and you are the sort of person who aren't otherwise interested in programming, you might just expect to learn on the job. And you get a job, since you have a degree, but you never really learn to program, or learn just enough not to get fired.
Emotions! In your brain!
I've been involved in video game hacking for some time and the majority of the scene roughly matched the description of your coworker. A minority however possessed and demonstrated exceptional skills. They designed clean and modular frameworks, wrote readable C++ and C# code and commented the inevitable assembler bits. There was plenty of documentation, discussion on a high level. It was a pleasure to interact with these people. However I guess that about half of them had some formal education.
The large rest of the community however seemed to leech off the small core, more or less using brute force on their path to shoddy hacks and bots.
Or you have met ones, but they can't tell you that they are because they don't wan't to wind up in trouble for it. It's probably reasonable to assume that there's less crackers where there are enforced laws against computer crime though. Russia seems to have an open "hacker scene" like the one I've read about in the US in the 80ies, and that probably helps a lot.
Emotions! In your brain!
Just Cause is a GTA style sandbox game. You're a CIA agent in a tropical paradise ruled by an evil Communist dictator who has to be overthrown because he's evil and Communist. You go around fomenting revolution. You play the "good drug dealers" off against the "bad drug dealers." You play the civilian police off against the army. You assassinate members of the Evil Communist Dictator's government. Pretty much, you go around wreaking GTA style havoc.
Oh, and advertising materials said that the island was something like "100 times bigger than GTA III." So in order to get from your successful mission with the Good Cartel to your CIA contact who will tell you to go assassinate the Evil Dictator's son, you need to steal a vehicle. The best way to do this is with your grappling hook, which can hook on to vehicles, and then you can reel yourself into the cockpit/driver's seat and commandeer the vehicle. Seems like a pretty cool feature, right? The hook in this game is literally a hook.
Here's the kicker. Like I said, I played it on PC. GTA style sandbox games universally play better with a gamepad than with a keyboard and mouse, so I have a USB one. It's not like Just Cause, or any game in this genre, is a twitch shooter. There's too many things to do that aren't move or shoot. Splitting up the various controls that are easily confused makes sense. (The classic example is tilting a helicopter left or right versus using the helicopter's rudder. GTA III era games map tilting the helicopter to the joystick used for movement, and the rudder to the left or right shoulder buttons.) Just Cause does NOT accept a gamepad as an input for some reason. It also doesn't let you remap your controls to a set of settings that makes more sense to you. Those are two basic features that every PC port should have added to it, and the lack of them means they probably cut corners somewhere else too.
Secondly, because GTA style sandbox games are not twitch shooters, most games in this genre have a lock on feature, even on PC. They took the lock on feature out of Just Cause PC (it's in the console versions) for some reason. This makes it impossible to steal a faster vehicle than the slow helicopter that spawns at your base, which makes it impossible to get from mission to mission, which makes the game not fun because all the areas outside missions are boring and not part of the gameplay. Remember how the island is 100 times bigger than GTA 3? Well, 99% of that space is useless.
The game should have interested me. I love GTA. I love Red Dawn. This game is pretty much those two concepts mixed together. By all rights, I should have loved Just Cause. But because of the poor PC port of the first one, I had no interest in the second one. A lot of people will keep buying games despite DRM. It won't kill PC gaming. But EVERYONE has a breaking point in terms of crappy ports, and THAT is what will move everyone to consoles.
Going the degree route is absolutely meaningless because of what little they teach in college. In fact it's a liability because if you were already a good programmer at age 18 (an age you know you enjoy programming rather than chase the dollar) you wouldn't have pursued it.
If the game has DRM or is too expensive, don't buy it. Pirate it!
...England...
I've course not, we only live in a surveillance state which we really really despise and have a vast corporate culture that hoards and retains data by law, absolutely not a sort of environment that breeds discontent amongst smart individuals who want to rage against the system in the modern world of computing... not at all....
These people are not "on the road down to anarchy". Spare me the melodramatic crime spiral, do you know a single cracker who even sees himself as a criminal? Or as someone who'd see this as his career, as the big, evil mastermind of the next big cracking crew? Puuuleeeeaaase!
These are people with some skill (of varying degree, I admit... *sigh* the good old copy protections of the past are a past, sadly, today it's more a vanilla crack over and over... but I ramble) who enjoy a good battle of wits. At least most of those I met are. Now, I might have been gone too long, but I can't figure out where to make money with this. Couldn't even back in the days before the internet as a data distribution medium, with P2P and other free means of transfering and swapping data, became big, So it is KINDA unlikely someone sees this as his career opportunity, isn't it?
Eventually they'll all end up in some kind of business like this. It's similar in my trade, security. Eventually, everyone who ever poked at the security of some machine will climb the career ladder and end up as ISO or even CISO of some company. You will notice that a lot of CISOs are very shy in the vicinity of cameras. It could be a career stopper if someone remembers them from a certain conference some years ago where they went by a completely different handle than what's now displayed on the corporation homepage. ;)
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
Turning game poachers into game wardens is an old trick, dating back many centuries.
This is not a new thing, at all.
Blah blah blah. I was a good programmer at 18, took CS at a world top-five university, learned a great deal and became an even better programmer. And, living in a once civilised country, it only cost me about $5,000. Thinking you're so smart you can't learn anything from a top CS program is arrogant foolishness.
No, he's not a script kiddie. He's just a bad programmer.
Script kiddies don't do anything new, they just run code written by other people. Someone who tries to write code, even if not very good, is one step above them.
If corporations are people, aren't stockholders guilty of slavery?
Yes, let us reward cheaters, griefers, crackers, and theives. That will show them. Yes, yes it will. And, when they steal, we can throw them a prarade too.
There is no "-1 offended" or "-1 you don't agree with me" mod options for a reason.
Programming is both a skill and an art, like painting or cooking. There is a skill, which is mostly knowledge, that you have to train up. But there is also a binary switch...you either have it, or you don't. You either grasp the concept, or you don't.(1)
If you're ever in a CS program, you'll notice that between 25%-50% of the people actually understand 'programming' by the second year or so. (The number is probably higher in better schools.) Most of these people who understand had already dabbled going in, but sometimes you'll find someone who hadn't ever done it before but managed to suddenly just get it.
Everyone else is trying to program by rote. Sometimes they can do this, sometimes they can't. If they can't, they flunk out, if they can...well, they get degrees, and will spend their life doing what you said.
And FizzBuzz is a good example of a weeding tool. Any actual programmer should be able to create a pseudocode FizzBuzz in under five minutes, and probably faster than that. Although I might recommend something slightly different, just in case these non-programmers with degrees have memorized it.
I once had the idea that 'Fibonacci Replace'. might be a useful test. Almost everyone who's been through a CD degree knows the Fibonacci sequence, and it's easy enough to describe. The test is just...print all numbers from 1 to 100, except replace all numbers in the Fibonacci sequence with a 'Fib'.
People who actually grasp programming will start with a loop from 1 to 100, and have a 'current' and 'last' variable which start with '1' and '1'. When they hit current, they print 'Fib', add last to current, and copy old current into last. Otherwise print the number. (I think, it's a lot harder to write it out descriptively than to psuedocode it, and I don't want to even try to write pseudocode for the forum to mangle.)
People who do not grasp programming will be baffled by having to do two things at once, much like they get confused by FizzBuzz. But even having memorized the FizzBuzz example won't help. What's worse, they might recall the program to print the Fibonacci sequence, and try to fill in the blanks between numbers, which is a totally nonsensical way to solve the problem if you're a programmer. (Actually, a real programmer might just calculate it pre-loop and stick it in an array, but it's obvious if they do that.)
In addition, they have to use at least one temporary variable to store value as they swap numbers around, something they really don't grasp. You start with two variables, you end up with one holding the starting value of the other, and the other holding the two original values summed. You need a temp variable _somewhere_ in there.
1) Strictly speaking, there are a bunch of switches. You can grasp procedural programming but not be able to deal with a functional thing like LISP, you can not understand object-oriented programming, you can not really understand databases, etc, etc. You can learn them technically if you're a programmer, but not have have the 'art'. But there is a 'circuit breaker', that all those switches are hung off. If that's not on, you won't grasp any of it.
If corporations are people, aren't stockholders guilty of slavery?
Actually, right after I posted this, I realized you didn't need a temp variable. I thought you needed temp = current; current = current + last; last = temp;
But presumably, you have a counter variable somewhere else, so you can do current = current + last; last = counter;
Duh, that's what happens when I try to describe code without actually coding it.
If corporations are people, aren't stockholders guilty of slavery?
> there's less crackers where there are enforced laws against computer crime though.
It doesn't work like that. Mostly enforcing those laws just causes backlash. Mostly those crackers are just young people
who have not yet figured out what is the alternative to the cracking and they just follow what everyone else is doing around them.
Different people find different ways to handle the situation; for some it's creating some software on their own, and others
will find they want to create graphics... I see this stage just a mechanism for making young people choose what they want to do in the future. The only way to get them choose it themselves is to put them in situation where they need to change the status quo. But it needs a mechanism which detects if the people can actually make their own decisions, instead of just following what others are doing.
Woot! I'm using your question in some near term interview. I'm bored with trying to think up unique and interesting questions, on the fly, only to have the candidate flub them, and still feel like I can't use the question again.
Gravity Sucks
If the people that made JC2 really cared about making a decent PC port of their console title, they wouldn't have used Xinput! But they did use Xinput, and in the process they helped Microsoft in their plan to obsolete 99% of existing gamepads in favour of the Xbox360 gamepad. To me that rates as NO DISDAIN WHATSOEVER for poor ports.
Sometimes the simplest do the trick. I mentioned temp variables. (Although it turned out I didn't need them.) Non-programmers don't understand logic flow, which I think is the major difference between programmers and others. So something like:
You have three variables, a, b, and c. You need to make a end up holding b-a, and b end up hold holding a+b. c can end up with anything you want.
A real trained programmer will use c as a temp variable. c=a;a=b-a;b=b+c;. They won't even have to think about it, it's obvious why you gave them c.
Anyone else is going to attempt a=b-a; b=a+b, because they don't grasp that the first instruction changes things, which seems to be the fundamental perceptual issue of a non-programming mind. They see everything happening at once.
A real untrained programmer, someone who thinks like a programmer but has somehow never come across the problem before, will write it wrong at first, and then stare, baffled, for a second, until they think of using c, and then fix it. (I am not sure where you'd find such a person, though.)
And some God-like programmer is going to come along and demonstrate that you don't have to use c at all, you can magically XOR things or have a long string of a += b -= c += a or something and make it all work with only two variables. Obviously, they pass also.
Tests used to use 'swap these two variables', but people have been trained how to do that. But if you disguise what's going on, if you want them to swap and do math at the same time, non-programmers won't figure it out.
Non-programmers are not able to break things down into discrete instructions. They do not understand that. (I feel like a sighted person trying to describe how a blind person sees.) It's why the first programming class ever, at every college, starts off with something like 'break down your morning routine into steps', to try to get them thinking like that, but a good percentage of the people cannot.
Which, incidentally, is probably not a 'deficit' on their part. Seeing things as a unified whole instead of a bunch of tiny instructions is probably better for most things in life, in fact. For example, you can't read if you try to parse each word of a sentence individually.
It's just not better for programming.
If corporations are people, aren't stockholders guilty of slavery?
A reluctant pass...firstly, they are, in all probability, not god-like (see footnote); most likely just a show-off, or someone who's indignant at being given such a trivial exercise. (see footnote)
So you give them a pass, then an Untrained Programmer will be working on their production code a year from now, see some XORs and run away whining for his mommy, who then hands it over to the aforementioned Real Programmer, who sees a clusterfuck of XORs in order to save on one temporary variable and replaces the whole mess with "c=a;a=b-a;b=b+c;" on the grounds that it's more readable to ALL programmers likely to be maintaining the code in the future, including the *80% of programmers who are merely average.
There are a lot of high numbers quoted for the percentage of a product's life-cycle it spends in maintenance mode, none of which I recall, but the point is, you don't want someone writing "clever" code if only they and other "clever" programmers (i.e. really clever programmers and those programmers who've been exposed to those particular "clever" idioms) can debug it.
*The remaining 20% being made up of the 19.99% of people who've been shown the XOR trick and the 0.01% of "god-like" programmers who intuit it.
I've worked on an amateur game project where a game-hack writer was brought aboard as part of the coding team, with the idea to develop an anti-cheat module for the game.
While that was done reasonably successfully, the module was useless without being encrypted, and the encryption used made most virus scanners go apeshit.
Suddenly, there's a trust issue going on between the users of the game and the developers of the game. We've got to indicate there's a false positive here, or otherwise fix the issue. (Which the game-hack writer couldn't be bothered to do, and the rest of us didn't have the knowhow to attempt.)
Except we can't, because the game-hack writer is having odd mental issues and won't trust anyone else on the development team with his module's sourcecode, so we're in the same boat as the users.
All in all, it was a pretty big clusterfuck of ego, unreasonable paranoia, and a massive mistake that caused drama and killed the module due to lack of confidence in it by the main development team and user base and lack of support from the game-hack writer.
The reality though, is that my employer has the pleasure of employing some of the brightest game programmers in the world for peanuts, because other companies wouldn't sponsor H1-B Visas for those without a college degree.
Their loss, our gain :)
And some God-like programmer is going to come along and demonstrate that you don't have to use c at all, you can magically XOR things or have a long string of a += b -= c += a or something and make it all work with only two variables. Obviously, they pass also.
A reluctant pass...firstly, they are, in all probability, not god-like (see footnote); most likely just a show-off, or someone who's indignant at being given such a trivial exercise. (see footnote)
Actually, you'll never even know that you've been interviewing a true "god-like" programmer because they'll just get bored with such a mundane problem, open the Real Life debugger, hit the "Rewind to Previous-Stack-Frame" button a few times, and walk past your office leaving you wondering why the applicant never showed and experiencing a strong sense of deja vu.
P.S. We don't not "magically XOR things", we mathematically XOR things... That's the difference between make-believe and platypus.
These Hackers need to fit on the other side of the law where they can screw the end-user in the moral way instead of the immoral crime of screwing the developer.
Blah blah blah. I was a good programmer at 18, took CS at a world top-five university, learned a great deal and became an even better programmer.
Agree.
I was good, even dabbling in homebrew Operating Systems by that age but you really don't realise how little you actually know until you expose yourself to other people doing different things.
I breezed through first year with the introductory courses for programming but Discrete Math was rather insightful as was introductory Computer Engineering. Theory of Computation is also very neat (Turing Machines, computability). There were points that I openly admit I hated like "Business systems" but others that were quite insightful like Database Theory (relational algebra), Algorithms and AI.
Claiming that, having taught yourself, you are now a great programmer and don't need a university degree is generally a sign that you probably do need that degree, you are being too arrogant to actually be as clever as you think you are.*
* Such people do generally have a track record of programs they've built that work well enough so they are acceptable hires for programming jobs [maintenance would be my choice] in business but they are only really in their element on day to day tasks. A good understanding of architectural design in software may be lacking though.
>>Perhaps the truest pirates are too much down the road of anarchy to ever work with you in a proper way; these are the guys who see us as evil!
I doubt a game developer would be seen as evil by a pirate. Even copy protection developers would be seen more like a challenge :)
There ARE evils, but those are the game distributors.
But even if they needed to swap the numbers, they wouldn't need a temp variable to do so...
a ^= b; b ^= a; a ^= b;
Why are we segregating a community that has the skills for the task and seems to be willing to do the job at hand... it seems to me that the only reason for this segregation is trust issues and an association between crackers and hackers!!! :p
Bad Karma
No, if they can figure out how to make a chain of additions and subtractions come out right for a+b and b-a, they're pretty damn smart.
That's why I didn't give a straight-up 'swap two variables'. That was too easy for either level to memorize, the non-programmers might have memorized the use of a temp variable, and the normal programmers might have memorized some weird math trick.
By making it slightly different, you blow up the memorization.
It's why I don't like the FizzBizz problem. It's too easy to have learned by rote. But change it to the Fibonacci sequence, and you haven't really made it harder, it's still simple enough for any programmer to figure out in five minutes. But it's near impossible for a non-programmer, who happens to have a CS degree and think they're a programmer, to figure out.
And while there may be some sequence of math operations that will do what I said, it sure isn't something they will have come across before, no one's memorized it like they have 'swap two variables', they just invented that on their own, and you can probably skip the rest of the test, you know they're an actual programmer. (OTOH, as you point out, they're an actual programmer who comes up with very over complicated things, so you might not want to hire them. But they don't need any more _testing_.)
If corporations are people, aren't stockholders guilty of slavery?
My game a web-based RPG programmed in PHP, and started out mostly as a solo project. I'm pretty conscious of security, because I have to be to keep people from exploiting the game. But I regularly rely on good-natured testing from the players to identify functionality problems and security holes, and I definitely reward those who discover and report flaws. Some have done some coding for me, others just get an early shot at testing and trying to break new code before it goes live.
I can't say that the hackers are definitively better coders, but it does seem pretty clear those who can manage to exploit vulnerabilities in my custom code tend to be able to understand programming well enough to know what to try and how things might break.
In my case it also means the hacker is interested enough in my game to be interested in exploring it and trying to improve it, and both of those are key reasons to recruit the hacker as a tester or adviser, too.
The Quirkz Handbook of Self-Improvement for People Who Are Already Pretty Okay
That's all well and good until you start storing "sensitive data."
Claiming that, having taught yourself, you are now a great programmer and don't need a university degree is generally a sign that you probably do need that degree, you are being too arrogant to actually be as clever as you think you are.*
I definitely agree there's fantastic value in receiving balanced and thorough instruction from outside sources, simply because they know about things you don't know you need to learn. I'm not entirely convinced a degree itself is essential--a lot of the CS classes at my school were more theoretical and may not have actually geared one to be a better programmer, per se. But I can't tell you how many times I've struggled with something only to have someone suggest "why don't you use X?" where X is something I've simply never heard of, or didn't know how it applied to my situation.
As an example, a web site I run was struggling with slow page loads and lots of lag. An experienced coder was helping me troubleshoot, realized I didn't have proper indexing on some key database tables, and in minutes we transformed the site from slow and cranky to blazing fast. The worst page (not triggered often, but very intensive) would take upwards of a couple of minutes to run in some cases, and now never takes more than 5 seconds. All other pages went from being laggy to loading basically instantaneously. All of that by having a blind spot pointed out to me.
The Quirkz Handbook of Self-Improvement for People Who Are Already Pretty Okay
Well, yeah, that'd be a problem. But 1) it's a game, so I've got almost zero sensitive data. Real name and email address is as sensitive as it gets. 2) I keep even that small bit of data out of the development server where anyone else might have access to it.
The Quirkz Handbook of Self-Improvement for People Who Are Already Pretty Okay
Bioware released a GUI toolset for Dragon Age: Origins on the PC; It was used to develop the game. When I mod the game with the toolset I am usually modifying textures or character models by changing the variables in the GUI & the editing files they may reference in an editor like Photoshop. So a Bioware developer doesn't need programming skill to do some of the footwork in game development. Programmers use the toolset also. I don't know much about it, Bioware runs a wiki for the toolset that describes a script as similar to C.
Just a wild guess from the performance and occasional errors on my machines, Dragon Age: Origins is a programming catastrophe and their standards aren't very high, anyway.
Aside from that, these people have cult followings in the company's fanbase. The guy could be a good choice for consulting alone or maybe just a PR move.
Swarovski Crystal Jewelry are famous for their exquisite workmanship and graceful shape .For satisfing more customers our Swarovski outlet has recently launched onlinewelcome to our Swarovski outlet store.http://www.swarovski-outlet.com