Welcome

You have reached the blog of Keith Elder. Thank you for visiting! Feel free to click the twitter icon to the right and follow me on twitter.

I’m Changing My Mind, The Word is

Posted by Keith Elder | Posted in Programming | Posted on 27-03-2008

I’ve said for years that I always wanted to work with people that were passionate about technology.  After countless blog comments, a podcast that will never air, tons of discussions and numerous interviews this week I am changing my mind. 

I’ve said it and have heard others say it.  The word passion comes up a lot in technology.  I went to the dictionary and looked up passion.  Here are the relative points in relation to technology.

PASSION

  • intense, driving, or overmastering feeling or conviction
  • a strong liking or desire for or devotion to some activity, object, or concept

I am passionate about a lot  of things, for example fishing.  I have a very strong liking or desire for that activity.  I really do.  The problem with using passion to differentiate one person over another is passion is an emotion.  It can’t be measured.  This hit me this week while I was interviewing.  I want someone that has a desire or devotion to technology.  The problem is I can’t measure it, it is an emotion.  Anyone that responds to a question about their passion will provide a really strong argument as to why they think they are passionate.

From this moment forward (or until I change my mind ) I am going to stop looking for passion.  From this point on, I am looking for initiative.

INITIATIVE

  • The power or ability to begin or to follow through energetically with a plan or task; enterprise and determination.
  • A beginning or introductory step; an opening move

Initiative is key.  One can have all the passion in the world about technology or fishing, but the separating factor between someone that is good or great at either of them is initiative.  At some point that first step has to be taken.  And then another.  And another.  It is the act of doing something of one’s own free will that is the difference.  This I can measure. 

So it is written, so it shall be.

What Software Developers Can Learn from Forrest Gump

Posted by Keith Elder | Posted in Programming | Posted on 23-03-2008

image Have you ever watched the movie Forrest Gump?  If you are reading this article the odds are pretty high you have.  As you watched the movie did you notice how Forrest told his story?   Forrest wasn’t the sharpest knife in the drawer but yet he was able to paint a picture that drew the listener in.  He didn’t use big words to speak or even speak in a lavish tone.  Yet his story kept audiences glued to their seats.  It is a true classic.  We can all learn from Forrest, especially software developers.

How To Communicate With Others

Before I dive into a few samples let me just say this.  I am not the world authority on communication.  It is something I have had to do a great deal throughout my life though.  Communication can be done a lot of ways in our society today but no matter what the medium is the same rules apply.

Have you ever had a situation where you met someone that wasn’t in your industry or profession?  Sure you have, we have all done it.  Let’s pretend for a moment you are on an airplane or at a dinner party.  To be friendly you decide to carry on a conversation with a person.  In a typical friendly fashion you ask the person “What do you do?”.  They reply, “I build the CRC47 uplink devices for the SRT1250’s for Yoseph Industries.”

At this point you are thinking to yourself, “What the hell did he just say?”.  Now reverse the role.  What do you tell people when they ask you what you do?  More times than not you’ve probably sounded that very same way to people.  The question of what do you do is a very simple question but the answer people give back more times than not is not the same response Forrest Gump would have given them.  What would Forrest have said in this situation if he worked for Yoseph Industries?  Forrest would have probably said:

“I create these devices that send information up into outer space so folks can watch TV.”

I don’t even have to state the obvious at this point, it is so obvious how much easier it is to understand the Forrest version than the previous one.  As developers and software engineers we have a severe tendency to be the other guy though.  Maybe it is because we like to sound smart, or maybe it is because everything we do is an acronym or skews the English language into something that sounds more complex than it really is.  Whatever the case is, as you go throughout the next several weeks and interact with friends, team members, management, business analyst and so on, listen to what you say and then ask yourself if that is how Forrest would have said it.  If it isn’t, then the chances are you just sounded like the guy at the dinner party you met and no one understands what you are talking about.  Here are some basic tips on how to tell it like Forrest Gump:

  1. Do not use industry terms even if it is something as simple to you as a “web service”.  While most all developers know what a web service is, other people don’t.  Gump it down.  Instead of saying “We are going to build a web service in the middle tier”, try “We are going to pull data from that server over to here”.  Leave out the details, model numbers, etc.   
  2. If you are communicating something to someone who is not technical, pretend you are talking to your Grandmother or your children.  The visualization of this in the back of the mind will make you speak completely differently so people will understand you better.  A perfect example of this in real life is  when your children ask what does Daddy do.  You immediately think, I have to Forrest Gump what I do down so they can understand it. 
  3. Practice.  It takes practice to undo the years of technical speak. 
  4. Remember conversation isn’t about you and how smart you are or how smart you sound.  It is about trying to convey your ideas or thoughts so everyone else around you can understand them.
  5. Use analogies.  I learned at an early age that analogies go a long ways with people.  It helps them see the overall big picture.  For example, say you are trying to explain to someone why data should be pulled from a web service in TCP binary messages vs XML messages.  Use an analogy.  One you might use is to take a bunch of pieces of paper which simulate the messages and put them into a waste basket.  Then, take the same amount of paper and run it through a shredder to simulate how much more data can fit into the waste basket.  Even the analogy of leaves works as well.
  6. Basic rule of communication.  Never ever ever ever use an acronym in conversation until the other person uses it first.

These are six simple steps that if followed will help you communicate more clearly.  If practiced you’ll be amazed at how much more engaging non-technical people will be with you.  Have you thought about how you would handle the initial question of “What do you do” now?  What is it that you REALLY do at work?  The odds are you work for someone and they pay you to help their business run or succeed.  In case you are wondering what my response is when I meet people and they ask me what I do I say:

I tell computers what to do so they can help us run our business.

How To Present Technical Information

This section basically builds off the previous section but it warrants another heading because the challenge of presenting technical information is much more broad.  When presenting technical information, you have to be on your Forrest Gump game more now than any other time.  Unfortunately, a lot of presenters assume since they are presenting a technical session everyone there is technical and on the same page.  If you are presenting at a large conference this is never the case.  If you are presenting something to your immediate team at work maybe so.

A technical presentation is one of the hardest things to pull off.  Why?  Let’s use an analogy (rule #5) to follow my own rules.  It is like explaining Algebra to a room full of students from the 4th grade to the 12th grade.  Sure all of them know some math, but they all know it to varying degrees.  Good presenters poll their audience to know the boundaries of their audience.  “How many of you here have ever done division?  Multiplication?  Complex expressions?  Linear algebra? Algebraic combinatorics?”  Based on the responses, the presenter should raise or lower his Forrest Gump meter and then communicate to the middle of the bell curve (8th grader).  The presenter knows a fourth grader hasn’t done complex expressions but the topic to be covered still has complex expressions in it.  The presenter should realize the forth grader is going to get lost during that section but also should understand there isn’t time to cover the complexity of complex expressions to a forth grader.  A really good presenter will still help the forth grader out by coming up with an analogy so they get the bigger picture.  If the forth grader comes away understanding the bigger picture, the presenter did his or her job.  In order to achieve that though, you have to tell it like Forrest Gump.

So you can understand what I am talking about here is a quick Forrest Gump rendition of Windows Communication Foundation explaining the concept of Service Contracts. 

Windows Communication Foundation is best described as a technology developers using Windows use to let computers and devices talk to one another, no matter what language those devices speak.  One of the ways this is done is by all computers and devices agreeing to at least speak with one another in the same manner.  We call this agreement of how to speak a contract.  No one really signs the contract in legal terms, but everyone that wants to join the party agrees to it.  For example we do this in our daily lives today.  If I were to call a complete stranger there is an understood contract of how we should greet each other and what should be said.  When I call someone they say “Hello”.  I can then say, “Hi, this is Keith, how are you?”.  They will respond, “Fine, and you?”.  Within our conversation there is an agreed upon contract of how we are going to speak. 

Let’s say I am calling a company that provides me services like AT&T or Comcast.  I could say, “Hi, this is Keith, my account number is 123466, how much do I owe on my bill?”.  AT&T and or Comcast understand this type of speak or contract.  But, If I called my Mom and said the same thing, she is going to think I’m crazy.  Thus the contracts that serve these functions given the situation serve different purposes.

While no one really signs these contracts in legal terms, everyone agrees to a verbal contract.  So computers and devices can communicate with each other we put these agreed upon contracts on a centralized computer that serves these contracts up along with the information these contracts return back (how much do I owe would warrant a response of $19.15).  If a device wants to know how much is owed they call the computer with the contract that is able to tell them that information and they get their information back.  Since these agreed upon contracts are really providing a “service” to the computers or devices that use it, we call it a “Service Contract”. 

This is one way to explain the concept of Service Contracts.  I explain this scenario about Service Contracts in Windows Communication Foundation to show you a case in point about how to explain technical things so everyone in the room can understand it.  Hopefully I did a good enough job of that to show you what I mean.  Even if a person has no idea in the end how this really works, they should at least come away with an understanding of the bigger picture because of how it was explained. 

Taking the exact same topic, here is an example of how a presenter explained Service Contracts in Windows Communication Foundation at a Microsoft Tech Ed conference.  I use the example below because I was at this presentation.  Here is how a Microsoft employee explained this same concept of Service Contracts. 

image

The presenter basically just read the bullet point above and moved on, I remember the presentation in detail because I was thinking to myself that he should have stopped and explained further.  I remember this presentation specifically because when I left the room I had no idea how Windows Communication Foundation worked or even what it was.  It came off as sounding very overly complex and I remember telling someone afterwards, “He talked about all of these contracts and then these litany of bindings.  I think Microsoft just took something simple and made it so overly complex no one is going to use it”.  That was the impression I was left with.  The whole thing just sounded overly complex.  Digging into Windows Communication Foundation in more detail I now know that it isn’t overly complex, in fact it is extremely flexible and has a lot of benefits.  The reason I thought this after the presentation is because the presenter didn’t tell it like Forrest Gump.  They spoke about it from a very entrenched high level abstract view point and then hoped the demos they showed would wow us enough to go look at the technology.  Here’s are some Words of Wisdom from The Elder if you are a presenter:

If your demo is suppose to make everything make sense then you didn’t tell it like Forrest Gump.

I can’t but help think what Forrest would do with the bullet point above.  He would probably rewrite it like this.

image

Simple, to the point yet easy to remember. 

The next time you are presenting technical information keep all of this in mind.  Once you establish what something is then it is ok to call it a more complex term.  Explain to the person or the listeners that “the thing” you were speaking about is now going to be called “this” from now on.  If you are using slides, this should transition easily.  Also remember the #4 tip above.  The presentation isn’t about you.  You only did your job if you told it like Forrest Gump so they can understand it. 

How To Write Code

Developers write  code.  That’s just what we do.  While Forrest would be a long way from getting hired as a software engineer there are still some things we can learn from him once again.  I was reminded of this the other day as I was reading a post Scott Hanselman wrote about one of the function names in the ASP.Net MVC framework.   In Scott’s article he talked about how he originally referred to it as “Magic”.  Partially it was the name of the function that made it sound magical.  Scott brought this up to the MVC team and after some debate it was renamed.  The fact that the function was renamed is good but even after reading the new name it still isn’t what Forrest Gump would have called it if he was writing that piece of code.  We have a saying in the South that says:

“Call a kettle a kettle.”

A kettle has several names: teakettle, tea pot, tea kettle, or the pot. The point of the saying is to call a kettle a kettle since that is what it is.  There is no need to rename it, obfuscate it, or come up with a name that sounds cool or anything like that.  Just call it what it is.  For those that aren’t well versed in kettles, a kettle has a spout and a lid.  Just because it can be used to boil tea doesn’t mean it gets a new name.  Just call it what it is, a kettle.

I was reminded of this as I read Scott’s post.  Here is what the original name was.

Binding.UpdateFrom(viewData.Product, Request.Form);

After some discussion with the team it got renamed to:

Request.DeserializeTo(viewData.Product);

The Forrest Gump version of what is happening at this point is data is getting submitted from a form and a developer has an existing object he or she wants to take the data that is getting posted from the form and map it to their object.  Now ask yourself, even if you don’t understand the full scope of what is going on at this point.  What would you call it?  And then ask yourself what would Forrest call it so the lady sitting next to him on the bench in the movie could understand it?  Would she have understood either of the two previous examples?  The answer is probably not.  While the second example is less ambiguous than the first one, it still doesn’t tell the story like Forrest Gump.  Why do we care?  Answer:  What we name our functions and variables communicates what it does back to other developers that use it.  It boils down to communication.  The easier it is to read and understand the easier it is for developers to pick up on, even if they don’t know what’s going on. 

It isn’t my place to tell the MVC team what they should call this method but I know that I would not “stumble” upon the new name as Scott mentions in the article.  It isn’t Gump and doesn’t call the kettle a kettle, at least that is my opinion.  I think it is calling a kettle a tea pot.  It wouldn’t jump out at me merely by reading the API as to how or what that function did.  Phil Haack, one of the developers on the project posted a comment with a new name that was pretty funny.  While Phil’s comment was sarcastic, you know what, at least it tells it like Forrest.  Here is what Phil posted:

Request.TakePostedValuesAndSetPropertiesOfTheObjectWithTheSameNameToThePostedValueUsingReflection(product);

Obviously Phil was making a sarcastic comment, but you know what, that is closer to what it should be called!

The whole point is when writing code, tell it like Forrest Gump and call a kettle a kettle.  Don’t obfuscate your code with naming conventions or terms that don’t make sense.  Things that should be simple, well, should be simple.  They should be easy to find and simple to understand.  For some reason though when a developer touches a keyboard and starts writing code they talk themselves into calling things something they aren’t.  There are countless examples within frameworks and systems that aren’t simple to understand.

Let’s take a case in point within the .Net framework.  Let’s say I wanted to write some text to a file that I already had in a string variable.  Since this is an IO operation I would probably expect to be able to “stumble upon” how to do this within the System.IO namespace.  As I type System.IO I see there is a File sub namespace.  So far so good.  This makes sense since one of the things we do with IO is handle files.  As I stumble around trying to find which method to use I see Create() and CreateText().  Since I have some string data, and a path where I want this file to be written to nothing jumps out at me.  Thinking like Forrest Gump I’m looking for something like this to help me out:

File.CreateFile(path, data);

Simple, easy to use and I would be on my way to my next business problem.  Yet, if you look at the .Net framework and see how the CreatText() method is used, it isn’t Gump.  It takes further reading and backward thought to understand that the words CreateText actually mean to either create or to open.  Here is the official documentation from MSDN.

image

Now ask yourself, is this calling a kettle a kettle?  Is it what Forrest would have named it?  The answer to both is no.  Not only does the name of the method fly in the face of what it actually does it is way more complex to write a file to the file system with the framework than it should be.  Here is full example.

// Create a file to write to.
using (StreamWriter sw = File.CreateText(path))
{
    sw.WriteLine("Hello");
    sw.WriteLine("And");
    sw.WriteLine("Welcome");
}

Are you starting to see the point?  This is a real easy problem to fix and one that should be fixed. 

Try this the next time you finish a new feature in an application.  After you get done with your code ask yourself, if my Mom read this would she know what it was doing?  If your answer is no, then developers on your team are going to also have a hard time.  One scenario that plays out because code is not written like Forrest Gump is when a particular engineer works on a feature in a system by themselves.  Down the road that feature needs to be enhanced or fixed and the original engineer that worked on it is on vacation.  The engineer assigned to it reviews it and says:

“You better wait on (insert name) to get back.  I don’t know how it works, I looked at it but don’t understand it.” 

I’ve seen this more times than I care to count and have even said it myself.  Writing applications doesn’t have to look like rocket science yet more times than not developers love to make things harder than they really need to be.  Software should tell a story as it is read by other developers.  If it does then other developers will love working on the system.  If it doesn’t, they will hate it and eventually rewrite it. 

We’ve looked at a lot of ways developers can learn from Forrest.  Forrest was a simple man but he had a great way of explaining a complex story about his life in a way that everyone could easily understand.  If you try these techniques don’t think just because you are explaining or writing something the way Forrest would that you are dumbing yourself down.  You’ll actually find it harder than you think!  The next time you are in a meeting, giving a presentation or writing code just ask yourself one question.

Did I just tell it like Forrest Gump?

Detroit Geek Dinner Recap With Pictures and Tag Cloud

Posted by Keith Elder | Posted in Geek Dinner | Posted on 22-03-2008

image After the Launch Event was over on Tuesday it was time to get the preparations started for the Geek Dinner.  I made a quick phone call to PizzaPapalis to place the order and get things rolling.  At this point I still had no idea how many people would show up but I kept checking my email looking for cancellations.  To my surprise there really weren’t any. 

A bunch of us took the People Mover directly from the Renaissance Center to Greek Town.  This worked out really well since it dropped us off a block from the place.  The Launch Event ended early so everyone was ready to get going, several of them had already started!  The extremely cool thing about the Geek Dinner is Microsoft sponsored it for us.  It was an absolute surprise and thanks go to Josh Holmes and Daryll Hogan for helping out.  Also thanks goes to Randy Pagels for doing the official honors of signing the dotted line.  When I found out the event was going to get sponsored I pulled up TinyTwitter on my phone and sent the news out via Twitter since the majority of people attending the event were on Twitter anyway.  Thus I knew the word would spread.  Obviously it did since Alexey took this screen shot on his computer only 6 minutes later.  Pretty funny. You gotta love Twitter!

To say we talked tech is an understatement.  I put together a little geek tag cloud with all the expertise in the room.  For those curious, Brian Prince has “White Board” on him since he’s an architect.  Also the VS in the top right is besides Eric (orange shirt).  Eric is on the Visual Studio team at Microsoft and is originally from Michigan.  He just happened to fly in to visit family and joined us.

image

When everyone was sitting down eating I counted the room and we had 50 people at the dinner.  That was awesome.  More than I ever expected.  I told someone, if all the brain power in this room was the staff at a software company, there would be no stopping us collectively.  It was the who’s who of Geeks from the Michigan and Ohio area.  The food was great, even noted by TheProKrammer.  Thanks to everyone that came out I hope you enjoyed the food and conversation, it was a blast.

Pictures from the Geek Dinner on Flickr

Detroit Launch Event, It wasn’t my fault, Let Me Explain

Posted by Keith Elder | Posted in Presentations, Speaking | Posted on 22-03-2008

This past week I have been in Michigan.  My reason for traveling to Michigan this week is I spoke at the MSDN Launch event in Detroit and used the time while I was up to work onsite this week as well. This is the first chance I’ve had all week to sit down at the computer and just vegetate.  It is good to finally just sit down at the keyboard and not have Power Point or Visual Studio open worrying about demos and presentations.  Five presentations this week wore me out. 

Launch Event

Tuesday was the Launch Event in Detroit.  I couldn’t believe the number of people there.  I heard 2,000 people were in attendance but I’m not sure if that was the exact count.  Let’s just say the Renaissance Center downtown was packed.  A lot of my friends said they got free copies of Vista, SQL Server, Visual Studio etc.  Personally I didn’t get any swag because I basically spent all of my time in the speakers room working slides and demos.  During lunch, I did go to a discussion panel which turned into a free for all round table session.  Alexey and I were at a table with a bunch of nice guys from Kelly Services.  We got to talking about TDD, Unit Tests, Team Foundation Server, and on and on.  It turned into such a great discussion that everyone decided to skip the panel and just keep the train a rolling.

I have no idea how much the event cost to put on but feeding that many people breakfast, lunch and providing them a cool lunch box to take home is already more than I could afford.  Attendees didn’t have to pay anything to attend the event, simply register.  There were tons of people from all over.  Michael Eaton and Dustin Campbell have blog posts that lists a lot of the people from the community that we all know. 

It Wasn’t My Fault, Let Me Explain

My session was the last session of the day.  There was one developer track session before lunch and then three after lunch.  The scheduling should have been tweaked to allow for breaks into between each one and I hope someone brings this up to the organizers so it can be addressed for other launches.  The first session after lunch started at 12:45 and was suppose to end at 1:45.  There was suppose to be a 15 minute break and then the next session started at 2:00.  The next session (mine) started at 3:00 with no break in between!  No breaks between sessions means the schedule gets thrown off.  Brian Prince and Jeff Blankenburg were covering Asp.Net during the session after lunch and theirs went pretty much to the 2:00 mark.  At about 2:10 Bill English started his session on the Office stack and he tried to get the schedule back on track.  He finished a few minutes after 3:00 but then questions poured in one after another so he didn’t end until 3:13.   I already had my laptop setup so I jumped up and started.  I looked down at my watch and it was 3:15.  Knowing we were running late I just tried to dive in and get the train running. 

After my session someone said, “man, your session was long”.  For the record my session was exactly an hour like it was suppose to be.  I had it timed perfectly and when I looked down at my watch it was 4:15 when I ended. 

From my perspective the talk went very well.  I tried to cover things from the real world perspective of “I am using these technologies right now you should be too”.  A few highlighted quotes from the talk were:

The New Hotness = WPF + Expression Blend

And

Workflow is so easy, even my Mom can do it!

After the session several people came up to me and said, “Dude, I can’t believe you covered MFC applications, I totally didn’t expect that from you”.  Here comes the “it wasn’t my fault” story.  Everyone has to understand something about Launch Events.  Everything you saw during the day was completely scripted.  In other words, I didn’t write the slides, nor the demos, nor come up with the agenda.  As a speaker at an event like this you are given everything.  And when I mean everything I mean even down to every line you are suppose to say as you walk through demos.  So for those that thought having MFC talked about at the Launch event was a little weird, it wasn’t my fault. 

Someone else said, “I can’t be you wrote in VB!”.  Again, I wouldn’t have if I had the choice, but at an event like that you have to play all sides of the fence and show a little love to everyone.  If you are a C# person and you went to an event with all VB examples you probably would feel that Microsoft was ignoring your platform and vice versa.  Thus that is the reason the talk incorporated C#, MFC, and VB. 

I tried to do my normal thing and work with what I had been given.  My goal was to try to bring some real world experience to the talk rather than just do a high level overview.  For example, the last demo I changed around which showed how to expose workflows via Workflow Foundation through WCF.  The original demo had console applications to host the WCF services.  Since the talk was about Clients, I ripped out the console apps and built the service to wire up to the WPF client.  I thought it was more important to show how a WCF service was built from scratch using Visual Studio and the new service reference additions which wouldn’t have been covered.  After I ripped out the consoles from the demos and did the timing with the new version it fit perfectly into the schedule and I thought made a lot more sense than what was originally planned.

After the Launch Event it was Geek Dinner time.  More to follow.

Speaking at the Detroit Launch Event, Panel Discussion, Geek Dinner Afterwards

Posted by Keith Elder | Posted in Presentations, Speaking | Posted on 15-03-2008

Tuesday March 18th is the Detroit, MI MSDN Launch Event for SQL Server 2008, Visual Studio 2008 and Windows Server 2008.  I’ll be speaking at the event on the topic of “Defy Occasionally Connected Challenges with Smart Client Applications“. 

About The Event

The Detroit event will celebrate the launch of Windows Server 2008, Visual Studio 2008 and SQL Server 2008. The event will bring together IT Pros and Developers to get an in-depth, up-close look at the new products and will give attendees an opportunity to meet with our Partners as well as members of the development teams who created the cutting-edge technologies. And all attendees will get a promotional pack containing all three new products. Join us for this day long celebration!

Panel Discussion

During lunch I will be on a discussion panel for architects discussing how businesses can start leveraging these new tools.  I don’t have any further information on the panel other than that at the moment.  I also don’t know if the panel discussion is open to the public or invitation only.  If I find anymore details on it, I’ll update this post.

Geek Dinner After Event

After the event we are having a Geek Dinner at PizzaPapalis which is only a few blocks away from the Renaissance Center in downtown Detroit.  The slots for the dinner are getting full so if you know you are going to attend the dinner then be sure to RSVP.  Note the new RULES section.  If you are planning on coming, it is important you bring cash to the dinner so we can easily settle our tab.  Also, if you are not coming, either email me or Twitter a direct message to me.  I have to let the establishment know a fairly close number so we can get pizzas ordered ahead of time to shorten the wait.

I’m looking forward to seeing a lot of friends and fellow team members next week.