The Lounge is rated Safe For Work. If you're about to post something inappropriate for a shared office environment, then don't post it. No ads, no abuse, and no programming questions. Trolling, (political, climate, religious or whatever) will result in your account being removed.
I have recently started rereading Notes on Structured Programming by Edsger W. Dijkstra (published in 1972 when I was a young programmer). I had read this article before (1975). It provided insight that solved a very complex problem in the architecture for a relational database management system. (As an aside, this article is the source for the famous tenet "Program testing can be used to show the presence of bugs, but never to show their absence!")
Early on in his notes, Dijkstra suggests that "experienced and competent programmers" would be irritated by the length of his proof for the correctness of the program part:
d := D; whilenon prop ( d ) do d := f ( d )
To which he states
"Personally I am inclined to conclude from this length that programming is more difficult than is commonly assumed; let us be honestly humble and interpret the length of the proof as an urgent advice to restrict ourselves to simple structure whenever possible and to avoid in all intellectually modesty "clever constructions" like the plague."
I revisit Marc Clifton's lament about "dumbing down code so that it can be maintained by junior devs." I suggest that C# syntactic sugar ("LINQ (except for basic things), metadata, reflection, extension methods, and any of the C# 7.0 language features") falls under the domain of clever constructions. And it is here that I suggest that what is being called "dumbing down" is, in reality, a reasonable approach in the production environment.
Recall too that programmers do not usually own the code they produce. Because it is produced as a work for hire, the programmer's employer is the owner. And probably more importantly, the employer is in business to produce the code.
Therefore I suggest that an employer who desires that code be produced that can be maintained by junior developers is well within his rights (as well as within his obligations to his shareholders). Decrying such direction by an employer is intellectual arrogance on the part of the employee.
Why don't you go over to Q&A and tell them the good news. No need to learn anything anymore. The others are now responsible to make everything easy enough for them to handle.
Call me arrogant, but most juniors are idiots, more in the original greek sense of the word. I prefer helping them to overcome this (if you believe the ancient Greeks) natural state of ignorance and gain first experience in some area.
It always was the job of architects and seniors to make the code as complex as needed and as simple as possible. That's only one aspect of maintainability. Maintainability is the real goal, not dumbing down at all cost. If that means herding the juniors into a meeting room and giving them some training, then so be it.
I have lived with several Zen masters - all of them were cats.
His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.
So CodeWraith got most of it correct. Over engineering is the bane of our industry, it destroys maintainability. I have a mantra - maintenance is the most expensive aspect of software.
that an employer who desires that code be produced that can be maintained by junior developers
I agree that this is both the right and the responsibility of the owner. However the "junior developer" must have a reasonable level of competence and are expected to learn and expand their skills so only feeding them the simplest code structures is doing a disservice to them and the employer.
I guess the issue is defining where over engineering begins. I failed to do this with one developer and we now have a project that no one can support as we eventually let the dev go .
Never underestimate the power of human stupidity
probably more importantly, the employer is in business to produce the code.
Most often: the company is in business to make money, the employer to ensure that happens by managing managers who manage programmers who write code.
Complicated code that utilizes newer language features to achieve excellent results ... speed, less memory use, enables new features ... is going to get used: if the direct (adoption, updating, testing), or indirect (legacy compatibility) costs are tolerable.
The issue of willy-nilly adoption of new syntactic sugar: is a red herring
«... thank the gods that they have made you superior to those events which they have not placed within your own control, rendered you accountable for that only which is within you own control For what, then, have they made you responsible? For that which is alone in your own power—a right use of things as they appear.» Discourses of Epictetus Book I:12
an employer who desires that code be produced that can be maintained by junior developers is well within his rights
It's also your right to desire your house to be built using only Duplo blocks (the big Lego blocks) so toddlers can do renovations.
With a house that's obviously a bad idea, why is this not the case for software?
Unfortunately, writing maintainable code seems to be very difficult for juniors and seniors alike.
No matter your desires, you'll end up with a big ball of mud anyway.
This is a bit subjective.In the matter that someways you save time and write less code , which means less code to maintain by the junior developer once he understands the code. He can later extent or add feature as needed.
"Progress doesn't come from early risers – progress is made by lazy men looking for easier ways to do things." Lazarus Long
To be honest I didn't follow and did not clearly grasped the whole argument.
However, when asked to "dumb down the code" it often means don't used this newfangled syntax that I don't (yet) understand, such as "await DoThisAsync()"
The problem for this request are 3 fold:
1. it is often the case that by the time you make the effort to do do it and rewritten what need be written, everybody has moved on and use this previously so called "newfangled syntax"
2. This newfangled syntax is, in fact, supported by lot of compiler infrastructure and language research by C# team and will reduce you program's number of bugs, hence not using it, will increase your bug and development time
3. it is literally painful and extremely confused to be told do not used keyword X, or library Y, one start to wonder how complicated and unintuitive is the result is expected to be. In other word if I ask you to move from A to B, but to not use a straight line and to not use any shortcut, it's a bit confusing what path to follow and one is tempted to, half of spite, half of attempt at pleasing, half of confusion, to go through as many hoops as possible.
I completely understand restricting what libraries, languages, and other technologies can be used. You don't want a tangled mess of 12 languages and 500 libraries. But when it comes to the code itself, the business should take a step back - you've hired professionals for a reason.
I'm a big proponent of readability. It helps not only in debugging but in maintenance as well. Language constructs are often included to improve this aspect of the language. They also function as abstractions since these simple constructs often obscure carefully constructed code. A great example is lock. This expands in C# (from 4.0+) to:
bool lockTaken = false;
var temp = obj;
Monitor.Enter(temp, ref lockTaken);
The lockTaken code was added because of a bug in the 3.0 implementation but most people didn't even notice because they used the language abstraction.
This topic as a whole ties a bit into a pet peeve of mine: The idea that everyone should conform to the lowest common denominator. No. Everyone should work to bring that person or people up to speed. If you keep lowering the bar eventually you're left with people that can't accomplish anything.
Visited Palermo yesterday and found the Capucin catacombs to be the best place to evade the scorching heat, it is not for the faint hearted though, hundreds of skeletons and mummified remains are staring at you, mostly placed in an upright position and dressed in their original clothes.
The numerous churches of Palermo are nice and cool too.
The Palermians themselves seem to flee from their bustling city in the weekend to the beach of Isola delle Femmine.
Luckily for us, as we even managed to find a free parking place at the Bonnaro marketplace.
Today we will go to the salt lakes of Nubia and stay there for a few days.