The radical idealist problem
This is merely a simple observation. I had a chance to talk with a few people recently, and I heard something that really bothered me. Sadly, this is not a new thing, but it is still extremely annoying and disrespectful.
Basically, the problem is that concerns that are being brought up are dismissed as unrealistic, idealist and non workable in the real world. The people who bring up those concerns are also dismissed as radical tree huggers with no concept of how to build things in the field.
The reason that I think this is stupid, insulting and disrespectful is that a lot of the people bringing up those concerns are real world practitioners. It is more than just merely annoying to hear that.
Calling a raised problem an idealist issue or a perfectionist problem is an eventual guarantee that the feedback and concerns being brought up will dry up. And that the next feedback received will be in terms that aren’t favorable.
Comments
what do you talking about ?
Sorry, I do not get it.
Totally agree - it pisses me off big time.
I also hate the "this is an academic issue, we need to focus on practical things" line. I've had this one from various technical decision makers when talking to them about SOLID, MVC, Use Cases and NHibernate.
Some people who don't dig theory class anything with an acronym is "academic".
Do you mean the old good misunderstanding between the people "the world as it is" and "the world as I would like to be"?
I think you need to give some context as to what you mean.
By context I mean the example you are talking about.
While it is indeed not 100% clear what you're talking about (I think I can guess), I'm afraid it can get much worse than that...
You could find yourself in a team (with lots of talented people) ran by a 'dictator' and who thinks that WRITING legacy code (and 'building your own freakin' framework instead of adopting good stuff that's just up for grabs) is the way to go! And as soon as you (read: everyone) even start to express (gently) why you're (read: everyone is) having a problem with that, you are excused.
This is not only stupid, insulting and disrespectful it also very sad.
I think i understand what you mean. From my point of view the reason for this is that most developers are in there only to simply do a job and have no further interest in new approaches or technologies. I see it everyday in my company. I did send around some links to articles from your blog...the reaction was "don't understand", "theoretical and academic" etc. After saying that, they turned around to their computers and wrote code like this:
So one can imagine how hard it is to talk to them about MVC, NHibernate, Castle...in the end they laugh about you and call you an "idealist"...
I know exactly what he's talking about. Quite often when I propose a (half-baked) solution that is slightly beyond trivial, I hear "I know you've got a nice theory, and there is a lot of research done in the field, but there's theory and there's real world. We need to focus on solving business problems" and so on and so forth. As if I was proposing to build an AI to automate our builds or a robot to run our unit-tests!
I have a strange feeling this has to do with a recent debate about artificial benchmarks. ;)
Frans,
Actually, no. This was on the queue long before that.
I was once branded a "radical idealist" for proposing an extremely impractical, utopian idea: unit testing code. :)
I couldn't agree more Ayende. This has happened to me more times than I can count. And it's not about technology choices. It typically revolves around using the technologies you chose correctly. This is extremely frustrating, and unfortunately you're right, it doesn't get resolved it instead leads to poorer software because concerns about the software are no longer being raised.
A similarly annoying thing is being accused of being "enamored with new technology" or new approaches when you suggest that using framework X or using tool Y might improve things.
I believe this post is unnervingly relevant to me. I wonder to what degree.
Are you talking about getting challenged on using an IoC container, a library to map domain objects to DTOs, an AOP solution for logging or Dynamic Proxy to introduce behavior to some part of your system, etc...
Or are you talking about just a desire to spend the time to do things right the first time. Focusing on the design of the system and other elements that can be dismissed as perfectionist practices?
Frans, i thought the same .. as I was following it in NHDev ... Hmmm ... sometimes you have some stuff that suites N+1 contexts, I meant about the commenters
Isn't striving for perfection part of what makes us human? Of course you never actually get there. If any of the OSS tools we used were perfect there would be no further need to submit patches. Perfection is more about the journey than the destination, IMO.
"In practice" is just another theory based on antidotes at worst, or statistics at best.
Anyway, I have previously found it easy to slip into a truly radical idealist role when I was fresh out of college, sometimes going to unhelpful extremes to make code DRYer. The problem wasn't so much trying to achieve DRYness, but rather in my lack of understanding of how to go about doing so. The senior devs and project manager would rightly put a limit on what I would plan to do in a given month.
Although the response that ‘Oh your just an idealist – that wouldn’t work in the real world’ is practically designed to insult there is a lot of truth to it from their prospective once you do some translation.
Idealist = Anyone who purposes a solution that would probably work but you are uncomfortable with.
Real World = This current project right now.
Work = Solves the problem and you are comfortable with it.
Applying these translations you can see that it’s practically a tautology and just reflects poorly on them.
The number of times I have been accused of being a "purist" because I believe in Single Responsibilty Principle and Test Driven Development is ridiculous. Unfortunately this is the world we live in.
Hmm, I can't tell you how many times I've been told... "We don't really need Continuous Integration, we aren't a big company like the place you used to work at." The funny thing is while the company I did work at was large, my dev team was only 2 developers.
Anyway, I've decided that the solution is to no complain but change the way I advocate. To show why it adds value.
Tell me about it.
Try arguing with people who like writing everything as static classes.
Using an interface is apparently considered sacrilege ("but there's only one real implementation at the moment!") and IoC containers are a hanging offence. Unit testing is a "waste of time" and checkins are done without a buddy despite having no knowledge of the code base they're changing (inadvertent breaking changes ahoy).
The irony is they call "bullshit" on anything new while ignoring the fact that their own systems adhere to the principle of most surprise (what's up, static call in constructor that requires whole system to be initialised prior to instantiating a specific class!?)
I agree that people can get on the new Kool Aid and huff it up a little too much, but at least those people are open to working in new ways and actually dipping their toe in the water. People who sit back and dismissevery single new approach depress me.
@Belvasis
Thats funny, just yesterday I was working on some .net to tivoli stuff for some service desk software. I thought i would take a peek at some of the service desk code in the "Business Service" project.
Opened up the first file "BizSecurity.cs", all the methods were exactly what you gave an example of.
What i find more amusing those is the app was written in 2007, and no ORM framework was used, not even table adapters or anything. Just plain old executing of sql, no parameterized queries. So sad :(
The number of comments here cheers me up. I thought I was the only one with this problem. And now I'm ranting.
It's overwhelmingly hard to argue with people who believes in "pragmatism". They don't have interface, static class everywhere, undoubtedly no IoC/ORM/MVC at all, if-else logic liberally, every developers needs to write "unit-test" which is apparently a spreadsheet document of to explain what other developers need to run on the screen with hand to perform the "test". There's no layering, looong methods (seriously looking like C methods), objects and packages with cool jargon are created in seemingly random decision without no specific reason, SQL directly in UI (actually, there's no clear separation what is UI/domain/data-access), huge chunk of method and flags and global objects writing SQL statements, half-loaded entities requiring lots of if-else to use, there's not even any DB transaction. Big ball of mud.
The application itself is LARGE! One of the largest I've worked on.
The frustrating thing is that it doesn't cause you "real" problem. This makes it hard to convince anything better because they have no problem. Project is smooth.
Change-request, just throw in more mud to the code. Copy-paste some code, and put another if-else. Add some new flags in static Global object (which is already gigantic). There are many bugs, of course. Every release is preceded by QA testing phase (by a vendor paid by the client), and we just fix all the bugs we introduced by those muds. Put debugger, find why we get null-pointer-exception, why the value is wrong, then add some if-else, and we're done.
You know what, it seems to work! That's frustrating. It's a BIG project, MASSIVE code base, which is a huge chunk of flags and switches all over the place. But it's working!
I have been branded as "someone who always complicates matter". I'm trying to solve problem that doesn't exists. "There he comes Hendry with his another academic jargon". If you mention anything about IoC, ORM, MVC, DDD, TDD, mock, SRP, and stuffs, it's just academic bullshit, because all senior developers there (those in the industry for over 10 years) never even used (or heard) about it before in their long glorious experience. Much longer than mine obviously. So it's conclusive to managers and developers that I am talking bullshit.
I have no idea how to convince these people if the big-ball of mud seems to be working. Ridiculously painful but they can live with it. So I began to accept their way (for over 2 years now!), until I read this post and now start ranting again :P
Luckily I get to choose (almost) 100% of what I use, as I am the only programmer on the project :-)
I know what you mean though, I have been there myself in the past, with comments such as "Let's just get on and write the code shall we?".
Although I suspect this scenario probably resulted in this:
blog.peterlesliemorris.com/.../...it-failures.aspx
I'm thinking if someone else has the same problems that I have:
All my bosses don´t know what is software development. They think it is just a typing exercise that anyone can do with 2 months of training.
Cobol developers doing OOP software in C# without realy using OOP, just using strings all over the place, string.substring being used a lot;
When a training is needed the boss just say something like that: "I don´t know what it is, but 100 hours is too much. I think it can be done in 30 hours of training."
After 2 years of development of a project in java someone wake up in the morning and say "We can not depend on this framework XYZ. We have to rewrite this entire application in .NET in just 3 months".
This really annoys me, if someone isn't open to new ideas and willing to change then what are they doing working in a rapidly changing industry?
We need to come up with a nice humiliating term for those that call us idealists. Materialists / Conservators sounds too lame. Retards is to harsh.
I was actually thinking about this when reading your post on making all methods virtual by default.
I've seen the argument used before to justify dynamic proxies on NHibernate--i.e. "Everything should be made virtual anyway, so doing this to support NHibernate is not violating any theoretical principle".
Making everything virtual so you can use proxying in NH is non-ideal IMHO, since I DON'T agree that everything should be virtual by default (or explicitly). So I think that gives the argument against dynamic proxies in NH more credence, unless one adamantly believes that everything should be virtual anyway (which you seems to).
Just to be clear, I'm not asserting that this is why YOU think everything should be virtual by default (although you do advocate using NH ;) ).
-Why are you so naive? They are afraid to discuss with you your ideas,concerns feedback etc. because maybe they do not know the stuff as well as you do. Or maybe they know some but it may just mean them more work. Whatever the reason is, when you challenge them and they think they cannot keep up with you, they are choosing easy but effective tricks, It's a simple human behavior. And I also think they are not truly evil. Do not get depressed! You are not alone, challenge them in your blog(give their names, call them!), you are a blogger who has many readers and supporters, I'm sure your readers are going to contribute the discussions and these guys who can only talk behind your back are going to be forced to take you more seriously. In the end, if your concerns are right maybe they'll have no way but accept them. Maybe these discussions even may bring up new ideas and other discussions.
Can totally relate to this.
I've been told more than once "nobody else sees that as problem - come back when other people are complaining" or "you're new here - why are you complaining about this?" or my favourite "you're new here - these new-fangled ideas won't work here becase {insert asinine reason}".
It's frustrating, to say the least.
At one time I was one of those devs.
Now I'm called a 'purist'. It is so difficult to get a job with a company that uses best practices.
Take a look here in order to understand where it might come from. I guess this is the problem with an industry that has high salaries and great demand for people. The people who "artificially" arrived to the industry don't have the passion want to move to managerial positions since they don't real like the code and then u get then as decision makers...
Just two quotes:
(by George Bernard Shaw)
"The reasonable man adapts himself to the world; the unreasonable one persists to adapt the world to himself. Therefore all progress depends on the unreasonable man."
—
"Progress is impossible without change, and those who cannot change their minds cannot change anything."
@ zvolkov Technology Agnostics? :-)
ah, I feel like the old veteran, 'cos I think I've seen every possible way to do it rong. no matter how low my expectations go, someone always comes along and falls short of them.
I'm not sure what the original poster was even referring to, but the thread here has really taken an interesting turn, 'cos everybody gets it from their own perspective.
the history of the business is littered with the remains of companies and the careers of radical idealists who "knew what they were doing." the thing to remember is that usually the burnout trying to shut you down was once an idealist like yourself who learned something the hard way.
the trick is to listen carefully, and take away the learning but leave the burnout.
make sense?
Comment preview