The conception, birth, and first steps of an application named Charlie

Subscribe: Atom or RSS

Charlie. The Little Engine that Could

by Alister Jones (SomeNewKid)

In a much earlier weblog entry, I described how my stubborn nature has had an impact on the way in which Charlie has developed. Specifically, I have been tackling one problem at a time, and stubbornly refusing to solve the problem “the Microsoft way” if I think that way is either complex or flawed.

Another aspect to my person that is having an impact on Charlie is my lack of confidence in myself. I am acutely aware that I am not an experienced developer, and I am acutely aware that I’m just not that smart. For both of these reasons, I have been losing faith in what I’ve been doing with Charlie. I look at the work by the developers of Castle and think, “Now those guys are really smart, I should be using Castle.” I then look at the work by Paul Wilson and think, “Now that guy is really smart, I should be using the Wilson WebPortal.” I then look at the work by Telligent and think, “Now those guys are really smart, I should be using Community Server.” Quite simply, all of those coconuts are so smart, and I lack so much confidence, that I feel almost compelled to give up on Charlie. How could I create anything worthwhile unless I create it on top of their own projects?

While I spent time researching Castle, I kept hearing the word that means so much to me: simplicity. The documentation for Castle talks about how its components achieve simplicity, flexibility, re-use, and all the other good things in life that do not involve sugar or pheromones. What eventually occurred to me however is that they are using monstrously complex ways of achieving simplicity. On the other hand, I have been using simple ways of achieving simplicity. My lack of confidence tells me that if I’m not doing things the same way as these smart guys, I must be doing it wrong.

I have been looking through the code for Paul’s Wilson WebPortal. Without doubt, he has created a very clever system that makes good use of the best that ASP.NET 2.0 has to offer. As I study his code more closely, I can see that he is solving the same problems I have solved, but just in a different way. My lack of confidence tells me that if I’m not doing things the same way as this smart guy, I must be doing it wrong.

However, it has occurred to me that just because these guys are smart does not mean that what they do is right. And just because I am not as smart does not meant that what I do is wrong.

I have just fired up the current version of Charlie, and surfed between the pages of my sample website. You know what? While it is not as complex as Castle, or as clever as the Wilson WebPortal, it is working precisely how I want it to work. All of the pages are secure and localized, which is precisely the goal I had for Charlie at this stage in its development. Charlie is chugging along, getting the job done, and staying on track. Charlie is the little engine that could, and maybe I should have a little more faith in it. And in myself.

In my last web entry on the monkey or the gorilla, I commented on the difference between a framework application and a bespoke application. As I look now at the code for Charlie, I can see that much of its simplicity and effectiveness comes from the fact that Charlie has been designed as a bespoke application. I have been finding the simplest and most effective solution to each problem, without having to worry about whether other developers could work with the solution. In this regard too, Charlie is chugging along, getting things done in its own way. The little engine that could.

Now that I recognise that Charlie is properly a bespoke application, it answers the question of whether to move to Mono 1.0 or move to .NET 2.0. At this point in time, .NET 2.0 offers greater opportunities for me to find simple solutions to each problem, most notably with generics. I can, and should, make use of anything that enhances simplicity. By the time I’ve finished Charlie, Mono will probably have become compatible with .NET 2.0, so it’s really a moot question. I should not have worried myself about it.

So, after having been tempted away by other projects, I have come back to Charlie with a newfound belief in what I’ve been doing with it. Charlie is the little engine that could.

by Alister Jones | Next up: The Practical Man

2 comments

______
Anonymous Anonymous said...  
 

Good to hear!!

That is exactly the same conclusion I came to regarding Mono - i.e. by the time my .Net 2.0 application is good enough, Mono will support .Net 2.0 anyway.

As far as your confidence goes, I have this to say: I am a C# developer, have been for 6 years (since .Net was first released). Before that I coded in other languages - Java was one of them.

The examples that you mention (DNN, CS, WWP) are all great apps, but they are unnecessarily complex. I believe that they are the result of a mish mash of VB, C#, C++, Java developers, all trying to come across to the .Net platform, and all bringing their own beliefs.

What you (and Paul Wilson) exude is more of a pure .Net understanding, untainted by numerous other languages and methodologies. I think that is 100% a good thing.

Aside from all of that though, you hit the nail on the head - Charlie works. The end product is exactly what you want and need, regardless of how satisfied you are as to how it has got there.

You're obviously a perfectionist. I share your pain. I've thrown away 1000's of lines of code because even though it did exactly what it needed to, I thought I could write it better.

This is one of those 'do as I say, not as I do comments' - focus on your business. Get to the end point as best you can with what you can. Get those articles out there, get those customer sites up, then come back when/if you can to Charlie to enhance and fix.

But whatever you do, don't throw it away and try and do it better.

As someone who has lots of industry experience in programming C#, I can see that Charlie has 1000% more design in it than most enterprise apps I've been a code monkey for.

You're going great, so just keep at it and reassure yourself every time you see Charlie serve a managed localised page that you can do it, and are doing it.

BTW, I've read every blog entry since the beginning, and check every day for more, so you also know you have at least 1 dedicated reader!!

B.

______
Blogger Alister said...  
 

Once again, I very much appreciate your comments.

I don't plan to throw Charlie away, but I am still very uncomfortable with the fact that I'm creating everything from scratch. While it works precisely how I want it to work, it has taken me far too long to get there. At the very least I should be leveraging ASP.NET version 2.0. Or better, I should be leveraging an ASP.NET website framework.

Right now I am going through Paul Wilson's WebPortal, to learn how it does its thing. I may choose to move the best bits of Charlie to the WilsonWebPortal, or move the best bits of the WilsonWebPortal to Charlie. As always, I'll update this weblog with the lessons learned.

Post a Comment

----