How To Develop Unmaintainable Software 211
jones_supa writes "Greg Jorgensen specializes in debugging, fixing, maintaining, and extending legacy software systems. His typical client has a web site or internal application that works, more or less, but the original developer isn't available. Greg lists some things you can do in your own software projects to keep him in business. In summary, the list goes as follows: Customize your development environment a lot, don't make it easy for the next programmer to start working on the code. Create an elaborate build and deployment environment and remember to leave out the documentation. Don't bother with a testing/staging server but instead have secret logins and backdoor URLs to test new features, and mix test data with real data in your database. Don't bother with a well-understood framework, write everything from scratch instead. Add dependencies to specific versions of libraries and resources, but don't protect or document those dependencies. For the icing of the cake, use the coolest mix of cutting-edge programming languages."
Tied this (Score:2)
and I was still replaced.
Re:Tied this (Score:5, Informative)
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
http://mindprod.com/jgloss/unmaincamouflage.html
"""
4 Hide Macro Definitions
: Hide macro definitions in amongst rubbish comments. The programmer will get bored and not finish reading the comments thus never discover the macro. Ensure that the macro replaces what looks like a perfectly legitimate assignment with some bizarre operation, a simple example:
#define a=b a=0-b
"""
Just plain wrong. That won't even compile in any context where he's expecting it to be used. It #def
Re:Tied this (Score:5, Funny)
Well, maybe you should try this much more venerable, thorough, and entertaining encyclopedia of unmaintainable code tips [mindprod.com]. Should make you as immovable as the CEO's firstborn.
He has an unfair advantage in the area of unmaintainable code since he is writing about C/C++.
Re: (Score:2)
Re: (Score:2)
http://www.pbm.com/~lindahl/mel.html
Re: Tied this (Score:2)
Maybe that's why you were replaced, lol
Old news (Score:4, Insightful)
This is old news. These methods have been around at least as long as C has. It only works in isolated situations and doesn't make you a good programmer. Or person.
Re:Old news (Score:4, Insightful)
Not every programmer was around when C was new. Everyone needs to learn these lessons, and preferably not the hard way.
I'm mean, you'd think anyone starting a major project today would use version control, that shouldn't even be a question, right? Right?! Sigh.
Some of his other stuff on his page is quite entertaining as well, like this one on Abject-Oriented programming [typicalprogrammer.com].
Re: (Score:2)
And then you come across "modern" frameworks which can't be version controlled without database dump scripts.
Re: (Score:2)
It's exasperating. You can always choose instead to use a framework where all the DB stuff is generated from text files, and use proper source control and build processes - but you'd have to find those things important in the first place.
Re: (Score:3)
"Most of them" would be my guess.
Re: (Score:2)
In my experience, the cost of a piece of software tends to be negatively-correlated with its quality. Why? Because expensive software tends to be written for some niche market, which means that (a) there are less total funds available for paying programmers ($10,000 * 10 copies is less than $100 * 10,000 copies) and (b) the people doing the coding tend to be subject-matter experts, not people with formal comp sci or "software engineering" training. (As someone with degrees in civil engineering and comp sci,
Re: (Score:2)
Re:Old news (Score:5, Interesting)
lol, 25 years ago we had ONE programmer able to maintain our software as he had done much of the customization of an out of the box accounting system. Bloody thing was so complex to start with noone wanted to touch it before we fixed it up, much less afterwards. Upto 10 Megabytes worth of code but no more than 32K loadable in memory. Must have been 100's of small chunks of code all calling each other in and out of memory every other keystroke.
I managed to customize some reports but that was only part i ever dared to touch.
The real kicker...written in a version of BASIC.
Actually a pretty impressive system and worked well for 15 years. Always wondered how they managed to write such a monstrosity. Kept picturing a blimp hanger with a flowchart wrapped around the walls.
Re: (Score:2)
Re: (Score:2, Insightful)
This is old news. These methods have been around at least as long as C has. It only works in isolated situations and doesn't make you a good programmer. Or person.
A lot of that list is pretty damn arrogant, or at least naive. Let's start with just the ones the submitter quoted;
Don't bother with a testing/staging server but instead have secret logins and backdoor URLs to test new features
If you're so well known you can dictate terms to your employer, then maybe you can get away with this... for awhile anyway. But most of us, who code for a living, have to do the best with the tools we're given. We can ask for a testing server, but whether we get one is another matter entirely.
As for 'secret logins' and 'backdoor URLs'... every login is supposed to be secret. If you can get a li
Re:Old news (Score:5, Insightful)
Well understood frameworks tend not to be highly optimized. If you are dealing with something where performance is absolutely critical, writing it 'from scratch' will probably get you better performance than taking one of those 'well-understood frameworks' out for a drive.
Sure, of course, why not. It's not like your time is valuable or anything. And naturally, you will make this decision before coding starts, and thus before any measurements that the framework was actually slow, or for that matter that it was part of the perf bottleneck of the system. Nothing says "job security code" like elaborate cryptic algorithms to improve asymptotic performance of some in-memory task on a system where CPU never got above 5% in the first place.
Let's not forget how bug free a framework used widely by thousands will be - there's no job security there at all if there's no bugfixing! But if we write our own, then there will surely be some horrific bug in the field that we can work until 4AM to fix, and management will call us heroes!
The main thing, of course, when writing your own replacement for some common library that some new hire would already know is to avoid any documentation, and ideally abandon the effort halfway through, because the project ran out of time, only ever use 10% of what you wrote, and never document which 10% - heavens no!
To make doubly sure that no new hire could ever support this code, remember to follow this key element of Abject-Oriented Programming: [typicalprogrammer.com]
Documentation
It's said that code should be written for people to read, so it follows that documentation is written for no one to read. Documentation should be written for every new module and then maintained as changes are put into production, or at least the next time thereâ(TM)s a lull in the workload.
A good time to write documentation is when someone in the department gives two-weeks notice: use that time to make sure the departing team member documents all of their code.
Cluttering up the source code with lots of comments explaining what the code is trying to do is distracting and slows down the compiler. That's why abject shops that follow "best practices" keep documentation in a document management system where programmers can't accidentally delete it.
Sage advice, I'd say.
Bottom line here is that this 'list' is just the logical conclusion of a career of mediocrity spent shifting blame around instead of working the problem. Real programmers can use anything
Perhaps you missed the part that the author of TFA makes his living answering panicked calls to bugfix production legacy code, presumably because some "real programmer" did in fact "use anything", and this advice is based on long experience of what makes code unmaintainable. My own experience/advice lines up with his rather well in this area, I'd say.
Re:Old news (Score:4, Insightful)
Sure, of course, why not. It's not like your time is valuable or anything. And naturally, you will make this decision before coding starts, and thus before any measurements that the framework was actually slow, or for that matter that it was part of the perf bottleneck of the system. Nothing says "job security code" like elaborate cryptic algorithms to improve asymptotic performance of some in-memory task on a system where CPU never got above 5% in the first place.
You devoted considerable effort to coming up with a response. Yet you failed in every way to realize that the point being made was that good programmers often depart from guideline, and with good reason. If this was less a list and more an advice column, then I wouldn't have picked it apart. But it comes off as a "dos and don'ts" list, and frankly... such a list has neither educational nor informational value.
But whatever, if you want to continue down this path, okay then; Look smartass, you can't test a framework against your own hand-crafted code because you don't know how your hand-crafted code is going to perform until you build a prototype. So fucking duh, yes, the test happens after. And if you'd sat down on a whiteboard and stenciled out a block diagram of what your app, or at least the part of it you're working on, does... you'd already know which branches are going to be most used, and where special attention needs to be paid towards optimization. I already provided the caveat that where performance is critical. I'm not talking about business apps or databases when I say these things. I'm talking low level shit like how they're building switches that begin writing out a new packet while the previous packet is still incoming to gain precious milliseconds in high frequency trading. You aren't writing that with .NET or whatever framework you're upset I dismissed from consideration. PERIOD.
Also "But if we write our own, then there will surely be some horrific bug in the field that we can work until 4AM to fix, and management will call us heroes!" is about the most moronic thing you can say. Management doesn't consider your project resulting in piles of overtime "heroic". It considers you a poor performer and will be looking to replace you.
Perhaps you missed the part that the author of TFA makes his living answering panicked calls to
Yes, I got that. Wanna know something? Ask a police officer how honest the average person is. They'll tell you the average person is a slimy son of a bitch who's probably packing heat and looking to kill you and everyone you ever loved or knew. Wanna know why? Because that's their day in and day out experience. Ask a surgeon how to fix a problem, and every answer will involve a knife. It's the same everywhere.
You got suckered in by assuming one man's personal experience counted as fact. It doesn't. I recognize that in his particular line of work, he runs into these problems all the time, but that doesn't mean they were bad choices at the time they were made... it means that by the time it got to him, it had become a problem. And that's all.
Look, bottom line here is that when you code professionally, you are engaged in a massive balancing act between deadlines, error checking, other people's contributions, etc., etc. Coding professionally is an organic process, and while everyone knows what the best practices are (documentation, QA, modularity, readability, etc.) these are ideals to strive for, not things we can actually achieve on every single project. That would take a level of super-human ability that nobody yet born possesses. It's like the old adage in IT: "Cheap, Fast, Right. Pick any two."
My own experience/advice lines up with his rather well in this area, I'd say.
My own experience is that a mind intent on something refuses to admit to better things. In programming professionally, I've come to refer to this as target fixation -- they get tunnel
Re: (Score:2)
You got suckered in by assuming one man's personal experience counted as fact. It doesn't. I recognize that in his particular line of work, he runs into these problems all the time, but that doesn't mean they were bad choices at the time they were made... it means that by the time it got to him, it had become a problem. And that's all.
Crap code is crap code.
these are ideals to strive for, not things we can actually achieve on every single project.
Right - sometimes when the crunch is on we write crap code. Hopefully there's time to clean it up. But the crunch doesn't make the crap code good, it merely makes it necessary.
My own experience is that a mind intent on something refuses to admit to better things. ... I've come to refer to this as target fixation
You are still talking about code, right?
Re: (Score:2)
Let's not forget how bug free a framework used widely by thousands will be - there's no job security there at all if there's no bugfixing! But if we write our own, then there will surely be some horrific bug in the field that we can work until 4AM to fix, and management will call us heroes!
Counter that with the amount of time I've spent wresting design flaws due to well-known but poorly-chosen frameworks.
Don't pick a framework because you assume that you're supposed to:
The issue with frameworks is that they often touch all layers of a program, or product. If the wrong framework is chosen, (or built,) then the entire project must be refa
Re: (Score:2)
Sure, but there's usually a good choice available. Rolling your own approach to dealing with the DB because ORM just won't work for a project is one thing (and that's often true because most ORM is too inflexible), but that's not "rolling your own framework". If what you're about to write will end up looking like an ORM framework, then just don't - do the research and pick one the meets your needs. If what you're about to write will look nothing like an ORM framework than maybe. (Or similar logic for ot
Re: Old news (Score:2)
Re: (Score:3)
I think you are missing the author's points in your rebuttal.
Testing server -- maybe it's not ALWAYS possible with expensive enterprise-y server software, but just about anyone can spin up a VM on their dev machine to simulate (with varying degrees of accuracy) a production environment.
Secret logins & back doors -- you mean you've never created a "god" or "super admin" account (or "secret URL") that could access all kinds of technical / debugging info that regular admins/users shouldn't see? Having suc
Frameworks (Score:2)
Well understood frameworks also have widely disseminated and well understood (by the very people you would prefer didn't) vulnerabilities, not to mention unfixed bugs that persist because they're in the framework, not in your code.
There are a lot of very good reasons to write your own code. The presumption that your own code is poor code, or that it isn't worth the time, makes assumptions not in evidence about every programmer who has done so.
Sometimes frameworks/libraries/etc are the way to fly, especially
Re: (Score:2)
what language is "cgi-bin"?
Great little article (Score:5, Insightful)
Every one of these points hits the nail square on the head.
The key to take out of this is: document document document! At minimum you should have a set of instructions to re-build your dev and build environment. "Insert the <your company> dev workstation image v4" is not allowed to be a step! Your elaborate continuous integration multi-tree setup and mountain of environment setup scripts and template directories are great until the guy who set it up takes off and you have to upgrade something. Ideally a set of instructions talking to the motivation of certain decisions, roadblocks encountered, etc.
One thing the article doesn't have is have lots of 3rd party tools and keep the license servers/license files on whatever box is most convenient for the dev working on it at the time.
Re: (Score:3)
A statement that is always true as long as no one else has to read it.
Re: (Score:2)
Well written code is self documenting, or extremely close to it. A well done build and deploy process is as well, using Maven/Jenkins, etc. Documentation can consist of "get this out of Git and build it with Maven". Things aren't as opaque as they used to be.
Re: (Score:3)
Re: (Score:2)
Re: (Score:2)
Every one of these points hits the nail square on the head.
The key to take out of this is: document document document! At minimum you should have a set of instructions to re-build your dev and build environment. "Insert the <your company> dev workstation image v4" is not allowed to be a step! Your elaborate continuous integration multi-tree setup and mountain of environment setup scripts and template directories are great until the guy who set it up takes off and you have to upgrade something. Ideally a set of instructions talking to the motivation of certain decisions, roadblocks encountered, etc.
One thing the article doesn't have is have lots of 3rd party tools and keep the license servers/license files on whatever box is most convenient for the dev working on it at the time.
He left out the best method: Hand write everything in assembly language...
Re: (Score:2)
SCCS
That sounds famil.. oh god! The memories... sccs, mergegj, teamware! Make it stop, I don't wanna play anymore!!!
Kidding aside, SCCS and it's best friend teamware may actually be satan.
Use a language that no one ever heard of (Score:3)
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
APL works perfectly with Twitter Bootstrap. Send me some money and I will tell you how...
Re: (Score:2)
I rewrote the software in Delphi (this was back in the 90's) and it was orders of magnitude faster.
Frameworks (Score:3, Interesting)
Is this saying only use widely-available frameworks (to do it "right"), or don't write your own frameworks from scratch? I have time-tested C.R.U.D. frameworks I often use for web projects that I've improved and tuned over the years. They are reasonably well-commented.
Re: (Score:2)
A) it works
B) it is easy for a new guy to pick up.
Those are the main benefits you are getting from a well known framework, so as long as you hit those requirements, you are fine. A lot of people who write their own custom frameworks fail at both, they are constantly trying to fix their framework, debug it, get it working, which is a mess.
Re: (Score:2)
A) it works
B) it is easy for a new guy to pick up.
Those are the main benefits you are getting from a well known framework,
Just because a framework is well known does not imply either of these two things are true.
Re: (Score:2)
For A, of course not all well-known frameworks work, but you can know which ones to avoid, or at least what kinds of troubles you'll run into. I suggest avoiding PHP, but if you use it without being aware of the drawbacks, it's your own stupid fault.
Re: (Score:2)
Is that "whooshing" sound you hear familiar to you? I suspect you've heard it before.
Write your own language! (Score:2)
Just get a hold of lex & yaxx, antlr or your favoriate tools and write your own language. You could probabyl abuse Lisp macros anough to do this too. I once worked with a company where the lead programmer had invented Hugh-BOL, and that's what they coded in.
Now, I do admit that a DSL it the best approach from time to time, but there is an limit...
Re: (Score:3)
Just get a hold of lex & yaxx, antlr or your favoriate tools and write your own language. You could probabyl abuse Lisp macros anough to do this too.
It seems you are already well underway!
Programmer not the whole story (Score:4, Insightful)
Yeah, yeah - code clean, test-test-test, document-document-document, have separate test/run machines that are configured the same, yada yada. This is all well and good, and any halfway-decent developer knows all this. However, software development is not done in a vacuum and each and damn near everything mentioned is involved in cost/time benefit analyses when crunch-time comes (which it always does). With some exceptions, when I see a company that's saddled with horrible old legacy codes that nobody can understand, often a large measure of this is paybacks (for not adequate funding and poor schedule planning) being the bitch that they are. How to do things the best way are well known, it's just that the best way is more expensive (in the short term, which is the only term business understands these days) and takes more time than the average business will wait. If the bottom line is get something done that sorta-kinda works as fast/cheap as possible, you get spaghetti code that even the guy/gal who developed it can't follow.
There's more than one way to do it (Score:2)
The nastiest project I ever took over was written in Perl by ten diferent programmers eah using diferent features of Perl
Re:There's more than one way to do it: FIXED! (Score:2)
The nastiest project I ever took over was written in Perl
Re: (Score:2)
I love Perl. The only language where I have no idea what I've just written but I do know that somehow it worked and I don't want to mess with it. I know I'm just shit at Perl but even so.
Re: (Score:3)
The nastiest project I ever took over was written in Perl
Came for the anti-perl quip, left satisfied.
Bad management (Score:5, Insightful)
An example from my past was a company that I interviewed with (and was offered a job at) that was using Lotus notes to build a huge educational system. They had a PhD as the head of development and they were keeping the details secret until they made their offer. When they told me Lotus Notes I just laughed; I thought they were joking. I told them that building their system out of Lotus Notes was like building a car out of sand and white glue. At first you will quickly have the broad outline of a car but that as you start to work on the hard bits that you will never finish; Ever! A couple of years later the company imploded with no real product just a bunch of sales demos.
All Code is Terrible (Score:3, Funny)
Re: (Score:2)
At first glace, Code is like an unassembled jigsaw puzzle.
Without the reference picture (specs) it's much harder to figure out how it goes together.
Re: (Score:3)
No such thing as 'unmaintainable' software (Score:3)
OK
As for the 'use a framework'
It's OK to use Hibernate, ICE, and all that stuff that makes the job easier today, but learn how stuff actually works and only use it when necessary. It will make you more valuable in the long run, and the code more maintainable in the future. If I hear one more ignorant programmer tells me 'But Hibernate can write SQL that way even if it is more efficient' I'm going to shove a SQL manual up their ass and tell them to actually learn something.
Re: (Score:2)
Only lazy developers. I've worked on plenty of legacy software over the years that other people wouldn't touch, and the common thread was they were either too lazy or just not smart enough. It takes determination, patience, and a lot of detail to work on it. But it was all far from unmaintainable.
When someone says that code is unmaintainable, they obviously don't mean that it is impossible to maintain. You can even disassemble binaries if absolutely necessary. If the effort to maintain the code exceeds the benefit of maintaining the code, it has effectively become unmaintainable in any practical sense.
I do agree that maintaining code is more difficult than creating new code, and on top of that it is a less desirable task for most developers. I had to leave one company because they kept putting me pr
Support Debian's build system, keep Greg employed! (Score:2)
Support Debian's build system, keep Greg employed!
That is all...
... says the self-taught programmer... (Score:4, Insightful)
Hey, glad I could keep you in business.
He left out "Outsource your project to India" (Score:2)
be sure to mess up SQL Server code as well.... (Score:4, Funny)
Re: (Score:2)
SQL tables? I just store all my data in Excel files.
Or SharePoint...
Re: (Score:2)
Re: (Score:2)
It might work for you team of developers but it would not work for my team of engineers. Unless it can be copied to a USB stick, it is useless.
Asking them to set up a query in Excel to pull data off Sharepoint..? Some of them can't even copy the URL to a Sharepoint webpage. These engineers are on GBP six-figure salaries.
Re: (Score:2)
Moving to a full powered relational database solution (SQL) is EXPENSIVE! To do it well you need to design interfaces to the data
What interfaces? SQL is the interface to relational data these days (perhaps with a few exceptions like GDML/BLR in Firebird). And the nice thing is that it works for all schemas. You don't design interfaces for relational data because there aren't any in the first place - you design data models. That was the whole point why relational databases were developed - all the previous DBMS architectures required interfaces, relational DBs figure out on the fly how you want them to do something based on you tellin
Re: (Score:2)
He Didn't Delve Into Specifics (Score:5, Interesting)
A couple times I've run across some jackhole who is in love with dynamic shit and who wants to check java object code into an SQL database and dynamically load it into a program. Nothing quite spells fun like wondering where the hell the code is branching to, and spending two days figuring out it's to an object in a database the code to which has been lost 4 years earlier.
For a long time there in the '90's and a bit later, version control wasn't a normal thing. If you had to get management approval to set one up, that usually would start up the sinking feeling about that job sooner rather than later. Nothing quite like having to justify the addition of something they should have never written a line of code without in the first place. Nevermind trying to get overhead for writing unit tests. Assuming unit tests are even possible. For most of the projects I've run across, the coupling is so tight there's no way to get in and test discrete functionality of anything.
For the guys not using version control, "Lose the source code" is a good one. You don't even have to be malicious about it (Though malice helps.) Just build the thing on your personal dev box, deploy the executables to production and never mention it when you leave. Bonus points if they walk you out during a layoff.
"Don't set up a build system" is another good one. Gotta love those projects where you have to run a top-level build three times before it produces an executable!
Re: (Score:2)
A buddy of mine inherited some code that was written ENTIRELY in #defines. Needless to say, it used a crapload of global variables.
Another one that I inherited was a 5000 line source file... OK maybe that's a minor nuisance... BUT... the guy had written it both left AND right justified. He didn't believe in indenting, and all comments (and every line had one, including of the "add 1 to i" sort) were right justified.
This was on an old Unix System III machine, so I wound up running it through csplit(1) to
Re: (Score:2)
Re: (Score:2)
How about "Set up a global int l and set it to 0, and a global int O and set it to 1
This reminds me of, "have a config file... and read in environment variables... in a library, not your main() function.". I've seen that first hand. Damn I hated that, since I tend to prefer config files over environment when practical. I just sort of forgot about the environment, not having used it for a long time. So I'm like, "Why doesn't this work on the other machine????" and somebody who knew about it is like, "t
Re: (Score:2)
Re: (Score:2)
Damn, I'm having a programmer PTSD moment here. I had to refactor an extensive set of code where the only named variables were "q" and "x". They didn't even have a consistent meaning across network boundaries. I had to methodically *break* every method and determine what the variables were *supposed to be* by the nature of the errors that it generated.
If variables had been sanely named, it would have been a 2-3 day project. It took me 2 months to break each piece and refactor it into something sane and read
Re: (Score:3)
Terrible is a matter of perspective (Score:2)
Terrible for the client, maybe.
Terrible for the job security? Maybe not, under the right circumstances. Not everyone has lawyers to negotiate fat maintenance contracts.
Doesn't make it right, but just saying.
Then Quit in a Huff When it's Only 2/3 Finished. (Score:3)
Despite this the thing was used - with many, many crashes - for two years because it was the best thing that they had. And because Mr. Guru was a pal of half the staff.
Did I mention that Mr. Guru also refused to hand over any of the logins that would allow someone to fix or administer this thing?
We eventually wound up moving over to MS Access (GOD YUCK EVIL!), and massaging, fixing, cleaning, importing ten years of data, each year on a different format, file type, or with different fields. We actually managed to turn it into a reasonably useful fund raising tool. I mean, aside from the downside of using MS Access.
Documentation? HA HA HA HA!
Instead we had lots of on-screen buttons though that didn't do anything because he never quite got around to it.
Documentation is overrated (Score:3)
Oh, yeah someone will tell me I am doing documentation wrong. How come "you are not doing agile right" is a valid response but "you are not doing watefall right" is not?
Re: (Score:2)
I think you can also document in a way that is also up to date. For example, do you document the who/what/when/why for version commits? Sure. Do you put in-line comments in the code, e.g. "We need to revise the code below at some point to account for ABC"? I hope so. Do you have a stash of reference scripts/how-tos so you don't have to reinvent how to do semi-routine complex actions, like deployment? What about an active system to keep track of to-dos, priorities and who they are assigned to, what hap
I know the guys to ask (Score:2)
Nothing wrong with writing from scratch (Score:3)
As long as you document, label and organize your code coherently and logically in a solid language, coding from scratch (or near scratch using libraries of your own) can be a good thing. It avoids pitfalls like vulnerabilities that affect common code bases, massive libraries that take friggin' *ages* to load on an i7 with a fast internet connection or relying on the developer(s) of library X to add feature Y ("sorry, we can't add that feature yet Mr. Client, it's uh ... because of complicated programming reasons, basically, we're relying on a third party and we don't know how to do it ourselves")
In other words (Score:2)
In other words, put the business unit in charge of your programming department.
Web and Embedded (Score:2, Informative)
1) Comments - 98% of programmers can't write a decent comment.
2) Object Oriented - This term usually means the code is structured like a child got let loose on the code and it can't be managed. Not always but usually if you hear object oriented design the code will be crap.
3. Formatting - Don't use spaces, use tabs! I should be able to open your code on Linux, Mac or Windows in any ed
Generated code (Score:2)
This would be funny (Score:2)
sure thing (Score:2)
Don’t forget the documentation! (Score:2)
Don’t forget the documentation to match!
HOWTO: write bad documentation that looks good [kuro5hin.org]
There's another reason for doing this. (Score:2)
A reason in two parts, actually. One is job security; if you have so much institutional knowledge and your employer is too cheap to have redundancy for that knowledge (by hiring more people or spending man-hours sharing the knowledge with another employee), and that knowledge is mission-critical, you can get away with being all kinds of lazy/incompetent and you won't get fired. The CTO at our company has had his job for the last 15 years or so purely because he's the only one who knows how some of our stu
no PHB driven IT (Score:2)
no PHB driven IT where is your TPS report?
Re:How To Develop Unmaintainable Software (Score:5, Funny)
In all fairness, outsourcing it to Canada made sense. We're cheaper, we have health care already, and speak English with an approximate degree of usefulness.*
So, on behalf of our country, I apologize for any inconveniences you have suffered from the sheer shittiness of the ACA software. As a measure of our sincerity, you may pick up one(1) bottle of maple syrup from our strategic reserve.
*offre non valable au Québec
Re: (Score:2)
Development race conditions. Ever done svn up on the production server, just to find that someone had committed broken code between your test run and the deployment
If this happens, then you are doing things wrong.
You should know that YourApp version X is what QA tested. Because the developers tagged it before giving it to the QA guys.
You should know that upgrading your live environment to YouApp version X is not the same as "Upgrade live to latest commit". This race condition is easily solved by proper understanding of how people use your version control system.
In other words: Use the tags, Luke!
Arguably, using "svn update" (or whatver equivalent i
Re: (Score:2)
Re:My favorite (Score:5, Funny)
You fool! That code is critical, it's the speedup loop. For the v2.0 release you delete some of those loops, and presto, your app is significantly faster -- everybody will think you're an optimizing genius.
Be careful to include some calls to rand() or similar in your loops, though, otherwise the optimizer in your compiler might screw you over by removing the loops in v1.0, denying you your speedup in the new version.
Re: (Score:2)
Re: (Score:2)
Unless your boss hired you to delegate a task he can't or won't do.
Re: (Score:2)
with responsibility should have come understanding the product. or is the concept of responsible too hard to grasp for people nowadays? or was he responsible for it the same way a gambler is responsible for the cards he's going to get in the next hand he is dealt?
often cto's(or technical leads or whatever) are assumed to be making strategic decisions about the direction of the product(s) and technologies and are assumed to understand the product.
usually they're just personnel heads though. effectively HR. i
Re: (Score:2)
I have looked for a few days and can't find the code that validates date of birth is before current date?
Ohh sorry, you see there this xml file that controls how these generic classes are instanciated. These beans are collected as a list and depending on blah blah blah...
Re: (Score:2)
There is a simple answer to that question: Have you actually written something in COBOL? I hope you're a fast typist.
Re: (Score:2)
I don't know why I forgot about APL. All of those strange symbols, it's almost perfect.
Re: (Score:2)
I once worked on a piece of software, which was commercially sold, but developed by faculty/staff at a university, that was developed on top of another system written at a different university back in the '70s. It basically consisted of a command interpreter for a domain-specific language that was itself written in two other domain-specific languages. One of these languages existed basically to retrofit dynamic memory management into Fortran 77, and so the system contained it's own custom memory management