• @lthlnkso
    link
    1762 months ago

    I think this is a good question and answer in the sense that it reveals a fundamental misunderstanding on the part of the student - exactly what you hope an exam would do! (Except for how this seems to combine javascript’s .length and python’s print statement - maybe there is a language like this though - or ‘print’ was a javascript function defined elsewhere).

    This reminds me once of when I was a TA in a computer science course in the computer lab. Students were working on a “connect 4” game - drop a token in a column, try to connect 4. A student asked me, while writing the drop function, if he would have to write code to ensure that the token “fell” to bottom of the board, or if the computer would understand what it was trying to do. Excellent question! Because the question connects to a huge misunderstanding that the answer has a chance to correct.

    • AggressivelyPassive
      link
      fedilink
      512 months ago

      Teaching complete “clean slates” is a great way to re-evaluate your understanding.

      I’ve had to teach a few apprentices and while they were perfectly reasonable and bright people, they had absolutely no idea, how computers worked internally. It’s really hard to put yourself in the shoes of such persons if it’s been too long since you were at this point of ignorance.

      • Captain Aggravated
        link
        fedilink
        English
        222 months ago

        I forget which one, but one of my flight instructor textbooks said “to teach is to learn twice.” And BOY HOWDY is that accurate.

        You will find no better teacher of expert aeronautics than a brand new student. They will show you a new perspective, every single time.

        • @[email protected]
          link
          fedilink
          62 months ago

          Second this. I’m a teacher aid and I get to fix student’s code for students who are not technically inclined. It’s so much fun and I’ve learned so much McGuivering all that shitty mess together.

    • @[email protected]
      link
      fedilink
      English
      292 months ago

      For reference the “language” used in the exam would probably be Exam Reference Language (OCR exam board specifically, which I believe this question is from) which is just fancier pseudocode.

  • @[email protected]
    link
    fedilink
    1422 months ago

    It’s obviously:

    Traceback (most recent call last): File “./main.py”, line 2, in <module> AttributeError: ‘str’ object has no attribute ‘length’

  • @silasmariner
    link
    82
    edit-2
    2 months ago

    They missed out the context code:

    trait DoW { def length: FiniteDuration }
    object Monday extends DoW { override def length = 24.hours }
    ...
    implicit def toDoW(s: String): DoW = s match {
     case "Monday" => Monday
    ...
    }
    var day: DoW = _
    

    (Duration formatting and language identification are left as an exercise for the reader)

      • @silasmariner
        link
        82 months ago

        Implicit was too much of a give away wasn’t it?

        • @[email protected]
          link
          fedilink
          7
          edit-2
          2 months ago

          I’ve literally seen code that does something awfully similar. But you could have used an Enumeration.

          Fuck, I think you just gave me an idea for an issue in my code that has bugged me for days.

          • @silasmariner
            link
            6
            edit-2
            2 months ago

            I could’ve used a lot of things, but I’m on my phone and I wanted fewer characters to render it, whilst being sure it would work without having to run it.

            Also, I am pleased to have maybe helped. Perhaps we can be friends, you and I. Perhaps not. Idk, maybe you punch dogs, why would you do that? Seems mean.

            Have you ever just, like, edited a comment? How do people know when you did it? I guess if I were writing a thing to check it I’d use a registry of timestamps and checksums… So, like, ok, you can track, but why, how does it look?

            Anyway sorry I had some drinks between now and first post, goodnight

    • @[email protected]
      link
      fedilink
      English
      212 months ago

      Works even better in Ruby, as the code as given is valid, you just need to monkey patch length:

      #!/usr/bin/env ruby
      
      module DayLength
        def length
          if ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"].include? self
            "24 hours"
          else
            super
          end
        end
      end
      
      class String
        prepend DayLength
      end
      
      day = "Monday"
      
      x = day.length
      
      print(x)
      
      • @silasmariner
        link
        5
        edit-2
        2 months ago

        Code as given can be made valid in scala I believe. My starter was based on that assumption. I think raku can do it too, but you would probably have to \x = $ to make it work…

        Edit: misread your comment slightly, CBA to change mine now. It is what it is

  • @[email protected]
    link
    fedilink
    English
    57
    edit-2
    2 months ago

    Is it wrong that I’m stuck trying to figure out what language this is?

    Trying to figure out what string.length and print(var) exist in a single language… Not Java, not C# (I’m pretty sure its .Length, not length), certainly not C, C++ or Python, Pascal, Schme or Haskell or Javascript or PHP.

    • @[email protected]
      link
      fedilink
      462 months ago

      I’m very much guessing that this is just supposed to be a type of pseudocode given the context and vagueness of it.

      It’s a big reason why I really dont like pseudocode as instruction to people learning the basics of what programming is. It made more sense 20 years ago when programming languages were on a whole a lot more esoteric and less plain text, but now with simple languages like Python there’s simply little reason to not just write Python code or whatever.

      I took an intro to programming class in College and the single thing I got dinged on the most is “incorrect pseudocode”, which was either too formal and close to real code or too casual and close to plain English.

      It’s not a great system. We really need to get rid of it as a practice

        • @[email protected]
          link
          fedilink
          62 months ago

          I mean once you get beyond bash-like scripts python is esoteric as fuck, adding oop to what is essentially a shell is a terrible idea

          That said, there’s plenty of languages with good syntax that is still good when you get into more complex stuff (modern C#, scala, kotlin and more)

          • @[email protected]
            link
            fedilink
            112 months ago

            The only thing esoteric about python is the bolted-on typing and anything behind a double underscore.

            So yeah, it’s there, but in front of the curtain it’s practically pseudo code.

          • @[email protected]
            link
            fedilink
            10
            edit-2
            2 months ago

            I think you’re missing the forest for the trees here pretty heavily.

            Yes, Python has some goofy aspects about managing it while performing high level, in depth tasks.

            This is a post and a comment chain about pseudocode being taught to people who likely just learned what a “programming language” was several weeks ago. Essentially no one taking the GCSE knows what “bash-like scripts” even means.

            • @[email protected]
              link
              fedilink
              -12 months ago

              The syntax is certainly easier than Java

              And VisualBasic’s syntax is easier than COBOL, but this isn’t a competition to make the least offensive heap of putrid garbage, so why does it matter?

              Python works just fine for basic scripts, frankly it’s amazing for it, but oop and functional programming is so incredibly obviously badly shoehorned in that huge swathes needs scrapping and version 4 releasing

      • Captain Aggravated
        link
        fedilink
        English
        52 months ago

        Reminds me of 7th grade math class, chapter on estimating. Assignment was “Estimate the following values” with problems like 42+28=? or 14*3=?

        One of them was 6*7=? Which having memorized my times tables in 4th grade like they told me to, I knew off the top of my head that it’s 42. I wrote that. And it was marked wrong because I was too precise.

      • @[email protected]
        link
        fedilink
        12 months ago

        In the 90s my high school used Pascal. That seems reasonable if you only want to teach procedural

        • unalivejoy
          link
          fedilink
          English
          252 months ago

          print() will print the text to a physical printer with paper and everything. Don’t confuse it with console.log and use it in a loop.

        • @[email protected]
          link
          fedilink
          12
          edit-2
          2 months ago

          It would have print if it was previously declared as function.

          Also, js is as dirty as you want it to be. Keywords are indeed not necessary for declaring variables.

          • @[email protected]
            link
            fedilink
            9
            edit-2
            2 months ago

            JavaScript is the language of the assassins, with its infinitely modifiable prototypical setup

            Nothing is true

            true !== 1

            true

            true + true + true === 3

            true

            Everything is permitted

            []+[]

            ''

        • @[email protected]
          link
          fedilink
          English
          52 months ago

          Sure you can write foo = 3 in JavaScript. It’s a global variable and can be referenced as either foo or window.foo.

    • @[email protected]
      link
      fedilink
      102 months ago

      My headcanon: it’s a language that gets executed by a LLM. Whatever you write, if the LLM can make sense of it, it will execute it.

      The output may well be “24 hours”.

    • @[email protected]
      link
      fedilink
      102 months ago

      This is quite a cheap answer but maybe it’s just pseudo code. We had exercises in university about pseudo code with examples that intentionally broke all syntax systems and conventions to show that not everything has to be executable that you write down in a theoretical computer science homework

      • @[email protected]
        link
        fedilink
        -32 months ago

        It’s a shitty question. It’s implied by the fact that “24” is wrong that the answer is “6”, the length of the string “Monday”.

        In some languages dot access on objects could give you the properties of the object type (things pertaining to a “day” object) but this would still be ambiguous since a day’s length can be measured in many different ways.

        In others, it would require you to call length as a function (.length()) or not be available at all, or require you to pass the object into another function [ length_in_seconds(day_x)]

        • @Matty_r
          link
          112 months ago

          I think the question is fine, but we have to assume they covered this type of method prior to the exam, where .length would result in the character count of a String.

    • mox
      link
      fedilink
      10
      edit-2
      2 months ago

      That recurring puzzle is among the most interesting aspects of this community, IMHO.

      • @[email protected]
        link
        fedilink
        82 months ago

        It’s weird that people are so focused on it. It’s pseudocode, and it’s purely meant for day one comp sci students to grasp how data is stored and processed, before they are forced into writing Java, most likely

      • @[email protected]
        link
        fedilink
        52 months ago

        Most irritating aspect of switching languages. How are switches done in this one again?

        •Searches web•

        Ah yes

    • @[email protected]
      link
      fedilink
      English
      7
      edit-2
      2 months ago

      It could be Ruby; puts is more common, but there is a print. With some silly context, the answer could even be correct:

      #!/usr/bin/env ruby
      
      module DayLength
        def length
          if ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"].include? self
            "24 hours"
          else
            super
          end
        end
      end
      
      class String
        prepend DayLength
      end
      
      day = "Monday"
      
      x = day.length
      
      print(x)
      
    • magic_lobster_party
      link
      fedilink
      42 months ago

      Scala and Kotlin are close ones, although those requires variables to be declared with var day = “Monday” (unless the variables are declared elsewhere)

    • dog
      link
      fedilink
      42 months ago

      Pseudocode and/or a variant of lua.

    • @[email protected]
      link
      fedilink
      English
      2
      edit-2
      2 months ago

      Same thoughts I had.

      1. Language which allows variable declaration as name = value without any keywords or its a variable declared outside of the example
      2. Has lowercase .length and not .len or other
      3. .length is also a property and not a method? Assuming convention .length() for method call like print(x)
  • @[email protected]
    link
    fedilink
    35
    edit-2
    2 months ago

    Good thing this only uses ASCii characters, else you get into some fun discussions about UTF encoding

  • @[email protected]
    link
    fedilink
    352 months ago

    The amount of people nitpicking about the brand of pseudocode or arguing the question is tricky reminds me of some coworkers, and not the good kind.

    If you belong to the above category, try to learn some new programming language / read about some algorithm descriptions (not implementation) and go out take some sun. The question is super intuitive if you’re not stuck to a single paradigm or language.

    • @[email protected]
      link
      fedilink
      142 months ago

      Exactly. It’s pseudo code. It’s meant to be universally understandable, not language specific.

    • @[email protected]
      link
      fedilink
      3
      edit-2
      2 months ago

      So I teach coding to idiots. Confusing or poorly defined abstractions in pseudocode are bad. If you want people to infer useful information from pseudocode, and learn good practices from it, you need to treat it as if there a real underlying class structure written with good practices, or even better, make it comply to some actual language which does that. If you want to imply that this is a member of string, something like string.len_chars is way better imo because it captures the idea of a string being an array<char>. Then the next question can be about string.len_bytes (watch the wheels turn!). That naturally transitions nicely into object oriented paradigms of object containers/storage being at once a templated abstraction with a stride and depth, and also a physical thing in memory.

    • KillingTimeItself
      link
      fedilink
      English
      -22 months ago

      i’m of the belief that pseudocode should be real code that actually runs. I.E. something like bash. A scripting language.

        • @[email protected]
          link
          fedilink
          2
          edit-2
          2 months ago

          The first language I tried to learn as a kid was Batch scripting…

          (edit: and then some VBScript along the way! Eventually worked my way to C++ though)

        • KillingTimeItself
          link
          fedilink
          English
          12 months ago

          thats why i hate pseudocode.

          I would much rather just learn an actual language, or two even. At that point.

      • @alexdeathway
        link
        82 months ago

        I am currently looking for job opportunity and amount of gotcha type question i see in OA is just something else.

        • @[email protected]
          link
          fedilink
          82 months ago

          I can’t imagine that’s any fun to deal with.

          “You should have known what the intent of the question was. Management won’t know or care about the internals of your code as long as it meets requirements. You have failed this test.”

          Or

          “You should know that you’re calling a function with invalid parameters. Where did you get your CS degree from again?”

          • @alexdeathway
            link
            8
            edit-2
            2 months ago

            “You should have known what the intent of the question was. Management won’t know or care about the internals of your code as long as it meets requirements. You have failed this test.”

            “You should know that you’re calling a function with invalid parameters. Where did you get your CS degree from again?”

            sigh you can have your ransom, just remove the cameras.

        • @[email protected]
          link
          fedilink
          12 months ago

          no the school can realistically choose any sensible language, the one in the exam question is a pseudocode one that is used only to make the exam questions understandable regardless of which language you studied

  • jlow (he/him)
    link
    fedilink
    192 months ago

    Are they using a red pen to write the checkmarks for correct answers to make it confusing but logical at least?

    • @[email protected]
      link
      fedilink
      32 months ago

      Grading in red is generally avoided, nowadays. Red is closely associated with failure/danger/bad, and feedback should generally be constructive to help students learn and grow.

      I usually like to grade in a bright colour that students are unlikely to pick: purple, green, pink, orange, or maybe light blue (if most students are working in pencil). Brown is poo. Black and dark blue are too common. Yellow is illegible. Red is aggressive.

      Anyway, I’m guessing they just graded everything in green. The only time I’ve ever graded in more than one colour was when I needed to subgrade different categories of grades, like thinking/communication/knowledge/application. In that case, choosing a consistent colour for each category makes it easier to score.

    • autokludge
      link
      English
      22 months ago

      Nah, just using one of those handy pens with blue, black & 2 red ink. ;)

  • @[email protected]
    link
    fedilink
    English
    12
    edit-2
    2 months ago

    does it give reference to what language this is in?

    x = string length of “Monday” => 6

    passed my gcse?

  • @[email protected]
    link
    fedilink
    112 months ago

    I wonder if day length is given separately in a table prior to the question? I’m not sure what they wanted except maybe seconds?

    • @Akrenion
      link
      1062 months ago

      It’s the length of the string. The number of characters is 6. It’s a play on words and a question.

      • r00ty
        link
        fedilink
        -122 months ago

        I’m not really a fan of this kind of question. Especially if there’s enough questions that time will be an issue for most. Because at first glance it’s easy to think the answer might be the length of a day.

        There shouldn’t be a need to try to trick people into the wrong answer on an open question. Maybe with multiple choice but not an open answer question.

        • @[email protected]
          link
          fedilink
          232 months ago

          It relies on critical thinking (meaning thinking about your own thinking), basically, and most students aren’t very good at that.

          • @[email protected]
            link
            fedilink
            English
            62 months ago

            This doesn’t rely on critical thinking. It just relies on understanding what “.length” does, which would’ve been previously covered in the lessons.

            • @[email protected]
              link
              fedilink
              1
              edit-2
              2 months ago

              Well, both. If you rushed through without recalling that length has specific meaning relative to strings, even though you do know that, that’s a critical thinking failure. But yeah, not knowing strings could do it too.

              • @[email protected]
                link
                fedilink
                English
                22 months ago

                If you didn’t know the answer, it’s a critical thinking exercise? Not at all.

                Answering this question relies completely on understanding programming. A correct answer cannot be reached without an understanding of programming.

                • @[email protected]
                  link
                  fedilink
                  1
                  edit-2
                  2 months ago

                  A correct answer cannot be reached without an understanding of programming.

                  Yes. It does not follow, though, that knowledge of programming always leads to a correct answer. Since you seem like someone who might appreciate a formal logical description, you are affirming the consequent here.

                  Again, without sufficient critical thinking one might just miss the detail that “Monday” is a string and not a custom unit-of-time object, inheriting from Day.

        • @[email protected]
          link
          fedilink
          192 months ago

          I get your point about it being a trick question but I think in this case it’s pretty reasonable that you would see code like this in real life. Where the programming metaphor and your understanding of the real world clash. It’s a very important skill to be able to spot the difference.

          • @onlinepersona
            link
            English
            -42 months ago

            The compiler or interpreter does that for you. There’s no point in these “gotcha’s”. They are cute brain teasers that belong on those useless “are you a programmer” quizzes you find on random meme websites, not an exam.

            CC BY-NC-SA 4.0

            • @[email protected]
              link
              fedilink
              9
              edit-2
              2 months ago

              In the error shown a compiler would be just fine and run as usual but the person programming it would be expecting a different result so a compiler wouldn’t do this for you since it’s a logical error and not a syntax error.

              • @onlinepersona
                link
                English
                02 months ago

                If it’s a statically typed language and x is of type Date, it’s for sure throw a type error when trying to assign a string to it. If it had autoboxing / auto type conversion from String to Date, length could return a number or a string.

                If this were Javascript on NodeJS, it would fail at print(x) because that doesn’t exist in JS. If it were Python it would fail at x.length because that has to be len(x). And so on.

                If this were all to pass, at the latest at runtime, when the programmer sees the output “6”, they would know something’s up.

                As I said, cute, but worthless test.

                CC BY-NC-SA 4.0

        • Adlach
          link
          fedilink
          English
          42 months ago

          Software engineering as a discipline is pretty much a series of trick questions.

    • CrazyEddie041
      link
      fedilink
      192 months ago

      Conversations about language aside, the error is that “Monday” is a string with a length of 6.

      • @nathanjent
        link
        42 months ago

        What is the type of the variable day though? As it is we have to make multiple assumptions, based on popular programming languages, about the internals of the string type and the print function to assume that it prints “6”.

    • dog
      link
      fedilink
      -7
      edit-2
      2 months ago

      Most date libraries count to 23h 59m 59s then roll over to 00h 00m 00s. So the answer is 23 hours, not 24.

      Edit: I’m big dum dum. It’s asking string length of “Monday”, thus 6.

      • @[email protected]
        link
        fedilink
        222 months ago

        You’re also mistaken about the time too. The first second of the day is 00:00:00 the last second of the day is 23:59:59

        That’s still a full and exact 24 hours.

        • dog
          link
          fedilink
          92 months ago

          Yes, it’s a full 24 hours, but a library doesn’t use 24:00:00 to represent the last hour, it’s 23:59:59. Once it hits 24:00, it rolls over to 00:00:00.

          Hence my initial error of answering 23.

          It’s not valid, but I don’t edit out erronous answers because I believe all data should be preserved, no matter how dumb it makes one look.

          • @[email protected]
            link
            fedilink
            82 months ago

            00:00:00 is the 1st second of the day. 23:59:59 is the 86400th second of the day. That’s 24 hours.

          • @[email protected]
            link
            fedilink
            22 months ago

            It’s not valid, but I don’t edit out erronous answers because I believe all data should be preserved, no matter how dumb it makes one look.

            Doing the lord’s work.

            I have but one up vote and you already have it.