How do idiots like this get jobs??



  • So, I've been hired as "IT Director" for a small e-commerce company.  And it's a nice job, nice people, they appreciate my ideas.  However, I want to shoot myself when I have to delve into this ugly, steaming pile of garbage Classic ASP VbScript code that the consultant before me developed (The didn't have an in-house IT position for about a year before I was hired).  Now, to be fair to him, most of the shitty code comes from an open-source e-commerce package called Comersus; it's real nasty Classic ASP that follows all the worst principles of the pre-Internet bubble (mixing logic and HTML, tons of includes, nonsensical names).  Not to mention each and every page makes at least 10 separate calls to the database to pull configuration settings.

     But, back to my predecessor.  Despite being a database guy (although I think by "database" he meant "MS Access"), he evidently didn't understand normalization (we have several tables that repeat the same information across them, almost as though the data was pulled from various tables and inserted into another, new table that should only be used to solve a specific problem), or foreign keys (lots of tables that should be related aren't, with no correlation whatsoever between them), or how to clean data (several tables have columns that can be either NULL or blank, with no rhyme or reason.  Not to mention the fact that nearly everything allows null values).  Thankfully, he wasn't a consultant of the "highly paid" variety.

    But wait, it gets better.  I found some snippets of custom code that wasn't part of this Comersus package (stay away from this package!).  First of all, he told a co-worker, and I quote (I heard this through the grapevine, since they got rid of him prior to my starting), that it was "impossible" to add a "Select All" checkbox to a form.  Not to mention that his code is your standard nonsense, makes no sense to anyone but him, garbage.  Here's a gem which, thankfully is not used at all:

    function alrt(str) {
    alert(str);
    }

    This is bad enough, but here's some of his VBScript:

    select case ""
    case objFM.Item("pQty1")
    stp=2
    case objFM.Item("pQty2")
    stp=3
    case objFM.Item("pQty3")
    stp=4
    case objFM.Item("pQty4")
    stp=5
    case objFM.Item("pQty5")
    stp=6
    case objFM.Item("pQty6")
    stp=7
    case objFM.Item("pQty7")
    stp=8
    case objFM.Item("pQty8")
    stp=9
    case objFM.Item("pQty9")
    stp=10
    case objFM.Item("pQty10")
    ' SNIP - Yes, there are 100 of these; he's never heard of a For Loop, I guess

    Now, the worst part of this is that this mess somewhat works, so I can't just burn it to the ground, throw the ashes to the four winds, and be done with it. I'm planning a complete redesign, of course. Not just the database and the website (which I'm highly considering moving to Open Source), but the entire network infrastructure (The domain controller, which is several years old anyways, might as well be a paperweight. Nobody actually uses it for anything other than domain authentication [and, judging by the fact it's unable to contact some computers, I'm betting some of them aren't even part of a domain]).

    Now, I might be asking this on the wrong place (This is the Daily WTF after all) but how the fuck do idiots like this manage to find jobs when competent people can't? The worst part of it all is that this guy is successful! How can the world be that stupid, that businesspeople allow themselves to get hoodwinked and cheated by "consultants" who don't know their ass from a hole in the ground, and wouldn't know how to write decent code if it bit them on the ass? It really boggles the mind, sometimes.

    I enjoy my job, don't get me wrong, I'm just venting because I'm stuck maintaining this garbage and trying to dig through the muck to make some minor fixes that shouldn't be issues to begin with.  Even when I run reports for my boss, the data that comes back isn't always the same since there are no freaking relations between tables, and half the time what should be the foreign key in one table is NULL in another, for reasons that are anyone's guess.
     



  • I've noticed that these kinds of leeches are frequently
    consultants; they get to work for employers who are not specialists and
    have no idea how to evaluate competence, and also they can switch jobs
    once people start to catch on.

     

    The cause is poor information basically.  This isn't a problem specific to our industry, either; I was reading on another board about how lots of incompetent criminal defense lawyers thrive, because people who are unexpectedly arrested select their lawyer basically at random.  In that case, the consequences of incompetence can be much more serious!



  • Was his name "Brice Richard" by any chance?



  • @Morbii said:

    Was his name "Brice Richard" by any chance?

    Oh, I'm laughing my ass off at that comment.  No, from his JoS posts Brice at least writes understandable code.  I don't think half of the code is this guy's (the posted snippets notwithstanding).  A lot of it is from this "Comersus" package. 



  • I think the lack of knowledge of the company he worked for points to the explanation.  Awful programmers who only ever learn the most basic functions to make something sort-of-work might be very good at interviews.  In this case, there wasn't any other IT people to tell the boss his work sucked.

    In my experience, the best programmers usually have poor communication skills which means we interview poorly and find it hard to get work. 

     Case in point; a database i just inherited from a university educated developer had the following tables:

    • staff_costs_0203
    • staff_costs_0304
      staff_costs_0405
    • staff_costs_0506

    You get the idea...every financial year, he would add another table with the new staff pay levels in them. Awful, just awful.  But he was able to get the job because he walks the walk and talks the talk.



     


     



  • @ObiWayneKenobi said:

    This is bad enough, but here's some of his VBScript:

    select case "" 
    case objFM.Item("pQty1")
    stp=2
    case objFM.Item("pQty2")
    stp=3
    case objFM.Item("pQty3")
    ...snip...

    stp=8
    case objFM.Item("pQty8")
    stp=9
    case objFM.Item("pQty9")
    stp=10
    case objFM.Item("pQty10")
    ' SNIP - Yes, there are 100 of these; he's never heard of a For Loop, I guess

    Or...

    if isNull(case) then 
    objFM.Item("pQty1")
    else
    objFM.Item("pQty" & case)
    end if

    When I started here, maintaining databases, I was told that you can't fully normalise a database because the users requirements change all the time (We do 'Agile Development'). But from what I've seen, the majority of the problems could have been solved by a decent approach to normalisation. So I feel your pain.



  • @yet another Matt said:

    @ObiWayneKenobi said:

    This is bad enough, but here's some of his VBScript:

    select case "" 
    case objFM.Item("pQty1")
    stp=2
    case objFM.Item("pQty2")
    stp=3
    case objFM.Item("pQty3")
    ...snip...

    stp=8
    case objFM.Item("pQty8")
    stp=9
    case objFM.Item("pQty9")
    stp=10
    case objFM.Item("pQty10")
    ' SNIP - Yes, there are 100 of these; he's never heard of a For Loop, I guess

    Or...

    if isNull(case) then 
    objFM.Item("pQty1")
    else
    objFM.Item("pQty" & case)
    end if

    What? That's not right.

    His code is checking which of the "pQtyN" items is "" and then setting stp = (N + 1).

    Your code is... evaluating an item without actually doing anything with it?
     



  • Self-confidence sometimes goes a long way...



  • @origin_dev said:

    I think the lack of knowledge of the company he worked for points to the explanation.  Awful programmers who only ever learn the most basic functions to make something sort-of-work might be very good at interviews.  In this case, there wasn't any other IT people to tell the boss his work sucked.

    In my experience, the best programmers usually have poor communication skills which means we interview poorly and find it hard to get work. 

     

    I would agree that some of the best programmers are not the best communicators.  In addition, some of the best overall IT folks (programmers, architects, DBAs, etc) usually have a bit of arrogance to them.  Non-technical people can get turned off by someone like this.

    @origin_dev said:


     Case in point; a database i just inherited from a university educated developer had the following tables:

    • staff_costs_0203
    • staff_costs_0304
      staff_costs_0405
    • staff_costs_0506

    You get the idea...every financial year, he would add another table with the new staff pay levels in them. Awful, just awful.  But he was able to get the job because he walks the walk and talks the talk.

    This isn't always bad, in my opinion.  I have done similar things in accounting situations.  Each year, it would open a new book (create a new table), and make the old book read only for all (bar system level accounts). It was to ensure that data was not changed, accidentally or on purpose, after that year was done. Since people had no business updating, and very few had interest in reading, the old data, it worked out nice.

    Granted, my situation was a bit more than read-only data.  Maybe he had a reason to hide historical data?  Maybe I'm just being optimistic. 

    (Optimism is a bad trait in the software business, so it seems)
     



  • @ObiWayneKenobi said:

    Now, I might be asking this on the wrong place (This is the Daily WTF after all) but how the fuck do idiots like this manage to find jobs when competent people can't?

     

    Don't worry your successor will definitely say the same thing about you.   It's kind of like death and taxes. 



  • @seaturnip said:

    I've noticed that these kinds of leeches are frequently consultants; they get to work for employers who are not specialists and have no idea how to evaluate competence, and also they can switch jobs once people start to catch on.

    The cause is poor information basically.  This isn't a problem specific to our industry, either; I was reading on another board about how lots of incompetent criminal defense lawyers thrive, because people who are unexpectedly arrested select their lawyer basically at random.  In that case, the consequences of incompetence can be much more serious!

    Consultants aren't the only ones who turn out that garbage.  A lot of shipping software written by in-house people is loaded with it. 

    I believe there are a couple contributing factors.  First, logical thinking is difficult for most people.  Second, requirements sometimes change in unexpected ways.  Third, everything from our nomenclature to our "standards" change year to year. 

    And, perhaps the number one reason, from management's perspective: it doesn't matter if you turn out crap as long as it half ass works.  So, copy and paste to your heart's content, collect that paycheck, and go home.

     

     



  • @ObiWayneKenobi said:

    Now, I might be asking this on the wrong place (This is the Daily WTF after all) but how the fuck do idiots like this manage to find jobs when competent people can't? The worst part of it all is that this guy is successful! How can the world be that stupid, that businesspeople allow themselves to get hoodwinked and cheated by "consultants" who don't know their ass from a hole in the ground, and wouldn't know how to write decent code if it bit them on the ass? It really boggles the mind, sometimes.

    Because the people that can do the job ask for the pay the job requires, companies don't want to pay that, they want the lowest bidder.  Since the end result is something that mostly works they feel they made the right decision.

    Think about it, would you pay 50,000 for something that mostly works and earns you money, or prefer to pay 90,000 for something that always works but makes the same amount of money?  Most companies like the nearly half price for the same gain in the short term, most do not have long term plans when it comes to development. 



  • To answer the question "how do idiots like this get jobs?":

    I recently interviewed with a large company for a .net job.  It started with a simple phone screen:

    interviewer: Let's see, do you know anything about windows services?
    me: Yes.

    interviewer: Great! Do you know about interfaces?
    me: Yes.

    <snip>

    This continued for 15 minutes at which point i was told that I would have a follow up interview by people who were a lot smarter than myself.  I decided to not laugh while still on the phone.

    At the in person interview, there were 4 people in the room plus myself.  It started off simple,

    interviewer 1: Are you better at backend, middle tier, or front end development?
    me: It's all pretty much the same to me. 

    interviewer 1: Okay, here are two tables, write a query to join them.
    me: <write answer on whiteboard>

    interviewer 2: Is that right?
    interviewer 3: I don't know SQL...
    interviewer 1: Yeah, that looks right, but <someone else> isn't here to know for sure.

    interviewer 2: have you heard of "Orientated services" (direct quote).
    me: You mean, service orientated architecture? 
    interviewer 2: Yeah that!
    me: Yes.
    interviewer 2: Great, who's next?

    interviewer 4: How would you connect to a database from code?
    me: Are you using ado.net or enterprise library? (not that it really mattered..)
    interviewer 4: enterprise library
    me: Copy, paste, change the stored procedure name in the command object.
    interviewer 1,2,3,4: <all heads nod>
    interviewer 4: That's actually the best answer I've heard!

    ---------------- 

    I'd go on, but you get the point.  The interview lasted all of 20 minutes before they ran out of questions.  Anyone could have gotten that job.

     



  • @clively said:

    I'd go on, but you get the point.  The interview lasted all of 20 minutes before they ran out of questions.  Anyone could have gotten that job.

    I love how you just answered yes, that you had heard of SOA, and they didn't ask you to prove that you knew a lick about it.  "Well, there's this architecture, right?  And it has these services.  And the services orient themselves to the architecture, but then the architecture orients itself to the services.  This goes back and forth for a while until they're both really well oriented.  It's all automatic, and it's pretty neat to watch."  You would have been hired on the spot.

     



  • @belgariontheking said:

    I love how you just answered yes, that you had heard of SOA, and they didn't ask you to prove that you knew a lick about it.  "Well, there's this architecture, right?  And it has these services.  And the services orient themselves to the architecture, but then the architecture orients itself to the services.  This goes back and forth for a while until they're both really well oriented.  It's all automatic, and it's pretty neat to watch."  You would have been hired on the spot.
     

    Beautiful description!

    As it was, the offer came before the end of the day. 



  • @clively said:

    Beautiful description!

    As it was, the offer came before the end of the day. 

    But the question is, did you accept?

    On one hand, you'd definitely be a star on their team. On the other, you'd be working surrounded by those dim bulbs. 



  • @KenW said:

    @clively said:

    Beautiful description!

    As it was, the offer came before the end of the day. 

    But the question is, did you accept?

    On one hand, you'd definitely be a star on their team. On the other, you'd be working surrounded by those dim bulbs. 

     

    Or is it that he'd be a 100-watt bulb surrounded by red dwarfs?



  • @seaturnip said:

    @KenW said:
    @clively said:

    Beautiful description!

    As it was, the offer came before the end of the day. 

    But the question is, did you accept?

    On one hand, you'd definitely be a star on their team. On the other, you'd be working surrounded by those dim bulbs. 

    Or is it that he'd be a 100-watt bulb surrounded by red dwarfs?

    I think the best analogy would be a 100-watt bulb surrounded by monkeys holding hammers. 



  • I suppose if you had to protect your app from idiots....still, having to change your code to reflect more of the same data is never good.

    It meant that when new financial years came round, if there wasn't a developer on hand to adjust the db and code, my boss would just add money into the "additional costs" field to balance the books.

     In my mind, applications should be able to maintain themselves without knowledge of programming.  I am of course talking about pure upkeep, not new features.

     

     



  • I kind of agree.  Code is a reflection of your own personal logic.  But when I look at a very good developers code, even if his logic is different to mine, I can still understand his mindset. 

     

    Bad code is created by illogical people.  People who break everything down into tiny parts without thinking about the big picture.



  • @origin_dev said:

    Bad code is created by illogical people.  People who break everything down into tiny parts without thinking about the big picture.

    Hope you don't mind, but I'm going to use this quote as my IM status message today.



  • @origin_dev said:

    Bad code is created by illogical people.  People who break everything down into tiny parts without thinking about the big picture.

    And also by people who build everything up into huge tangled webs without thinking about any of the components. The theme here is "without thinking". 



  • @Zecc said:

    @yet another Matt said:
    @ObiWayneKenobi said:

    This is bad enough, but here's some of his VBScript:

    ...snip...

    Or...

    if isNull(case) then 
    objFM.Item("pQty1")
    else
    objFM.Item("pQty" & case)
    end if

    What? That's not right.

    His code is checking which of the "pQtyN" items is "" and then setting stp = (N + 1).

    Your code is... evaluating an item without actually doing anything with it?

    My mistake, I see it now. It was a long day, just shoot me.



  • @asuffield said:

    @seaturnip said:
    @KenW said:
    @clively said:

    Beautiful description!

    As it was, the offer came before the end of the day. 

    But the question is, did you accept?

    On one hand, you'd definitely be a star on their team. On the other, you'd be working surrounded by those dim bulbs. 

    Or is it that he'd be a 100-watt bulb surrounded by red dwarfs?

    I think the best analogy would be a 100-watt bulb surrounded by monkeys holding hammers. 

    I took it.  The offer was great, and the monkey's are nice. 

    But to add to the WTF, my boss said that sometime next month they'll actually have something for me to do.  In the meantime, I'll just keep posting here. 

     



  • @clively said:

    But to add to the WTF, my boss said that sometime next month they'll actually have something for me to do.  In the meantime, I'll just keep posting here. 

    The WTF is not that there isn't anything to do in December, it's that they hired someone new knowing that they wouldn't have anything for him to do.   



  • Regarding the original vbscript problem: don't throw it away. Fix each thing you come across. Add a foreign key constraint when you update a table. Add a NOT NULL where it makes sense while you're doing something else. Remove the shoddy code one bit at a time. Add proper quote escaping. Before you know it, the system starts looking (and running) better. Meanwhile, you never once moved backwards in features or availability.


     



  • @ObiWayneKenobi said:

    Here's a gem which, thankfully is not used at all:

    function alrt(str) {
    alert(str);
    }

    That sort of function is actually extremely useful under certain conditions. If your logic is running in one window, but the user is interacting with a different window, this lets you pop up alert dialogs without stealing focus.



  • @ObiWayneKenobi said:

     how the fuck do idiots like this manage to find jobs when competent people can't? The worst part of it all is that this guy is successful! How can the world be that stupid, that businesspeople allow themselves to get hoodwinked and cheated by "consultants" who don't know their ass from a hole in the ground, and wouldn't know how to write decent code if it bit them on the ass?
    It really boggles the mind, sometimes.

     I have a theory. The code may be a maintenance acid-trip gone bad but ultimately it works just well enough - as you mentioned. And since these clowns write it in a hurry - well that's good! They met the deadline. And, IMHO, since it's much easier and more fun to track time and $ for a development project than it's long term maintenance, management is happy. And who really does a code review? Well the other idiots, of course. And even if not them, critiquing code is tantamount to a personal attack on the coder. And, finally, in the case of consultants, well, consultant come, write code fast, leave. Saves heap big bucks.

     

    Meanwhile my observations from my own coding shop - which I consider a good one (it's relative!)

    The above is somewhat true even with reasonably competent coders. It's a matter of knowing a language but not knowing how to write a program. A co-worker and I were stunned to realize one of our project leads doesn't know scheiss from shineola about OO design; and (s)he ain't the only one.

    Also, I see "code smells" (as Martin Fowler calls them) all over our stuff. Once one of our guys sent everyone on our project a sample of his code and asked "what do you think?". There were a couple of "looks pretty good", literally, except me. After a full page of how it doesn't meet coding standards, poor variable names (can you say ESL? But I was diplomatic, of course), no inkling of designing for reuse, "minimize coupling and maximize cohesion" (my favorite line - it mellifluously rolls off the tongue!), etc. etc. etc.  You can bet he never asked again.  And after the first round of "I'm tired of reading your emails that go on and on about code" during my annual review - well, guess who's might be the next contestant for WTF of the week? AND, p.s. what idiot thinks the one and only code review days before code is due for
    integration testing will actually be anything other than a rubber
    stamp!!
     


Log in to reply