4 ms·
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 a
by josephg 1y 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.
- Y_Y 1y agoSame. 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 1y agoMaybe 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_ 1y agoI 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. https://github.com/treeform/devcompas/blob/master/questions.json https://github.com/treeform/devcompas/blob/master/questions....
- QuantumNomad_ 1y agoAlso, 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 Abstract frequencies (ASCII bar chart) -2: ########## 6 -1: ############################## 18 0: ######################################## 24 1: #################### 12 2: ################################# 20 ---------+---------+---------+---------+ (max = 24) Human frequencies (ASCII bar chart) -2: ################## 11 -1: ##################### 13 0: ######################################## 25 1: ########################### 17 2: ###################### 14 ---------+---------+---------+---------+ (max = 25) Abstract frequencies: -2: 6, -1: 18, 0: 24, 1: 12, 2: 20 Human frequencies: -2: 11, -1: 13, 0: 25, 1: 17, 2: 14
- andai 1y agoI forget who said it, but "I don't truly understand a program until the 6th time I've written it."
- Supermancho 1y ago+1 abstract and 0 Neutral. I thought the imperative vs object oriented was strange, since they are the same thing.
- teapot7 1y agoYes! The number of lousy articles and blog posts I've seen that talk about "imperative, oo and functional programming"...
- josephg 1y agoMmm 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 1y agoThe way I was taught "imperative" encompasses both "object-oriented" and "procedural", much like "declarative", the opposite of imperative, captures both functional and logic.
- josephg 1y agoIt’s in the word. “Imperative” means something like “urgent demand to action”. Imperative code is code where each line is a command for the computer to do something. Like functions in C - which are made of a list of statements that get executed immediately when they get visited. C++ and Java are imperative languages because functions are expressed as a list of imperative statements. But there’s nothing inherently imperative about structs and classes. Or any of the concepts of OO. You could have encapsulation, inheritance and polymorphism in a functional language just fine if you wanted to. Haskell fits the bill already - well, depending on your definition of OO.
- Supermancho 1y agoThis is an excellent talk explaining how procedural (imperative) came to be OO - which are abstractions over procedural statements: https://www.youtube.com/watch?v=mrY6xrWp3Gs https://www.youtube.com/watch?v=mrY6xrWp3Gs To summarize: Block scope is procedural. Wrapping that up in other abstractions like objects, which are fancy closures, eventually ends up in OO. When talking about OO, people often conflate the data design with the program abstractions. Ofc you program differently in languages that have dedicated data structures and idioms around domain driven design^1, which take advantage of imperative execution within those mechanisms as well. eg Java Spring - Spring has a lifecycle. It's imperative. Beans and other annotations have a lifecycle. It's also imperative. ^1 Domain driven design is still the norm and any efficiency observed from circumventing (or ignoring) the design is considered novel, which should inform the industry that there might be a better way. Good enough wins out again.
- IgorPartola 1y agoSame. 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.
- b33j0r 1y agoOk. 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