• AC (unregistered) in reply to Dean Menezes
    Dean Menezes:
    dphunct:
    bdew:
    Anon:
    This story was horrible and stupid.

    This comment is horrible and stupid.

    This thread is horrible and stupid.

    The Internet is horrible and stupid.

    While not completely true, this is at least a good first order approximation.

  • (cs)

    There are two kind of people: those who use backups, and those who will be using backups ;-)

  • (cs) in reply to Jeff
    Jeff:
    Well, Ken should be fired, and Jared needs to get the folks at CollaboSmart to use Accurev. If Jared had used Accurev while at Initrode, he could have just 'kept' the file in his private workspace. The file would be safely tucked away in Accurev, even though it was not ready to be shared. Only when Jared or the bone-headed Ken got the script working properly would he then 'promote' the file and make it available to others. Fear of unstable code is virtually eliminated in Accurev because of private developer workspaces and the Keep command.
    Actually any version control system with sane branching would do. Accurev is not necessary.
  • miracleworker (unregistered) in reply to MK

    Given that Jared worked for a month without checking anything into source control, and Stephen knew that's what he was doing... do they have a right to be upset, or even surprised, when some idiot deletes it?

  • Zygo (unregistered) in reply to Andrew

    Suffix rules and wildcards are NOT the same thing.

    A suffix rule says "if at any point I tell you about a .cc file, run cc with these flags to build it" or "if I ask you for a .o file and you can find only a .cc file, run cc with these flags to build it".

    A wildcard rule says "if you find a random .cc file lying around, build it (using the suffix rules) and link it into the executable without question".

    Wildcard rules are doubly dangerous. First, they might import stray files into builds that are present in a developer's sandbox but not present in source control. Second, wildcard rules fail to detect when files are missing from the build directory (i.e., because they were not added to source control), and therefore missing from builds on any machine other than the original developer's (there might be link errors, but most compilers will not give good diagnostics for these, and these errors will not occur until much later in the build, and maybe not at all if any kind of dynamic linkage or binding is used).

  • David (unregistered) in reply to MK

    A while back an intern nuked my dev. server because he figured a checked in script must be functional... otherwise what would it be doing in svn.

    Plus there's always ghetto code, stuff that runs but is usually an abomination of $index12, $foo3 like variable names, and if not run under the correct but undocumented conditions will end up being anti-productive.

  • paratus (unregistered) in reply to Ken B
    Ken B:
    Schnapple:
    suzilou:
    A similar technique, when having a disagreement with someone, is to be the first to say "just calm down". At that point you win.
    Do not try this technique with your spouse, especially your wife. It just pisses them off more. And you will definitely NOT win.
    A better technique with the wife is "geez, is it that time of the month again?"

    When I get into an argument with a spouse I tend to work them up real good. Just in the way that comment would do. Just because I pretty much never lose my cools. And well, so far, most of the people I've been living with have come back after they cooled down and given me an excuse for their behavior. Even if they werent the ones to be wrong. Then again, I spent most of my teens studying people and being a GM just to learn how to handle people. ;)

  • (cs) in reply to Phleabo
    Phleabo:
    Ravi:
    I've worked with guys like that. I hate religious guys who think that their tool is better than all the other tools, that Microsoft is the evil and Linux is the paradise.

    Microsoft is evil, and Linux is the paradise.

    That's still not a reason to randomly introduce the risks of a change in platforms. If I were his manager, I'd sit him down for a nice old fashioned firing.

    Seconded. Common sense should prevail over religious aspirations. You come to build for Windows, you build for Windows. But leaving your options in plaform open, specially with Java, is part of the common sense too. If you're to have a Java app welded to Windows why not use something that wont need a resource hog middle-ware to work?

  • (cs) in reply to MS
    MS:
    Production branch? What's a branch?
    What's production?
  • bramster (unregistered) in reply to FredSaw
    FredSaw:
    Andy:
    A CS degree doesn't (and shouldn't) mean someone knows how to program - aren't there technical schools for that?

    Where I'm from, CS == theory.

    So, what... you make conversation about CS theory with the customer while you're sacking up the big mac and fries she ordered?

    Bingo

  • Rage (unregistered) in reply to Justice

    We got here a guy which probably only add his executable files to source control because adding the source directly is: horrible and stupid.

  • (cs)

    Teh linux trollz are horriblez and stupidz and need to be calmed down with .50 gunz

  • (cs) in reply to TCS
    TCS:
    Ok nice story. But,,,,, How many programmer only have one copy of a peice of code they have worked on for a month.....?

    Uh,,,,,, None.

    So sorry but I'm calling pooo on this whole story.

    Raises hand

    We had a company wide virus infestation in December (spread from our virus scan server ironically enough). Took 2 weeks for our IT guys to clear it out, but many systems still havn't been returned to normal.One of those systems is our source control server, so until that is fixed we can't commit any changes. And ofcourse we're not allowed to play with the server settings ourselves...

  • EPE (unregistered) in reply to Schnapple
    Schnapple:
    suzilou:
    A similar technique, when having a disagreement with someone, is to be the first to say "just calm down". At that point you win.
    Do not try this technique with your spouse, especially your wife. It just pisses them off more. And you will definitely NOT win.
    If your wife is involved, you will not win. Period.
  • (cs)

    The real WTF is that somebody can be this clueless and still prefer Linux.

  • (cs)

    Q branch. I never check in my code, 007.

  • Bosshog (unregistered)

    WILL EVERYONE JUST CALM THE F*** DOWN!!

  • daniel (unregistered) in reply to Paul
    Paul:
    I have another issue with this story - I expected to find out the new guy was the nephew of the CEO or something ... how else would he be able to walk in and immediately put four projects on hold?

    -"You have any experience with Java?" -"No." -"OK... Welcome aboard the sinking ship of Initrode as Java developer!"

    I think that pretty much covers it.

  • Psych major (unregistered) in reply to paratus
    paratus:
    Ken B:
    Schnapple:
    suzilou:
    A similar technique, when having a disagreement with someone, is to be the first to say "just calm down". At that point you win.
    Do not try this technique with your spouse, especially your wife. It just pisses them off more. And you will definitely NOT win.
    A better technique with the wife is "geez, is it that time of the month again?"

    When I get into an argument with a spouse I tend to work them up real good. Just in the way that comment would do. Just because I pretty much never lose my cools. And well, so far, most of the people I've been living with have come back after they cooled down and given me an excuse for their behavior. Even if they werent the ones to be wrong. Then again, I spent most of my teens studying people and being a GM just to learn how to handle people. ;)

    When manipulation and control come in the door, love flies out the window...

  • laZee (unregistered)

    I love the Romeo and Juliet part. Really nice written :)

  • (cs) in reply to paratus
    paratus:
    When I get into an argument with a spouse I tend to work them up real good. Just in the way that comment would do. Just because I pretty much never lose my cools. And well, so far, most of the people I've been living with have come back after they cooled down and given me an excuse for their behavior. Even if they werent the ones to be wrong. Then again, I spent most of my teens studying people and being a GM just to learn how to handle people. ;)
    It isn't a positive recommendation of your people-handling skills that you have a crowd of exes. Or perhaps you live in Utah, and they aren't exes at all...
  • (cs) in reply to dkf
    dkf:
    FredSaw:
    Andy:
    A CS degree doesn't (and shouldn't) mean someone knows how to program - aren't there technical schools for that?

    Where I'm from, CS == theory.

    So, what... you make conversation about CS theory with the customer while you're sacking up the big mac and fries she ordered?
    Any CS graduate worth the salt on that big mac and fries should be able to figure out make without specific tutoring on the topic. They've had an advanced education; they're supposed to know how to learn without spoon-feeding.
    Really? So what's with the "technical schools" remark above?

  • calming down (unregistered) in reply to ParkinT
    ParkinT:
    Some Relationship Expert:
    Schnapple:
    suzilou:
    A similar technique, when having a disagreement with someone, is to be the first to say "just calm down". At that point you win.
    Do not try this technique with your spouse, especially your wife. It just pisses them off more. And you will definitely NOT win.

    A woman always has the last word. Anything a man says after that is the beginning of a new fight.

    "If a man speaks; and there is no woman to hear - is he still wrong?"

    Well, yes, of course.

  • Jared L (unregistered)

    Ok, I don't have time to read all the comments, but feel the need to explain the situation a bit better.

    When I got to the company, they hadn't even heard of source control. I implemented tortoise SVN specifically for that project so that each time I finished a core piece of functionality I could "check it in". I backed up my code daily with Norton Ghost. Apparently they only keep the ghost files for one week, and it was a while before they realized just what he had deleted, and by then it was too late.

    Yes, I know I was using SVN incorrectly. I didn't know anything about SVN or how to use it properly. I'd only been out of college for a year, and they don't teach source control to "New Media" majors getting a programming certificate.

    Anyways, I forgot to check the source in before I left (which I had planned to do) because four days into my two weeks notice they told me to pack up my crap and leave. It sort of slipped my mind as I was cleaning my personal files out of the computer and boxing my things up (they don't wipe computers for the new guy. My computer still had personal files from the last two programmers on it). As I was driving home I remembered and called "Stephen" and asked him to check the files into source control. For some reason he said he'd just let the new guy do it whenever they hired someone. I thought this was a bad idea, but since I didn't work there anymore, it fell into the "not my problem" category.

    When they finally did hire someone (about a month later) and Stephen told him that the files needed checked in, the new guy said (and I quote), "Nah, I'd rather just have a fresh copy of the last working version." and then RIGHT CLICKED ON THE TOP DIRECTORY AND REVERTED ALL CHANGES. WTF!?!?

  • WTF (William Thomas Folkerts) (unregistered) in reply to Helix

    absolutely, it's like therapy with someone who was there. A cry for help so someone who understands can say, "just calm down".

  • WTF (William Thomas Folkerts) (unregistered) in reply to Helix
    Helix:
    WTF would you sit down to lunch and tell the person that has left your organisation about all this badness ?

    sorry I should have hit "quote" instead of "reply" Don't worry I back up everything i do!

  • (cs) in reply to MK
    MK:
    There's got to be a bit of a question over why it wasn't in source control, I mean ready or not the latest version should have been there so it gets the same protection as the rest of the source code. It doesn't need to be in the production branch.

    He probably realized it was embarrassingly bad and would possibly never work. He didn't want to commit his mistake for all eternity.

  • The Other Steve (unregistered) in reply to MK
    MK:
    There's got to be a bit of a question over why it wasn't in source control

    Source control is Horrible and Stupid.

  • 9th Circle (unregistered) in reply to EPE
    EPE:
    Schnapple:
    suzilou:
    A similar technique, when having a disagreement with someone, is to be the first to say "just calm down". At that point you win.
    Do not try this technique with your spouse, especially your wife. It just pisses them off more. And you will definitely NOT win.
    If your wife is involved, you will not win. Period.

    If you have a wife, you lost a long time ago.

  • (cs) in reply to FredSaw
    FredSaw:
    paratus:
    When I get into an argument with a spouse I tend to work them up real good. Just in the way that comment would do. Just because I pretty much never lose my cools. And well, so far, most of the people I've been living with have come back after they cooled down and given me an excuse for their behavior. Even if they werent the ones to be wrong. Then again, I spent most of my teens studying people and being a GM just to learn how to handle people. ;)
    It isn't a positive recommendation of your people-handling skills that you have a crowd of exes. Or perhaps you live in Utah, and they aren't exes at all...
    Actually, the funniest/saddest part of this to me is the quote after they ... gave me an excuse for their behavior. This smacks of Cult to me. Or does "GM" stand for Gormless Moron?

    Still, lovely to know that paratus, who I assume is an (ex) Marine, spent his malformative years studying people, much like Alexander Fleming studied fungus. Rather puts us humble programmers to shame, doesn't it?

  • (cs) in reply to real_aardvark
    real_aardvark:
    This smacks of Cult to me. Or does "GM" stand for Gormless Moron?
    How about Gnu Manson?
  • notme (unregistered) in reply to Psych major
    Psych major:
    When manipulation and control come in the door, love flies out the window...

    Unfortunately not. The really skillful manipulators often end up having the manipulated fall in love with, even if that wasn't even their intention. It's not going to be a mutual thing, though.

  • Jeltz (unregistered) in reply to Andrew
    Andrew:
    dpm:
    KattMan:
    Code in source control should compile, it does not need to be bug free or ready for testing. If that was the case then you would have absolutely no back of any work in progress.

    Getting things to compile is easy, have a call to a function that doesn't exist yet, create a stub. Have a pointer error, comment it out for now. Just make sure it can build.

    Better yet, it doesn't need to compile at all and you don't need to comment out bugs "just for now" (translation: will never get fixed) because you check it in and DON'T ADD IT TO THE MAKEFILE.

    Seriously, why would a build attempt to compile a file just because it was added to source code control? Does someone actually have a wildcard somewhere, saying "cc *.c" ?

    Yes we actually do have a wildcard somewhere, saying "cc *.c"? Gnu MAKE has "suffix rules" that compile all *.c using GCC, all *.cpp as GCC C++ mode, etc. See the ".SUFFIX" Gnu MAKE directive.

    Large projects are very hard to manage without suffix rules. It's unreasonable to add exact filenames for every C, C++, or Fortran source file to the makefile. Even medium projects have 20 or more source files.

    Computer Science departments really need to add a a course on builds & source control!

    The last part is very true. Today people first learn about those things from practical experience, and many people never seem to learn it correctly at all. Your post as others have already pointed out proves it. Suffix rules does not compile all *.c -- only those with a corresponing *.o depended upon by a target.

  • (cs) in reply to FredSaw
    FredSaw:
    real_aardvark:
    This smacks of Cult to me. Or does "GM" stand for Gormless Moron?
    How about Gnu Manson?
    Are you suggesting that Richard Stallman is a hairy psychotic locked up in a secure room somewhere?

    Oh ... wait...

  • Andrey Vul (unregistered)

    Ken is more brillant than Paula!

  • Lukas (unregistered) in reply to MK

    The trouble is not every CVS can do branching, and not every manager is ready to do such "complicated and potentionally dangerous" things.

    And even if it was, it is aboslutely correct that you don't submit something you have not finished and has not reached the 0.1 version yet - on the other side, the it is only YOU who is responsible for the backup (continuity)...

  • dmsuperman (unregistered) in reply to krupa

    I take offense to that. I am a self-taught programmer, and while I wouldn't quite call myself an expert, I am pretty talented. And no, this isn't some moron saying he's talented, I've had others say so as well.

  • AC (unregistered) in reply to MK

    Not checking in source every night is, "Horrible and stupid"!

  • Kuba (unregistered) in reply to A Nonny Mouse

    [quote user="A Nonny Mouse" those that are saying he should have checked his script in: no i disagree. if something is not ready then it shouldn't go into source control. my basic assumption is that if something is in then as far as the developer is concerned, it works. i learned this the hard way - someone checked something in, someone else cavalierly released it to UAT, and i was the fire fighter lumped with the messy rollback [/quote]

    If your version control system is so broken that you cannot isolate development from production, you should fix that first.

    I can't imagine doing development out of a version control system. Of course the code isn't finished and bla bla, but at least each change builds and passes whatever tests it should. For more sweeping changes where you may want to track progress while the build or tests are broken, simply create a sub-branch with its attributes set to not require a build and/or tests...

    Heck, in development there are often dead ends and the fact that you hit a dead end doesn't mean that the code should be eradicated. It may help other developers to see what was tried and didn't work. None of that ever has to touch the production code, of course, but it still should be in the VCS. I guess all VCSes let you attach comments to changes, so that you can spell things out for posterity (say: This branch tries frobnicate the foobar -- it turns out it made the code turn into a mess, so this is dead code now.)

    Cheers, Kuba

  • Kuba (unregistered) in reply to dpm
    dpm:
    KattMan:
    Code in source control should compile, it does not need to be bug free or ready for testing. If that was the case then you would have absolutely no back of any work in progress.

    Getting things to compile is easy, have a call to a function that doesn't exist yet, create a stub. Have a pointer error, comment it out for now. Just make sure it can build.

    Better yet, it doesn't need to compile at all and you don't need to comment out bugs "just for now" (translation: will never get fixed) because you check it in and DON'T ADD IT TO THE MAKEFILE.

    Seriously, why would a build attempt to compile a file just because it was added to source code control? Does someone actually have a wildcard somewhere, saying "cc *.c" ?

    I agree that the codebase should compile, but development sub-branches, where some sweeping changes are done, may not necessarily need to compile. Usually you'd set the branch integration policy to require building, but individual changes in the branch may be overriden not to require a build.

    Source control systems make very good journals, and I don't think it's abuse. Quite to the contrary, it makes it easier for other developers to see incremental, easier to swallow changes if they need to track how something came to be.

    If you use a branch as a development journal, the code you're mucking with may well not compile, and spending time on making it so may well be time wasted.

    Say I'm refactoring from some C-isms to use standard C++ library, the changes may well be affecting so much of the code that I may check them in piecewise according to some plan of action. The last change (or changes) in such a branch would then be used to fix the build errors and warnings, and the branch itself will be then integrated with whatever it's a child of, and that will have to build correctly. I work in such a process, and it seems to be the best balance of productivity and VCS-kosherness.

    Cheers, Kuba

  • Kuba (unregistered) in reply to Jeltz
    Jeltz:
    Andrew:

    Yes we actually do have a wildcard somewhere, saying "cc *.c"? Gnu MAKE has "suffix rules" that compile all *.c using GCC, all *.cpp as GCC C++ mode, etc. See the ".SUFFIX" Gnu MAKE directive.

    Large projects are very hard to manage without suffix rules. It's unreasonable to add exact filenames for every C, C++, or Fortran source file to the makefile. Even medium projects have 20 or more source files.

    Computer Science departments really need to add a a course on builds & source control!

    The last part is very true. Today people first learn about those things from practical experience, and many people never seem to learn it correctly at all. Your post as others have already pointed out proves it. Suffix rules does not compile all *.c -- only those with a corresponing *.o depended upon by a target.

    Since some time (a couple years) every computational homework I submit has a makefile that ultimately generates all the tables and pictures that go into the LyX document, and it really works wonders and had saved me tons of time. I never face the problem of a graph or a table being inconsistent (unless I screwed up the makefile) In fact, for homework where stuff can be sent via e-mail, I simply do make submit and off it goes.

    I've had a case of a project that was relatively involved, where I kept all files in an aegis repository. An into-the-future "at" job was there to email the then-current baseline version of the .pdf file to the prof some minutes before the deadline. It kept me pretty relaxed: I knew that iwhatever wasn't integrated into the baseline simply won't get out, so I could experiment while still being able to move things forward. Naturally, the LyX file of the report was part of the repository, and everything up to the final .pdf was generated from a relatively simple makefile.

    I'm really scared by the fact that more and more computational software is not being made available on unix (or even commandline windows) platforms anymore - it's relatively hard to automate point-and-click software in a canned build environment. Doable, but not as easy as it could have been. Most software, even if it gives you OLE automation, will still want to show a window etc.. :(

    Ansys, as much as it sucks, is still not bad in this department, otherwise I'd be really screwed.

    I'm an ME student ;)

    Cheers, Kuba

  • Kuba (unregistered) in reply to AuMatar
    AuMatar:
    20 files? I've dealt with programs with 100s of files, and we added each one. The trick is you break your code up into directories, and each directory has its own makefile. Then the directories only need to be added to the global makefile. The idea of compiling everything of a given type is absolutely asinine. A piece of code should only be compiled when its ready to be part of the project- when a human adds it to the makefile. Anyone who thinks compiling *.cpp is a good idea should never be allowed to touch a build system again.

    Recursive Make Considered Harmful

    There's no problem with building a makefile from lists of files in individual directories, if you want to go that way. It avoids having a big monolithic makefile in the source control which will get frequent conflicts, but still lets your build tool know about the whole dependency tree. This is the only safe way for make to parallelize the build. If you use say distcc, you can maximally exploit your build farm that way.

    This is one of the reasons I despise qmake: they didn't read the cited article :(

  • GregW (unregistered) in reply to MK

    Not every company has a sane policy regarding their version control system. In my last job it would have violated process to check in something unregistered. Nuts, yeah, but they were unwilling to deal with (either emotionally or procedurally) the possibility of an incomplete build sneaking into production.

  • Mulder (unregistered)

    Reminds me of a colleague who started his work scoffing at my code as "dirty code". When I reviewed the code to his first big project, it was riddled with non-descriptive variable names like $wt457...

Leave a comment on “The Horrible and Stupid System”

Log In or post as a guest

Replying to comment #:

« Return to Article