The Case of the Clueless Candidate

  • P.T. Smartypants 2008-01-07 10:05
    Umm...Actually, I don't think you need the constant. Duh.
  • Grovesy 2008-01-07 10:08
    If only she added, some xml, and a factory... yes we will need a factory...

    She would have got the job as Technical Architect for most of the places I've been.
  • Dion 2008-01-07 10:09
    Wow, I applaud the interviewers tolerance for such stupidity. I have to say that I would have totally ripped her for giving such a dumb answer. She probably would have switched professions.
  • Lysis 2008-01-07 10:11
    All she needed to say was "temporal modeling" dear sir and pretend that the interviewer was the real WTF.
  • Cheatah 2008-01-07 10:11
    "You mean that you wouldn't use a variable, a constant or a flag? Then what would you use?"

    Well, maybe a MaryBean.
  • brazzy 2008-01-07 10:14
    The true WTF is any company where time off needs to be requested in a process that involves a supervisor, an unspecified "chain of command" THEN the department head until it even reaches HR.

    Can you say "beaurocractic monstrosity"? I bet the management would seriously consider suggestions to outsource whatever their actual money-making business is in order to better concentrate on administrating themselves.
  • sir_flexalot 2008-01-07 10:15
    I would've just kept asking questions about the first mentioned item, i.e. "what's the constant for", etc. and go until they just admit they don't know what's going on.
  • Mick 2008-01-07 10:16
    Cheatah:

    Well, maybe a MaryBean.


    No, no, no. The story has been anonymized and names changed. The actual interviewee was named Paula so it would have been a Paula Bean.
  • Tammy 2008-01-07 10:18
    So exactly how would any of you have answered this question?
  • Walleye 2008-01-07 10:22
    sir_flexalot:
    I would've just kept asking questions about the first mentioned item, i.e. "what's the constant for", etc. and go until they just admit they don't know what's going on.


    What would be the point of that? It's obvious that she is not qualified for the job and she's not going to get it, what do you gain by humiliating her. Do you also like to pull the wings of flies?
  • brazzy 2008-01-07 10:26
    Tammy:
    So exactly how would any of you have answered this question?

    First I'd have asked whether they wanted an object model or a DB schema. Since they wanted to test SQL skills, presumably the latter. In that case, I don't see anything wrong with one table to represent a time-off request with an enum column for status and a foreign key pointing at the person currently responsible for reviewing it - then there would need to be some way to decide to whom the request passes when one step is completed, but I'd need to know more about the business process to decide on what that can depend.
  • rd 2008-01-07 10:29
    So you're saying that an effective chain of command employee time off approval system couldn't be designed with a variable, a constant and a flag? The HR department where I work implemented something in C++ very similar to what Mary suggested.

    const bool bFlag = false;
    const bool bApprove = bFlag;
    int index = 0;

    while(!bApprove){
    RequestTimeOff(supervisor[index++]);
    }
  • Chris Kessel 2008-01-07 10:33
    Tammy:
    So exactly how would any of you have answered this question?


    You just start brainstorming.

    Ok, we'd need some object to hold the TimeOff object or some such and it'd need a reference to the user, fields for the dates, and probably fields for the types of hours used (vacation, unpaid, floating holiday, etc).

    So that's the basic object we're getting authorized. Now we need to track the authorization. There can be multiple operations, so I suppose we'd need a List of TimeOffAuthorizations or some such. The TimeOffAuthorization would need a field for the authority (maybe a reference to a user), whether the time off was give a yea/nea, and maybe an optional field for an explanation of denial. For routing, we could probably assume the end of the list is the next person we're waiting for authorization from.

    We'd probably need some way to know we're done with the chain of command. Either a flag in the main time off object or maybe a special authoree in the List. That's a nit though and I'd wait until later to decide that.

    So, that's a first draft at the domain model. Now we have to map that into the database. First, I'd...and so on...

    It's not that hard a question. You just start brainstorming a soution like you would to any requirement.
  • Spell Checker 2008-01-07 10:34
    brazzy:
    Can you say "beaurocractic monstrosity"?

    No, I can't. Only "bureaucratic monstrosity".
  • me 2008-01-07 10:36
    Tammy:
    So exactly how would any of you have answered this question?

    Mary? Is that you?
  • bg 2008-01-07 10:37
    rd:
    So you're saying that an effective chain of command employee time off approval system couldn't be designed with a variable, a constant and a flag? The HR department where I work implemented something in C++ very similar to what Mary suggested.

    const bool bFlag = false;
    const bool bApprove = bFlag;
    int index = 0;

    while(!bApprove){
    RequestTimeOff(supervisor[index++]);
    }
    I like how the only way out for the supervisor is to approve the time off :-) Not getting your time off must be an exception (pun intended).
  • SomeCoder 2008-01-07 10:47
    So is the position for an architect or a developer? The story says ".NET developer". Therefore, this question is absolutely the real WTF.

    If you want to test SQL skills, put a schema in front of the candidate and have them write some SQL that pulls out some specific information you require. Make it so they have to join tables together, etc. Maybe even make them write some queries that create the schema using only code if you want.

    Asking a .NET developer to design a system is not a test of SQL skills.

    Mary's answer was still a WTF but the question was pretty bad.
  • Nick 2008-01-07 10:53
    She was blindsided by the “think out of the box” cliché.
  • Chris 2008-01-07 10:53
    This is probably about 60-70% of graduate from the computer science program at many universities. They are given such specific requirements for the school project that they can not design anything from a concept. I am betting she was a recent graduate from a bad program.
  • BradC 2008-01-07 10:57
    SomeCoder:
    So is the position for an architect or a developer? The story says ".NET developer". Therefore, this question is absolutely the real WTF.

    If you want to test SQL skills, put a schema in front of the candidate and have them write some SQL that pulls out some specific information you require. Make it so they have to join tables together, etc. Maybe even make them write some queries that create the schema using only code if you want.

    Asking a .NET developer to design a system is not a test of SQL skills.

    Mary's answer was still a WTF but the question was pretty bad.

    Unless the position explicitly calls for "average-to-strong SQL experience", which it sounds like it did. Sounds reasonable to me.
  • gruckiii 2008-01-07 11:01
    I am not trying to excuse such a poor answer, but I think they should have been more specific and asked how would you go about designing the underlying database. The words data structure, as opposed to storage, usually means the in memory data structure you use in your program.
  • elias 2008-01-07 11:13
    Does that actually get you out? bApprove is a constant, set to false...
  • :-X 2008-01-07 11:16
    The key to solving any generic problem is asking questions to get a more specific problem to solve. Instead of trying to just answer it blindly she should have been asking "the user" (the interviewers) questions. That would have led her to the solution.
  • SomeCoder 2008-01-07 11:17
    BradC:
    SomeCoder:
    So is the position for an architect or a developer? The story says ".NET developer". Therefore, this question is absolutely the real WTF.

    If you want to test SQL skills, put a schema in front of the candidate and have them write some SQL that pulls out some specific information you require. Make it so they have to join tables together, etc. Maybe even make them write some queries that create the schema using only code if you want.

    Asking a .NET developer to design a system is not a test of SQL skills.

    Mary's answer was still a WTF but the question was pretty bad.

    Unless the position explicitly calls for "average-to-strong SQL experience", which it sounds like it did. Sounds reasonable to me.


    I wouldn't assume that "average to strong SQL experience" for a .NET developer means that you'll be designing schemas, stored procedures, etc. If that's what they truly want, then they want a DBA. Or a VERY highly paid .NET who happens to also have DBA skills.

    *shrug* Requiring strong SQL skills for a .NET developer isn't unreasonable at all but it seems like the question was geared toward an architect or DBA, not a developer. A developer might need to know how to write some relatively complicated stored procedures (or since it's .NET, CLR procedures). I wouldn't expect them to know how to design the database efficiently.

    Granted, I still think Mary's answer shows that she wouldn't be good at SQL or programming in general so I guess the question accomplished its purpose of weeding out a potential WTF programmer :)
  • dkf 2008-01-07 11:19
    brazzy:
    The true WTF is any company where time off needs to be requested in a process that involves a supervisor, an unspecified "chain of command" THEN the department head until it even reaches HR.
    Hey! That's our official process that you're dissing there. Stop it; you're making me feel bad...
  • snoofle 2008-01-07 11:19
    Tammy:
    So exactly how would any of you have answered this question?
    Personally, I would have laughingly said "just buy one of the numerous ready made systems to handle that sort of task, and then requested information on what sort of real technical challenges this department faced.
  • PeriSoft 2008-01-07 11:21
    Tammy:
    So exactly how would any of you have answered this question?


    I probably would have said, "What the hell? I'm here for the VP Marketing position!"
  • BitTwiddler 2008-01-07 11:23
    Here's a good question for testing SQL skillz:

    Imagine that a professor needs to store a set of multiple-choice test questions, with a suite of answers for each question, exactly one of which is right. However, the programmers building this app are incredibly bad, so you want to protect the database as much as possible from bad data (two 'right' answers, no 'right' answers, answers without questions, etc), by using indices, RI, etc. Note that students' answers need not be stored; only the questions and set of potential answers.

    Propose a set of tables/indices/RI to store this data. Are there any 'holes' in your solution? What other possible solutions did you consider, and why did you discard them?

    ----

    I encourage all you non-WTF people to give this a try - it's not nearly as trivial as it seems to close all the holes, and even when you do, the solution is right on the borderline between very elegant vs a horrible hack.
  • scruffy 2008-01-07 11:34
    We will need a factory?

    No, I think you'll find that we demand a shrubbery!

  • FredSaw 2008-01-07 11:35
    Don't forget, SQL skills are unimportant and lots of skilled developers don't have them. Also, testing doesn't prove anything. The important thing is, does she have a degree? If so, then they screwed up in letting her go.
  • Me 2008-01-07 11:38
    TRWTF is that someone would go and fetch a fan when a hot woman in front of you says "Oh, it's hot in here!". She was obviously trying to take the interview in another direction.
  • Anon 2008-01-07 11:43
    Ooh! Ooh! I know the answer it is called 'email' or 'walk in the bosses office and ask'. How about this if you need a NON-HR database to track time off requests you either have to get approval too far up the chain or your boss is supervising too many people. So my out-of-the-box answer is: 'A database for *this*? You must be joking. Someone took one too many spreadsheets are bad, databases are good course.'
  • zeke 2008-01-07 11:45
    More importantly, was she cute?
  • Mary 2008-01-07 11:47
    TBL1: Index,Question,CorrectAnswer - All fields req.
    TBL2: Index,IncorrectAnswer,AssociatedQ(IndexfromTBL1) All fields req.

    Professor ensures correct answer is correct, any incorrect answers associated to question are incorrect (only a human could do this). App logic only allows test to be created from questions that have at least 3 incorrect answers available to choose from.
  • Gedoon 2008-01-07 11:50
    Five years from now she'll be the consultant who writes ten lines of crappy VB code and charges one gazillion $$$ for making your companys old system "enterprisy" and your boss will thank her for that.
  • phelyan 2008-01-07 11:54
    Anon:
    Ooh! Ooh! I know the answer it is called 'email' or 'walk in the bosses office and ask'. How about this if you need a NON-HR database to track time off requests you either have to get approval too far up the chain or your boss is supervising too many people. So my out-of-the-box answer is: 'A database for *this*? You must be joking. Someone took one too many spreadsheets are bad, databases are good course.'


    That was so bad it hurt.
  • Adam 2008-01-07 12:00
    I've had this happen to me before.

    A guy comes in, talks with my boss for a while then he sends myself and a coworker in. We ask him about his resume for a while then tell him we're about to ask some technical questions.

    Him: "I wasn't told there would be any technical questions."
    Me: "Oh, sorry. [pause] Well, that's what we're here for. Do you have to be somewhere?"
    Him: "No"
    Me: "Okay then, how about we get into some technical questions then?"
    Him: "I wasn't prepared for technical questions? I didn't know there would be any."
    Me: "It's okay, they're not that difficult, just some basic ones that your resume says you should be able to answer."
    Him: [annoyed look]

    I started out with very basic programming questions (I usually skip them) and he tried to stammer out answers but couldn't.

    I was seriously apalled. More research into this candidate and the company he was working at had a practially empty web page. WHOIS on the website showed him as the owner. A bit more research and he also owns a laundromat.
  • dexonic 2008-01-07 12:15
    lol..
    she's a genius alright :P
  • vt_mruhlin 2008-01-07 12:15
    rd:
    So you're saying that an effective chain of command employee time off approval system couldn't be designed with a variable, a constant and a flag? The HR department where I work implemented something in C++ very similar to what Mary suggested.

    const bool bFlag = false;
    const bool bApprove = bFlag;
    int index = 0;

    while(!bApprove){
    RequestTimeOff(supervisor[index++]);
    }


    That doesn't seem to have any way of allowing the managers to deny your request for time off.

    I like it.
  • Saladin 2008-01-07 12:22
    I was going to say something about how "we just want to see how well you think outside the box" is the real WTF here, but someone beat me to it.
  • bobbyG 2008-01-07 12:27
    First we do some research and see if anyone has already built either a time reporting application or a work flow application. Maybe there is already one in our corporation in another division? If not, odds are pretty good we find one that is floss. Next we assemble the components.....exactly why do we need SQL skills here?
  • Chemisor 2008-01-07 12:28
    FredSaw:
    SQL skills are unimportant and lots of skilled developers don't have them.

    The job they advertised requires SQL experience, so if you don't have any, you shouldn't apply. I know I wouldn't. I am a skilled programmer, but I have so far completely avoided (not entirely by choice) having any experience with databases. Having only read a few SQL books, I am bound to ask WTF questions like: "so, all those examples in the book have text output; does that mean I have to write a friggin parser for every query I do?", which will pretty much guarantee that I won't get the job. So why bother? I'll just look elsewhere.
  • ThePants999 2008-01-07 12:28
    SomeCoder:
    I wouldn't assume that "average to strong SQL experience" for a .NET developer means that you'll be designing schemas, stored procedures, etc. If that's what they truly want, then they want a DBA. Or a VERY highly paid .NET who happens to also have DBA skills.

    *shrug* Requiring strong SQL skills for a .NET developer isn't unreasonable at all but it seems like the question was geared toward an architect or DBA, not a developer. A developer might need to know how to write some relatively complicated stored procedures (or since it's .NET, CLR procedures). I wouldn't expect them to know how to design the database efficiently.

    It sounds like your company has pretty specialised job roles. Don't assume that's universally true. Here, we don't expect to need an "architect" (or a DBA - a database **administrator**) to design a database table. I consider that as much a developer's role as designing the data structures in their code. And I would consider "average to strong SQL experience" to include knowledge of how to design a database, not just how to query it. (Yes, on top of .NET coding skills - I don't think it's asking too much!)
  • x 2008-01-07 12:33
    Isn't this an infinite loop, since bApprove is a constant?
  • axus 2008-01-07 12:33
    Adam:
    Him: "I wasn't told there would be any technical questions."


    Obviously you should have given him time to read "learn Java in 24 hours" and come back when he was ready.
  • BitTwiddler 2008-01-07 12:39
    Mary:
    TBL1: Index,Question,CorrectAnswer - All fields req.
    TBL2: Index,IncorrectAnswer,AssociatedQ(IndexfromTBL1) All fields req.

    Professor ensures correct answer is correct, any incorrect answers associated to question are incorrect (only a human could do this). App logic only allows test to be created from questions that have at least 3 incorrect answers available to choose from.


    Very good! most people wander around for quite a while before coming up with this (if at all). Somehow storing the correct & incorrect answers in separate places just doesn't seem to occur to people. And even when it does, it still doesn't "feel" right.

    In fact, we've NEVER had a candidate actually pass this test (we're a small company, and have only used this a handful of times). We've had to settle for people who could at least recognize the flaws in a more "obvious" approach, and since they weren't being hired as DBAs (just programmers who ought to have reasonable SQL skills) this was sufficient.

    Want a job? ;-)


  • Mary 2008-01-07 12:45
    Yipee! And to think I haven't touched a database in 8 years and even then only for a few weeks total.

    I'm putting DBA on my resume now. ;-)
  • Chemisor 2008-01-07 12:50
    Tammy:
    So exactly how would any of you have answered this question?


    First I'd like to know about the purpose of the application. Is it to expeditiously approve time-off requests, or to deny them through an enterprisey solution that gives appearances of activity while bogging down each request in an impassable quagmire of bureaucratic procedures.

    If the former, I'd recommend changing their business methods to avoid so much micromanagement. Let each supervisor decide on his immediate subordinates' time off requests. Then all that each of them would have to do is stop by his office and ask. It's efficient, free, and is what every sane person would do anyway.

    In the latter case there would be some serious design issues. First we must ensure that the time-off requests can be aggregated at each level into a compact report, stating total time off, total workers on time off, and productivity loss estimates. When the CEO gets approval requests one by one, he will probably sign them. If he can see the enormous numbers calculated above, which get even larger if you can include yearly projections, his pointy hair will turn white and all requests will be summarily denied.

    Second, a show of activity is needed. Modern computers are just too darn efficient, so delay fields must be introduced. For example, on the pretext of reducing managers' workload, all requests should be reviewed in bulk on a particular day of the month. Some code will also be needed to optimize the scheduling of this day for each level of management to maximize the time in the queue. Additionally, it is prudent to require supervisor approval for denials as well as approvals. This ensures that each requests goes all the way to the top.

    To track all this activity and to placate the grumbling workers, each time off request should generate a daily progress report email to the submitter. Something like "Your dedication to this company is very important to us. Blah blah blah. Your request is being processed by our highly competent computers. Requests will be processed in the order received. Your current place in the queue is 43777381928349. The approval level on your request is 445 of 12378758. Have a nice and productive day!"

    A weekly time off status report should be generated for each manager, with summary totals, yearly projections, cost estimates, etc. The report should include a detailed powerpoint presentation, bulleting each important point, displaying historical data in graphs, and calculating a manager's "approval rating" by dividing the number of denials issued by the number of approvals issued. (No pressure should be applied to increase one's rating. That would ruin the game, and besides, they'll do it anyway)

    Oh, you mean the actual database structure? Uh, sorry, I don't know much about SQL. I think I'd use a table, a join, and a, uh... what's it called... a stored procedure!
  • DOA 2008-01-07 12:59
    BitTwiddler:
    Mary:
    TBL1: Index,Question,CorrectAnswer - All fields req.
    TBL2: Index,IncorrectAnswer,AssociatedQ(IndexfromTBL1) All fields req.

    Professor ensures correct answer is correct, any incorrect answers associated to question are incorrect (only a human could do this). App logic only allows test to be created from questions that have at least 3 incorrect answers available to choose from.


    Very good! most people wander around for quite a while before coming up with this (if at all). Somehow storing the correct & incorrect answers in separate places just doesn't seem to occur to people. And even when it does, it still doesn't "feel" right.

    In fact, we've NEVER had a candidate actually pass this test (we're a small company, and have only used this a handful of times). We've had to settle for people who could at least recognize the flaws in a more "obvious" approach, and since they weren't being hired as DBAs (just programmers who ought to have reasonable SQL skills) this was sufficient.

    Want a job? ;-)




    I'm not exactly a DBA so out of curiosity, how would the following compare with the above?

    TBL1: Index,Question - All fields req.
    TBL2: Index,Answer,AssociatedQ(IndexfromTBL1), RightWrongFlag All fields req.
  • Todd 2008-01-07 13:12
    The WTF is they didn't just ask her over the phone how much experience with SQL she had. Wasted her and their own time. To me she just didn't understand the question, doesn't mean she's stupid. If I am going to go in for an interview, they should know a lot about me already.

    People at companies develop their own language and assume everyone outside uses the same terms.

    During an interview during a rapid fire on tech questions I was asked, "How do you like working with designers?"

    I answered, "They can be buggy and a pain sometimes, but I like to use them a lot and I am pretty good with them."

    3 questions later they finally figured out I was taking about code designers while they were talking about graphic designers.
  • FredSaw 2008-01-07 13:13
    Chemisor:
    FredSaw:
    SQL skills are unimportant and lots of skilled developers don't have them.

    The job they advertised requires SQL experience, so if you don't have any, you shouldn't apply. I know I wouldn't.
    I know. My post was just a tongue-in-cheek echo of another guy's comments in an emotionally charged (for him) exchange several days back.
    Chemisor:
    I am a skilled programmer, but I have so far completely avoided (not entirely by choice) having any experience with databases. Having only read a few SQL books, I am bound to ask WTF questions like: "so, all those examples in the book have text output; does that mean I have to write a friggin parser for every query I do?", which will pretty much guarantee that I won't get the job. So why bother? I'll just look elsewhere.
    See, that's what I don't get. From the moment I entered the professional IT world I have been required to access data. That's what we do; we collect data, filter it, organize it, display it. I have worked with DAO, RDO, ADO, ADO.Net, LLBLGen Pro, Access, SQL Server versions 6 through 2005, and Oracle versions 8 through 10. I even worked on an application once that accessed a FoxPro database, although that code was all already in place when I inherited the app. I've done everything from writing in-line SQL queries to designing and creating databases from scratch. All this I consider to be part of my job description as a developer.

    What is it that all you "skilled programmers having no experience with databases" are working on? What kind of code are you writing, that doesn't access a database? Games, or something?
  • FredSaw 2008-01-07 13:19
    DOA:
    TBL1: Index,Question - All fields req.
    TBL2: Index,Answer,AssociatedQ(IndexfromTBL1), RightWrongFlag All fields req.
    Allows for more than one right answer.
  • snoofle 2008-01-07 13:20
    FredSaw:
    Chemisor:
    FredSaw:
    SQL skills are unimportant and lots of skilled developers don't have them.

    The job they advertised requires SQL experience, so if you don't have any, you shouldn't apply. I know I wouldn't.
    I know. My post was just a tongue-in-cheek echo of another guy's comments in an emotionally charged (for him) exchange several days back.
    Chemisor:
    I am a skilled programmer, but I have so far completely avoided (not entirely by choice) having any experience with databases. Having only read a few SQL books, I am bound to ask WTF questions like: "so, all those examples in the book have text output; does that mean I have to write a friggin parser for every query I do?", which will pretty much guarantee that I won't get the job. So why bother? I'll just look elsewhere.
    See, that's what I don't get. From the moment I entered the professional IT world I have been required to access data. That's what we do; we collect data, filter it, organize it, display it. I have worked with DAO, RDO, ADO, ADO.Net, LLBLGen Pro, Access, SQL Server versions 6 through 2005, and Oracle versions 8 through 10. I even worked on an application once that accessed a FoxPro database, although that code was all already in place when I inherited the app. I've done everything from writing in-line SQL queries to designing and creating databases from scratch. All this I consider to be part of my job description as a developer.

    What is it that all you "skilled programmers having no experience with databases" are working on? What kind of code are you writing, that doesn't access a database? Games, or something?

    I suppose that could depend on the size of the organization. I tend to work for larger places, and the "department" usually consists of 2-3 gui people, 2-3 server people, 1 lead-dev/architect, 1-2 DB developers, 1 DBA shared amongst departments, separate QA, and so forth. The GUI folks tend to use the wrappers for communication and DB access provided by the other sub-teams.

    Our GUI developers know SQL, but I wouldn't think of turning them loose without some of the back-end folks checking it. Conversely, I'm a back-end person, and have written my share of GUIs, but I can't design, let alone draw/render something that looks even remotely professional. Also, I can muddle my way through fairly complex queries, but routinely go to one of our DB folks and ask them to redo my queries to make them better.

    Context is everything.

  • Todd 2008-01-07 13:20
    FredSaw:
    Chemisor:
    FredSaw:
    SQL skills are unimportant and lots of skilled developers don't have them.

    The job they advertised requires SQL experience, so if you don't have any, you shouldn't apply. I know I wouldn't.
    I know. My post was just a tongue-in-cheek echo of another guy's comments in an emotionally charged (for him) exchange several days back.
    Chemisor:
    I am a skilled programmer, but I have so far completely avoided (not entirely by choice) having any experience with databases. Having only read a few SQL books, I am bound to ask WTF questions like: "so, all those examples in the book have text output; does that mean I have to write a friggin parser for every query I do?", which will pretty much guarantee that I won't get the job. So why bother? I'll just look elsewhere.
    See, that's what I don't get. From the moment I entered the professional IT world I have been required to access data. That's what we do; we collect data, filter it, organize it, display it. I have worked with DAO, RDO, ADO, ADO.Net, LLBLGen Pro, Access, SQL Server versions 6 through 2005, and Oracle versions 8 through 10. I even worked on an application once that accessed a FoxPro database, although that code was all already in place when I inherited the app. I've done everything from writing in-line SQL queries to designing and creating databases from scratch. All this I consider to be part of my job description as a developer.

    What is it that all you "skilled programmers having no experience with databases" are working on? What kind of code are you writing, that doesn't access a database? Games, or something?


    Really big government projects that will never get finished and each person can only work on one tiny part of it.
  • snoofle 2008-01-07 13:21
    FredSaw:
    DOA:
    TBL1: Index,Question - All fields req.
    TBL2: Index,Answer,AssociatedQ(IndexfromTBL1), RightWrongFlag All fields req.
    Allows for more than one right answer.

    Isn't that what constraints are for?
  • Todd 2008-01-07 13:22
    snoofle:
    FredSaw:
    Chemisor:
    FredSaw:
    SQL skills are unimportant and lots of skilled developers don't have them.

    The job they advertised requires SQL experience, so if you don't have any, you shouldn't apply. I know I wouldn't.
    I know. My post was just a tongue-in-cheek echo of another guy's comments in an emotionally charged (for him) exchange several days back.
    Chemisor:
    I am a skilled programmer, but I have so far completely avoided (not entirely by choice) having any experience with databases. Having only read a few SQL books, I am bound to ask WTF questions like: "so, all those examples in the book have text output; does that mean I have to write a friggin parser for every query I do?", which will pretty much guarantee that I won't get the job. So why bother? I'll just look elsewhere.
    See, that's what I don't get. From the moment I entered the professional IT world I have been required to access data. That's what we do; we collect data, filter it, organize it, display it. I have worked with DAO, RDO, ADO, ADO.Net, LLBLGen Pro, Access, SQL Server versions 6 through 2005, and Oracle versions 8 through 10. I even worked on an application once that accessed a FoxPro database, although that code was all already in place when I inherited the app. I've done everything from writing in-line SQL queries to designing and creating databases from scratch. All this I consider to be part of my job description as a developer.

    What is it that all you "skilled programmers having no experience with databases" are working on? What kind of code are you writing, that doesn't access a database? Games, or something?

    I suppose that could depend on the size of the organization. I tend to work for larger places, and the "department" usually consists of 2-3 gui people, 2-3 server people, 1 lead-dev/architect, 1-2 DB developers, 1 DBA shared amongst departments, separate QA, and so forth. The GUI folks tend to use the wrappers for communication and DB access provided by the other sub-teams.

    Our GUI developers know SQL, but I wouldn't think of turning them loose without some of the back-end folks checking it. Conversely, I'm a back-end person, and have written my share of GUIs, but I can't design, let alone draw/render something that looks even remotely professional. Also, I can muddle my way through fairly complex queries, but routinely go to one of our DB folks and ask them to redo my queries to make them better.

    Context is everything.



    The funny thing is one good developer could do all those people's jobs quicker because of all the time wasted in arguing and communicating what needs to be done.
  • jimi 2008-01-07 13:27
    The real WTF here is that some jackass agreed to interview a 20 year old (probably not even graduated from college yet)

    And zeke, in response to this:
    zeke:
    More importantly, was she cute?
    Please review the following: xkcd
  • FredSaw 2008-01-07 13:29
    snoofle:
    FredSaw:
    DOA:
    TBL1: Index,Question - All fields req.
    TBL2: Index,Answer,AssociatedQ(IndexfromTBL1), RightWrongFlag All fields req.
    Allows for more than one right answer.

    Isn't that what constraints are for?
    Tell me how you see that working.
  • Chemisor 2008-01-07 13:31
    FredSaw:
    See, that's what I don't get. From the moment I entered the professional IT world I have been required to access data. That's what we do; we collect data, filter it, organize it, display it. What is it that all you "skilled programmers having no experience with databases" are working on? What kind of code are you writing, that doesn't access a database? Games, or something?


    Try office applications. A word processor has no reason to talk to a database (except for mail merges, which is not my problem). I did write a data collecting program once, about ten years ago. It did not use a database because it was intended as a consumer product, so it just saved the data in a file. It did have to talk to a server to share the data, but the server was also something I wrote myself, and it worked more like rsync than a database.

    Even now when I have data, I am far more likely to just design a file format for it and stick to it than use a database. I want to make software for regular people, to use on their personal computers, and regular people don't have a database server running. They have no interest in administering it or in transaction safety (since they are the only ones using it), and would have trouble understanding why data has to be stored in some central location and in a whole directory instead of a single file. Frankly, I have trouble understanding that myself. I am sure there are good reasons for it, I just don't know what they are.

    The reason there is so much database use is that most applications are developed for business use; inventory control and the like, where databases are a perfect fit. I find it troubling that there aren't more consumer programs that let people use the computer for something other than games. Other than Microsoft Office and a web browser (and games, of course) there is almost nothing out there.
  • jimi 2008-01-07 13:33
    I didn't finish my thought... what I meant to say was that interviewing a newbie programmer (obviously she seems a bit below average even for a newb, but that could have been nerves) for a position that obviously requires some experience is the WTF. Probably some headhunter firm firing resumes at this company and hoping something sticks.
  • Robert S. Robbins 2008-01-07 13:35
    I've never know anyone to hire a architect or a DBA. Designing the database is almost always left to the developer. For that matter, the developer is often required to know Photoshop and create the company's web site design. I've even been asked to do marketing because SEO is too technical for anyone but the developer.
  • FredSaw 2008-01-07 13:43
    Chemisor:
    Try office applications. A word processor has no reason to talk to a database (except for mail merges, which is not my problem).
    I never mess with Office programming these days, but I have in the past. Excel worksheet, accessing a database in the VBA code and displaying the data, filtered according to dropdown listboxes of criteria.
  • AdT 2008-01-07 13:52
    Saladin:
    I was going to say something about how "we just want to see how well you think outside the box" is the real WTF here, but someone beat me to it.


    You beat me to saying that someone beat me to it. This is classical inside the box thinking. What's wrong with that, anyway? No one can think outside the box all of the time unless maybe (s)he's a lunatic. Sometimes the simple and well-tested solution happens to be the best, so: Think inside the box!
  • BitTwiddler 2008-01-07 13:53
    DOA:

    I'm not exactly a DBA so out of curiosity, how would the following compare with the above?

    TBL1: Index,Question - All fields req.
    TBL2: Index,Answer,AssociatedQ(IndexfromTBL1), RightWrongFlag All fields req.


    The problem is that there's no standard DB-centric way to prevent two or more flags from being set to "right" at the same time.

    Yes, you could do it with triggers or stored procedures, but those are hardly standard (the concept is, but not the implementation) and they aren't really part of the data model per se anyway.
  • Khanmots 2008-01-07 14:04
    FredSaw:
    What is it that all you "skilled programmers having no experience with databases" are working on? What kind of code are you writing, that doesn't access a database? Games, or something?


    Applications that are based around storing/retrieving large amounts of information are only one set. There's a lot of other types out there.

    Consider the majority of embedded applications for instance...
  • nobody 2008-01-07 14:07
    FredSaw:
    See, that's what I don't get. From the moment I entered the professional IT world I have been required to access data. That's what we do; we collect data, filter it, organize it, display it.


    Ugh! I studied CS because I find things like games, 3d graphics, artificial intelligence, compilers, and operating systems interesting. It totally sucks that, after I graduated, I am just now finding out that 99% of software development jobs is just an enterprisy - "collect data, filter it, organize it, display it" business. I should have just stayed at uni.
  • AdT 2008-01-07 14:12
    Todd:
    Really big government projects that will never get finished and each person can only work on one tiny part of it.


    Let me guess... the reason that they never get finished is that people are trying to reinvent a DBMS so they don't have to use any of the existing, well-tested implementations?

    Chemisor:
    I want to make software for regular people, to use on their personal computers, and regular people don't have a database server running.


    Bogus reason #1: Embeddable DBMSes like Berkely or Firebird do not require a database server.

    Chemisor:

    and would have trouble understanding why data has to be stored in some central location and in a whole directory instead of a single file. Frankly, I have trouble understanding that myself.


    Bogus reason #2: When using embedded Firebird, for example, you can put the entire database in one file.

    I used embedded Firebird with the ADO.NET provider for a program that generated single file databases (and one to access them). It was a snap. Designing my own filesystem and the necessary access routines would have been a lot more trouble.
  • FredSaw 2008-01-07 14:18
    nobody:
    Ugh! I studied CS because I find things like games, 3d graphics, artificial intelligence, compilers, and operating systems interesting. It totally sucks that, after I graduated, I am just now finding out that 99% of software development jobs is just an enterprisy - "collect data, filter it, organize it, display it" business. I should have just stayed at uni.
    LOL! You make it sound like you were interested in hotrods, so you became an auto mechanic, only to discover that you would always have grime under your fingernails.

    Can't you find a position with a games or 3D or AI company? I haven't tried, but I had the impression there were plenty of them out there.
  • brazzy 2008-01-07 14:22
    Chemisor:
    Tammy:
    So exactly how would any of you have answered this question?


    First I'd like to know about the purpose of the application. Is it to expeditiously approve time-off requests, or to deny them through an enterprisey solution that gives appearances of activity while bogging down each request in an impassable quagmire of bureaucratic procedures.

    If the former, I'd recommend changing their business methods to avoid so much micromanagement. Let each supervisor decide on his immediate subordinates' time off requests. Then all that each of them would have to do is stop by his office and ask. It's efficient, free, and is what every sane person would do anyway.

    In the latter case there would be some serious design issues. First we must ensure that the time-off requests can be aggregated at each level into a compact report, stating total time off, total workers on time off, and productivity loss estimates. When the CEO gets approval requests one by one, he will probably sign them. If he can see the enormous numbers calculated above, which get even larger if you can include yearly projections, his pointy hair will turn white and all requests will be summarily denied.

    Second, a show of activity is needed. Modern computers are just too darn efficient, so delay fields must be introduced. For example, on the pretext of reducing managers' workload, all requests should be reviewed in bulk on a particular day of the month. Some code will also be needed to optimize the scheduling of this day for each level of management to maximize the time in the queue. Additionally, it is prudent to require supervisor approval for denials as well as approvals. This ensures that each requests goes all the way to the top.

    To track all this activity and to placate the grumbling workers, each time off request should generate a daily progress report email to the submitter. Something like "Your dedication to this company is very important to us. Blah blah blah. Your request is being processed by our highly competent computers. Requests will be processed in the order received. Your current place in the queue is 43777381928349. The approval level on your request is 445 of 12378758. Have a nice and productive day!"

    A weekly time off status report should be generated for each manager, with summary totals, yearly projections, cost estimates, etc. The report should include a detailed powerpoint presentation, bulleting each important point, displaying historical data in graphs, and calculating a manager's "approval rating" by dividing the number of denials issued by the number of approvals issued. (No pressure should be applied to increase one's rating. That would ruin the game, and besides, they'll do it anyway)

    I bow deeply to your superior cynicism.
  • arty 2008-01-07 14:24
    Adam:
    I've had this happen to me before.

    A guy comes in, talks with my boss for a while then he sends myself and a coworker in. We ask him about his resume for a while then tell him we're about to ask some technical questions.

    Him: "I wasn't told there would be any technical questions."
    Me: "Oh, sorry. [pause] Well, that's what we're here for. Do you have to be somewhere?"
    Him: "No"
    Me: "Okay then, how about we get into some technical questions then?"
    Him: "I wasn't prepared for technical questions? I didn't know there would be any."
    Me: "It's okay, they're not that difficult, just some basic ones that your resume says you should be able to answer."
    Him: [annoyed look]


    I once gave the technical part of a phone interview with me and a coworker on our side, and the candidate on speakerphone. The candidate had just got his masters in computer science so we asked questions related to his school work. After trying to tease out any detail at all, the straw that broke the camel's back was this:

    arty:

    What did you do in your digital signal processing course?

    Candidate:

    Process ... Digital ... Signals?


    At that point, my coworker wisely muted the phone cause we were both losing it.
  • MrB 2008-01-07 14:28
    BitTwiddler:
    Here's a good question for testing SQL skillz:

    Imagine that a professor needs to store a set of multiple-choice test questions, with a suite of answers for each question, exactly one of which is right. However, the programmers building this app are incredibly bad, so you want to protect the database as much as possible from bad data (two 'right' answers, no 'right' answers, answers without questions, etc), by using indices, RI, etc. Note that students' answers need not be stored; only the questions and set of potential answers.

    Propose a set of tables/indices/RI to store this data. Are there any 'holes' in your solution? What other possible solutions did you consider, and why did you discard them?

    ----

    I encourage all you non-WTF people to give this a try - it's not nearly as trivial as it seems to close all the holes, and even when you do, the solution is right on the borderline between very elegant vs a horrible hack.


    DAMN YOU!!! Reading this and looking at some of the answers made me think : "Yes, but would that allow them to generate SCORM compliant output compatible with the latest IMS Question and Test Specifications"?

    Yes, I am a dably babbaged individual.

  • MrB 2008-01-07 14:34
    Oh and PS : I'd actually answer that the use of a database is probably inappropriate and you should really use one of the multitude of SCORM compliant quiz generators so that this stuff could go in the profs LMS.

    That said, you've now got me wondering if I can do this with a DTD or whether I'd need to use XSD/Relax NG.... :/
  • Kuba 2008-01-07 14:36
    Chemisor:

    Even now when I have data, I am far more likely to just design a file format for it and stick to it than use a database. I want to make software for regular people, to use on their personal computers, and regular people don't have a database server running.


    You seem to conveniently ignore existence of embedded databases (say SQLite). The "regular people" argument doesn't hold any water - I have one shipping application used by "regular people" and it uses an SQLite database. It made things *much* easier - it originally used a text file to store the data. The file had to be read each time on startup, the parser had to be maintained, etc. The database reduced the code size by 2-3klocs and made the code more robust too.


    They have no interest in administering it or in transaction safety (since they are the only ones using it)


    Yeah, because computers never crash, and you never ever have to Undo anything.


    and would have trouble understanding why data has to be stored in some central location and in a whole directory instead of a single file.


    A good embedded database will use a single file.


    Frankly, I have trouble understanding that myself. I am sure there are good reasons for it, I just don't know what they are.


    1. Don't reinvent the wheel.
    2. Don't reinvent the wheel.
    3. Um, don't reinvent the wheel?

    Somebody has spent tons of time debugging the database. At the time I abandoned the plain-text file, the parser still had known bugs which had no easy workarounds (luckily they didn't affect any users).


    The reason there is so much database use is that most applications are developed for business use; inventory control and the like, where databases are a perfect fit.


    How's that different from managing an address book, a list of software packages, or a list of files in software packages? SQLite databases are routinely used in Linux package distribution via yum - the software downloads bzipped sqlite file, and can then do very efficient queries on dependencies, files, etc.


    I find it troubling that there aren't more consumer programs that let people use the computer for something other than games. Other than Microsoft Office and a web browser (and games, of course) there is almost nothing out there.


    What hole do you live in??

    "Consumers" routinely use software like photo editing and media managment/editing in general, even computation (students!). Just two examples in non-business setting. Go to local computer store (that's not BestBuy to you) and see what software is on the shelves. Games are <50%.

    Cheers!
  • Dale 2008-01-07 14:39
    nobody:
    FredSaw:
    See, that's what I don't get. From the moment I entered the professional IT world I have been required to access data. That's what we do; we collect data, filter it, organize it, display it.


    Ugh! I studied CS because I find things like games, 3d graphics, artificial intelligence, compilers, and operating systems interesting. It totally sucks that, after I graduated, I am just now finding out that 99% of software development jobs is just an enterprisy - "collect data, filter it, organize it, display it" business. I should have just stayed at uni.


    This is why I tell CS students to take the time to learn and understand databases and SQL. This immediately gives them the upper hand in the competition for entry level development jobs. I'm still surprised at how little education about databases there is at the undergrad level.
  • Chemisor 2008-01-07 14:43
    AdT:

    Let me guess... the reason that they never get finished is that people are trying to reinvent a DBMS so they don't have to use any of the existing, well-tested implementations?


    You mean "existing, godawfully bloated, poorly designed, and hard to use with C++" implementations? I agree that MySQL certainly has a place, but not for everything. A typical desktop application does not need all those fancy features a database provides, making them little more than bloat and inconvenience. For example, a typical desktop application will have the following differences:

    1. Single user access. Nobody messes with your data but you, and nobody connects to it while you are working on it. This makes concurrency control unnecessary, scalability pointless, and transaction control useless.

    2. Small data set. Regular people are not Fortune 500 companies and don't have terabytes of data. Most data sets are a few megabytes in size, if that. This means that all those painstaking query optimizations will not help much.

    3. Offline. Most people don't have broadband at home. If your database server is inaccessible, the app is unusable, which is very very bad. A git-like full clone solution is a far better choice for distributed data sets in this scenario.

    4. Run their own backups. When I want to back up a file, I want to back up a file, not a goddamn directory in some cryptically named location. I might even want to attach it to an email. Remember, small data sets!

    5.Don't have a DBA degree. And consequently not willing to spend time on weird administration tasks that require connecting to a shell-like SQL interface. (Or at least that's what all the tutorials I've read do. What's with the goddamn text, people? This isn't 1976; we have GUIs these days! Or are you too cheap to make one?)

    6. Goddamned text. Text-mode operations require parsers to convert to and from text data. Parsers are hard to write correctly.

    IMHO, MySQL is simply not a good idea in this situation. It's the wrong tool for this job.

    AdT:

    Chemisor:
    I want to make software for regular people, to use on their personal computers, and regular people don't have a database server running.

    Bogus reason #1: Embeddable DBMSes like Berkely or Firebird do not require a database server.


    True, but they don't provide any benefits over the simple dump-my-data-and-index solution. They are actually worse, since they have C interfaces, which will defile your pure C++ design. There is NO excuse for using plain C interfaces these days. Good design requires structure, and C can't provide any.

    AdT:

    Chemisor:

    and would have trouble understanding why data has to be stored in some central location and in a whole directory instead of a single file. Frankly, I have trouble understanding that myself.


    Bogus reason #2: When using embedded Firebird, for example, you can put the entire database in one file.

    It's not a bogus reason if I haven't heard of some obscure package that allows one-file operation. Most other programmers will not have heard of it either.

    AdT:

    I used embedded Firebird with the ADO.NET provider for a program that generated single file databases (and one to access them). It was a snap. Designing my own filesystem and the necessary access routines would have been a lot more trouble.


    In a single user scenario you don't need a filesystem. You just write your data as you have it in memory, in an vector or something, into a file. Writing serialization routines is not that hard. If you care about memory usage, you might implement a sliding window backend, which isn't very hard either, but in most cases you don't need one.

    Once again, I am not disputing the need for MySQL in a huge company with terabytes of data. There you have concurrency issues, scalability issues, security problems, query performance, and all that. However, for an end-user application this is all unnecessary.
  • snoofle 2008-01-07 14:49
    FredSaw:
    snoofle:
    FredSaw:
    DOA:
    TBL1: Index,Question - All fields req.
    TBL2: Index,Answer,AssociatedQ(IndexfromTBL1), RightWrongFlag All fields req.
    Allows for more than one right answer.

    Isn't that what constraints are for?
    Tell me how you see that working.

    proc: q+correct ans must be inserted together, neither can be null
    constraint on insert of incorrect ans: referenced Q must exist
    procs that change the date (eg: prof entered wrong answer as correct) need to validate one correct answer and remainder incorrect, and valid referenced Q

    The point is while there's more than one way to skin a cat, as long as you are consistent within your chosen method, and don't start with a live cat, you have a chance of success.

    Aside: on interviews, sometimes a nervous (but competant) person might blank out on an otherwise reasonably simple question, if it catches them off guard. Honestly, when was the last time someone came up to you at work and said "design xxx and give me a working model in the next 2 minutes"?
  • Jim 2008-01-07 14:54
    VB? How is that enterprisy?
  • Vryk 2008-01-07 14:54
    It allows for more than one correct answer per question as well as no correct answers.
  • FredSaw 2008-01-07 14:57
    snoofle:
    proc: q+correct ans must be inserted together, neither can be null
    constraint on insert of incorrect ans: referenced Q must exist
    procs that change the date (eg: prof entered wrong answer as correct) need to validate one correct answer and remainder incorrect, and valid referenced Q
    You would prefer to write a stored procedure to validate everything, rather than use referential integrity?
  • Chemisor 2008-01-07 15:02
    Kuba:

    You seem to conveniently ignore existence of embedded databases (say SQLite).

    I am not ignoring them. I simply find them unnecessary.

    Kuba:

    Yeah, because computers never crash, and you never ever have to Undo anything.


    Most user applications don't support undo over a restart. I don't see that as a limitation. And as for handling crashes, the most common way is to write out a temp file and then move it over the original. Regular people don't have terabytes of data and this temporary waste of space is not an issue.

    Kuba:

    1. Don't reinvent the wheel.
    2. Don't reinvent the wheel.
    3. Um, don't reinvent the wheel?

    Somebody has spent tons of time debugging the database. At the time I abandoned the plain-text file, the parser still had known bugs which had no easy workarounds (luckily they didn't affect any users).

    1. Don't use goddamn text formats.
    2. Don't use goddamn text formats.
    3. Sometimes you need to reinvent the wheel because you are making a bicycle instead of a race car.

    Kuba:

    How's that different from managing an address book, a list of software packages, or a list of files in software packages?


    The data set is small, so you don't need fancy features. Yes, of course you can use SQLite, but you can also use a sledgehammer to drive in nails.

    Kuba:

    "Consumers" routinely use software like photo editing and media managment/editing in general, even computation (students!). Just two examples in non-business setting. Go to local computer store (that's not BestBuy to you) and see what software is on the shelves. Games are <50%.

    Yes, do go. And then count the ones that are actually new. Most have been around since the 90s and are simply being maintained with pointless improvements. IMO, most of these new versions are much worse than the old ones. For example, I prefer Microsoft Photo Editor to Photoshop. I also can't use the current financial software due to the goddamn "web look" with razor-to-the-eye unchangeable white backgrounds. And where is my Norton Utilities? Or a decent defragmenter that can compact that FAT32 partition I have to keep to share files with Linux? Or a word processor where I can permanently get rid of that stupid WYSIWYG lets-show-the-user-a-page-like-paper look? Or a music player that doesn't try to look like a physical stereo, faking perfectly good system controls with pseudo-knobs and buttons? Such garbage!
  • Anonymous 2008-01-07 15:03
    Walleye:
    sir_flexalot:
    I would've just kept asking questions about the first mentioned item, i.e. "what's the constant for", etc. and go until they just admit they don't know what's going on.


    What would be the point of that? It's obvious that she is not qualified for the job and she's not going to get it, what do you gain by humiliating her. Do you also like to pull the wings of flies?

    How do you know that?

    Isn't this an infinite loop, since bApprove is a constant?

    *gasp*
  • Uber 2008-01-07 15:03
    me:
    Tammy:
    So exactly how would any of you have answered this question?

    Mary? Is that you?


    Little late don't you think?

    Anyway, as they told her, you don't need to give an explicit answer, just start a process of problem resolution with them, ask questions and design on responses, maybe even them don't know what they're asking since this is supposed to be a hypothetical question.

    Do some pseudo-uml drawings, some pseudo-code and give an enterprisy answer... am I hired?
  • Anonymous 2008-01-07 15:07
    Or a decent defragmenter that can compact that FAT32 partition I have to keep to share files with Linux?

    NTFS-3G, anyone?
  • Joe 2008-01-07 15:14
    Robert S. Robbins:
    I've never know anyone to hire a architect or a DBA. Designing the database is almost always left to the developer. For that matter, the developer is often required to know Photoshop and create the company's web site design. I've even been asked to do marketing because SEO is too technical for anyone but the developer.


    Or my personal favorite

    Idiot: You're good with computers. Right?
    Me: I'm a DBA and a software developer.
    Idiot: Great! So that means you know how to use Photoshop. Hey, I need you to design a cool looking poster for my department's product launch party.
    Me: How is it you manage to earn a paycheck at this place?
  • DOA 2008-01-07 15:18
    FredSaw:
    DOA:
    TBL1: Index,Question - All fields req.
    TBL2: Index,Answer,AssociatedQ(IndexfromTBL1), RightWrongFlag All fields req.
    Allows for more than one right answer.


    Look at the bright side... if the professor doesn't pay you, you can hack the app, switch all the answers to false and watch the students organize a lynch mob.
  • Fdo G 2008-01-07 15:22
    Im not a DBA either, not even CS grad yet.
    But here's my attempt (they hammered me with 3NF, so bear with me :p)

    TBL 1: Index (Auto Increment, Unique) |Question (Unique) - All fields req.

    TBL 2: Index (Auto Incr, Unique), AssociateQ (Unique, Asociated to the index of the corresponding question), Right Answer - All fields req.

    TBL 3: Index (Auto Incr, Unique), AssociateQ (Asociated to the index of the corresponding question), Wrong Answer - All fields req.

    It allows for only one right answer in the right answers table, yet any number of wrong answers in Table 3.
  • Chemisor 2008-01-07 15:29
    Anonymous:
    Or a decent defragmenter that can compact that FAT32 partition I have to keep to share files with Linux?

    NTFS-3G, anyone?

    Sorry, I don't want to mess with FUSE. A FAT32 partition is still simpler.
  • FredSaw 2008-01-07 15:31
    Fdo G:
    Im not a DBA either, not even CS grad yet.
    But here's my attempt (they hammered me with 3NF, so bear with me :p)

    TBL 1: Index (Auto Increment, Unique) |Question (Unique) - All fields req.

    TBL 2: Index (Auto Incr, Unique), AssociateQ (Unique, Asociated to the index of the corresponding question), Right Answer - All fields req.

    TBL 3: Index (Auto Incr, Unique), AssociateQ (Asociated to the index of the corresponding question), Wrong Answer - All fields req.

    It allows for only one right answer in the right answers table, yet any number of wrong answers in Table 3.
    If you had a one-to-many relationship between Question and RightAnswer, then a second table would be justified. Since there can be only one RightAnswer, it's pointless to put it in its own table. Make it a field in TBL 1 instead.
  • welcor 2008-01-07 15:32
    Fdo G:
    Im not a DBA either, not even CS grad yet.
    But here's my attempt (they hammered me with 3NF, so bear with me :p)

    TBL 1: Index (Auto Increment, Unique) |Question (Unique) - All fields req.

    TBL 2: Index (Auto Incr, Unique), AssociateQ (Unique, Asociated to the index of the corresponding question), Right Answer - All fields req.

    TBL 3: Index (Auto Incr, Unique), AssociateQ (Asociated to the index of the corresponding question), Wrong Answer - All fields req.

    It allows for only one right answer in the right answers table, yet any number of wrong answers in Table 3.


    Yes, but you could risk having no right answers at all. You need that correct answer in the same table as the question.
  • KattMan 2008-01-07 15:34
    Fdo G:
    Im not a DBA either, not even CS grad yet.
    But here's my attempt (they hammered me with 3NF, so bear with me :p)

    TBL 1: Index (Auto Increment, Unique) |Question (Unique) - All fields req.

    TBL 2: Index (Auto Incr, Unique), AssociateQ (Unique, Asociated to the index of the corresponding question), Right Answer - All fields req.

    TBL 3: Index (Auto Incr, Unique), AssociateQ (Asociated to the index of the corresponding question), Wrong Answer - All fields req.

    It allows for only one right answer in the right answers table, yet any number of wrong answers in Table 3.


    I'd say you passed this.

    While others may say you now need three fields to hold one field of data (right answer) as opposed to the previous answer using only two tables with the right answer listed in the question table, your solution allows for future changes to be easily made when the inevitable scope change happens to allow for more than one right answer.

    Your solution does lead itself to questions without answers though. The previous allowed questions with no wrong ones listed but you always need a right one. Issues like these are best addressed in the business logic in certain systems and not at the DB level.

    Sometimes thinking about the future leads you nearly back to the "in the box" solution because of scalability or ease of maintenance.
  • midiwall 2008-01-07 15:36
    I think she came to see us afterwards...

    We went through a mass interview process a few months ago for a total of 6 people. There are some REAL interesting candidates on the market - people that have spent WAY too much time adding buzzwords to their rezzy.

    Sigh...
  • Joe 2008-01-07 15:38
    Dale:
    nobody:
    FredSaw:
    See, that's what I don't get. From the moment I entered the professional IT world I have been required to access data. That's what we do; we collect data, filter it, organize it, display it.


    Ugh! I studied CS because I find things like games, 3d graphics, artificial intelligence, compilers, and operating systems interesting. It totally sucks that, after I graduated, I am just now finding out that 99% of software development jobs is just an enterprisy - "collect data, filter it, organize it, display it" business. I should have just stayed at uni.


    This is why I tell CS students to take the time to learn and understand databases and SQL. This immediately gives them the upper hand in the competition for entry level development jobs. I'm still surprised at how little education about databases there is at the undergrad level.


    At my university as an undergrad, the professors were too busy having an orgy with their algorithms analysis to tell us of the real world importance of such things. Professors teaching CS are focusing on things like teaching the Church-Turing thesis. Fine. But to get a job after getting the degree, we'll need to know something else.

    Towards the end of my schooling I noticed there were lots of local businesses trying to hire CS students to build them some custom database apps to handle simple things specific to their business. At that time I knew Access enough to build the databases and the front ends. That alone was more meaningful to my wallet than the Pumping Lemma.

    You need to know both the CS type fundamentals as well as some practical skills to pay the bills. If only professors reminded their students of that. Then again, none of what I get paid for I learned specifically at school. It gave me the fundamentals, but the specific languages and whatnot were all self taught.
  • Patrick 2008-01-07 15:50
    The sad thing is both have their appropriate uses, but knowing where and when to appropriately apply them is lost on most people.
  • vt_mruhlin 2008-01-07 15:55
    Alex:
    Don't forget to submit your own interview story, from either side of the table.


    If Microsoft ever bothers to respond to all the resumes I've sent them, I might get a few stories to submit. I don't get it... the job I'm applied for is practically the exact same thing as my last job, so my resume should at least merit a phone screening.

    I think I pissed off one of their recruiters when I was in college. They're not the vengeful sort of company that blacklists people for trivial stuff from years ago, are they?
  • Rick 2008-01-07 15:58
    If you used a Multivalue database, you could so it all in one table. LDAP db could do the same thing.

  • snoofle 2008-01-07 16:00
    FredSaw:
    snoofle:
    proc: q+correct ans must be inserted together, neither can be null
    constraint on insert of incorrect ans: referenced Q must exist
    procs that change the date (eg: prof entered wrong answer as correct) need to validate one correct answer and remainder incorrect, and valid referenced Q
    You would prefer to write a stored procedure to validate everything, rather than use referential integrity?


    While referential integrity is probably best implemented at lower levels, stored procs can be used for that purpose. Is it ideal? No. Is it best? No. However, when interviewing, folks don't always come up with the best solution off the top of their head. IMHO, I find you get a better read of someone's abilities if you see how they think it through, rather than focusing on the quality (within reason) of their solution. Remember, you have asked this question before and have had the opportunity to think it through; the candidate is likely hearing it for the first time.
  • Andy 2008-01-07 16:13
    Chemisor:
    (snip)

    Or a decent defragmenter that can compact that FAT32 partition I have to keep to share files with Linux?

    (snip)


    There is a very good solution for that: http://www.fs-driver.org/
  • Chemisor 2008-01-07 16:20
    Andy:
    Chemisor:
    (snip)

    Or a decent defragmenter that can compact that FAT32 partition I have to keep to share files with Linux?

    (snip)


    There is a very good solution for that: http://www.fs-driver.org/


    According to the FAQ, that driver does not support access rights, which means that any application will be able to write anywhere in my Linux fs tree. That is unacceptable. I don't trust Windows applications and mostly just boot there to play games, fill in pdfs (as in tax forms), run uTorrent, and perform other sundry tasks that Linux doesn't do yet. Anything shared between the two must be isolated and totally non-critical.
  • Anon 2008-01-07 16:22
    Used to work on machine vision: math, no databases.

    Used to work on physical simulations: math, no databases.

    Work on 3D modelling software now: math, no databases.
  • Gilhad 2008-01-07 16:28
    Tammy:
    So exactly how would any of you have answered this question?

    Well, I would start with the obvious:
    It would need a table for such requests. This table needs unique autoincrementing id (as each employee can have more then one request, and also it is generally good idea). Next the table will need employee_id, which wil be pointer to another table, where are stored employee nationals. This also serve as pointer to employee_chef table, which holds structure tree of the company relations. Then there will be two dates - one for start and other for end time. Field for comments (or pointer to another table, depending on analyse). Maybe two of them - the original request and the request for change / confirmation. Also flag of the state of request (created, accepted, rejected, returned, climbing_up_the_tree). Or maybe two flags - active and state, so filtering will be easier. And one mor pointer to employees, who is just now responsible for doing something with it (chef, his chef, worker ...)
    This is very simple schema, but better analise could show more point, which depends on other company databases/tables/systems. Also is possible to do some logging or tracing or versioning, if needed by company for evidence (as big companies tends to) ....

    So I will continue in this style, until they stop me, or have some questions ....

    Remember - it is not so, that you have to write this application from scratch to the end on interview ... this is, that you should prove, that you know how to do such things ... they probabelly do not need such app at all and maybe they have only one boss and request are made simply by asking, but this is example problem and solution is to start solving it ... nothing more ...
  • Franz Kafka 2008-01-07 16:37
    SomeCoder:
    BradC:
    SomeCoder:
    So is the position for an architect or a developer? The story says ".NET developer". Therefore, this question is absolutely the real WTF.

    If you want to test SQL skills, put a schema in front of the candidate and have them write some SQL that pulls out some specific information you require. Make it so they have to join tables together, etc. Maybe even make them write some queries that create the schema using only code if you want.

    Asking a .NET developer to design a system is not a test of SQL skills.

    Mary's answer was still a WTF but the question was pretty bad.

    Unless the position explicitly calls for "average-to-strong SQL experience", which it sounds like it did. Sounds reasonable to me.


    I wouldn't assume that "average to strong SQL experience" for a .NET developer means that you'll be designing schemas, stored procedures, etc. If that's what they truly want, then they want a DBA. Or a VERY highly paid .NET who happens to also have DBA skills.


    You're kidding, right? This is a softball for me, and I'm a mid-level developer. Schemas aren't hard, although I usually avoid PLSQL (company policy). Generally, I'd do this as an interaction between the DB, some hosted app (for email notifications and approve/deny) and LDAP (where the org chart would probably already be). Not very hard, and not too much work.
  • Edward Royce 2008-01-07 16:46
    Tammy:
    So exactly how would any of you have answered this question?


    I would have used the Chewbacca Defense.

    It just don't make sense!
  • Franz Kafka 2008-01-07 16:48
    BitTwiddler:
    DOA:

    I'm not exactly a DBA so out of curiosity, how would the following compare with the above?

    TBL1: Index,Question - All fields req.
    TBL2: Index,Answer,AssociatedQ(IndexfromTBL1), RightWrongFlag All fields req.


    The problem is that there's no standard DB-centric way to prevent two or more flags from being set to "right" at the same time.

    Yes, you could do it with triggers or stored procedures, but those are hardly standard (the concept is, but not the implementation) and they aren't really part of the data model per se anyway.


    Meh. After the quiz has been entered, require a validation step before allowing the quiz to be used - count(*) and group will give you the number of correct answers for every question.
  • KattMan 2008-01-07 16:54
    Franz Kafka:

    Meh. After the quiz has been entered, require a validation step before allowing the quiz to be used - count(*) and group will give you the number of correct answers for every question.


    No cookie for you.
    Why allow bad data in when you can know it is bad as it is entered? This is part of the point of the question I believe. It recognizes that there may be other ways, and asks about the problems in each of them.
  • Phleabo 2008-01-07 17:03
    SomeCoder:
    BradC:
    SomeCoder:
    So is the position for an architect or a developer? The story says ".NET developer". Therefore, this question is absolutely the real WTF.

    If you want to test SQL skills, put a schema in front of the candidate and have them write some SQL that pulls out some specific information you require. Make it so they have to join tables together, etc. Maybe even make them write some queries that create the schema using only code if you want.

    Asking a .NET developer to design a system is not a test of SQL skills.

    Mary's answer was still a WTF but the question was pretty bad.

    Unless the position explicitly calls for "average-to-strong SQL experience", which it sounds like it did. Sounds reasonable to me.


    I wouldn't assume that "average to strong SQL experience" for a .NET developer means that you'll be designing schemas, stored procedures, etc. If that's what they truly want, then they want a DBA. Or a VERY highly paid .NET who happens to also have DBA skills.



    That's not DBA level questioning. If you can't even rough out a schema, even in a single table, to handle a scenario like that, you don't know crap about SQL or databases.

    She could have gotten away with saying "I'd have a table with a field for the request user's name, and a field for every level of required approval." Just show that she knows there's such a thing as a table and that it has fields in it to store data. She couldn't even stumble through that.
  • Maciej 2008-01-07 17:05
    FredSaw:
    DOA:
    TBL1: Index,Question - All fields req.
    TBL2: Index,Answer,AssociatedQ(IndexfromTBL1), RightWrongFlag All fields req.
    Allows for more than one right answer.


    Put a unique index on TBL2.AssociatedQ WHERE rightWrongFlag = true
  • zoips 2008-01-07 17:07
    vt_mruhlin:
    Alex:
    Don't forget to submit your own interview story, from either side of the table.


    If Microsoft ever bothers to respond to all the resumes I've sent them, I might get a few stories to submit. I don't get it... the job I'm applied for is practiacally the exact same thing as my last job, so my resume should at least merit a phone screening.

    I think I pissed off one of their recruiters when I was in college. They're not the vengeful sort of company that blacklists people for trivial stuff from years ago, are they?


    I couldn't get them to notice me even if I'd showed up on campus with a bomb. I finally get in as a contractor, I'm here a month and they want me as an FTE. Go figure.
  • Franz Kafka 2008-01-07 17:15
    KattMan:
    Franz Kafka:

    Meh. After the quiz has been entered, require a validation step before allowing the quiz to be used - count(*) and group will give you the number of correct answers for every question.


    No cookie for you.
    Why allow bad data in when you can know it is bad as it is entered? This is part of the point of the question I believe. It recognizes that there may be other ways, and asks about the problems in each of them.


    Because you can't enforce those rules and also allow people to move things around while building a quiz. Better to allow for this by introducing the concept of a quiz being PENDING, then VALIDATED and only exposing the VALIDATED quizes to students.
  • Gilhad 2008-01-07 17:15
    FredSaw:
    What kind of code are you writing, that doesn't access a database? Games, or something?

    Maybe a packet sniffing for VOIP, or rezident calculators, or compilers, interpreters, text manipulating programs, device drivers, defrags, music players, keyloggers just to name some of what I personally did.

    There is ofcourse much more such programs ... movie players, web browsers, firewalls ... too much to name it all.

    But for someone, who knows only database the whole world looks like one big table ;-)
  • Gilhad 2008-01-07 17:16
    FredSaw:
    What kind of code are you writing, that doesn't access a database? Games, or something?

    Maybe a packet sniffing for VOIP, or rezident calculators, or compilers, interpreters, text manipulating programs, device drivers, defrags, music players, keyloggers just to name some of what I personally did.

    There is ofcourse much more such programs ... movie players, web browsers, firewalls ... too much to name it all.

    But for someone, who knows only database the whole world looks like one big table ;-)
  • Franz Kafka 2008-01-07 17:21
    zoips:

    I couldn't get them to notice me even if I'd showed up on campus with a bomb. I finally get in as a contractor, I'm here a month and they want me as an FTE. Go figure.


    Did you actually show up on campus with a bomb? If you walk around with it, they'll just think you already work there.
  • Adrian 2008-01-07 17:27
    Gedoon:
    Five years from now she'll be the consultant who writes ten lines of crappy VB code and charges one gazillion $$$ for making your companys old system "enterprisy" and your boss will thank her for that.


    Makes you wonder whether we're not in the wrong line of work,
  • FredSaw 2008-01-07 17:29
    Gilhad:
    But for someone, who knows only database the whole world looks like one big table ;-)
    All the world's a table,
    And all the men and women merely columns:
    They have their deletes and their inserts;
    And one man in his time selects many out-parameters.
  • Jason Martin 2008-01-07 17:32
    It doesn't require that there is only 1 right answer and multiple wrong answers, nor does it require (excepting some deferred two-way constraints) that a given question have any answer at all, right or wrong.
  • Kyar 2008-01-07 17:52
    snoofle:
    Aside: on interviews, sometimes a nervous (but competant) person might blank out on an otherwise reasonably simple question, if it catches them off guard. Honestly, when was the last time someone came up to you at work and said "design xxx and give me a working model in the next 2 minutes"?


    Twenty minutes ago.
  • BradC 2008-01-07 17:59
    BitTwiddler:
    Imagine that a professor needs to store a set of multiple-choice test questions, with a suite of answers for each question, exactly one of which is right.
    Good question, and some good discussion here already. My initial idea was:

    T1: QuestionID, Question, CorrectAnswerID
    T2: AnswerID, Order, Answer, QuestionID

    A more traditional one-to-many table relationship, with the correct answerID stored in the question table. I actually like the structure because it lets you put "order" in there easily (you do want "None of the above" to appear LAST in the answer list, don't you?).

    Problems include: I can't put a foreign key constraint on CorrectAnswerID, because the question record will most likely be created before the answer records. Also, how do we ensure the CorrectAnswerID doesn't point to an answer that actually belongs to a different question?

    Instead of an AnswerID in the Question table, you could put an "OrderOfCorrectAnswerID", defaulted to 1, so that the first answer entered is defaulted as the correct one, until the creator of the test changes it.

    Probably still not ideal, but at least as good as storing the correct and incorrect answers in different tables, which would then require trickier application logic to retrieve all answers, and randomize the display order.
  • Buffled 2008-01-07 18:05
    BitTwiddler:
    Mary:
    TBL1: Index,Question,CorrectAnswer - All fields req.
    TBL2: Index,IncorrectAnswer,AssociatedQ(IndexfromTBL1) All fields req.

    Professor ensures correct answer is correct, any incorrect answers associated to question are incorrect (only a human could do this). App logic only allows test to be created from questions that have at least 3 incorrect answers available to choose from.




    Hm. option two I think will work, and is a little bit less painful:

    Table1: Questions, PK id
    Table2: CorrectAnswers, PK qid(questions.id), answerid(answers.questionid,answers.id)
    Table3: Answers, PK questionid(questions.qid), answerid, seq

    Or maybe that's a little bit MORE painful...
  • Earl Purple 2008-01-07 18:14
    elias:
    Does that actually get you out? bApprove is a constant, set to false...


    The only way to break out of that loop is to for RequestTimeOff to throw an exception (assuming it is not a macro with a break or even worse a goto in it. Note that a macro with a const_cast in it might seg-fault as you can't const_cast away for a variable that was declared as const, only one with a const modifier).

    Note also that we don't know the type of supervisor but it might be a class with operator[] overloaded, and which can take any value.
  • ChiefCrazyTalk 2008-01-07 18:29
    zoips:
    vt_mruhlin:
    Alex:
    Don't forget to submit your own interview story, from either side of the table.


    If Microsoft ever bothers to respond to all the resumes I've sent them, I might get a few stories to submit. I don't get it... the job I'm applied for is practiacally the exact same thing as my last job, so my resume should at least merit a phone screening.

    I think I pissed off one of their recruiters when I was in college. They're not the vengeful sort of company that blacklists people for trivial stuff from years ago, are they?


    I couldn't get them to notice me even if I'd showed up on campus with a bomb. I finally get in as a contractor, I'm here a month and they want me as an FTE. Go figure.


    That's not a bad way to go. I'm a Micosoft PM, coming in as a vendor. ("V-Trash")

  • SomeGuy 2008-01-07 18:45
    BitTwiddler:
    DOA:

    I'm not exactly a DBA so out of curiosity, how would the following compare with the above?

    TBL1: Index,Question - All fields req.
    TBL2: Index,Answer,AssociatedQ(IndexfromTBL1), RightWrongFlag All fields req.


    The problem is that there's no standard DB-centric way to prevent two or more flags from being set to "right" at the same time.

    Yes, you could do it with triggers or stored procedures, but those are hardly standard (the concept is, but not the implementation) and they aren't really part of the data model per se anyway.


    The thing is, most of the time you aren't designing a database that will work on every RDBMS. You are designing a database for whatever the standard is at the company you happen to work for.

    Where I work now it is MSSQL 2005, and you can use the two table layout above, create a Scalar UDF that takes the keys as parameters and checks the constraint criteria (Not more than one Y for this question, at least one Y before an N, etc) and returns a 1 or a 0. Then you can use that UDF in your check constraint on the flag field. It works fine.

    So you work with the tools that are at your disposal. That answer may not work at your place of business given the software that you use, but that doesn't make it the wrong answer.
  • Jay H 2008-01-07 20:01
    My initial thoughts to define the database schema:

    Table
    USER
    Columns
    User ID: Employee unique sequence ID (primary key)
    Manager User ID: Employee's manager user ID, recursive reference to USER table.
    Other user meta data columns

    Table
    REQUEST
    Columns
    Request ID: 'Request' unique sequence ID (primary key)
    User ID: User ID of the originator of the request. Problem statement suggests time-off, but this is applicable to any form that requires authorization.
    Other request meta data columns

    Table (Join)
    REQUEST2USER
    Columns
    Request ID: foreign key to REQUEST table
    User ID: foreign key to USER table (where the Request ID and User ID make up the primary key).
    Approved Flag: true/false
  • Quinnum 2008-01-07 20:10
    FredSaw:
    nobody:
    Ugh! I studied CS because I find things like games, 3d graphics, artificial intelligence, compilers, and operating systems interesting. It totally sucks that, after I graduated, I am just now finding out that 99% of software development jobs is just an enterprisy - "collect data, filter it, organize it, display it" business. I should have just stayed at uni.
    LOL! You make it sound like you were interested in hotrods, so you became an auto mechanic, only to discover that you would always have grime under your fingernails.


    No, I think he's meaning more like he's interested in hotrods and became a mechanic, only to find that 99% of the work is on bog-standard family cars.

    I totally understand where he is coming from. Seriously, I am sick of writing "just another database frontend" after 10 years "professional". At least the 10 years before that I was having fun cracking games, mucking about with OS designs and writing hardware level stuff in assembler at home.

    Time for a change, but something like that is a major mental gear-shift now. I really need to start dabbling again in the fun stuff, but after a hard day's work, I'm more inclined to just crash on the couch when I get home rather than do even more programming.

    Note to kids: Don't make your hobby your job, unless you at least have another hobby to fall back on ;)
  • FredSaw 2008-01-07 20:27
    Quinnum:
    Time for a change, but something like that is a major mental gear-shift now. I really need to start dabbling again in the fun stuff, but after a hard day's work, I'm more inclined to just crash on the couch when I get home rather than do even more programming.

    Note to kids: Don't make your hobby your job, unless you at least have another hobby to fall back on ;)
    Dude, take your own advice! There's plenty of fun stuff to do AFK. I do woodworking as a hobby. I also play drums, and I've recently started taking lessons for Native American flute. If my only choices were computer or TV, I'd be on Prozac.
  • haha 2008-01-07 21:19
    based on the title i thought it was talking about the democrats
  • ChZEROHag 2008-01-07 21:24
    The preview messed up my quoting. Will it stay like that? Probably. This forum software sucks.

    [quote user="Chemisor"]You mean "existing, godawfully bloated, poorly designed, and hard to use with C++" implementations? I agree that MySQL certainly has a place, but not for everything.[/quote]

    Wikipedia, that fantastically accurate arbiter of knowledge, lists no less than 116 databases which aren't MySQL. Of these you can be pretty sure some are lean, some are clean and some have good C++ implementations, should you actually want that.

    [quote user="Chemisor"]A typical desktop application does not need all those fancy features a database provides, making them little more than bloat and inconvenience. For example, a typical desktop application will have the following differences:

    1. Single user access. Nobody messes with your data but you, and nobody connects to it while you are working on it. This makes concurrency control unnecessary,[/quote]

    Never will more than one piece of software be used be somebody to access the same data at the same time. Why would anybody want to do that?

    [quote user="Chemisor"]scalability pointless,[/quote]

    My music database, small by many standards, consists of 6000 entries. My girlfriend's is just 200. A magnitude of 30 times is just irrelevant.

    [quote user="Chemisor"]and transaction control useless.[/quote]

    Bang! Goes the electricity. Goodbye! goes your crappy media player's un-transactioned internal database.

    [quote user="Chemisor"]2. Small data set. Regular people are not Fortune 500 companies and don't have terabytes of data. Most data sets are a few megabytes in size, if that. This means that all those painstaking query optimizations will not help much.[/query]

    Using find to locate a file on the filesystem takes an extraordinary amount of time I do not wish to calculate. Using the optimized locate command all of 0.4 seconds.

    (OK an index isn't strictly a query optimisation. Sue me.)

    [quote user="Chemisor"]3. Offline. Most people don't have broadband at home. If your database server is inaccessible, the app is unusable, which is very very bad. A git-like full clone solution is a far better choice for distributed data sets in this scenario.[/quote]

    I'm having to guess what this means, and I am assuming you are suggesting that a user cannot use his database-driven application when he is offline.

    Of the 117 databases mentioned earlier, some don't even *provide* communicate over some kind of socket.

    [quote user="Chemisor"]4. Run their own backups. When I want to back up a file, I want to back up a file, not a goddamn directory in some cryptically named location. I might even want to attach it to an email. Remember, small data sets![/quote]

    To pick a random example:

    [quote]An SQLite database is a single ordinary disk file that can be located anywhere in the directory hierarchy. ... Database files can easily be copied onto a USB memory stick or emailed for sharing.[/quote]

    [quote user="Chemisor"]5.Don't have a DBA degree. And consequently not willing to spend time on weird administration tasks that require connecting to a shell-like SQL interface.[/quote]

    To quote from the same source again, because it conveys exactly what I want to say and I can't be arsed to find anything else:

    [quote]There is no need for an administrator to create a new database instance or assign access permissions to users. ... No actions are required to recover after a system crash or power failure. There is nothing to troubleshoot.[/quote]

    [quote user="Chemisor"](Or at least that's what all the tutorials I've read do. What's with the goddamn text, people? This isn't 1976; we have GUIs these days! Or are you too cheap to make one?)[/quote]

    I can't even respond to this for the sheer amount of bile present at the thought of a GUI without a terminal emulator. I'll leave it to calmer folk.

    [quote user="Chemisor"]6. Goddamned text. Text-mode operations require parsers to convert to and from text data. Parsers are hard to write correctly.[/quote]

    Well I communicate in English, frequently using the written word, not Egyptian hieroglyphs.

    In fact I'm having a hard time seeing what the problem is here. Do you really suppose that in every case you have to write your own parser from scratch?

    [quote user="Chemisor"]IMHO, MySQL is simply not a good idea in this situation. It's the wrong tool for this job.[/quote]

    I would submit that MySQL is simply not a good idea.

    [quote user="Chemisor"]True, but they don't provide any benefits over the simple dump-my-data-and-index solution. They are actually worse, since they have C interfaces, which will defile your pure C++ design. There is NO excuse for using plain C interfaces these days. Good design requires structure, and C can't provide any.[/quote]

    C provides as much structure for your code a brick does for a house - that is to say: none.

    I wouldn't like to live in a house without any bricks though.

    [quote user="Chemisor"][quote user="AdT"]
    Bogus reason #2: When using embedded Firebird, for example, you can put the entire database in one file.
    [/quote]
    It's not a bogus reason if I haven't heard of some obscure package that allows one-file operation. Most other programmers will not have heard of it either.[/quote]

    I have, and I don't use it, I don't want to use it, and I don't write code for a living.

    Also we have this wonderful intarweb tool to help us research issues and acquire new knowledge.

    [quote user="Chemisor"]In a single user scenario you don't need a filesystem. You just write your data as you have it in memory, in an vector or something, into a file. Writing serialization routines is not that hard. If you care about memory usage, you might implement a sliding window backend, which isn't very hard either, but in most cases you don't need one.[/quote]

    You keep your filesystem-less Altair, but for the rest of us I think filesystems are a pretty nifty feature of a modern personal single-user desktop computer.

    [quote user="Chemisor"]Once again, I am not disputing the need for MySQL in a huge company with terabytes of data. There you have concurrency issues, scalability issues, security problems, query performance, and all that. However, for an end-user application this is all unnecessary.[/quote]

    I find it interesting that you say MySQL is unnecessary to counter AdT's suggestion that Firebird is a sane choice.
  • vt_mruhlin 2008-01-07 22:30
    zoips:
    vt_mruhlin:
    Alex:
    Don't forget to submit your own interview story, from either side of the table.


    If Microsoft ever bothers to respond to all the resumes I've sent them, I might get a few stories to submit. I don't get it... the job I'm applied for is practiacally the exact same thing as my last job, so my resume should at least merit a phone screening.

    I think I pissed off one of their recruiters when I was in college. They're not the vengeful sort of company that blacklists people for trivial stuff from years ago, are they?


    I couldn't get them to notice me even if I'd showed up on campus with a bomb. I finally get in as a contractor, I'm here a month and they want me as an FTE. Go figure.


    Maybe if my name was <a href="http://forums.thedailywtf.com/forums/thread/141579.aspx">Hoop</a>...

    I'm not going to quit my (admittedly crappy) well paying full time job and move across the country for a contract position.
  • kidpollo 2008-01-08 00:17
    I prefer making short trick questions because If aI make an elaborate one I am sometimes biased on the way applicant should answer
  • Kuba 2008-01-08 00:29
    Chemisor:
    AdT:

    Let me guess... the reason that they never get finished is that people are trying to reinvent a DBMS so they don't have to use any of the existing, well-tested implementations?


    You mean "existing, godawfully bloated, poorly designed, and hard to use with C++" implementations? I agree that MySQL certainly has a place, but not for everything. A typical desktop application does not need all those fancy features a database provides, making them little more than bloat and inconvenience. For example, a typical desktop application will have the following differences:

    1. Single user access. Nobody messes with your data but you, and nobody connects to it while you are working on it. This makes concurrency control unnecessary, scalability pointless, and transaction control useless.


    Concurrency can exist within an application, even if just one user is present. In fact, if the application can or should do background tasks, you will depend on concurrency all the time. Databases will give you guarantees as to data coherency etc. If you don't use them, it's roll-your-own.


    2. Small data set. Regular people are not Fortune 500 companies and don't have terabytes of data. Most data sets are a few megabytes in size, if that. This means that all those painstaking query optimizations will not help much.


    A single digital picture these days is about a megabyte in size. I've got thousands of them - my wife's doing, actually. With our home video collection, that's few tens of gigs of data easy. I know. It doesn't fit on two DL DVDs anymore. My email folders (raw text) are about 2 gigs now. I wish they were stored as a database (or a few) - as it is, if the indices "go bad", it takes ages to regenerate, and most email apps are pretty unresponsive when indices are being generated, or when large operations on email are being done.


    3. Offline. Most people don't have broadband at home. If your database server is inaccessible, the app is unusable, which is very very bad. A git-like full clone solution is a far better choice for distributed data sets in this scenario.


    Using a database doesn't imply a remote server.


    4. Run their own backups. When I want to back up a file, I want to back up a file, not a goddamn directory in some cryptically named location. I might even want to attach it to an email. Remember, small data sets!


    There are tens of thousands of foobarbaz.sqlite.bz2 files transferred everyday by every single Fedora Core 8 system (and possibly others). They are a few hundred kilobytes in size, and contain a big heap of data about software repository contents.


    5.Don't have a DBA degree. And consequently not willing to spend time on weird administration tasks that require connecting to a shell-like SQL interface. (Or at least that's what all the tutorials I've read do. What's with the goddamn text, people? This isn't 1976; we have GUIs these days! Or are you too cheap to make one?)


    If you're deploying an application for an end-user, it's your job to make sure it doesn't require a DBA degree. If you do your homework, it won't.


    6. Goddamned text. Text-mode operations require parsers to convert to and from text data. Parsers are hard to write correctly.


    Text where? I don't know what databases have to do with text. You can store text in them, but not necessarily. SQL is machine-generable, at runtime, and the parser is in the database, so that you don't have to write one.



    Chemisor:
    I want to make software for regular people, to use on their personal computers, and regular people don't have a database server running.

    Bogus reason #1: Embeddable DBMSes like Berkely or Firebird do not require a database server.


    True, but they don't provide any benefits over the simple dump-my-data-and-index solution. They are actually worse, since they have C interfaces, which will defile your pure C++ design. There is NO excuse for using plain C interfaces these days. Good design requires structure, and C can't provide any.


    The "C" interface to SQLite is very reasonable, and it's trivial to add C++ glue on top of it if you are so intent on doing it. Maybe if you were to reuse that code across projects it'd make sense.

    Chemisor:

    and would have trouble understanding why data has to be stored in some central location and in a whole directory instead of a single file. Frankly, I have trouble understanding that myself.


    Using a database doesn't imply all the bogus things you think it implies. The "central locaiton" and "a whole directory" are completely bogus. Even "server-style" databases can be configured to store data in a single, given directory.




    Bogus reason #2: When using embedded Firebird, for example, you can put the entire database in one file.

    It's not a bogus reason if I haven't heard of some obscure package that allows one-file operation. Most other programmers will not have heard of it either.


    I'm sorry to say that, but you seem pretty clueless in that department... I feel sorry for "other programmers" who haven't heard of embedded databases, but their application might otherwise call for one...

    Chemisor:

    In a single user scenario you don't need a filesystem. You just write your data as you have it in memory, in an vector or something, into a file. Writing serialization routines is not that hard. If you care about memory usage, you might implement a sliding window backend, which isn't very hard either, but in most cases you don't need one.


    The problem is that you are gonna be implementing all that: vector or something, serialization, parallel access (multiple threads, etc) who knows what else. Is indexing stuff yourself really all that much fun? Is having an exportable, mostly self-documenting file format really all that bad? If you have say an SQLite database, all you have to document is your data scheme. If it's simple, you may even skip that. If it's roll-your-own, you have to document it at the bit level. I also wish you luck with your application crashing or computer loosing power/rebooting at the wrong moment. Even a low-key database like SQLite will be robust enough in such circumstances. When you roll-your-own, I can almost guarantee you're not gonna be conservative with your data loss.

    You seem like rambling with wrong preconceptios and lack of will to understand the technology you're rambling about.

    Even Prevayler, which is probably what you'd like, is way more than some homegrown "serialize this or that" system. It implements database functionality (transactions, replicas, crash-worthiness) but lets you use your favourite data structures. Porting Prevayler to C++ would require some source code pre-processing like done in Qt's MOC system.

    Cheers, Kuba
  • nobody 2008-01-08 00:38
    Quinnum:

    No, I think he's meaning more like he's interested in hotrods and became a mechanic, only to find that 99% of the work is on bog-standard family cars.

    I totally understand where he is coming from. Seriously, I am sick of writing "just another database frontend" after 10 years "professional". At least the 10 years before that I was having fun cracking games, mucking about with OS designs and writing hardware level stuff in assembler at home.

    Time for a change, but something like that is a major mental gear-shift now. I really need to start dabbling again in the fun stuff, but after a hard day's work, I'm more inclined to just crash on the couch when I get home rather than do even more programming.

    Note to kids: Don't make your hobby your job, unless you at least have another hobby to fall back on ;)


    You hit the nail on the head! I did make the mistake of turning my hobby into a career - and didn't realize it because the stuff I did in university was fun (well, until the work piled on and I had to pull all-nighters to get it finished), and I used my summer vacations to explore what I learned making some really cool apps. Now, I use less than half of what I learned, and only the boring bits at that.

    Time for a new hobby, and perhaps a visit to the career counselor. ;)

  • Kuba 2008-01-08 00:45
    Chemisor:


    Kuba:

    Yeah, because computers never crash, and you never ever have to Undo anything.


    Most user applications don't support undo over a restart.


    Because implementing it without something more functional than "serialize and dump" may be a bit harder than necessary.


    I don't see that as a limitation. And as for handling crashes, the most common way is to write out a temp file and then move it over the original. Regular people don't have terabytes of data and this temporary waste of space is not an issue.


    Ok, let's say it's a simple medical application: a few screen forms with patient data, and some test results which are collected and saved. This is for a small medical practice, and data is not shared. Say a few tens of megabytes worth of data, usually. What you're proposing is that on each screen if the data is changed, the whole file has to be rewritten. That's fairly ridiculous. Unless you strive to code it well, it will always give noticeable slowdown when you go between screens.


    Kuba:

    1. Don't reinvent the wheel.
    2. Don't reinvent the wheel.
    3. Um, don't reinvent the wheel?

    Somebody has spent tons of time debugging the database. At the time I abandoned the plain-text file, the parser still had known bugs which had no easy workarounds (luckily they didn't affect any users).

    1. Don't use goddamn text formats.
    2. Don't use goddamn text formats.


    I don't know why you insist on rambling about text formats. What the heck do the have to do with our discussion?! Databases are pretty binary-oriented and if you look at say sqlite file, there will be about as much text as you put there yourself as data. If there won't be any text data stored there, you won't see any text, nor will you have to deal with any.


    3. Sometimes you need to reinvent the wheel because you are making a bicycle instead of a race car.


    I'm not saying databases are a cure-all. I'm merely saying that many applications where stubborn developers try to abstain from using databases, would benefit, if used properly. You seem to be such an example.


    Kuba:

    How's that different from managing an address book, a list of software packages, or a list of files in software packages?


    The data set is small, so you don't need fancy features. Yes, of course you can use SQLite, but you can also use a sledgehammer to drive in nails.


    The whole "small datasets" stance applies to what real-life application, again? Because most people I know have unmanageably-sized email stores, picture stores, etc. Even some people's contact lists take a few megabytes on their own. And for those who always attach pictures to their contact lists, the latter soon become pretty unmanageable. An embedded database would allow to nicely store images as BLOBs (raw data) together with everything else, without having to worry much.


    Kuba:

    "Consumers" routinely use software like photo editing and media managment/editing in general, even computation (students!). Just two examples in non-business setting. Go to local computer store (that's not BestBuy to you) and see what software is on the shelves. Games are <50%.


    Yes, do go. And then count the ones that are actually new.


    What has new got to do with our discussion?!


    And where is my Norton Utilities?


    With fading away of dos-based systems, I found that I never really had a use for it. I used it daily in DOS era for sure. The need for it died away soon thereafter.


    Or a decent defragmenter that can compact that FAT32 partition I have to keep to share files with Linux?


    Just use NTFS.


    Or a word processor where I can permanently get rid of that stupid WYSIWYG lets-show-the-user-a-page-like-paper look?


    Um, even Word has outline view. But seriously: your Google skills are lacking. Ever heard of LyX? You should have.


    Or a music player that doesn't try to look like a physical stereo, faking perfectly good system controls with pseudo-knobs and buttons?


    I don't think xmms or MS media player looks like a physical stereo.

    Cheers, Kuba
  • phaedrus 2008-01-08 00:53
    Chemisor:

    Kuba:

    1. Don't reinvent the wheel.
    2. Don't reinvent the wheel.
    3. Um, don't reinvent the wheel?

    Somebody has spent tons of time debugging the database. At the time I abandoned the plain-text file, the parser still had known bugs which had no easy workarounds (luckily they didn't affect any users).

    1. Don't use goddamn text formats.
    2. Don't use goddamn text formats.
    3. Sometimes you need to reinvent the wheel because you are making a bicycle instead of a race car.


    1. Use text formats.
    2. Use text formats.
    3. If you are dealing with enough data to need more than a text format can handle, use a DB, embedded or server depending on the app.

    Really. lex and yacc (try flex and bison on Linux) have been around and stable for over 30 years. It's blindingly easy to write parsers for a custom text format. Writing one by hand is stupid and bug prone. They even have C++ interfaces.

    Using a custom binary format will make your fellow Linux users hate you--since you've just made it a pain to attack your file with my command line tools.

    Yes, that's right, I said command line tools. Tons of people still use them. Particularly on Linux, since it has an amazing set called 'GNU'--you might have heard about it. Look into them, you might learn something about using a Real Computer.

    If the text format is too cumbersome (too much data, performance), then the right thing to do is go with a database, for the aforementioned bug count and concurrency advantages.
  • knightofni 2008-01-08 02:26
    scruffy:
    We will need a factory?

    No, I think you'll find that we demand a shrubbery!


    Now _that_ made me laugh out loud
  • mark 2008-01-08 02:50
    Tammy:
    So exactly how would any of you have answered this question?


    I would sketch out a paper form with signature lines for each of the layers of authority.

    It would be more usable and flexible than a computer solution.
  • ludus 2008-01-08 04:29
    mark:
    Tammy:
    So exactly how would any of you have answered this question?


    I would sketch out a paper form with signature lines for each of the layers of authority.

    It would be more usable and flexible than a computer solution.

    Unless the layers of authority are divided by geography as well. Say, US vs India vs Great Britain? Shuffling said paper around feels a bit hazardous not to mention time consuming. AND prone to disappearing.
  • Hans 2008-01-08 04:50
    rd:

    const bool bFlag = false;
    const bool bApprove = bFlag;
    int index = 0;

    while(!bApprove){
    RequestTimeOff(supervisor[index++]);
    }


    That's a lot like the algorithm my boss uses:

    bool MayHaveDayOff (Employee &emp)
    {
    return false;
    }

    I still think it is broken in some ways...

  • Grovesy 2008-01-08 04:52
    ChiefCrazyTalk:
    zoips:
    vt_mruhlin:
    Alex:
    Don't forget to submit your own interview story, from either side of the table.


    If Microsoft ever bothers to respond to all the resumes I've sent them, I might get a few stories to submit. I don't get it... the job I'm applied for is practiacally the exact same thing as my last job, so my resume should at least merit a phone screening.

    I think I pissed off one of their recruiters when I was in college. They're not the vengeful sort of company that blacklists people for trivial stuff from years ago, are they?


    I couldn't get them to notice me even if I'd showed up on campus with a bomb. I finally get in as a contractor, I'm here a month and they want me as an FTE. Go figure.


    That's not a bad way to go. I'm a Micosoft PM, coming in as a vendor. ("V-Trash")



    Managed all three, vtash, itrash, FTE-wait-the-shares-are-worthles-sucker, and finaly back to itrash (but happy)
  • MT 2008-01-08 04:57
    The real world solution would be to give the "incredibly bad programmers" an application level interface for accessing the database. This should make implementing the requirements and any future changes pretty trivial. Don't give them direct access to anything.
  • jmroth 2008-01-08 06:13
    I'd just use up my phone joker and call Paula ^^
  • The Knight Of "Ni!" 2008-01-08 07:12
    knightofni:
    scruffy:
    We will need a factory?

    No, I think you'll find that we demand a shrubbery!

    Now _that_ made me laugh out loud

    Then, when you have found the shrubbery, you must cut down the
    mightiest tree in the forest... Wiiiiiithh.... A HERRING!
  • AnonymousFan 2008-01-08 07:13
    Dion:
    Wow, I applaud the interviewers tolerance for such stupidity. I have to say that I would have totally ripped her for giving such a dumb answer. She probably would have switched professions.


    Well, there's no harm in being polite.

    Especially not even when there's fun to be had at another person's expense.

    Why? -Because it's exactly the sort of fun that a certain type of person enjoys the most..

    Are you one of those.. ?


  • Riho 2008-01-08 07:29
    I don't know which one would be worse person to hire - Clueless Candidate or Chemisor. Somebody who has never learned anything or somebody who has learned only one thing...

    I wrote my own textfile databases last time in DOS times. They managed their job, but changing the dataformat was total pain in.... With databases (I use embedded Firebird) you just run couple of update queries and that's it. And they are much faster and easier to handle. If using Delphi then there are wrapper components for database connectivity. You can have small application up and running in 30 min. And end-users don't have clue what you are using - there is absolutely no database administration.
  • John 2008-01-08 07:49
    I interviewed someone who had J2EE Expert on their resume, so when I got the the techinical questions I asked:
    Me: Can you tell be what type of EJBs there are?
    J2EE Expert: Err... Hmm... Um... Session!
    At last I thought...
    Me: Any others?
    J2EE Expert: Hmm... Erm...
    A couple of minutes pass!
    Me: I'll give you a clue. Entity!
    J2EE Expert: Yeah that's right.

    I mean really, if you put J2EE expert on your resume, then you should be able to rattle on about stateful session beans, stateless ones, entity beans, message beans, message driven beans, container managed persistence, bean managed persistence, deployment descriptors, and entity relational mapping for hours right?

    Maybe I should apply for a high paying job like Aerospace Engineer and just bluff my way through the interview. If I get the job and some of the rockets blow up, no one will notice as that sort of thing happens all the time (although they might catch on after five critical mission failures in a row).
  • Biff 2008-01-08 08:16
    John:

    I mean really, if you put J2EE expert on your resume, then you should be able to rattle on about stateful session beans, stateless ones, entity beans, message beans, message driven beans, container managed persistence, bean managed persistence, deployment descriptors, and entity relational mapping for hours right?


    Well, yes up to a point. But are you confusing Java EE with EJB? Currently I'm writing an application that uses (Acronym flood alert) JMS, JTA, JAAS, JSP, JDBC and RMI amongst other things, but not EJB.

    All these are J2EE aspects so my CV says 6 years of experience with J2EE. Do you think I'm misrepresenting myself?
  • billswift 2008-01-08 08:51
    mark:
    Tammy:
    So exactly how would any of you have answered this question?


    I would sketch out a paper form with signature lines for each of the layers of authority.

    It would be more usable and flexible than a computer solution.

    Unless the layers of authority are divided by geography as well. Say, US vs India vs Great Britain? Shuffling said paper around feels a bit hazardous not to mention time consuming. AND prone to disappearing.

    In the company I work for it also forces promptness; supposedly the manager cannot finalize the new schedule until he has dealt with (approved or disapproved) a pending request.
  • fbjon 2008-01-08 09:29
    rd:
    So you're saying that an effective chain of command employee time off approval system couldn't be designed with a variable, a constant and a flag? The HR department where I work implemented something in C++ very similar to what Mary suggested.

    const bool bFlag = false;
    const bool bApprove = bFlag;
    int index = 0;

    while(!bApprove){
    RequestTimeOff(supervisor[index++]);
    }

    My thoughts exactly. She could very well have had a design in mind, but simply communicated badly.
  • tadghostal 2008-01-08 09:36
    Cheatah:
    "You mean that you wouldn't use a variable, a constant or a flag? Then what would you use?"

    Well, maybe a MaryBean.


    Best comment ever!
  • tadghostal 2008-01-08 09:39
    Spell Checker:
    brazzy:
    Can you say "beaurocractic monstrosity"?

    No, I can't. Only "bureaucratic monstrosity".


    I can say BuMo. Does that count? Did I ween?
  • tadghostal 2008-01-08 09:44
    This is why we need technical interviews. Sure, that's an obvious statement for most of you, but where I work, our IT Department head is someone whose IT career consists of a single VB6 application (actually, only a partial one).

    Having an ego the size of [insert large item here], he's insisted on doing all the hiring of IT staff himself, and as the sole interviewer.
  • JB 2008-01-08 09:57

    T1: QuestionID, Question, CorrectAnswerID
    T2: AnswerID, Order, Answer, QuestionID


    Your solution is the best one, IMHO.

    For your first problem (can't put a foreign key constraint on CorrectAnswerID), just use a constraint that is enforced at commit time rather than insert time, and insert the question and right answer in the same transaction.
  • Incen 2008-01-08 10:23
    BitTwiddler:
    Imagine that a professor needs to store a set of multiple-choice test questions, with a suite of answers for each question, exactly one of which is right. However, the programmers building this app are incredibly bad, so you want to protect the database as much as possible from bad data (two 'right' answers, no 'right' answers, answers without questions, etc), by using indices, RI, etc. Note that students' answers need not be stored; only the questions and set of potential answers.

    Propose a set of tables/indices/RI to store this data. Are there any 'holes' in your solution?

    Initial answer:
    table "question": id(auto, pk), text(uniq, req), rightanswer(fk answer.id, uniq)
    table "answer": id(auto, pk), question(fk question.id, req), text(uniq, req)

    The id columns are, of course, not strictly required, but convenient.
    The two-way referential integrity requires an ALTER TABLE to establish.
    I'm assuming a (unique foreign) key column can be null, because I seem to recall it can.
    The hole is that this design allows for questions with no right answers (or alternatively answers with no questions). To require them, you would need a capability to verify RI only at the end of a transaction, and I don't really know how well that's supported.


    Fixed answer:
    table "question": id(auto, pk), text(uniq, req), rightanswertext(req)
    table "wronganswer": question(fk question.id, req), text(req)
    constr uniq(wronganswer.question, wronganswer.text)

    This solution conveniently avoids the two assumptions in the previous design.
    The hole here is that this design allows for identical wrong and right answers for the same question. This would be simple enough to fix with a constraint query, but then, that's a bit of a cop-out considering the RI spirit of the question. I might look into the RDBMS manual for any possible mention of shared indices.
  • Incen 2008-01-08 10:25
    Incen:

    constr uniq(wronganswer.question, wronganswer.text)

    That would be wronganswer.pk(question, text)
  • bob 2008-01-08 10:37
    <snip/>

    My music database, small by many standards, consists of 6000 entries. My girlfriend's is just 200. A magnitude of 30 times is just irrelevant.
    <snip/>

    My maths is a touch rusty, but isn't the difference between 6000 and 200 just 1 order of magnitude?
  • JB 2008-01-08 11:10
    What I don't like at all with the "Fixed Answer" is that if you need additional attributes on the questions (ex: order, background color, font, whatever), you need to have all these columns on both tables. This is ugly, and must certainly be against the rules of one of the normal forms (don't ask me which one, this is much too old for my brain to remember).
  • ChiefCrazyTalk 2008-01-08 12:07
    Grovesy:
    ChiefCrazyTalk:
    zoips:
    vt_mruhlin:
    Alex:
    Don't forget to submit your own interview story, from either side of the table.


    If Microsoft ever bothers to respond to all the resumes I've sent them, I might get a few stories to submit. I don't get it... the job I'm applied for is practiacally the exact same thing as my last job, so my resume should at least merit a phone screening.

    I think I pissed off one of their recruiters when I was in college. They're not the vengeful sort of company that blacklists people for trivial stuff from years ago, are they?


    I couldn't get them to notice me even if I'd showed up on campus with a bomb. I finally get in as a contractor, I'm here a month and they want me as an FTE. Go figure.


    That's not a bad way to go. I'm a Micosoft PM, coming in as a vendor. ("V-Trash")



    Managed all three, vtash, itrash, FTE-wait-the-shares-are-worthles-sucker, and finaly back to itrash (but happy)


    Huh? You went from Vendor, to intern, to FTE, to back to being an intern? Not the usual career progression...
  • Congo 2008-01-08 15:10
    1.477 to be exact
  • Andrew 2008-01-08 15:34
    I worked with a girl that once basically told an internal customer to kiss her axe. This of course broke up the meeting and led to about half a day of "OMG, did she say that" gossip. Early in the second half of the day, the customer said all will be forgiven if the offender would just appologize. Of course she didn't. They ended up terminating her that afternoon.

    Why did she not care about her job? She was about to be rich. You see, she had just opened an bank account and put a minimum balance of $1,000 in there. She had this contact over seas who need an US bank account so they could export their money before the evil foregin government seized it. As a result, the cussing co-worker would be given a 10% cut of $10,000,000. So why should she care?
  • baboo 2008-01-08 16:19
    The question wasn't "How would you implement a system to track employee leave requests through the approval process?" It was, "What underlying data structure would you use?"

    Assuming that the poster's statement that they were looking for someone with "SQL experience" really meant that they were looking for someone with the ability to reason intelligibly, Mary could have answered something like this:

    "OK, so the data you can depend on a leave request having that will completely define an individual leave request for one employee, are:

    1) a unique employee identifier
    2) the start of the leave period
    3) the duration of leave period.

    The other major part of a leave request is the approval chain. Here's a good way to frame this part of the problem - Every leave request has an ultimate "approval authority," which is defined by your company's internal organization and policies.

    Assuming a uniform, hierarchical organization, a really simple way to represent this would be to define a numerical value to the different levels of approval - section manager approval == 10, store manager == 20, regional manager == 30, etc.

    Based on the duration and start time of the leave period, you could algorithmically define a numerical required approval level for each leave request, which would be stored in a member variable (or column, or whatever) of the proposed data structure.

    A member variable would store the next approval level required. Another would be used to store the status of the request transaction (essentially, "It's being sent up," or "It's being kicked back") And another would be used to store a text message to go along with the request - for lower-level requesters, this would be populated with maybe something like, "Sally needs leave for toenail therapy," and then maybe at the next higher level, "Employee SLLY1443 needs this weird therapy, and I can cover for her absence by realigning people from one of my other sections - recommend approval." If it gets kicked back down, this might be populated with something like, "No, I need more info on the impact of the absence of this employee before I approve." etc.

    So, the data structure might look something like this:

    1) INT Employee ID
    2) DATETIME Leave start datetime
    3) DATETIME Leave duration
    4) INT Required approval level
    5) INT Current approval level
    6) INT Next level/Employee ID
    7) INT Array Previous levels/Employee IDs
    8) BOOLEAN Sent-up/Kicked-back Status
    9) TEXT Message

    ... I mean, I just pulled this out of my ass, based on a few assumptions, without being able to ask any questions.

    Mary/Paula's answer of "Uh... I think maybe a variable, a constant, and a flag?" was just retarded.
  • Iago 2008-01-08 17:27
    Chemisor:
    Andy:
    Chemisor:
    (snip)

    Or a decent defragmenter that can compact that FAT32 partition I have to keep to share files with Linux?

    (snip)


    There is a very good solution for that: http://www.fs-driver.org/


    According to the FAQ, that driver does not support access rights, which means that any application will be able to write anywhere in my Linux fs tree. That is unacceptable. I don't trust Windows applications and mostly just boot there to play games, fill in pdfs (as in tax forms), run uTorrent, and perform other sundry tasks that Linux doesn't do yet. Anything shared between the two must be isolated and totally non-critical.
    You don't want your problems solved, do you? You're complaining that FAT32 is not a good solution to your problem, but you reject every better solution out of hand.

    ntfs-3g is not complicated; you install it with your package manager and then it just works. You don't have to mess with FUSE yourself, all that happens behind the scenes. All you would do is click a few times and your life would become simpler.

    And it's hardly difficult to stop Windows applications being able to write anywhere in your Linux fs tree with the Ext2 IFS. All you have to do is, um, only mount a partition you want them to be able to write to. They can't mysteriously access partitions you haven't mounted, you know. So you would replace your current unsatisfactory FAT32 shared partition with a vastly more flexible Ext3 shared partition, and your life would become simpler.

    You're welcome to hang onto your FAT32 partition -- that's your choice, even if it is a stupid choice and the worst possible way to achieve your goal. But please don't tell lies about "having" to keep it. There are alternatives, you've been told about them, and you have rejected them for entirely arbitrary reasons. You don't "have" to keep a FAT32 partition -- you have chosen to keep a FAT32 partition.
  • ChZEROHag 2008-01-08 17:28
    bob:
    <snip/>

    My music database, small by many standards, consists of 6000 entries. My girlfriend's is just 200. A magnitude of 30 times is just irrelevant.
    <snip/>

    My maths is a touch rusty, but isn't the difference between 6000 and 200 just 1 order of magnitude?


    Magnitude is probably the wrong word. My collection is 30 times the size of hers.
  • AdT 2008-01-08 17:33
    Chemisor:

    You mean "existing, godawfully bloated, poorly designed, and hard to use with C++" implementations? I agree that MySQL certainly has a place, but not for everything. A typical desktop application does not need all those fancy features a database provides, making them little more than bloat and inconvenience.


    No, I don't. Where did you get the idea that all DBMSes are bloated and poorly designed? Embedded Firebird is a 3MB download (Windows version), SQLite is 1/10th the size and its feature set is probably still sufficient for your purposes.

    And I didn't even mention MySQL, nor would I recommend it. PostgreSQL and Firebird have similar feature sets but are far less quirky than MySQL and have more generous licenses.

    Chemisor:

    1. Single user access. Nobody messes with your data but you, and nobody connects to it while you are working on it. This makes concurrency control unnecessary, scalability pointless, and transaction control useless.


    Apple just released the new Mac Pro. The standard configuration comes with eight processor cores. And you are still writing single-threaded apps? Ok, this is an extreme example, but even most portables have at least two processor cores these days. The times where people have tolerated GUIs that totally lock up whiile an operation is in progress are coming to an end. Which means you have to deal with concurrency even when there is only one user. DBMSes don't solve all of your concurrrency problems, but they can help a lot.

    Chemisor:

    2. Small data set. Regular people are not Fortune 500 companies and don't have terabytes of data. Most data sets are a few megabytes in size, if that. This means that all those painstaking query optimizations will not help much.


    All the painstaking work has already been done for you. If simple queries are fast enough, you don't need to optimize them. But it is a lot easier to optimize them later on if you are already using an RDBMS.

    Chemisor:

    3. Offline. Most people don't have broadband at home. If your database server is inaccessible, the app is unusable, which is very very bad. A git-like full clone solution is a far better choice for distributed data sets in this scenario.


    Bogus for the reason I already mentioned: Embeddable DBMSes are available for easy local use.

    Chemisor:

    4. Run their own backups. When I want to back up a file, I want to back up a file, not a goddamn directory in some cryptically named location. I might even want to attach it to an email. Remember, small data sets!


    Please don't repost points that have already been refuted. If you know how to use copy & paste, you know how to back up a .fdb (Firebird Database) file. Of course the database should not be open when you do this, but closing it is simple to do in application code. Oh, and lest you might misunderstand: You can also use any other file extension.

    Chemisor:

    5.Don't have a DBA degree. And consequently not willing to spend time on weird administration tasks that require connecting to a shell-like SQL interface.


    This is absolutely ridiculous. You could just as well argue that people need an MCSE in order to use Windows. If your application uses a database, you can hide the databasey details just as well as you would hide the bit fiddling details of your own C++ implementation.

    Chemisor:

    6. Goddamned text. Text-mode operations require parsers to convert to and from text data. Parsers are hard to write correctly.


    Sorry, but WTF does that have to do with relational databases?

    Chemisor:

    True, but they don't provide any benefits over the simple dump-my-data-and-index solution.


    Yes, there is at least one crucial benefit: If you use them, you don't have to waste time on problems that have been solved before (dozens of times).

    Chemisor:

    They are actually worse, since they have C interfaces, which will defile your pure C++ design.


    Actually, a little googling provided me with links to numerous C++ APIs for the above-mentioned DBMSes.

    Chemisor:

    There is NO excuse for using plain C interfaces these days. Good design requires structure, and C can't provide any.


    If the C interface was the only interface, that would be convincing. Only it isn't. If you don't like the C interface, use another.

    Chemisor:

    It's not a bogus reason if I haven't heard of some obscure package that allows one-file operation. Most other programmers will not have heard of it either.


    Actually, it's a bogus reason by definition. And Firebird is not an "obscure package" but one of the best known and popular open-sourec RDBMSes.

    Chemisor:

    In a single user scenario you don't need a filesystem. You just write your data as you have it in memory, in an vector or something, into a file. Writing serialization routines is not that hard. If you care about memory usage, you might implement a sliding window backend, which isn't very hard either, but in most cases you don't need one.


    Sorry, I meant to say "file format". Anyway, why would I write code to create in-memory data structures and then code to serialize them if I can just pump the data into a database in the first place? That seems to be doubly redundant to me. If you already have the data structures for some other reasons then this might make more sense. And writing even complex SQL queries is ridiculously simple compared to writing C++ code that extracts the same information from a custom file format.

    Chemisor:

    Once again, I am not disputing the need for MySQL in a huge company with terabytes of data. There you have concurrency issues, scalability issues, security problems, query performance, and all that. However, for an end-user application this is all unnecessary.


    If an RDBMS provides you with features you don't need, how about... not... using.. them...? In any case, this is no reason for not using the features that you do have a use for. Unless you are indeed suffering from NIH syndrome as I suspect.
  • TopicSlayer 2008-01-08 18:53
    What I love most about the "don't reinvent the wheel" crowd is their ability to espouse the wide wheel variety from which you should chose rather than reinvent your own and all the while fail to realize that said variety would not exist if everyone advocated this principle.
  • vt_mruhlin 2008-01-09 00:42
    TopicSlayer:
    What I love most about the "don't reinvent the wheel" crowd is their ability to espouse the wide wheel variety from which you should chose rather than reinvent your own and all the while fail to realize that said variety would not exist if everyone advocated this principle.


    But there's different kinds of wheels for different uses!

    My workplace is more of the "pretend you invented the wheel in the first place" type. My boss wants me to talk about how one of the apps handles database connection pooling tomorrow. Like I need to give some freaking presentation to say "if it needs to make a database connection, it gets one out of the pool. If the pool's empty it waits."
  • Andrew 2008-01-09 04:50
    brazzy:
    ...
    Can you say "beaurocractic monstrosity"?



    Can you spell "bureaucratic"?
  • AdT 2008-01-09 08:53
    TopicSlayer:
    What I love most about the "don't reinvent the wheel" crowd is their ability to espouse the wide wheel variety from which you should chose rather than reinvent your own and all the while fail to realize that said variety would not exist if everyone advocated this principle.


    Do you know what a straw man argument is? I did not say it's always bad to "reinvent the wheel". Chemisor did not even try to reinvent the wheel, he invented a cube on an axis and said it would roll well enough for his purposes. But when you choose not to use on of the existing wheels I feel you should have a good reason while the reasons Chemisor brought forward consisted of:

    a) unsubstantiated prejudice
    b) invalid generalizations
    and, in my eyes also
    c) reasons made up post hoc to support his preconceived world view

    Actually, I don't care whether Chemisor wants to use databases or not. But since he publicly argued that databases cannot be used for certain purposes, stating reasons that make no sense, he was asking for contradiction. :-)

    For example, in one of his first posts in this thread, he wrote: "It did not use a database because it was intended as a consumer product" which makes no sense whatsoever - there are lots of consumer products that make successful use of databases, etc.

    It is necessary to contradict such claims lest some lurkers might think they actually have any substance.
  • Richard 2008-01-09 11:06
    I'd ask for more information, like what existing systems there were to integrate with. After all, I assume you've got some kind of employee database somewhere.... have you?
  • MemeDude 2008-01-09 11:10
    Me:
    TRWTF is that someone would go and fetch a fan when a hot woman in front of you says "Oh, it's hot in here!". She was obviously trying to take the interview in another direction.

    My thoughts exactly!
  • Bob 2008-01-09 13:27
    FredSaw:
    Don't forget, SQL skills are unimportant and lots of skilled developers don't have them. Also, testing doesn't prove anything. The important thing is, does she have a degree? If so, then they screwed up in letting her go.



    Mary? Is that you?
  • Chemisor 2008-01-09 14:10
    All right, so we are having a flamewar now! :)

    I really did not intend things to do down the toilet like this, but let's try to be amicable. I'll try again to explain how databases look from my point of view.

    First of all, I was not referring to embedded databases. I think I knew about them before I read your posts, but I certainly did not think of them when I wrote mine. In my mind, "using a database" and "using a database format" are two entirely different things. When you say your app uses a database, I see something that communicates to a central server, which handles numerous simultaneous connections. Call it a terminology problem, but that's how I, a total database ignoramus (as I have admitted several times) interpret what you say. When you use an embedded database, to me that's just like using a custom data format with a packaged library, which is pretty much what I do anyway except that I write the library.

    You counter that an embedded database is already fully written and debugged, but this is not particularly relevant to me since writing serialization code for a class is a trivial exercise completed in a few minutes. And then there's the size of it. You say embedded Firebird is "only" 3M in size and I gasp, because most of my applications weigh in at less than a 300k (without system libs of course). Would you have me increase my app footprint by a factor of 10 just to have database features that I am probably not going to use? My serialization code is insignificantly tiny by comparison.

    You say that concurrency and data integrity are important, but you are still thinking of some database frontend, are you? Something that runs a query and displays a result in a form. So lets talk about that.

    How do you get your data to the UI? When I design data structures, I think of how they look in memory, not how they look on the disk, which I consider to be a separate problem. When I write a UI screen I'll be accessing objects in memory, not rows in a query, and I would need some way to convert one into the other. From what I can see in Firefox's API, you either copy the data field by field, or you use macros which probably do the same thing, but autogenerate the code for you. Note how this process is identical to writing a serialization routine, and the generative macros are your only work savings. I could, I suppose, write such macros to automatically make serialization routines, but I just don't see the point, considering that now I more or less just cut-n-paste the copy constructor to make them.

    This brings me to the subject of "goddamn text". I'll repeat once again that I haven't written any database-using code, so all I know about SQL I've read in books. Those books, such as "SQL Unleashed", show examples exclusively in text form. In pretty much every example you use a shell-like interface to write your queries and get back text results. Now, I don't know how the database really handles these things, and maybe there is no text involved in the middle. And yet, when you get fields from a query, you look them up by name, so there's got to be some in there. In my mind, this generates instant revulsion, because text means parsers. Using text and parsers is inherently inefficient in both speed and code size, so until I can verify that the query results come back in some machine-readable form, I'd be very uncomfortable using them. Feel free to enlighten me, if you know how this works.

    Let's talk about concurrency. When I said you did not need it, I was thinking of a central server database with multiple connections. Naturally, in a single user application with an embedded database, any concurrent connections will come from the same user. The thing is, in anything I design, there will be a single data path. Yes, I might, very rarely, make multiple views of the same data, in which case the views will access the data in memory in a document object, not the database directly. Data manipulation is separate from serialization in my mind.

    Part of this is because most of this manipulation does not affect the database. A business inventory is always changing, orders are always coming in, and the database is churning all the time. A home user will not be changing his data sets frequently. Your 6000 CD music index will not change. You probably add new records now and then and delete old ones, but you never modify them. Most tasks you perform are read-only; searching and statistical analysis are what most people do with data. New data does not come in very often.

    In view of this, concurrency is almost a non-issue. You hardly ever write anything, much less write anything multiple times. Same with data integrity. Data is added so rarely that the odds of you losing power during the exact microsecond that you are writing your data to the disk are astronomically small. I get maybe three or four power failures per year, all of them during extreme weather conditions. A partial write that corrupts your whole file is even less likely. I'm tempted to say that you should just restore from backup if that happens; after all, I would bet good money that it won't happen in your lifetime.

    Most applications would just write a new file on save and move it over the old copy, solving this problem. You said that this would cause an unacceptable slowdown, but you forget that the data set is small. My disk can write ~50M/sec, and with your 6M CD index you would not even notice.

    > The standard configuration comes with eight
    > processor cores. And you are still writing
    > single-threaded apps? The times where people have
    > tolerated GUIs that totally lock up whiile an
    > operation is in progress are coming to an end.

    Just because an application is single threaded, doesn't mean it locks up while an operation is in progress. That's what asynchronous IO is for, which I use extensively. IMO, it is far easier and simpler to get working than ensuring thread safety. It all also integrates beautifully into the event-driven architecture which every modern UI framework uses. No, I wouldn't get to use multiple cores, but since I don't have any tasks that are CPU bound, why would I care?

    > Yes, there is at least one crucial benefit: If you
    > use them, you don't have to waste time on problems
    > that have been solved before (dozens of times).

    If I use them I'd have to waste time on figuring out how to use a foreign API. An API that won't integrate well with my existing code and will require constant hacks to my data model to "fit it in". Code reuse is not always appropriate. Sometimes reinventing the wheel really is the easier way to go. You may disagree, but you already know your databases and think in ways that complement their APIs. I don't.

    > Actually, a little googling provided me with links
    > to numerous C++ APIs for the above-mentioned DBMSes.

    Which are all nothing but wrappers for the C API. This is usually worse than using the C API in the first place, since most people don't know how to design a proper OO API anyway. Then there's a very real chance of introducing extra bugs in the wrapper itself. But no, I'm not really bashing them, so don't take this negatively; it's just a personal bias.

    > Anyway, why would I write code to create in-memory
    > data structures and then code to serialize them if
    > I can just pump the data into a database in the
    > first place? That seems to be doubly redundant to me.

    I would reverse this argument and say that the in-memory data structures come first, and so the whole discussion of how to store them in a file is a separate issue. As you can see, I am not thinking in a database-oriented fashion. It might be because I am not thinking of applications that view and modify the data, but rather of applications that analyze it. By analysis I don't mean viewing the data in different ways; I mean actually making sense of it, displaying statistics on it, deriving some useful knowledge from it, or just plain making pretty graphs with it. None of those things can be done with an SQL query; you really do need to load stuff into memory and work on it.
  • Dr. Furter 2008-01-09 14:16
    Interviews put people in strange places mentally. Unfortunately everybody has to interview so for those that it completely freaks out, it is not a pretty scene. I feel bad for then I really do, but I still can’t hire them. “Mary” was probably one of those people and coupled with what was likely only meager design skills, you get this.

    WTF indeed.
  • Kelly 2008-01-09 16:29
    I showed my friend this, expressing annoyance at how all the stupid-people stories on Daily WTF seem to be about females. As a 20-something female myself, I was saddened by this. His response:

    friend: well, i certainly wouldn't expect there to be fewer misogynists in the male-with-no-social-skills echo chamber that is technical blogs

    sigh
  • Kelly 2008-01-09 16:34
    Bob:
    FredSaw:
    Don't forget, SQL skills are unimportant and lots of skilled developers don't have them. Also, testing doesn't prove anything. The important thing is, does she have a degree? If so, then they screwed up in letting her go.



    Mary? Is that you?


    Actually, I had absolutely no SQL skills when I entered my first development job right out of college. I majored in applied math and only minored in computer science, so I never took a database course. Within a few weeks I understood relational database design pretty well. A year and a half later, I consider myself as much of a SQL and relational database design pro as any non-DBA developer (who happens to be using SQL) would generally be expected to be.
  • Harrow 2008-01-09 17:55
    snoofle:
    ...Honestly, when was the last time someone came up to you at work and said "design xxx and give me a working model in the next 2 minutes"?

    This happens to me about three or four times a year, although I admit that usually I get fifteen or twenty minutes.

    I generally use the Borland Database Engine for such shortsighted requests because I like to give my clients what they deserve...

    -Harrow.
  • dml 2008-01-09 21:17
    Kelly:
    all the stupid-people stories on Daily WTF seem to be about females
    I kind of see what you mean (probably articles that specifically mention a female stand out more) but aren't essentially all the articles on this website about "stupid people" or at the very least the code they produce? Many of them are about males, whether it says so or not. Stupid people are exactly what the site is founded on.

    In fact, looking at the backlog of interview articles, I can find at least one about a dolt who was referred to with masculine pronouns. And one that was about a chauvinist male getting his comeuppance.

    I'm sympathetic to your concern, but I really don't think there's any gender bias here.
  • Vootie 2008-01-11 15:34
    Heh. Yeah, there's a lot of people out there who think that just because some people are clueless about computers that means that everyone has to be, so they can fake it until they learn it on-the-job.

    Within some limits you can certainly pick stuff up, if you're bright and have decent work experience, but not the whole job experience from scratch. Not in computers.
  • Vootie 2008-01-11 15:41
    > I showed my friend this, expressing annoyance at how all the stupid-people stories on Daily WTF seem to be about females. As a 20-something female myself, I was saddened by this.

    You know, there are a lot more female chauvinist pigs out there these days than male chauvinist pigs.

    Rhetorical Question one:
    ========================
    I suppose you've considered the possibility that God might be a female.

    How often have you considered the equal possibility that the **Devil** is one?

    Rhetorical Question two:
    ========================
    I'm sure you're familiar with the term "misogynist" -- a man who hates women.

    What's the term for "a woman who hates men"?

    =========

    Maybe you're the rare exception but not many women ever grasp the idea that there are just as many bad & stupid women just as there are bad and stupid men.
    :-/ (is there an emoticon for rolling eyes?)
  • Smash 2008-01-13 14:06
    Vootie:

    :-/ (is there an emoticon for rolling eyes?)


    I don't know elsewhere, but we brazilians became quite fond of the japanese emoticon for rolling eyes => ¬¬

    also available with a sweat drop => ¬¬'
    or in a angry, throbbing vein mood => ¬¬*
  • Grovesy 2008-01-14 12:16
    ChiefCrazyTalk:
    Grovesy:
    ChiefCrazyTalk:
    zoips:
    vt_mruhlin:
    Alex:
    Don't forget to submit your own interview story, from either side of the table.


    If Microsoft ever bothers to respond to all the resumes I've sent them, I might get a few stories to submit. I don't get it... the job I'm applied for is practiacally the exact same thing as my last job, so my resume should at least merit a phone screening.

    I think I pissed off one of their recruiters when I was in college. They're not the vengeful sort of company that blacklists people for trivial stuff from years ago, are they?


    I couldn't get them to notice me even if I'd showed up on campus with a bomb. I finally get in as a contractor, I'm here a month and they want me as an FTE. Go figure.


    That's not a bad way to go. I'm a Micosoft PM, coming in as a vendor. ("V-Trash")



    Managed all three, vtash, itrash, FTE-wait-the-shares-are-worthles-sucker, and finaly back to itrash (but happy)


    Huh? You went from Vendor, to intern, to FTE, to back to being an intern? Not the usual career progression...


    For some reason in the UK, (V-) was vendor, (I-) was independant contractor

    never made sense to me.
  • Random832 2008-01-14 12:58
    Kelly:
    I showed my friend this, expressing annoyance at how all the stupid-people stories on Daily WTF seem to be about females.


    As a long-time reader, I can assure you that at least 95% of the "stupid-people stories" are about males. In fact, when I really think about, I can only recall two (Not two percent - two stories. There was Paula, and then one other that had a similar explosion of "ZOMG sexism" accusations) where the subject was specifically female.
  • JoeBloggs 2008-01-18 06:50
    I've had it from the other side. A few years ago I was being interviewed for a job as a Windows app developer. After talking to the guy for about 20 minutes about various Windows apps I'd written he then said he had some specific requirements and then asked "Do you have any 'G' 'U' 'I' development experience?" (he spelled GUI out very carefully"). I finally realized that I was just talking to a HR monkey and I'd probably have to talk to someone else later. What got to me, though, was that this guy would probably determine if I got to the 'real' interview. After another ten minutes of me explaining the difference between 'embedded development' and 'embedded SQL'(he was just picking things at random from my CV) I just mentally scratched the company from my list. When they called back I just made an excuse as to why I couldn't come back to see them.
  • Jesse McNelis 2008-02-04 08:50
    I've given a response sort of like that in a job interview.
    Obviously I didn't get the job.
    I could easily answer the question at any other time, just on under pressure in a job interview.

    Coding is done at a computer, you are generally fairly alone and their isn't someone staring at you waiting for an answer straight away.
    To test someone's coding ability by asking a question in an interview is silly.
  • snow 2008-02-23 00:17
    i agree. the question was misleading unless you're working in the industry primarily as a database administrator or programmer. IMO there's a gap between the industry and academics. Many veterans who may not have gotten a general education in Computer Science are a little narrow. when i think of a database it's more like a well-managed file structure (outside of the code domain) and data structures are records, trees, hash tables, classes, objects, lists etc. why the superior attitude, anyway? what was her level of experience? SQL knowledge and work from an entry-level perspective is interpreted by veterans as equal knowledge. There's ambiguity within the whole field of Computer Science or all software will run perfectly without any errors. In other words, I don't think that was a good question to make a hiring decision on an entry-level basis. B/c data structures and databases aren't considered in the same category.
  • snow 2008-02-23 00:34
    why use the term stupid? it seems like a degree doesn't mean anything. why have it as a choice in college? a college degree is general knowledge and projects related to the basic foundations, which is supposed to get us ready for the industry. It's called talent not how much do we know compared to veterans. New comers with a general education may get confused by the jargon b/c the jargon of Computer Science is so vague and can be misleading at times. Plus, many students come from so many different backgrounds. Ever heard of the expression "a diamond in the ruff". Talent does not equal knowledge. the concept of object models are easily learned not the effective use of them. A person with a beautiful voice and great vocal control may not even know what a 'b' not looks like, but they can easily learn it. Does it mean someone who can recognize a 'b' note will break down the house over someone who doesn't.
  • snow 2008-02-23 00:48
    are all veteran developers this rude? is it learned on the job?
  • MaryBean 2010-06-17 17:26
    That is exactly what I meant! LOL
  • cindy 2011-03-02 09:16
  • tero 2011-07-20 04:32
    Excellent interview question BTW!
  • Daniel 2012-10-26 11:00
    Seems you're gonna get stuck in that loop ;)
  • boner boy 2014-08-29 08:14
    ChZEROHag:
    bob:


    My music database, small by many standards, consists of 6000 entries. My girlfriend's is just 200. A magnitude of 30 times is just irrelevant.


    My maths is a touch rusty, but isn't the difference between 6000 and 200 just 1 order of magnitude?


    Magnitude is probably the wrong word. My erection is 30 times the size of hers.


    FTFY