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.
arjonagelhout 9 hours ago [-]
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.
thierrydamiba 8 hours ago [-]
Is the fact that the answer isn’t easy a feature or bug?
teapot7 7 hours ago [-]
Oh a bug, surely. How is the quiz supposed to give you insights when it's unanswerable?
IgorPartola 6 hours ago [-]
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.
ethan_smith 2 hours ago [-]
The "it depends" instinct is actually the hallmark of an experienced engineer - context-awareness is precisely what separates dogmatic programming from effective problem-solving.
keepamovin 2 hours ago [-]
I’m that way with personality tests haha but this one i screwed down:
pick what you would choose by default. in case of multiple options, pick the first option you would try.
it is not a DSA test, but more like intuition test
jll29 3 hours ago [-]
That's why I hate (and never use in exams) multiple choice questions.
kqr 2 hours ago [-]
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.)
BrissyCoder 27 minutes ago [-]
> I suspect this test gives central values to many test-takers because the internal consistency of the questions has not been verified.
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
josephg 9 hours ago [-]
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.
IgorPartola 6 hours ago [-]
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.
Y_Y 9 hours ago [-]
Same. I got dead centre, even though I feel like I have strong biases, and rarely agree with my coworkers on design and style choices.
dang 8 hours ago [-]
Maybe your preferences are so contradictory that they cancel each other out :)
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?
QuantumNomad_ 7 hours ago [-]
I likewise got very close to the centre, and was surprised.
If you had shown me the diagram only, and asked me to position myself on it I would have placed myself on the middle of the perimeter of the second quadrant (135 degrees along the circumference), to indicate that I strongly prefer human friendly and concrete over computer friendly and abstract respectively.
And even as I was answering the questions I felt that I was leaning heavily towards that, with answers like starting simple, documenting well and so on.
I think some of the pull in the opposite direction comes down to interpretation as well.
And actually I see in the repo for the quiz there is a JSON file that contains scores for each question that one could have a look at to see if the answers are scored the same way that you think they would be.
For people who haven’t done the quiz yet, don’t look at the json file until after taking the quiz.
Also, the ranges of possible values are not equal in each direction so the resulting compass is biased a bit in favour of abstract and human friendly over concrete and machine friendly respectively.
abstract: min=-25, max=38
human: min=-27, max=33
Which means that the circle diagram showing the result can give a bit of wrong impression imo.
Edit to add: In a frequency plot you can see also specifically how the possible score additions and subtractions are a bit unevenly distributed
I forget who said it, but "I don't truly understand a program until the 6th time I've written it."
treeform 7 hours ago [-]
That's such a good quote. I can't find it anywhere, so I'll attribute it to you.
nemetroid 2 hours ago [-]
I can't find it, but believe Joe Armstrong said something along those lines (but I think his number was ten).
massung 5 hours ago [-]
Sounds like something Chuck Moore would have said. I have no idea if he did, but it made me think of him.
Supermancho 7 hours ago [-]
+1 abstract and 0 Neutral.
I thought the imperative vs object oriented was strange, since they are the same thing.
josephg 3 hours ago [-]
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.
kqr 3 hours ago [-]
The way I was taught "imperative" encompasses both "object-oriented" and "procedural", much like "declarative", the opposite of imperative, captures both functional and logic.
teapot7 6 hours ago [-]
Yes! The number of lousy articles and blog posts I've seen that talk about "imperative, oo and functional programming"...
IshKebab 1 hours ago [-]
Yeah I like the idea but the questions need serious work. I only got through a few before giving up because they're ambiguous or I want to say yes to multiple things. E.g. the question about comments - they're basically all true. Or the question about architecture - it's basically impossible to answer.
0xDEAFBEAD 3 hours ago [-]
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."
hermannj314 8 hours ago [-]
This quiz is a good reminder of why I support ranked choice voting.
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.
29 minutes ago [-]
foxbarrington 9 hours ago [-]
GPT-5’s results:
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
thewebguyd 9 hours ago [-]
-11 concrete, +14 human friendly lol.
> "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"
Sounds about right.
silisili 2 hours ago [-]
More concrete/less human friendly, but same message. And I couldn't have summed up my own philosophy towards code better, to be honest.
ilovefood 34 minutes ago [-]
Almost exactly the same score :)
joshdavham 9 hours ago [-]
This was fun!
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
jonathrg 9 hours ago [-]
Yes, it's so easy to tell which direction each question will push the result, that it kinda distracts from thinking about the question
throwaway81523 3 hours ago [-]
I got bored after the 3rd or 4th question. It's like they were all tricks.
tgv 2 hours ago [-]
That's not how I saw it. They're very global, but relevant stances, although very much focused on beginning a new, small to medium sized project.
I ended up slightly Hitchcock (North by North West) of the center (-3, + 12). It's true I'm rather practical, but other people in here call themselves opinionated and end up near the center as well. So perhaps not tricks, but rather too broad/shallow for the measure it takes? Or perhaps the mapping from question to score is too simple.
stego-tech 9 hours ago [-]
Concrete and human-readable here, which is exactly what I expected to get coming from IT (with short job cycles, high turnover, comparatively low wages) where my guiding principle is not being a dick to the next person by making sure they understand why I did things a given way, and where time to learn new things is very much a “thrown in the fire” type scenario (e.g., learning Asterisk while your global support line is down and your contractor holds non-regional business hours for support).
ur-whale 19 minutes ago [-]
IMO not a very useful quiz.
At most questions, my answers would have been: "all of the above" or "it depends on the context"
JSR_FDED 7 hours ago [-]
This was fun, and the conclusion was pretty good (slight preference for human-friendly and concrete).
At first I was frustrated that the answers were very much “it depends”, but then I decided that (a) this is low stakes, (b) just pick the closest one as if someone held a gun to your head. End result was fine.
cardamomo 8 hours ago [-]
I would love to see how this overlaps with folks' preferred languages, frameworks, and tools.
flufluflufluffy 7 hours ago [-]
Abstract ↔ Concrete:
-3 Concrete
Human ↔ Computer Friendly:
+21 Human-Friendly
Pretty much what I expected. Probably also depends on what kind of code you write. I assume somebody who writes kernel drivers would lean more towards computer friendly.
procaryote 2 hours ago [-]
If the author is reading
> pefixes and suffixes
the first word should probably be "prefixes"
sbrkYourMmap 8 hours ago [-]
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.
We write code for machines. For humans we write human-readble media and formats; like document, diagrams, specifications, and ect...
procaryote 1 hours ago [-]
I'm not sure these are independent variables. I mostly care about concrete code or abstractions as a way to make the code more human friendly.
And isn't being human friendly while building performant enough solutions the whole point of code? If we didn't need the humans, we'd do machine code.
bogdanoff_2 7 hours ago [-]
I'm not even sure what the options for the first question mean...
vjvjvjvjghv 9 hours ago [-]
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:+7 Human-Friendly
I like "code that reads like prose" :-)
brentm 8 hours ago [-]
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.
corv 10 hours ago [-]
Seeing Treeform here immediately made me think of Nim, and lo-and behold that's what the Javascript is generated from, cool!
treeform 7 hours ago [-]
Thanks! It's all Nim, all the time.
fnord77 2 hours ago [-]
Cool. I feel right in the center. Where's my job offer?
cyberax 8 hours ago [-]
I ended right in the center:
> 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.
austin-cheney 11 hours ago [-]
Abstract ↔ Concrete:
-2 Concrete
Human ↔ Computer Friendly:
-5 Computer-Friendly
10 hours ago [-]
zzo38computer 9 hours ago [-]
It does not display the quiz. I found the JavaScript file, which is compiled from Nim, and I found the source code, and the questions.
For many questions, the answer depends on the specific use, and/or will be something other than what is listed there. (For example, debugging will involve all of the four things that are listed there.)
I am also not so sure that the quiz describes the programming philosophy very well, but this is a general feature of these kind of quiz anyways.
I seem to disagree with many modern programmers about programming philosophy, but some I seem to have more agreement with some people who do some things in the older ways (although not completely).
Bjorkbat 7 hours ago [-]
Ooh, fun, a FizzBuzzFeed quiz!
bravesoul2 9 hours ago [-]
I got outer bull. 25. Is that good?
PeterWhittaker 9 hours ago [-]
-1 concrete, +16 human friendly.
Feels about right.
BarryMilo 10 hours ago [-]
+17 human+friendly, I guess I don't care what computers think lol.
__loam 9 hours ago [-]
0 concrete +1 human centered. Just put the code in the bag I guess.
revskill 4 hours ago [-]
Bad. It is annoying to do 20 questions quiz. The author is a bad developer.
“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.
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.
Abstract ↔ Concrete: -13 Concrete Human ↔ Computer Friendly: +7 Human-Friendly
it is not a DSA test, but more like intuition test
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
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?
If you had shown me the diagram only, and asked me to position myself on it I would have placed myself on the middle of the perimeter of the second quadrant (135 degrees along the circumference), to indicate that I strongly prefer human friendly and concrete over computer friendly and abstract respectively.
And even as I was answering the questions I felt that I was leaning heavily towards that, with answers like starting simple, documenting well and so on.
I think some of the pull in the opposite direction comes down to interpretation as well.
And actually I see in the repo for the quiz there is a JSON file that contains scores for each question that one could have a look at to see if the answers are scored the same way that you think they would be.
For people who haven’t done the quiz yet, don’t look at the json file until after taking the quiz.
https://github.com/treeform/devcompas/blob/master/questions....
abstract: min=-25, max=38
human: min=-27, max=33
Which means that the circle diagram showing the result can give a bit of wrong impression imo.
Edit to add: In a frequency plot you can see also specifically how the possible score additions and subtractions are a bit unevenly distributed
Abstract frequencies: Human frequencies: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.
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."
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.
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 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"
Sounds about right.
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
I ended up slightly Hitchcock (North by North West) of the center (-3, + 12). It's true I'm rather practical, but other people in here call themselves opinionated and end up near the center as well. So perhaps not tricks, but rather too broad/shallow for the measure it takes? Or perhaps the mapping from question to score is too simple.
At most questions, my answers would have been: "all of the above" or "it depends on the context"
At first I was frustrated that the answers were very much “it depends”, but then I decided that (a) this is low stakes, (b) just pick the closest one as if someone held a gun to your head. End result was fine.
Human ↔ Computer Friendly: +21 Human-Friendly
Pretty much what I expected. Probably also depends on what kind of code you write. I assume somebody who writes kernel drivers would lean more towards computer friendly.
> pefixes and suffixes
the first word should probably be "prefixes"
We write code for machines. For humans we write human-readble media and formats; like document, diagrams, specifications, and ect...
And isn't being human friendly while building performant enough solutions the whole point of code? If we didn't need the humans, we'd do machine code.
Abstract ↔ Concrete: +4 Abstract Human ↔ Computer Friendly:+7 Human-Friendly
I like "code that reads like prose" :-)
> 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.
Human ↔ Computer Friendly: -5 Computer-Friendly
For many questions, the answer depends on the specific use, and/or will be something other than what is listed there. (For example, debugging will involve all of the four things that are listed there.)
I am also not so sure that the quiz describes the programming philosophy very well, but this is a general feature of these kind of quiz anyways.
I seem to disagree with many modern programmers about programming philosophy, but some I seem to have more agreement with some people who do some things in the older ways (although not completely).
Feels about right.