10 September 2010

Ambiguity in 9 September quiz requires score adjustment (1375)

This has been a tough week. In hindsight, I see the general problem: I had lots of "text only" quizzes. In other words, I presented you with sentences and asked you to evaluate their correctness. This automatically raises the bar in terms of clarity - and I did not reach that bar today. One of the choices was: "A trigger may not have an exception section." When I wrote this, I was thinking: "You are not allowed to have an exception section in a trigger." Which, I am sure many of you would agree, is obviously not true. Sadly, it was also quite easy and reasonable to interpret this statement as "A trigger might not have an exception, but also maybe it could have one." Which is just as obviously true. My deepest apologies. I will take the following action: 1. Change the text of this choice to "An exception section is not permitted in a trigger." There. That's lots clearer, isn't it? 2. Give all players credit for this choice. 3. Rescore and rerank. 4. Award Rene M with an O'Reilly ebook for reporting this ambiguity first. I just returned from travels over oceans so I may not get to this tonite, but it will be done before I choose winners for the week. There were some other comments about this quiz. I offer them below and look forward to your responses. a. "1. DECLARE BEGIN NULL;END; - Is this an existing execution section? There is a NULL but there is nothing thus there is no execution section. I think that both answers should be correct - this code either has some and has no execution section ;" My answer: yes, that is an execution section, it just doesn't do anything. I really don't think this is ambiguous. b. Regarding another choice that read "You never have to provide any declarations in a PL/SQL block.", Marcus wrote: "Sorry, I'm not a native speaker. To me it is not clear what the exact meaning is. Does it mean "it is never necessary to do so" or "it is not necessary if you don't need a variable"? This is only to show that even (to a native speaker) seemingly simple grammarcan be a problem. I don't want you to even consider a reranking, but did not want to let you know." My response: whew. Yes, it is hard for me to see the difficulty in interpreting this sentence. And it makes me feel every more strongly that I need to concentrate on offering quizzes that are driven by code and not text. Thanks for your patience! Steven

14 comments:

  1. I agree with you on (a) but suggest you add an assumption that precludes something like
    ALTER SYSTEM SET PLSQL_WARNINGS='ERROR:06002'
    where a "warning" actually prevents compilation/execution. I can't see it applies in this situation, but wouldn't be surprised if sometime it might affect an answer

    ReplyDelete
  2. "You never have to provide any declarations in a PL/SQL block."

    I (a non-native speaker) interpreted the above statement like below:

    You have to === it is a must

    You never have to === It is never a must === it is optional.
    So "You never have to provide any declarations in a PL/SQL block." meant to me " It is optional to provide declaration section" so I gave Yes to this choice.

    ReplyDelete
  3. I'm befuddled over the "never have to provide declarations".

    You said in your scoring remarks that the declare is required for a package spec, but this is not so for me:

    SQL> create package empty_pk as
    2 end;
    3 /

    Package created.

    ReplyDelete
  4. I am a native speaker and I read it as "it is optional" as well. Maybe if he hadn't put the word "have" in italics. I took that as an emphasis that made the modifying word "never" stronger too and they became a single idea.

    ReplyDelete
  5. Like the comment from "funny face" (number two comment), I also had problems with "You never /have/ to provide any declarations in a PL/SQL block."

    My reasoning (also as a non-native speaker):

    Had the answer been "You /have/ to provide some declaritions in a PL/SQL block" - that would have been a wrong answer, since at least some types of PL/SQL block have optional declations.

    Thus the opposite answer "You never /have/ to provide any declarations in a PL/SQL block" must be true, right? :-)

    But now when I read your explanation, I understand that by "never" you meant "there is no type of PL/SQL block where you /have/ to provide declarations".

    I guess I probably was misled by the emphasis "You never /have/..." rather than perhaps "You /never/ have..."

    But it is purely linguistics. It is very very hard to write about programming clearly in natural language rather than code - look at how many terrible manuals exist out there in the world :-)

    I couldn't do it better, Steven - you do a great job. It verges on the impossible to very short sentences that are absolutely clear and unambigous.

    That said I applaud your goal of using more code - code-based questions/answers are much safer for all concerned :-)

    (Personally I tend to write long detailed explanatory text in mails to my colleagues - I can hear their groans when they receive yet another novelsize mail from me :-) I do it to be certain my meaning is clear. But that is not an option to write 50 lines for each answer in a quiz - we will just have to accept that these things /will/ happen from time to time...)

    ReplyDelete
  6. Steven Sir, The below sentence of yours had bid me to post this comment:
    ".....need to concentrate on offering quizzes that are driven by code and Not text."
    I don't feel belittled to admit that I liked the 9th Sep Quiz most. Not because it was just basic; but besides being so, it shook the belief of many "Like Me" who say -
    “DECLARATION SECTION,
    EXECUTION SECTION,
    EXCEPTION SECTION;
    that’s all? Now I know Pl sql coding."
    The 9th Sep Quiz points rightly hit "My kind" of guys at the right places.

    So I strongly recommend some (I should say Many MORE) similar pieces of enlightenment for these lesser Mortals.
    (^_^)

    ReplyDelete
  7. Steven, you wrote:
    "This section (declaration) is not optional, however, for package and type specifications. Instead, at least one declaration is required, else the specification would be completely empty and the program unit would not compile."
    I don't understand it, because it's possible to write:
    create or replace package TEST is end;
    /
    There is no declaration section in it and it would compile.

    ReplyDelete
  8. I also thought this one was correct, I even tried it for a package specification (10.2.0.4):

    create package test
    is
    end;
    /

    This compiles fine and I see no declarations in it. For types I was not sure (I gave it too little thought and am not too familiar with them). So I am a bit surprised it is said to be necessary for package specifications...but for Types I can imagine it is needed and if so that would make the answer indeed 'Incorrect'. "Never have to" means that it would be optional for all PL/SQL blocks and if there is one where it is not optional (Type specs) it is not optional for all anymore. But I do not agree with the requirement for Package Specs (or I am totally lost ;-), also possible).

    Toine

    ReplyDelete
  9. The same for me (comment on September 10, 2010 3:29 AM). I as a non native speaker understood the choice as "declaration section is optional".

    ReplyDelete
  10. In your description of the declaration you wrote: "This section is not optional, however, for package and type specifications. Instead, at least one declaration is required, else the specification would be completely empty and the program unit would not compile."

    This is not true. I have tested it with the following package:

    CREATE OR REPLACE
    PACKAGE InitializationTest AS
    END InitializationTest;
    /

    CREATE OR REPLACE
    PACKAGE BODY InitializationTest AS
    BEGIN
    DBMS_Output.Put_Line( 'Package initalization');
    END InitializationTest;
    /

    You could compile the package, although it would make no sense (because you don't have any chance to execute the initialization section of the package body).

    ReplyDelete
  11. Yes, you are right, all of you are right...but here's my question: I just returned from being away for two weeks and WHY ARE YOU ALL BEING SO MEAN TO ME?

    :-)

    Because I deserve it, that's why.

    It's funny - I thought this quiz would be about as straightforward as could be, and a beginner quiz for sure.

    It has turned into a total unadulterated mess.

    My deepest apologies to all of you.

    So: the bottom line is that the declaration section is always optional. So I will make all the necessary adjustments and then hopefully we can all move on?

    Thanks again, Steven

    ReplyDelete
  12. Steven,

    Thanks for taking all the feedback and not reacting by skipping out for another vacation! I also questioned the "may not" phrase, but figured "it's just a quiz, not my whole world, so I'll take a stab and see what happens."

    :-)

    ReplyDelete
  13. I suppose you could say that those empty specs do have a declare section, but it's just empty.

    The declare in a package begins immediately after the word "is"; therefore there's no way possible to create a package that has no declare section.

    ReplyDelete
  14. Steven, They are being mean to you because you DID just return from 2 weeks on a Carribean island, sort of a working vacation I guess, and we were all slogging away in our cubes for the last 2 weeks.

    Welcome back. Thanks for being patient with us as well.

    ReplyDelete