Concept Art - Quentin
http://trenchescomic.com/comic/post/concept-art-quentin
Local dialect
AnonymousA bit of jargon from Russian developers, to lighten the mood a bit:
“Batman” - a memory corruption bug. From: “The goddamned Batman flew in and shat into the memory!”.
“Speedy Gonzalez” - a race condition bug, when process is “too fast” in reaching a certain point of code.
“Mount becomes hungry” - a situation where some action produces bug in completely unrelated piece of code. From a bug report where player’s mount became hungry after player sold something in auction house.
“Samurai Code” (also “Tough Code”) - A true Samurai is not afraid of death, and so is this code. It never checks anything and will crash if you pass it a wrong combination of parameters.
“Guerrilla Code” - A guerrilla fighter tries to protect his comrades to the end. This code tries to cover up a serious mistake. It does not handle it correctly, but make it so you will only discover it much
later, in a different module, where all context already disappeared.“Ninja Code” - A code added to a module owned by another programmer without notifying owner, which drastically changes module’s behavior. Bonus points for making it only execute in very special circumstances which will only come up a few weeks later.
“‘Retarded Child’ architectural pattern” - A sub-system which can’t report error and can’t correctly handle it (for example, I once worked with a database connection which didn’t have any way to access error code or description for a query, and didn’t log it, but just returned general ERROR status to you, so you could only discern nature of error by setting breakpoint inside that connection’s code, which was in another library)
“Epic game development” - A development process where a lot of important information (location of critical resources, build-in cheat codes, status of some sub-systems) never gets written down, but instead is passed by the word of mouth from developer to developer, like a folk tale. Most game development in Russia is Epic.
Posts
I would never have graduated if my professors ever realized that 80% of my programming assignments contained the comment "//I'm not sure why this line works but everything breaks if you change it"
Works great in the moment when you only care about sorting a linked list, but months later if you... I don't know, try to sort by a different variable, you might as well just skip class and go to the bar because now it's going to start repointing all your links to what should be protected memory and by the time you're finished kludging that there's going to be three pages of global variables at the top of the code that you tried to give official and cryptic sounding names to cover the fact that you're shuffling half of memory around every operation because WHY IS IT INCREMENTING ALL MY INTEGERS NOW I NEVER TYPED THAT.
To a non-programmer like myself, this gibberish just sounds like a decent into madness.
Think of it like original sin. The first one is easy - it's low hanging fruit and just one bite will fix your program, getting kicked out of Eden doesn't seem that bad at first. But once you've done it, every additional step becomes harder, unless you just take one more bite - every bite will fix an immediate problem but take you farther from the correct path. And so, damned either way, you take another, and then just one more, and then before you know it people are eating each other and it won't stop raining and your boat is made out of goto lines.
And that's why I am not a programmer. Seven hours poring through code for an unspecified error, turns out that ` and ' both looked identical in the font chosen by the professor for the compiler. One line of a module imported from a group-mate had a typo. A typo that now hid from view like a tiger in the long grass, waiting to eat your face.
After copying the whole thing into Notepad to print it out and take it home (compiler couldn't print, and this was a lab stuck in the pre-internet age despite being 1999) I spotted the problem, screamed "What the fuck is this shit?!?" and dropped the class.
Now I'm working with Powershell. Some says I can feel those moments approaching when a piece of code that worked perfectly well on the previous version needs rewriting because the command went from Add-StrangeVariable to New-StrangeVariable with a whole new collection of switches. But at least I can see ` and '.
Nusquam Findi Factionis
My Digital Pin Lanyard
Spent hours in our booth at PAX East debugging the build we were supposed to be showing. Convinced it was a memory leak because it was so random. The actual issue turned out to be that I had left a phase of the Boss Mode switched on, which caused the code to compare an uninitialized variable and execute code that assumed Boss Mode was actually set up and crashed trying to read empty stuff. When I finally found it I beat myself with a water bottle. I could not have done it without our professional testers who were able to find the situations that caused the bug. Always treat your testers with respect, you'll need them!
For 4-5 hours before it was fixed, we had a build with no color, limited animation, and red square placeholder graphics.
.....I'm okay with this.
Let me confirm your suspicion (Degree in CompSci). That's what it is.
Oh God. The horror
Oh, God. This is like every day for me. I find myself screaming, "Why are you catching the exception and then doing nothing with it, and returning true?"
Some people should never become programmers.
On a related note, if you like to read programmer jargon, you should check out the Jargon File, it's filled with great stuff like Heavy Wizardry, Voodoo Programming, and Chernobyl Packets.
http://www.catb.org/jargon/oldversions/jarg262.txt
You think that was a decent into madness, the program that finally cured me of slipshod quick solutions like that was a chess program:
An unintended side effect of this was that the castling process was broken in a fascinating way that caused the rook to overwrite the king if white attempted to castle on the queen's side. I saw an easy kludge to fix this. However, something else broke in the fix, and a player could castle more than once (provided they returned the king and rook to their starting positions). An unlikely event, but still against the rules. This was easily fixed with a set of 8 global variables to track if the kings or rooks had moved and if castling had been performed - making these non-global would require going back to the base engine and changing how I take input, or passing them all over the place.
New bug: The code couldn't tell the rooks apart, so if one rook was captured before it moved, the other could move to its position, and you could use it to castle (you couldn't castle on its correct side but if it was in the opposite corner the game thought it was *that* rook, which had not moved and was legal for castling). Again, unlikely event, but still illegal. A change in how the global variables fixed this.
And at this point, the game did not include pawns. Things got immensely worse when I started coding how to handle en passant situations.
Despite all the efforts by the writers of OOP languages, it's amazing how few programmers truly understand the concept of encapsulation and practice it. So much misery can be saved by taking a little extra effort. Programming is one area where doing things the easiest and quickest way is likely to bite you in the ass later.