5 ms·
Ten years ago I was called in to remediate a new web application which had been subcontracted to an Indian development company. The PHP developers who'd put it
by pengo 8y ago
Ten years ago I was called in to remediate a new web application which had been subcontracted to an Indian development company. The PHP developers who'd put it together evidently didn't know about classes, and each page in the application was hundreds, sometimes thousands, of lines of spaghetti code, most containing the same duplicated (but subtly changed) blocks providing database connectivity etc. Security had not been a concern either; passwords and credit card details were stored unencrypted in database text fields.
I was called in because, while most of the application worked, some of the requested features were not yet complete. When I made my initial recommendation (scrap the whole thing and start again) I was told the client's board would not agree to that because of the money already invested and the fact that the board had seen a demonstration proving that "most of it worked".
It took two developers eighteen months to beat this sorry mess into a maintainable state while ensuring it remained "usable". It would have taken one third of that time to rewrite it from scratch.
- joeax 8y ago> most containing the same duplicated (but subtly changed) blocks I had a similar experience with an offshore company. This was during the early-mid 2000s, at the height of the offshoring era when $10/hour programmers in India were aplenty and everyone felt their job was soon to be outsourced. Turns out, no joke, they were being paid per line of code. Despite having to maintain the heap of crap, I was amazed at the brilliance of their maniacal dark-art ability to implement as little functionality with as many lines of code possible. It was like code golf in reverse.
- exikyut 8y agoWhat sorts of techniques did they use? I'm very curious to see/hear examples.
- brianpgordon 8y agofunction isTrue(v) { var result; result = v; if (!isFalse(result == true)) { return result; } else { return isFalse(result); } } function isFalse(v) { var result; result = v; if (!isTrue(result == true)) { return isFalse(result); // Tail recursion so this is fine. } else { return result; } } if (isTrue(myBool) == true) { // TODO: Could this be refactored to isTrue(isTrue(myBool))? return true; } else if (isTrue(isFalse(myBool))) { return false; } else if (isFalse(isTrue(myBool))) { return false; } else { return isFalse(isFalse(myBool)); }
- tomazio 8y agoThis is literally insane.
- strikelaserclaw 8y agoi hope to god that this is just code you made up to be facetious.
- brianpgordon 8y agoHaha, yes I made it up. The infinite recursion should have been a dead giveaway :P There's also a bug on line 7 that I didn't notice - it should be isTrue rather than isFalse. I can't edit the comment anymore to fix it.
- deleted 8y ago[deleted]
- edoo 8y agoI had a very very similar experience. I saw the craziest code in my entire career while debugging performance issues. Even though they were using a PHP MVC framework, they were pulling every record from a db table to iterate over to find the record using PHP string compare functions. I still can't believe it. The dev shop I worked for back then was even in the habit of hiring multiple teams for the same project in the hopes one actually completed it and it was still cheaper.
- Rjevski 8y ago> pulling every record from a db table to iterate over to find the record using PHP string compare functions As horrible as this sounds, this is actually good from a refactoring point of view because it should be straightforward to rewrite it to use actual queries.
- aussieguy1234 8y ago10 years ago PHP didn't have classes
- cpburns2009 8y agoPHP 5 was released 14 years ago in July, 2004. One of its new features was OOP. Classes were supported at that time. In fact, a comment from 14 years ago shows an example class [1]. [1]: http://php.net/manual/en/language.oop5.php#46290 http://php.net/manual/en/language.oop5.php#46290
- rpeden 8y agoSure it did. Classes in PHP showed up in version 4.0 18 years ago.
- abledon 8y agoWhy didn’t you rewrite it from scratch and then just replace the codebase in 1 giant commit ? Seems doable if you have the balls