Business Natural Language – Great term

Jay Fields is a smart ThoughtWorks consultant I had the pleasure of working with during my time there. Lately, he’s been working with DSL’s, and has had some great blog posts about the DSL work he’s doing in Ruby. Yesterday’s blog post coined the term ‘Business Natural Language’ to describe the kinds of DSL he’s working with right now. The main purpose of a BNL is for the specification of requirements.

I like this term because it tries to narrow down what a DSL is. Whenever I describe a DSL to people, the moment I use the term ‘Abstraction’ people try to use the term DSL to apply to anything that encapsulates anything else. I have had conversations with people where anything represents a DSL, including Java, C, Excel, and VBScript.

To be clear, a DSL is a language that represents a higher level abstraction and, more often that not, though not always, uses a Business Domain and not just any Domain. It’s NOT simple code generation and it’s NOT simply creating a construct that encapsulates several underlying consructs.

Hopefully with more people doing work like Jay, we’ll come up with a concise defintion for DSL, and not have it lost in the ambigious TLA world like SOA.

Where are you working today?

A while ago, I blogged about getting a new gig that is virtual. I mentioned that the reason I was getting a new job only 2 months after leaving ThoughtWorks was the topic of a while other blog post.

Well, this is that post.

When I decided to join ThoughtWorks, I had a clear set of pros and cons for taking such a job. After 7 months there, it was safe to say that not only did the pros not manifest themselves, but all of the cons ( and more.. ) did. I have no reason to go into details, so I’ll just say that after much thought, I decided to leave ThoughtWorks.

Shortly after I started to look for another job, I was contacted by a old friend ( and current computer security genius. Seriously, the guy has forgotten more about security than I will ever know ) who said that he was being bugged by a persistent headhunter who was looking to fill a .Net Senior Developer position in Chicago. It just so happened that the headhunter was located in the Bay Area, and I was deployed there for ThoughtWorks, so it made sense to meet up and hear what she had to say. She described a company in downtown Chicago doing very interesting work, and they were looking to hire some people in the next few months.

It all sounded very interesting, so I decided to go for the interview. Well, they must have liked me, because within the week, I had a job offer. It was exactly the kind of situation I was looking for. I would be working with VERY bright and talented people, in downtown Chicago, and on very technical problems. So I took it.

Fast forward to two months after I start. Some very unusal and unlucky things happened with the company, and they were forced to retool their direction. Unfortunately, this meant letting some staff go. Now, seeing as how I was by far the newest person, I knew I would be one of the first to go. After all, I had no real knowledge since I had only been there for two months.

It turned out that I was correct and after only 2 and 1/2 months of employment, I was searching for a new job. The only frustrating part of it all was the fact that I had just gone through the dog and pony show of a job search, and now I would need to do it again. Add that to the fact that I was really looking forward to staying with the company for a while and put my flag in the ground, and you can imagine how frustrated I was. Frustrated with a capital F.

As luck would have it, I had turned down some offers only 2 1/2 months before, so I didn’t have shortage of available opportunities, but nothing as exciting. That is until a my I received an email from a company looking for developers, with the attraction that the company is entirely virtual. The funny part was that it came through the old company of several of my current co-workers. After several rounds of interviews, both phone and face to face, I accepted an offer they made.

I now work from home ( and other places, but that’s another post ) and couldn’t be happier. I have the flexibility do work how and when I want to work, and it’s almost intoxicating. People think that I slack off, but that’s not the case. You really end up working more hours when you work from home, because it’s so easy to sit in your chair for an extra hour or day a day ad get a little more work done. Hell, I’m typing this at 2:30 AM / CST while doing some performance profiling on our app. All in all, it’s a great job compared to the std Chicago jobs of finance and insurance. In th end, it’s pretty much exactly what I was looking for.

I guess the moral of the story, if there could be one, is that if you know where you want to be, you won’t always know the path, but you’ll get there eventually.

Show me your traffic

Hawk Wings has an interesting post about Web 2.0 & Flickr.

Some interesting stats are talked about within the post, especially the fact that Flickr ranks 6th in terms of market share ( when measured by hits ) vs. other photo sharing sites like Photobucket and Yahoo Photos.

I found that to be a bit interesting, but not really all that surprising. A lot of what bugs me about the Web 2.0 hype is that it seems like very cool and useful stuff to people who are tecnically savvy, but it won’t really make an impact on typical users. People are creating things that we ( the industry ) thinks is cool, but it doesn’t solve any perceived problem for standard users.

A good example is AJAX. Now, people in the industry hate HTML & CSS for a number reasons . AJAX, which enables richer GUI’s from within the browser, is seen as a great thing that enables all sorts of things that we couldn’t do before.

But does it really help the non-technical users out there? Do a richer UI really mean more usable? If you show a selection of web UI’s to non-technical users, and ask them what they would change, how many would say they would like to see it richer? I am betting not a lot.

The same goes for a lot of “mashups” and other Web 2.0 fodder out there. While very cool, does it really have mass appeal? As I have stated before, if you’re not actually solving a problem that people already know they have, you’re going to have a tough time.

One other interesting thing about the post is this quote ( bolding is mine):

“Secondly, hits are a very crude measure of importance. They only tell
me what people are visiting.
They tell me nothing qualitative, nothing
about how interesting, useful, stimulating, innovative (or not) the
destination is, only how popular it is.”

Very true. But isn’t that the point? If something is more highly visited vs. someting else, hasn’t the community spoken as to which it finds ( interesting | useful | stimulating | innovative ) ? If you’re an advertiser, which site would you rather advertise on, the one that is very cutting edge, deeply profound, and highly stimulating ( according to some other measurement ) or the one that has all the eyeballs?

The day my love for ReSharper died….

Today, indeed, is a sad day. After several weeks of struggling with ReSharper 2.0, today I finally uninstalled it.

It all started when my company moved to Visual Studio.Net 2005, which is great. The problem is that VS 2005 is a bit of a sluggish hog, but usable. Then, ReSharper 2.0 came out, and I of COURSE installed it. That would prove to be my undoing. ReSharper took an already sluggish app and reduced it to a CRAWL. Saying that it was unusable is being nice. I had always chalked it up to VS 2005, or our project structure ( we have both C# & VB.NET project in one solution ), but today I tried to see what would happen if I uninstalled it.

My worst fear was confirmed when VS 2005 was visibility faster. I can now work, sans ReSharper.

I’m sorry, but I need a usable IDE more than I need the nice features of ReSharper. Hopefully, a service update or something will come out with some speed improvements.

Untill that day, I shall work ‘unsharpend’….

The phone books are here! The phone books are here!

Edward Tufte has finally released his new book, Beautiful Evidence. For those of you who don’t know who Mr. Tufte is, he is the author of what is regarded as one of the “Best 100 books of the 20th
century”, The Visual Display of Quatitative Information. Beautiful Evidence is the 4th book in his series, not including the wonderful short essay “The Cognative Style of PowerPoint”. He has been called the Da Vinci of data because of his ability to present information and communicate ideas in such an effective manner, using concepts such as images, sparklines, charts, and unusal layouts.

I had the pleasure to see him present live in Chicago once, and it forever changed the way I think about no only what to communicate, but how to present information in such a way that is has the highest value to the view / reader.

All of his books are HIGHLY reccommended to anyone who wants to communicate better, visually through presentations, or orally.

What SHOULD I do vs. "SHIP IT NOW!"

One of the hidden tools I like to use during my day to day development is FxCop. For those of you not in the know, FxCop is basically a rules engine that analyzes your code, and alters you to “rules” that you have broken. These rules aren’t just some fly by night, random stuff. They’re based on the MS .NET Framework Design Guidlines. So, what’s good for the .NET framework team is good for most .NET code out there.

Now, some people say “great, I broke rules. We don’t have time to do X, we have to ship the code!” Unfortuantely, there’s no good response to this. Either the person “gets it” or they don’t. It’s like saying that all code should be written in procedural form. Any sane developer would kneel over, but the bottom line is that you can’t really argue with it. Systems were deployed, and continue to be in use that were written in C, FORTRAN, and Cobol.

However, if you’re in the other crowd, who is looking to incrementally improve your code while still shipping it ( shocking that you can do both, i know ), you would be advised to take a look at FxCop just to see where you stand. You can easily integrate FxCop output with and your build process, so you can get a running report on where your team is at.

An example of the kind of rule you will see in FxCop is a warning against “catch (Exception) ” statements. The FxCop team has a nice blog write up on why that is a rule here.

One of the cool parts of FxCop is that you can define your own rules, and enforce them. So if your team has std conventions or patterns, then you can create FxCop rules for them, and have them run right along side the std FxCop rules.

You’ll find yourself writing more consistent and maintainable code, which is always nice.


Why have I not upgraded Trillian before?

For those looking for a full featured, all in one IM client, please consider Trillian. It’s amazing. I have been using the free version for years, and until today, I hadn’t upgraded to the full version.

Now, I have no problem buying my own personal copies of tools. I own a license to Beyond Compare 2, as well as ReSharper. So today I took the leap and bought the full version of trillian for a mere $25….

…and I’m blown away. Off the top of my head, after playing with it for a mere 5 minutes, here are my favorite features of pro:

1. Jabber / GTalk support
2. Windows populated with previous conversation histories
3. Plug-in support, with some really wonderful plug-ins like spell check, weather, RSS feeds, mail, and MSN features.
4. Bonjour support
5. More full featured contact list, including status & icons.

Now, there’s one big thing that trillian is missing:

– IRC w/ SSL support.

But that’s coming, and i’ll hobble along until then.

Also, for all you GAIM fans out there who say that GAIM has all the features above and it’s open source, i say bunk. There’s something trillian has that GAIM really doesn’t: stability.

I have tried using GAIM for about 3 weeks now, and I have had repeatable crashes and bugs happen to me. Believe me, for $25, Trillian Pro is worth it.

Show me your tests

Cedric has a good post about Agilists ( is that a word? ) over at his blog.

I am often troubled at how “pure” TDD’ers are when it comes to examples and explanations of TDD. Not that I dislike TDD, in fact, I’m a huge proponent of it. It’s just that people get tired of hearing “Well, if you started with TDD, you wouldn’t have problem X”.

Using TDD is an interesting Catch-22: It stands for Test-DRIVEN-Development, but how to you apply it an existing code base. Something that can only be used on greenfield projects is next to useless.

At previous co-worker once asked me if I was doing TDD at my current job. I responded with what I consider is the only route to TDD within an existing organization: “First come the unit tests, then comes TDD”. Since TDD is such a huge leap in thinking for many people, I think it makes sense to start with aggressive unit testing. Then, and only then, will people see the value of tests and be willing to embrace TDD. If you start out hating anything that isn’t done with TDD, you’ll make few friends and you won’t get much done.

It reminds me of the old SNL skit with Mike Meyers, who’s character runs the Scottish store. After all, “If it’s not Scottish, IT’S CRAP!”

Somehow, if they’re not careful, people who expouse “If it’s not TDD, it’s USELESS” will find themselves a curmudgeon just like the scottish store owner.