Design patterns are definitely descriptive, not prescriptive. That’s not a personal opinion at all!
Also, cognitive dissonance is the uncomfortable feeling you get when you encounter a contradiction in your beliefs and are faced with the need to update your worldview, but it’s being applied here to describe the uncomfortable feeling you get when you encounter… type punning?
(Edit: sorry, I’m nitpicking an otherwise good list)
A really good writeup I’ll keep bookmarked. There is just one thing I don’t agree with:
When you’re beginning with any language/library/framework, check their CoC; they will protect you from being harassed for not immediately getting what is going on instead of blocking you from telling them what you think.
I’m mentioning this ’cause a lot of people complain about CoC, but they forget that they allow them to join in any project without being called “freaking noob” or “just go read the docs before annoying us”.
Also, remember that most people that are against CoCs are the ones that want to be able to call names on everyone.
There are many small and big communities that choose not to have a CoC, for good reasons. It’s a bit of a stretch to imply that they were all toxic. To be honest, I have seen much more drama and toxicity in CoC-“guarded” communties. It provides an opportunity for people who can’t contribute anything in code/documentation to the project, but want to be a part of it, to become “CoC-lawyers” and go around policing people on mailing lists and general discussions for minor things.
But I don’t want to start an off-topic discussion about CoC’s here, as it is a complex topic and has many facets. If you are happily using a CoC for your project, godspeed to you.
If you have a function, that calls a function, that calls a function, that calls a function, that calls a function, that calls function, you may be sure it will be a hell to read later.
I don’t have a problem with functions that call functions etc. I get the author’s point about cognitive load, but I think the problem is better characterised by saying that I should be able to grasp what’s going on just by reading a call, without having to go look up the function’s definition. This is the difference between indirection (new components built out of existing components) vs abstraction (new concepts to think in terms of; which just-so-happen to be built out of existing components, but that’s an implementation detail).
Design patterns are definitely descriptive, not prescriptive. That’s not a personal opinion at all!
Also, cognitive dissonance is the uncomfortable feeling you get when you encounter a contradiction in your beliefs and are faced with the need to update your worldview, but it’s being applied here to describe the uncomfortable feeling you get when you encounter… type punning?
(Edit: sorry, I’m nitpicking an otherwise good list)
Not only the uncomfortable feeling, but also the human tendency to avoid or ignore information that contradicts their existing worldview.
I’d like to point out the number of times some permutation of “document your work” appears.
We know who fucked who in Pompeii due to graffiti…Stonehenge remains a mystery.
A really good writeup I’ll keep bookmarked. There is just one thing I don’t agree with:
There are many small and big communities that choose not to have a CoC, for good reasons. It’s a bit of a stretch to imply that they were all toxic. To be honest, I have seen much more drama and toxicity in CoC-“guarded” communties. It provides an opportunity for people who can’t contribute anything in code/documentation to the project, but want to be a part of it, to become “CoC-lawyers” and go around policing people on mailing lists and general discussions for minor things.
But I don’t want to start an off-topic discussion about CoC’s here, as it is a complex topic and has many facets. If you are happily using a CoC for your project, godspeed to you.
If the author is reading this, why don’t you set the title of the HTML page to something useful?
Give the guy a break, .NET 4.0 is hard and he’s been in software development for all of three decades.
Sheesh, the lobste.rs elitist crowd!
I don’t have a problem with functions that call functions etc. I get the author’s point about cognitive load, but I think the problem is better characterised by saying that I should be able to grasp what’s going on just by reading a call, without having to go look up the function’s definition. This is the difference between indirection (new components built out of existing components) vs abstraction (new concepts to think in terms of; which just-so-happen to be built out of existing components, but that’s an implementation detail).