spout

April 16, 2007 spout writing

My Foreword To ChrisAn’s “Essential WPF”

Now that Chris Anderson’s most excellent Essential Windows Presentation Foundation has transitioned to the physical world, I thought I’d share my foreword:

Thank God there weren’t more people like Chris Anderson when I was making my living outside of Microsoft.

I work at Microsoft now (two doors down from Chris, in fact), but not all that long ago, I was an instructor at a Windows developer training company. My brethren and I were led by a deep-thinking PhD candidate that applied the same rigor he applied to a scholarly pursuit that had to stand up to the crush or be crushed” mentality of academia. We learned how to think clearly as a defense mechanism and to communicate clearly as a survival technique. If we didn’t do it to his exacting standards, he’d sweep us aside and redo our work before our eyes (we learned to call it swooping” and you worked hard to avoid the phenomenon).

In a similar fashion, we learned to ignore the tutorial and reference materials produced by our vendor of choice, because it was clear that however clearly they may or may not be thinking inside their hallowed walls, it was certain that they weren’t up to communicating it with the rest of us. Arguably, our whole job for close to a decade was swooping” Microsoft itself, redoing their materials in the form of short course, conference talks, magazine articles and books. We called it the Microsoft Continuing Employment Act,” treating it like a pork barrel entitlement program that kept us in the style to which we had grown accustomed.

In fact, we made a nice living traveling the country saying things like, remember to call Release,” avoid round-trips” and ignore aggregation” because these were clear guidelines that distilled for developers what Microsoft couldn’t manage to say for itself. That’s not to say that there weren’t clear thinkers inside of Microsoft (Tony Williams and Crispin Goswell being two of my very favorites), but the gap between the beginner and the reader of such advanced writings was largely unfilled in those days.

With this book, that gravy train has run right off the track. Chris Anderson was one of the chief architects of the next-generation GUI stack, the Windows Presentation Framework, which is the subject of the book you’re now holding in your hands. You’d have thought that the very nature of the architecture job, that is, to make sure that the issues deep, deep inside were solved properly so that others could come along and build the trappings that made it into plain sight, would disqualify him from leading the developer from go” to whoa,” but that’s not the case. Chris’s insight allow him to shine a light from the internals of WPF to those standing at the entrance, guiding you through the concepts that form the foundation of his creation (and the creation of more than 300 other people, too, let’s not forget).

As the author of a competing book from another publisher, I can’t say that this is the only book you’ll ever need on WPF (or they’d have me in front of a firing squad), but I can say this with certainty: it belongs on your shelf within an easy reach. I know that’s where my copy will be.

April 14, 2007 spout writing

Best WPF Resources?

I’d like to provide a list of the best WPF resources, including real-world apps, free web resources, SDK docs, samples, blogs, etc. If you’ve got something that belongs on that list, I’d love to hear about it. Thanks!

April 11, 2007 spout

“Student who needs to interview a programmer”

Jimmy, a very polite 14-year old student of Washington Manor Middle School in California had an assignment to interview a computer programmer. I have no idea how he found me, but I did my best to help him out.

[jimmy] Thanks for your time! Here are the questions…

[jimmy] How long have you been working in this profession?
[csells] I’ve been a professional programmer of one kind or another since I was 20 years old, so 17 years.

[jimmy] How did you realize you wanted to be a computer programmer?
[csells] I had three professions in my mind as a child, first magician, then architect and by the time I got my first computer in high school, I decided I wanted to be a programmer. From that point on, I was pretty much a full-time programmer who took time out during the day to go to school.

[jimmy] What kind of education did you have to have?
[csells] BS in Computer Science from the U of MN, MS in Software Engineering from the Oregon Graduate Institute

[jimmy] What are some of the classes you took in High School that maybe helped you in your career choice?
[csells] The course that made me want to become an architect was my Jr. high school drafting courses. The thing that made me want to be a programmer was using first my friend’s computer and then mine. By the time I got to my programming classes in high school, I knew much more than the teacher (and, in fact, he would often pull me out of my other courses to fix other people’s computer problems).

[jimmy] Tell me about a typical day in this job.
[csells] For the last two years, I’ve been involved in an incubation” project at work, which means that I’m in a small group of engineers doing advanced product development thinking. We look at a bunch of problems that developers are having building software on the Microsoft platform and build various experimental pieces of software to see if they would be useful in helping developers build applications that are more secure, more robust and more full-featured, while still helping them to build them faster.

Toward that end, my day is filled with design meetings where we run design ideas past our peers, build our ideas and then try to use them to build applications the way our customers would. I spend about half of each day in verbal and written communication, e.g. meetings, presentations, emails and design documents, and half the day writing code, specifically C#/.NET.

[jimmy] What skills are important to be successful in this position?
[csells] Communication, both written and verbal, customer empathy, logical thinking, debate, compromise and willingness to live with vague, under-specified problems and requirements.

[jimmy] How would you describe the responsibilities of the position?
[csells] With my team, it’s my responsibility to not only generate and try new ideas, but also to push the good ideas into customers’ hands. That can include everything from forming my own product team, to forming ad hoc virtual teams” from existing product groups around the company, to selling” my ideas to product teams to get them to ship them with their products.

[jimmy] What long and short term problems and opportunities do you think this career faces?
[csells] Short-term, there’s a shortage of computer science graduates, so high-tech companies, Microsoft included, are doing what they can to make sure that they attract smart, motivated, educated, experienced software folks. This includes higher salaries, better working conditions and better benefits, all of which is good for folks in this industry.

Long-term, software engineering is changing rapidly, both how we build and apply our development tools and how we turn our craft into an actual engineering discipline. The tools I’m using this year are more full-featured, more rigorous and, at the same time, simpler than the tools I used even a few years ago. I don’t anticipate that change slowing down any time soon. We’ve got a long way to go before we’ve got a solid set of principles that can make software into the same kind of measured, certifiable activity that engineering fields like civil, electrical and mechanical engineering now enjoy.

[jimmy] What are the positives and negative about being a computer programmer?
[csells]
Pros:

  • flexible work environments
  • fun work (if you like bending a computer to your will)
  • rapidly evolving
  • challenging
  • important — the entire world is being remade by software

Cons:

  • vague requirements from customers that don’t really know what they want (but they sure know what they *don’t* want…)
  • engineering discipline left up to individuals, leading to a wide-range of software quality
  • lots and lots of work to do, making it very easy to balance the work/home life far away from non-work related activities (all work and no play makes Jimmy a dull boy : ).

[jimmy] Is there anything else about being a computer programmer that you would like to tell me about?
[csells] If you’ve got the disposition, programming and related software engineering work can be extremely rewarding, not just for the fun and satisfaction of taking control of a tiny virtual universe, but also because of the real difference software has and continues to make on real people’s lives. Over the last three decades, I believe that software has literally changed the world for the better and I see that trend accelerating. Bottom line: It’s fun, flexibly, in-demand and makes the world a better place – what could be better than that?

March 27, 2007 spout

The Microsoft “Sells” Department

So, I’m sitting in my office pair programming with Geoff Kizer when my phone rings. It says Microsoft” on the display, so I figure it’s one of my brethren.

Hello?”

An angry voice replies, I’m calling you because your technical support sucks and I’m tired of being put on hold!”

I’m sorry? Are you a Microsoft employee?”

No! I’m a *customer*! I’m trying to use Windows Vista Ultimate 64-bit and it doesn’t work!”

Oh.” Now I’m reaching way, way back into my distant technical phone support past. First, defuse the anger by empathizing with the customer. Well, on behalf of the 70,000 Microsoft employees, I’d like to apologize.” That was a little over the top — have to dial it down a bit next time…

Second, try to take things back a step and establish a rapport with the customer. My name is Chris. What’s yours?”

Calming down a bit, John.”

OK, John. I can’t claim to know everything there is to know about Vista, but I’ll answer your questions if I can.”

How do I get the icons to be smaller on the desktop? No matter what the resolution is, they’re always huge! I want them to be small like on XP!”

Are you at your computer now?”

Yes.”

OK. I know you can change the icon size on the desktop. Let you look around a little.” At this point, I’m opening up the Personalize control panel, finding nothing about desktop icon size. I used the cool narrow-as-you-type Help. Nothing about icon size (although I can change the icons themselves). Now I’m cursing Vista myself. I don’t see it here,” I admit to John.

At this point, I look up and notice I’ve gathered a crowd outside my office, including my boss and his boss, all laughing because a) dealing with angry customers is not the most fun job in the world and b) they’re glad it isn’t them.

At this point, Mr. Kizer reaches over to my computer, right-clicks on my desktop and shows me the context menu option that actually changes the icon size, which I share with John, making sure he’s happy with this solution before moving on.

And move on we did. John has one more problem, which I repeat back to him to make sure I’ve gotten it right, emphasize with him and try to help him reproduce it. When we can’t, I send him an email, asking for some additional data when he is able to reproduce the problem so that I can follow up with a fix, apologizing again for the trouble he’s had today, both with Vista and with tech support.

After about 15 minutes, John thanked me and asked me if I was in Sales or Support.

No. I’m a developer,” which was close enough to true for your average person.

He then told me how he got to my phone in the first place. Apparently, he had called the main number and was tired of being put on hold by our support, so he told our voice-recognition system that he wanted to speak to Sales,” I’m guessing to give them a piece of his mind. That day, Sells” was enough of a match to Sales” and suddenly, I’m the one talking to John.

At no point during this call did I consider sending John somewhere else for help. He’d already been through our support and didn’t like it. I can’t make people purchase Microsoft products. I can’t make people like Microsoft products. However, that one day with that one customer, I was going to do my best to help one customer to not hate Microsoft. Sometimes that’s all you can do and I was proud to do it.

March 10, 2007 spout writing

Programming WPF: Rough Cuts

If you can't wait for Programming WPF to be on the shelves (I know I'm having trouble), then you can read the chapters as we write them. These chapters have not gone through the technical reviewing stage or the copy editing stage, but they've been through the baptism of fire that is co-author review and both Ian and I are nuts for grammar, so they should be pretty readable. Enjoy.
March 3, 2007 spout

Using my XBox 360 for Corp. Video Conferencing

I’ve been having another adventure in social video conferencing, this time with my team in Redmond. It all started with Doug brought his 360 into our new conference room, which is just an office with a coupla white boards, some comfy chairs and a 37″ LCD panel for projecting.

Once we got the 360, I purchased a year Live Gold subscription and a live camera for $30, turning it into a video conferencing solution. Now, every morning at scrum, I’m sitting in my living room, telling folks in building 42 what I did yesterday, what I’m doing today and whether I’m blocked or not and they can see as well as hear me. When we go around the room, somebody turns the camera for me and it’s my turn when we get to the LCD panel.

You might ask why we don’t just use Live Messenger’s video support and the answer is — configuration and hardware. Live Messenger’s video just never seems to work out of the box w/ people’s s/w and h/w firewalls and even if it did, nobody’s got a camera on their laptop. Now, the only thing my team mates need to do to see me is turn on the LCD panel and accept my request for video.

That’s not to say that the experience is perfect. I’d love it if the xbox video conferencing:

  • Allowed each side to run video at full screen. I just don’t need to look at myself and when we go picture-in-picture (the LCD is also used for projection), the video’s not very useful.
  • Allowed me to remotely, instead of locally, select zoom regions.
  • Allowed me to control a camera that supported pan, tilt and zoom in hardware.
  • Supported noise cancellation. As it is, I still have to place a phone call to get onto the speaker phone in the room. If we try using the headset as a roaming mike, the feedback makes it unusable.

However, for the $30 incremental cost of the camera + year of live, it’s a solution good enough that we’re using it more and more. Have I mentioned how much I love my xbox 360?

January 21, 2007 spout writing

Boogers and My Writing Process

I’m supposed to be writing today, but John (my eldest son) is also doing some writing as part of his homework. However, after watching him struggle with just the topic (the phrase Always aim for the moon. Even if you miss, you’ll end up among the stars” [which isn’t even the correct quote]) to try to write the fully-formed essay, I give him a little lesson about how I write. Plus, since I’m supposed to be writing, this blog post is an excellent avoidance technique.

When I write, I told my son, I have to write giant books starting from empty pages. I can’t just have a topic and start writing, I have to have something to break up the whitespace first. So, as a demonstration of this technique, I asked the fruit of my loins, an apple from my tree, for a topic. He said, without so much as a second of hesitation, boogers.”

So, we started by brainstorming booger-related topics:

  • can be dry and crunchy
  • can be wet and chewy
  • flick em
  • eat em
  • wipe em
  • come from noses
  • wipe em on somebody
  • wipe em on tissue
  • wipe em under something

The brainstorming is just a list of facts in whatever order I think of them that I know about the topic that I may or may not decide to share with my readers. While brainstorming, I don’t judge — I just type whatever comes up. After brainstorming, I spend some time rearranging my facts into some kind of outline to lay out my order and my main topics into which the facts fall:

  • intro:
    • what they are
    • formed from dust and other irritants in the air
    • can be dry and crunchy
    • can be wet and chewy
    • come from noses
  • how do I get em out of my nose:
    • Kleenex
    • finger
    • friend’s Kleenex
    • friend’s finger
  • what do I do with em now that I’ve got em out of my nose:
    • flick em
    • eat em
    • wipe em
    • wipe em on somebody
    • wipe em on tissue
    • wipe em under something
    • straight blow in the shower
  • summary
  • overrun (although I’ve decided I don’t want in my finished piece)

During the outlining phase, it’s often the case that more facts come up and sometimes even whole categories of facts. As you’re forming the story, that’s when the gaps make themselves clear. At this point, I generally jump into the first fact, turning it into the first sentence, adding supporting sentences, transitions to the second fact and so on. Sometimes, though, especially with shorter pieces, I’ll write the summary to make sure I’ve got it in mind as the write the entire piece. This idea of the story that I want to tell is what Don Box calls the spine,” and it’s the most important part. Once you’ve got the spine, everything else falls into place.

summary
Boogers happen to everyone and they’re good for you. However, when there are too many, you gotta get em out. I recommend that you use a combination of Kleenex and your finger (for those hard to reach spots). You should make sure to throw the Kleenex away and wash your hands, although the shower straight blow is a good alternative. You should never, ever flick or wipe your boogers on something besides Kleenex, because who wants to find them?

At this point, I’ve gone from a blank sheet of (virtual) paper to a place where I know the spine, the details and the ordering; most of the hard work is done.

Obviously, brainstorming + outlining + summary + details = completed essay isn’t exactly a unique perspective on the writing process. Still, how often does one get the change to turn boogers into a positive learning experience for one’s progeny? : )

January 4, 2007 spout

Five Things You Don’t Know About Me

I’ve been tagged a coupla times, so it’s time I fessed up with Five Things You Don’t Know About Me:

  1. In college, I was in a fraternity and not just a geek fraternity, but an actual, national, recognized social fraternity (Phi Delta Theta). I figured I was geeky enough in high school, so needed a place to learn to at least hide my dorkiness. Obviously, I failed, but it was a very fun four years. : )
  2. In college, I coded in Unix using VT100 emulation software via a modem to my school’s DECs from my Mac IIcx running System 7 (I worked two jobs all summer to earn half of the $6000 it cost me to purchase the thing in 1988). It was the combination of the best programming and best UI experience at the time (although on two separate OSes). After graduation and working a job for a coupla years where I programmed Unix all day, I needed to look at Windows 3.1 for the first time because I had an interview at Intel. I could only stand to use it for about 10 minutes. They hired me anyway as a Windows programmer and, thank goodness, it’s much gotten better. Windows is now my favorite programming and UI experience (and I’ve used both Unix and Mac OS X several times since then to make sure).
  3. I am a fetishist; my fetishes are domain names and phone numbers. I can’t think of a cool domain name without a) checking to see if it’s available and b) purchasing it if it is (the one that sticks in my mind is clownporn.com, but that one was long gone). If I ever have a cool idea for an app, I must first purchase the domain name (I own appsettings.com and I just purchased 16 domain names the other day for another thing I want to do). Likewise, if I see a 7-digit phone number without a 0 or a 1 in it, I am physically compelled to surf to phonespell.org to see what the possible 7 and 8-letter words are (my old home phone number was 642-JOHN, the name of my eldest son). Of course, I’ve written my own program to do the permutations of numbers to letters, but phonespell does that cool dictionary lookup and grouping thing. I also added the phonespell support to Dave’s Quick Search Taskbar Toolbar Deskbar.
  4. I have jumped out of a perfectly good airplane (not Alan Cooper’s plane).It was just before I got married and I took my best man. We both used parachutes. The fall was surprisingly quiet, but the stop at the sudden bottom was unpleasant.
  5. The equal-rights-for-humans theme that sometimes pops up on this site isn’t because I’ve seen friends discriminated against and now I have to change the world (I don’t actually know very many people that are homosexual), but rather because I think it’s the right thing to do.

I tag Don Box, Chris Anderson, Michael Weinhardt, Tim Ewald and Ian Griffiths.

P.S. What’s the deal with the shape of the Pentagon and the Seal of the US on money (the eye at the top of the pyramid)? Damn you Doug Purdy for getting me The Illuminatus Trilogy when I’m supposed to be writing a book!