The Inquisitive Coder – Davy Brion's Blog

Trying to walk that thin line between intelligence and ignorance

Archive for the 'Rants' Category

How I Feel About The .NET World Lately

Posted by Davy Brion on 10th August 2010

Just a little heads-up to those reading this: this post is filed in the ‘Rants’ category. I’m gonna rant about some stuff that i don’t like, so if you don’t like reading these kinds of posts, do both of us a favor and skip this one.

I haven’t been too happy with the .NET world lately. I’ve always been somewhat critical of the .NET world, but generally, i felt it was one of the better environments to work in. But there are some things that have been bothering me for a while now, and there are some recent developments that really made me think about the future of this platform. First, i want to focus on the things that have been bothering me since the beginning. After that, i’ll discuss the problems that i expect in the future.

One Ring To Rule Them All

As we all know, Microsoft has a tremendously large influence on how software gets developed in the .NET world. For many companies, this is indeed quite convenient. You can stick to the Microsoft Path (or should i say: the One Microsoft Way?) and you’ll have all the guidance you can ask for. They provide architectural and design guidance for everything from your database to your business layer to your service layer all the way to your presentation layer. Unfortunately, a lot of that guidance is of a terribly low quality. Follow their guidance and odds are pretty high that either your database implementation details are leaking through all the way to your screens, or that a lot of your business details are taken care of in the database. Depending on how many Microsoft MVP’s you’ve listened to, you might end up with both situations simultaneously.

One of the most important goals of every piece of guidance and tooling that they provide is accessibility. Lower-end developers should be able to use their products and their guidance and be able to build software of an acceptable quality. Unfortunately, a lot of the mess that is produced on a daily basis in the .NET world is the result of that very same goal. And the only people who are (knowingly) suffering from it are the higher-end developers. They are the ones who have to deal with, and clean up the mess. Customers and companies hardly ever realize how much money they’re losing on this because this low standard for quality is apparently not only accepted in the .NET world, but also expected. A lot of people simply don’t know that the quality of software that we, the .NET community, produce on average is really low compared to other development communities. But then again, that is naturally what you get when you want to lower the bar and try to get everyone involved with developing software. You’d think that after over 50 years of history in this business, we’d have wised up to that fallacy by now, no?

The low quality of the guidance and the tools is the reason why i have started referring to the typical Microsoft recommended development practices and products as Fisher Price Development. It’s great if you’re into toys, but if you wanna get serious, it’s just not gonna cut it. It wouldn’t be so much of a problem if the vast majority of the .NET developer community wouldn’t just blindly accept everything that Microsoft tells them to do or use. Which brings me to my next point…

Developers, Developers, Developers!

There is a huge difference in quality between the higher-end .NET developers, and the lower-end. The higher-end developers are generally more open-minded to what works in other development communities and want to learn from that. And they want to take what they’ve learned and apply that in their .NET work. The lower-end developers however will rarely venture beyond the approaches that Microsoft recommends. The higher-end developers generally try to share their knowledge and experience with others, but in doing so, will waste a lot of time and effort going against the backlash they’ll get from the lower-end developers. The lower-end developers frequently accuse the higher-end developers for making things more complicated than they need to be, while they fail to realize that their initially simple solutions (as recommended by Microsoft of course) only leads to severe complications later on.

If you think about it, it’s pretty similar to the Matrix. You’ve got a small minority of people who have noticed that something isn’t quite right, took the red pill and are continuously going through hardship because of it. On the other hand, you’ve got a group of people who’d choose the blue pill to go back to a world where they’re being spoon-fed a reality that isn’t quite real by a system that only wants to keep them in check so they remain in control.

It’s just not easy to be a .NET developer who values Continuous Improvement. If you’re not wasting time working with people who are quite content with Fisher Price Development, you’re likely working for people who’re telling you to use some of the Fisher Price Building Blocks because “It’s Fisher Price! You can’t go wrong with that!”. I’ve been in both situations in the past and it just drains so much energy from you. If you’re in neither situation, you are in a very small minority.

The Road Ahead

So what exactly does the future of the .NET platform look like? Obviously, nobody knows. I’ll tell you what i expect to happen though. I found it extremely telling that Microsoft is capable of putting resources on products like WebMatrix and LightSwitch (both of which are targeting the very-very-lower-end developers, or even non-developers) while at the same time, they are severely cutting back the resources for projects like IronRuby, IronPython and the DLR (which drew more interest from the higher-end developers than the lower-end developers). So what exactly does that tell us? I can only consider that to be a very clear message that the lower-end developers will always be the primary target of Microsoft, and that they really care less and less about the higher-end developers. When it comes to guidance and tooling, they are continuously displaying that they either just don’t get it, or that they just don’t care.

So where does that lead us? I think we’re only going to get more and more low-quality software projects being developed in .NET due to the increased and continuous focus on the lower-end developers and the ever decreasing focus on keeping higher-end developers happy. A lot of the higher-end developers will simply move to other platforms and communities. Communities where sharing of knowledge and experience is encouraged, instead of hampered. Communities where best practices are based on real world experience instead of being concocted in a few ivory towers by people who’ve been detached from real world projects for far too long. Communities where there is less low-quality crap that needs continuous maintenance. Communities where there is no One Ring To Rule Them All.

Posted in Rants | 57 Comments »

The Biggest Logging Anti-Pattern

Posted by Davy Brion on 16th March 2010

shitty_log

Posted in Rants | 4 Comments »

Have You Jumped On The Bandwagon Yet?

Posted by Davy Brion on 18th February 2010

I’m not sure if this is related to the time of the year, but i (and undoubtedly quite a few of you as well if you’re honest) am once again getting pretty annoyed with the fact that the blogosphere is once again filled with “you gotta do this or you’re just not cool”-kinda posts. The weird part is that the last time i complained about this was pretty much exactly a year ago.

These days, you’re an absolute moron if you’re still using a relational database. And forget about getting invited to the best parties if you’re not developing according to the Command and Query Responsibility Segregation (CQRS) pattern. And if you’re not doing Lean then you’re really not worth listening to. Oh no wait, talking about Lean isn’t hot anymore since the Toyota recalls so we can scratch that off the list, sorry about that one folks.

Now, i’m not saying that the whole NoSQL and CQRS thing is worthless. I actually find them both very interesting. But to all of you who are now pushing these things as if they are the greatest things since sliced bread, i would just like to ask one thing: can we get some more real-world examples? You do use these things in real-world projects before proclaiming that these approaches will fix all (or most) of our current problems, right? You’re not just trying to be cool on the internet, are you? Honestly, of all the people that i hear talking about these things lately i only really believe about a handful of them when they say they use these things in real world projects. I’ll leave it to you to figure out who the real ones are, and who is just jumping on the bandwagon.

And no, i’m definitely not going to claim that using an RDBMS for every system is the best choice. I complain about databases every day, but i’m not just going to claim that going with a NoSQL database is going to solve all our problems either. I’d actually feel rather silly doing so, unless of course i’d be able to actually back up what i’m saying. Which i haven’t really seen happen yet.

The thing is… there simply is no one-size-fits-all approach to software development and it’s pretty sad to see that some idiots actually appear to believe that there is. Sometimes an RDBMS makes sense, and sometimes it doesn’t. Sometimes MVC makes sense, and sometimes it doesn’t. Sometimes DDD makes sense, and sometimes it doesn’t. Sometimes CQRS makes sense, and sometimes it doesn’t. That goes for every tool, library, architectural style, or whatever other buzzword you can think of. Use what makes sense for what you need, and let’s not pretend to be someone or something that you’re not, ok?

Posted in Rants | 17 Comments »

This Is Just Not Cool

Posted by Davy Brion on 15th January 2010

not_cool

That’s what happened when i ran the RunMeFirst.bat file that comes with the NServiceBus download. 

What if i actually need msmq_ADIntegrated?

Posted in Rants | 5 Comments »

Saying ‘Bye Bye’ To LinkedIn

Posted by Davy Brion on 20th December 2009

I’ve been on LinkedIn for a while now, and nothing good has ever come out of it. I either get requests to connect with people that i never even met or heard about, or i get harassed by recruiters. These recruiters would call me at my employer’s office to discuss ways in which i can “better myself” and when i tell them that it’s not a good time to talk (as if there ever is when you’re not interested), they ask me if i can send them my email address. Now, i don’t want to be an arrogant prick here, but my email address is only a google search away. Why on earth would i even consider talking with a recruiter who hasn’t even gone through the trouble of googling me?

As for the people who are requesting me to connect with them even though they never met or worked with me… what is that all about? Except for two or three mistakenly added ‘connections’ there isn’t a single person in my LinkedIn connections list that i didn’t either work with previously or know in person. I’m not into the whole ‘networking for the purpose of networking’ thing. I’ve done pretty well without it so far, and i’ll continue to do fine without it, thank you very much.

I’m also really tired of the hypocrisy that’s going on LinkedIn. I often see former co-workers publishing updates about how they’re reading about DDD, TDD, Scrum, and agile development practices in general when i know all too well that they don’t really care about these things and they’re just jumping on the bandwagon. I’ve also had it with the whole recommendation thing that’s going on there… i have quite a few ‘connections’ on there with people that i’ve worked with in the past but that i honestly wouldn’t recommend to anyone. When you see them hooking up at a certain new employer or project or whatever, and then see them writing recommendations for each other that are just plain dishonest then you can’t help but wonder what value the whole recommendation feature of LinkedIn brings in general. Seriously, 3 of the worst people i could ever imagine working with once recommended each other with raving reviews. Wanna go out of business? Hire these 3 people. They’ll get along great since they seem to think the world of each other. It wouldn’t exactly be a smart business decision though.

That’s the biggest problem with something like LinkedIn. People get to pretend that they’re important or really good while in reality, most of them aren’t. It’s full of phonies, who are more than willing to help the other phonies out. So what exactly, is the benefit of being on LinkedIn? Figuring out who knows who? That doesn’t mean anything either since a lot of the people on it are adding connections whenever they can, whether they liked working with you or not. The whole thing is basically meaningless. And if you’re good at what you do, you really don’t need LinkedIn to help you out.

So i tried to delete my account… except that i couldn’t. You can hide your account and make it unavailable by selecting the ‘None’ option in your public profile options (which i did just now), but you can’t actually delete it. You have to mail their customer service to actually get them to remove your account. Pretty sad, if you ask me.

How about you? Are you on LinkedIn? Have you ever experienced any benefit whatsoever because of it?

Posted in Rants | 12 Comments »

Thoughts On Intellectual Honesty And Personal Ambitions

Posted by Davy Brion on 4th October 2009

One of my favorite topics discussed in the classic Code Complete book (simply a must-read for every developer) is that of Intellectual Honesty. It basically means being honest about what you know, what you don’t know, what you can do and what you can’t do. It also means that you need to be able to give credit where credit is due, and that you as a developer need to be able to accept solutions to problems no matter where they came from, even if it wasn’t your idea or if the idea/solution comes from someone you might not always agree with.

I’ve always thought that Intellectual Honesty is a very important trait that every developer needs to have. I also believe that it is too frequently missing in this business. Some people just want (or need) to be right all the time, even if they are wrong. In software development, it’s generally in everyone’s best interest to go with the best possible solution to a given problem, while still keeping all relevant constraints in account. Some developers have a genuine interest in the architecture that is used and how things should be done. That is obviously a good thing and i wish there were more developers like that.

I’m in a position where i have a lot of influence on architectural decisions and how we should develop our code. But i’ve never wanted to be the only one who had to make these decisions, nor do i want people to just go ahead with every idea that i have. I want people to get involved with these things. I want feedback. I want to hear ideas from other people that are better than my own. It’s better for everyone if multiple people are involved in such discussions and decisions. Get a couple of people together, discuss things, go over the options and eventually pick the best proposed solution no matter who came up with it. That’s always been my approach and it always will be. And i truly believe that it’s a healthy approach for everyone involved.

But there are always people who either want to be the only one who gets to decide these things, without input from others, or are generally unhappy in their job if they believe their ideas aren’t being considered.

My question to these people is: why? Why does it matter if another person’s solution is chosen? Why would you need to be frustrated or disgruntled if your solution wasn’t chosen? If you’re working for a company where your ideas aren’t even considered then sure, you have every right to be frustrated or disgruntled (and i should know, because i’ve worked in such a place in the past). But if you’re working for a company where you know full well that everyone’s ideas are considered, then you really have no reason at all to complain if your solution wasn’t accepted.

Unless of course, you are more concerned about your personal ambitions instead of the actual results. If all you care about is your status, position or whatever you want to call it, then you really are in the wrong business. Sure, there are companies where you can make quite a career out of such an approach, but it’s just not healthy. Not for you personally, nor for your employer, nor for your customers. It doesn’t help anyone but yourself, and that sure as hell won’t last forever.

Be honest, at least to yourself and preferably to the people you work with as well. If your ideas don’t make it, then you might need to question your approach (and for some people specifically: your tactics), your real motivations, or perhaps even your skill level. Again: be honest about what you can do, what you can’t do, what you know and what you don’t know. And learn how to work with other people, instead of simply trying to get ahead of them.

I’d like to end this post with a quote from Dale Carnegie:

Any fool can defend his or her mistakes, and most fools do.

Posted in Opinions, Rants | 1 Comment »

This Is Why I Don’t Like Microsoft’s Way Of Open Source Development

Posted by Davy Brion on 3rd August 2009

We’re currently using our own custom little IOC container in Silverlight, mainly because Castle Windsor isn’t supported yet. One of the features that our IOC container has (and is based on a feature supported by Castle Windsor) is that of ‘automanual dependency injection‘, which basically enables you to resolve a component through the container, while overriding one of the dependencies with a parameter to the container’s Resolve method. This is a feature that we need, and switching to a container that doesn’t have it would break a very large number of classes (basically all of our controllers) in our Silverlight applications.

Today, i figured i could replace our custom IOC container (who wants to have a custom IOC container in his codebase anyway?) with Microsoft’s Unity container, which is supported on Silverlight. Turns out that there is no way to resolve a component through Unity while overriding one of the constructor dependencies of that component. Bummer.

But wait, Unity is open source, right? So i go over to Codeplex and browse the list of recent check-ins of the source control repository. The last release of this project was on October 28, 2008. It’s most recent check-ins are dated July 13th, April 20th and December 1st. With such sporadic check-ins (which are more like periodic synchronizations from Microsoft’s internal source code repository) there’s no reason to even begin working on a patch because who knows when you’ll get a code drop that officially has the patch.

That is, if the project even accepted patches. There were 3 patches submitted, and all 3 of them were declined with an “This project does not accept public code contributions” message.

So let’s see… i can request a feature, but there’s no guarantee that it will be implemented. Even if it were implemented, i’d have no way of using it until they decide to bless us with another code drop. I also have no way of providing the feature myself and contributing it to the project, unless i keep it privately and keep maintaining it for every new version they release.

I don’t care what license they put on it, but you really can’t call this Open Source development.

Posted in Rants | 26 Comments »

I Am Not A Helpdesk

Posted by Davy Brion on 2nd April 2009

I have one post where i describe a workaround for a certain problem that you might encounter while working with Team City. For the past 2 weeks or so, someone who happened to read that post suddenly got it in his head that he can come to me for all of his Team City questions.

The problem he’s having doesn’t even have anything to do with the content of the post, yet he keeps asking questions about something that appears to be rather specific to ClearCase (which i haven’t used in over 5 years, nor do i have access to the product). It’s pretty clear from his first comment that he doesn’t even read the information in front of him, so i figured i’d just redirect him to the manuals of the products he’s using and not waste any time on it. After all, i do not work on Team City, nor ClearCase and the problem he wanted me to help him with is not something i intend to figure out. I hardly have enough time to spend on everything i want to spend time on, so i’m not just going to try and help everyone with whatever problem they come up with. If i can quickly help you, i definitely will. If it takes me time to help you, i might do it if i actually have that time. But there is no guarantee that i’m going to help you, especially not if you’ve clearly demonstrated your lack of ability or intent to pursue a solution on your own.

I’ve deleted any subsequent comments from him asking for Team City assistance. I really don’t like that because i have somewhat of a policy of only deleting comments that weren’t caught by the spam filter but anything else i never delete. But his comments are just questions from someone who expects me to help him figure out a problem that i really can’t help him with. In my first reply, i mentioned that i hardly know anything about ClearCase and that i simply didn’t know how he could fix his problem. His subsequent comments kinda annoyed me, but what really pissed me off is a comment that he probably got one of his coworkers (since the IP resolved to the same company) to post, also asking for help with the ClearCase issue he was running into.

So here’s a hint: if i’ve stated that i can’t help you, and that i’m deleting your subsequent comments for assistance, then please, seek help elsewhere already. Do not persist, and please don’t ask your coworkers to ask me the same question either. If you want help, please exhibit at least some kind of willingness to look into a problem on your own!

Posted in Rants | 1 Comment »

Why Don’t We Learn?

Posted by Davy Brion on 17th March 2009

Most of us are working in object-oriented environments, right? How many of us are working in a truly object-oriented manner? How many of us merely think that we’re working in an object-oriented manner?

I just happened to read the following (who it’s from or where i read it doesn’t really matter):

When i was learning OOP back in the early 1980s, …

A statement like that just makes me cringe. Here we are, in the year 2009 and we’re all trying to continuously get better at our craft, our hobby, our passion, or maybe just our job. An increasingly larger number of .NET developers are basing their improvement on solid OO principles and practices. And i don’t just mean Uncle Bob’s SOLID principles. I’m talking about learning from the experience which others before us have gained 20, 30 years ago. How sad is that? I mean, learning from others is great, but how sad is it that all of this great knowledge is something that only a portion of us seek to learn, and usually only after having been active in this profession for a while.

This is an industry where we are supposed to advance rapidly in our way of working, to achieve better results. To produce higher quality software at a lower cost, ideally striking a balance between short-term cost and long-term cost. Yet we are still having difficulty trying to get the majority of us to accept and embrace what others have learned many, many years ago. Oh sure, we might have achieved a higher level of automation within our development process these days due to the availability of more advanced frameworks and tools. But take a look at the principles that are behind most of these frameworks and tools… Most of them have been around for a long time and it’s a pretty sad state of affairs that these kinds of principles are only starting to become popular in the year 2009.

Personally, i would put most of the blame with the large software vendors. They continuously hop on whatever bandwagon is popular at the time, while always promising increased productivity with their latest products. You can create a web application just like that (*snaps fingers*). Want some AJAX goodness? Oh just drag this component on to your web page and voila, you’re done! Need Web Services? Just put some of these attributes on top of your methods and there you go! Or better yet, let’s just all design some models and generate a whole bunch of code which will save us a tremendous amount of money!

So far, that hasn’t really worked out, has it? Yes, most of these ‘innovations’ increase short-term productivity and best of all, they don’t require expensive training and education. Everybody wins! In the longer term, this usually leads to software which is just waiting to be killed off and rewritten and developers who are even more fucked up than they already were.

This has some pretty interesting non-technical consequences as well. What is the general perception of normal people when it comes to the average quality of software that they experience on a day-to-day basis? A lot of people not only accept the fact that software is often buggy or unreliable, they’ve even come to expect it! Software that crashes? Oh that’s ok, just restart it. Weird error messages? Oh that’s ok, just click on them and they go away. Is it slow? Well everything is slow these days! I’ve often wondered exactly how we ended up with this culture of accepted and expected mediocrity. At least there is one benefit: if you’re not a complete idiot, you’ve got a pretty good shot at a successful career in this field.

We’re always looking ahead for newer versions of whatever it is that we use, newer tools, approaches that avoid problems that we’re currently facing, the silver bullet that is going to solve all of our problems, etc… And that is important, we need continuous progress. It just would be nice if people realized that in order to truly create progress, you need to keep learning from the past as well.

Posted in Rants | 16 Comments »

Continuous Failure

Posted by Davy Brion on 11th March 2009

continuous_failure

Notice how the team for this particular project at one point gave everyone the finger, and completely stopped caring about the build results.

Posted in Rants | 3 Comments »