I tried to finish this quiz but just can’t. Every question I got was a very big, “it depends on context…”
“Do you prefer strong static or dynamic or a mix?” Well… are we teaching 9th graders an intro to coding, writing a quick script to answer a bespoke data question, or writing a data processing library?
“On algorithms I focus on…” Okay, well… do we care about performance? Where is it running? How often will it run? Will the code be disposed of soon or live a decade? Do we need it working today or next week?
I just don’t understand how to even begin formulating an opinion on any of these questions without any context.
To use the compass analogy: shouldn’t you want to best know how to use a compass? What value is there in saying, “my favourite bearing is east-northeast”? That is, the substance in any of this is the “it depends…” portion. Any answers to this quiz are really just a proxy for the kinds of contexts people are solving problems in.
I have the same issue. For many of the questions my answer is "all of the above, but A in context A, B in context B, etc.". Many are also not mutually exclusive.
Take this example: "When debugging I typically:"
> Write tests to isolate the problem
In the case of math functions, or more primitive building blocks, writing tests can help ensure correctness of the underlying functions, to exclude them from the problem search.
> Reason about the code logically first
This is always useful.
> Use a debugger to step through code systematically
Useful when dealing with a larger codebase and the control flow is hard to follow. The call stack can give quick guidance over trying to manually decipher the control flow.
> Add print statements to understand data flow:
Useful when debugging continuous data streams or events, e.g. mouse input, where you don't want to interrupt the user interaction that needs to be debugged.
Avoiding questions just because it depends on context might be a valuable way to signal to other people that you're careful and considerate, and that definitely has value.
But quizzes like this are explicitly designed to be contextless. You're supposed to answer with your gut feeling, the first step in the random walk.
Someone who actually depends heavily on context and doesn't have a strong preference either way will answer quickly, and end up near the center on all dimensions of interest - that's where I landed:
"""
You value clarity and directness in code. You prefer explicit, step-by-step solutions that are easy to understand and debug, even if they require more lines of code.
Abstract ↔ Concrete: -2 Concrete
Human ↔ Computer Friendly: +5 Human-Friendly
"""
Experienced engineers will have a gut feeling of ‘it depends’ and if there is no extra context given the question is pointless and any answers are useless.
> But quizzes like this are explicitly designed to be contextless. You're supposed to answer with your gut feeling, the first step in the random walk [...]
> Someone who actually depends heavily on context and doesn't have a strong preference either way will answer quickly, and end up near the center on all dimensions of intere
Which is basically all that this test is good for. If you're not somewhere around the center, you're either a junior dev or not a very good dev.
The analysis you quote smells of vapid pop psychology. What empirical evidence exists for supposing that the result is reliably objective, let alone relevant?
I took it as “when working in the kinds of things things I prefer to work on using my preferred tools.”
For example, I prefer a mix of static and dynamic typing. Even for performance optimization where technically I do all four of the options, trying to write performant code from the start is what I prefer to do when possible.
This isn’t about the right tool for the job as much as what kinds of tools to you prefer to work with when given the choice.
yes, the mutually exclusive answers (radio buttons) are a quiz smell. they could have used a mix of radio buttons and check boxes, per question, as appropriate, i.e. check boxes for questions where more than one answer is applicable, and radio buttons for the rest.
The "it depends" instinct is actually the hallmark of an experienced engineer - context-awareness is precisely what separates dogmatic programming from effective problem-solving.
I had that feeling about several questions. The one that stood out to me was
"""
When debugging, I typically:
* Write tests to isolate the problem
* Reason about the code logically first
* Add print statements to understand data flow
* Use a debugger to step through code systematically
"""
and I typically do all 4 of those things. If I don't understand the dataflow yet, I'll start with either print statements or the debugger to understand that. If it's code where I already understand the dataflow, and I can reason about the code already, I'll do that. Otherwise I might first write tests to help me reason about the code. But I generally do all of these things and the order depends on my specific problem.
Yeah, that stood out to me as a virtual tie also. When I got pretty good at debugging was when I began to recognize which of these approaches would likely be most effective in a given situation, and when to back out and use another approach, or mix approaches.
I agree, but would add that it is just one of its problems. Even before we get to the questions, we are told that one of the outcomes will be a score on a “friendliness” axis. What would it mean to be computer-friendly, and why would it matter?
I landed right in the middle - -1, -2. Which seems weird because I’m very opinionated about a lot of this stuff. I like a lot of the questions but a lot of my answers felt like I was arbitrarily picking something. That’s probably why.
Eg for testing, do I want “whatever finds bugs most effectively” or “property based testing”? Well, property based testing is usually the most time efficient way to find bugs. So, yes both of those. Debugging: do I use print statements, or a debugger, or logically think it through? Yes all of those. But if I arbitrarily said I use a debugger in a multiple choice test, I don’t think that tells you much about how I code!
I do - controversially - think some of the answers are naming bad practices. Like abstraction first is a bad idea - since you know the least about your problem before you start programming it up. Abstraction first inevitably bakes in whatever bad assumptions you walked in the door with into your code. Better to code something - anything - up and use what you learned in the process to iterate on your software architecture decisions. I also generally hate modern OO and these days I prefer static types over dynamic types.
But yeah. Interesting questions! Thanks for putting this together.
Same. I am dead center but this did not really give me any hard questions. For example I controversially believe that user applications do not benefit from unit testing and that manual testing is both faster and superior in quality. Similarly, I believe that for most situations Python’s optional type system is a waste of time and mental load. It is not what catches bugs.
I think both are appropriate for well-scoped library code. But application code is just not well defined enough in most circumstances to get any benefit from it. But this quiz didn’t ask that and I suspect this would swing the score quite strongly.
Ok. But then I took it 4 more times. I tried to maximize in any direction, and always stayed within the bullseye center-right. One time I was more computer, but I never made it out of the center 20% radius.
Maybe the message is that none of us are extremists, because we care? I like it
Mmm I don’t think I agree. The way I structure code in C or rust is subtly different than how I’d write the same program in Java. OO python or Ruby looks different from data oriented Python or Ruby.
They’re all imperative programs though. “OO vs Imperative” isn’t the right name for that design choice.
I suspect this test gives central values to many test-takers because the internal consistency of the questions has not been verified.
Anyone can come up with ten questions and claim "these measure a programmer's fondness for abstraction". Unfortunately, we cannot verify this claim. What we can do is check statistically if the answers to the ten questions correlate strongly enough that we think they measure the same thing, whatever that is.
This involves a trial run of the quiz followed by statistics such as Cronbach's alpha and principal componoment analysis. Often one finds that the questions do not measure the same thing at all! It is difficult to come up with a set of internally consistent questions.
When we add together inconsistent questions (as is done here to get the final score), we don't get stronger signal: the noise from the uncorrelated questions cancels out and almost everyone gets a result near zero.
I know OP is not the author, but if the author reads this: if you're lucky, the data from this audience mey reveal a subset of two or three questions per dimension that are internally consistent. Use only those in the quiz going forward! Then you can trial more questions one at a time and keep only those that are consistent with the first set. (Is this not p-hacking? Yes but in this context who cares.)
I came here to write a similar comment. To me it read more like: When driving, do you prefer to a) turn left, b) turn right, c) press the gas pedal, d) press the brake pedal, or e) execute a sequence of actions that get you safely to your destination? There's a good idea here, perhaps, but it's obscured by very weak questions.
You prefer elegant, high-level solutions that are intuitive and accessible to other developers. You likely favor functional programming, clear abstractions, and code that reads like prose.
Spot on I'd say; code is the best documentation unless I'm writing some bespoke mathematical algorithms, even then I try to offset it by writing and using clear variables/function names.
Also, I'd recommend NOT telling the test taker which dimensions they're getting scored on as it will affect the responses. For example, if you gave me a test telling me that you're gonna score me on Introversion-Extraversion and Neuroticism-Emotional Stability, then I may be more biased to answer questions to score me as an emotionally stable introvert since that's what I identify as.
Oh, and
Abstract ↔ Concrete: 0 Neutral |
Human ↔ Computer Friendly: +11 Human-Friendly
These appear to be the possible programming philosophy descriptions (found by doing a keyword search in main.js)
Abstract/Human-Friendly: "You prefer elegant, high-level solutions that are intuitive and accessible to other developers. You likely favor functional programming, clear abstractions, and code that reads like prose."
Abstract/Computer-Friendly: "You appreciate mathematical elegance and optimal solutions. You probably enjoy languages with powerful type systems, formal methods, and code that leverages compiler optimizations."
Concrete/Human-Friendly: "You value clarity and directness in code. You prefer explicit, step-by-step solutions that are easy to understand and debug, even if they require more lines of code."
Concrete/Computer-Friendly: "You focus on efficiency and performance. You like to work close to the metal, optimize for speed and memory usage, and prefer direct control over system resources."
This string is also present in the source code, but it doesn't appear possible to trigger its display: "You have a balanced approach to programming, adapting your style based on the specific requirements of each situation."
You prefer elegant, high-level solutions that are intuitive and accessible to other developers. You likely favor functional programming, clear abstractions, and code that reads like prose.
You prefer elegant, high-level solutions that are intuitive and accessible to other developers. You likely favor functional programming, clear abstractions, and code that reads like prose.
“Do you prefer strong static or dynamic or a mix?” Well… are we teaching 9th graders an intro to coding, writing a quick script to answer a bespoke data question, or writing a data processing library?
“On algorithms I focus on…” Okay, well… do we care about performance? Where is it running? How often will it run? Will the code be disposed of soon or live a decade? Do we need it working today or next week?
I just don’t understand how to even begin formulating an opinion on any of these questions without any context.
To use the compass analogy: shouldn’t you want to best know how to use a compass? What value is there in saying, “my favourite bearing is east-northeast”? That is, the substance in any of this is the “it depends…” portion. Any answers to this quiz are really just a proxy for the kinds of contexts people are solving problems in.
Take this example: "When debugging I typically:"
> Write tests to isolate the problem
In the case of math functions, or more primitive building blocks, writing tests can help ensure correctness of the underlying functions, to exclude them from the problem search.
> Reason about the code logically first
This is always useful.
> Use a debugger to step through code systematically
Useful when dealing with a larger codebase and the control flow is hard to follow. The call stack can give quick guidance over trying to manually decipher the control flow.
> Add print statements to understand data flow:
Useful when debugging continuous data streams or events, e.g. mouse input, where you don't want to interrupt the user interaction that needs to be debugged.
But quizzes like this are explicitly designed to be contextless. You're supposed to answer with your gut feeling, the first step in the random walk.
Someone who actually depends heavily on context and doesn't have a strong preference either way will answer quickly, and end up near the center on all dimensions of interest - that's where I landed:
""" You value clarity and directness in code. You prefer explicit, step-by-step solutions that are easy to understand and debug, even if they require more lines of code. Abstract ↔ Concrete: -2 Concrete Human ↔ Computer Friendly: +5 Human-Friendly """
> Someone who actually depends heavily on context and doesn't have a strong preference either way will answer quickly, and end up near the center on all dimensions of intere
Which is basically all that this test is good for. If you're not somewhere around the center, you're either a junior dev or not a very good dev.
For example, I prefer a mix of static and dynamic typing. Even for performance optimization where technically I do all four of the options, trying to write performant code from the start is what I prefer to do when possible.
This isn’t about the right tool for the job as much as what kinds of tools to you prefer to work with when given the choice.
it is not a DSA test, but more like intuition test
"""
When debugging, I typically:
* Write tests to isolate the problem
* Reason about the code logically first
* Add print statements to understand data flow
* Use a debugger to step through code systematically
"""
and I typically do all 4 of those things. If I don't understand the dataflow yet, I'll start with either print statements or the debugger to understand that. If it's code where I already understand the dataflow, and I can reason about the code already, I'll do that. Otherwise I might first write tests to help me reason about the code. But I generally do all of these things and the order depends on my specific problem.
Abstract ↔ Concrete: -13 Concrete Human ↔ Computer Friendly: +7 Human-Friendly
Eg for testing, do I want “whatever finds bugs most effectively” or “property based testing”? Well, property based testing is usually the most time efficient way to find bugs. So, yes both of those. Debugging: do I use print statements, or a debugger, or logically think it through? Yes all of those. But if I arbitrarily said I use a debugger in a multiple choice test, I don’t think that tells you much about how I code!
I do - controversially - think some of the answers are naming bad practices. Like abstraction first is a bad idea - since you know the least about your problem before you start programming it up. Abstraction first inevitably bakes in whatever bad assumptions you walked in the door with into your code. Better to code something - anything - up and use what you learned in the process to iterate on your software architecture decisions. I also generally hate modern OO and these days I prefer static types over dynamic types.
But yeah. Interesting questions! Thanks for putting this together.
I think both are appropriate for well-scoped library code. But application code is just not well defined enough in most circumstances to get any benefit from it. But this quiz didn’t ask that and I suspect this would swing the score quite strongly.
I got very close to centre also, just slightly on the "concrete" and "human friendly" sides. But who wouldn't want to be concrete or human-friendly?
Maybe the message is that none of us are extremists, because we care? I like it
I thought the imperative vs object oriented was strange, since they are the same thing.
They’re all imperative programs though. “OO vs Imperative” isn’t the right name for that design choice.
Anyone can come up with ten questions and claim "these measure a programmer's fondness for abstraction". Unfortunately, we cannot verify this claim. What we can do is check statistically if the answers to the ten questions correlate strongly enough that we think they measure the same thing, whatever that is.
This involves a trial run of the quiz followed by statistics such as Cronbach's alpha and principal componoment analysis. Often one finds that the questions do not measure the same thing at all! It is difficult to come up with a set of internally consistent questions.
When we add together inconsistent questions (as is done here to get the final score), we don't get stronger signal: the noise from the uncorrelated questions cancels out and almost everyone gets a result near zero.
I know OP is not the author, but if the author reads this: if you're lucky, the data from this audience mey reveal a subset of two or three questions per dimension that are internally consistent. Use only those in the quiz going forward! Then you can trial more questions one at a time and keep only those that are consistent with the first set. (Is this not p-hacking? Yes but in this context who cares.)
Do you prefer to use:
1. Capital letters
2. Lower-case letters
3. Numbers
4. The characters required for the text I am writing to be correct and legible
The graph is would be better plotted with the radius representing standard-deviation or some other measure rather than the raw score.
Abstract ↔ Concrete: +7 Abstract Human ↔ Computer Friendly: +11 Human-Friendly
Spot on I'd say; code is the best documentation unless I'm writing some bespoke mathematical algorithms, even then I try to offset it by writing and using clear variables/function names.
Also, I'd recommend NOT telling the test taker which dimensions they're getting scored on as it will affect the responses. For example, if you gave me a test telling me that you're gonna score me on Introversion-Extraversion and Neuroticism-Emotional Stability, then I may be more biased to answer questions to score me as an emotionally stable introvert since that's what I identify as.
Oh, and Abstract ↔ Concrete: 0 Neutral | Human ↔ Computer Friendly: +11 Human-Friendly
Abstract/Human-Friendly: "You prefer elegant, high-level solutions that are intuitive and accessible to other developers. You likely favor functional programming, clear abstractions, and code that reads like prose."
Abstract/Computer-Friendly: "You appreciate mathematical elegance and optimal solutions. You probably enjoy languages with powerful type systems, formal methods, and code that leverages compiler optimizations."
Concrete/Human-Friendly: "You value clarity and directness in code. You prefer explicit, step-by-step solutions that are easy to understand and debug, even if they require more lines of code."
Concrete/Computer-Friendly: "You focus on efficiency and performance. You like to work close to the metal, optimize for speed and memory usage, and prefer direct control over system resources."
This string is also present in the source code, but it doesn't appear possible to trigger its display: "You have a balanced approach to programming, adapting your style based on the specific requirements of each situation."
Your Programming Philosophy
You prefer elegant, high-level solutions that are intuitive and accessible to other developers. You likely favor functional programming, clear abstractions, and code that reads like prose.
Abstract ↔ Concrete: +3 Abstract
Human ↔ Computer Friendly: +11 Human-Friendly
You prefer elegant, high-level solutions that are intuitive and accessible to other developers. You likely favor functional programming, clear abstractions, and code that reads like prose.
Abstract ↔ Concrete: +4 Abstract Human ↔ Computer Friendly: +9 Human-Friendly