You've reached the internet home of Chris Sells, who has a long history as a contributing member of the Windows developer community. He enjoys long walks on the beach and various computer technologies.
Monday, Jun 13, 2005, 1:46 PM in The Spout
Love Reviewers; Hate Reviews
I took a quick glance at some reviewer feedback for the Avalon book and already I'm trying hard not to hate the folks that send it in. Mean, hateful things like "who is this guy?!?" and "well, he's never written a book" spring immediately to mind.
The thing is, reviewer feedback, especially harsh, blunt, spit-in-your-face reviewer feedback, is an extremely critical part of the book writing process (although, ironically, I most hate the reviews that sound like stuff I would write when I review...). Without reviews, authors don't have any idea how their writing will be received 'til it's published and we're bound to do all kinds of stuff that's reader or subject hostile that need correcting. Please, feel free to hit me with both barrels when you're reviewing my stuff; I won't promise to act on all the feedback, but I promise to consider all of it seriously.
I do have one request, however. This is something I try to do when I'm reviewing (and I've been known to make grown men cry): please start with something nice. This does two things:
- Gives the author a little ego boost before you chop his legs out from under him.
- Establishes your credibility as a reviewer. If you say something nice, especially if it's insightful, e.g. "Avalon data binding is a large topic, but I really love how this chapter presents practically all of it in an easy to follow manner," then I'm much more willing to take feedback like, "don't let the sample app drive the chapter, make the technology coverage drive the sample" (not to pick on anyone in particular : ).
Of the two things, establishing your credibility as a reviewer is by far the most important because w/o it, there's a good chance that the careful thought you put into your reviewer comments will not be fully considered (who wants to listen to a curmudgeon?).
Anyway, if you encounter me in the next month and I'm grumpty, it's 'cuz I'm spending my weekends dealing with reviews. I might be crabby and violent, but at least I'm slow and easy to see coming. : )
Thursday, Jun 9, 2005, 6:16 PM in The Spout
Never Give Up, Never Surrender
I was reminiscing today that I've been turned away from most decent places in my career:
- I went to a stupid high school that raised my grades a full letter when I moved there from a decent school system, leaving me ill-prepared for college
- I was turned away from MIT, CalTech and Stanford out of high school, settling for the U of MN instead
- I didn't even qualify for a phone screen from either Apple or Microsoft during or after college
- I flunked most of my on-campus interviews and instead settled for a full-time position at the start-up where I'd worked during college (I was originally been hired there because it was run by alumni of my fraternity and I worked for beer money)
And yet, I got all I could out of every opportunity, performed all of the jobs I did manage to get with gusto, learned as much as possible and moved on to learn new things when it was time. Eventually, I found my "way" and I think I did all right, but only because I didn't let the door slams stop me. You shouldn't either.
Tuesday, Jun 7, 2005, 8:06 AM in The Spout
Career Path for Developers?
"Pete" email me the following questions:
"I'm a senior software developer, age 34, specializing in C# development for Windows Forms / ASP.Net, having come from a VB background. Having had some (if not most) of my enjoyment of development sucked out of me by my current employer, I'm contemplating my next career move.
"Thing is (and it's not just me, several of my colleagues concur), where do I go from here? What is the career path of a software developer? I.e. junior developer, senior developer, guru, author,...? Is there such a thing as a career path for a developer (or anyone, these days)?
"I surmise that developers such as myself (4th / 5th gen language developers) may actually be the first at the crest of this particular wave - I guess COBOL developers could have migrated into hardware / system maintenance, but what for folks like myself? I can't see myself being a developer until I retire (31 years later), but I don't really want to move into management either (perhaps software delivery manager, but not a full-blown person manager).
"Or maybe this is just a mid-life crisis. Maybe those COBOL programmers were thinking the same thing. Maybe you've thought the same thing, and said 'Sod it, I'll just learn as much as I can and write books.' Maybe my malaise is indicative of the general malaise within IT at the moment (still suffering from the dot com crash, companies more interested in fixing up their offices than investing in IT, etc), companies not knowing their arse from their elbow when it comes to IT spending, etc.
"We live in a world of ever-increasing technology, yet seem to be doing less development? Obviously there are still very clever people out there writing code for phones, text delivery. HDTV innards, etc., but is software development becoming stagnant? Are we still doing the same things with new tools? Why do we still not have modular development? Why are there many standards for Web Services? Where are the really, really cool applications?"
"Pete," those are all fine questions. I think there are a ton of interesting things to do for software developers in the world and being a part of a big company development machine is only one of them. I've done most of the rest (I consider Microsoft to my last job in this industry), so I can recommend start-ups, speaking, shared/open source development, consulting and writing as all valuable, interesting and fun experiences (although, as you might imagine, each of them has their downsides, too).
Or, even if you wanted to stay as a developer, I can recommend different kinds of software to be refreshing, e.g. I've spent a lot of time on code-based developer tools and now have moved to model-based developer tools (that's not a big shift, mind you, but hey, I'm growing! : ). Maybe you'd like to switch away from front ends to back ends or to databases? Maybe you'd like to switch from imperative to declarative or logic? Maybe you'd like to go all the way on front ends and build games? Or maybe you'd like a platform like a mobile device better? (I personally lust after this one!)
Your malaise-related questions are good ones, too. It seems like you've identified a bunch of "problems" in the IT industry. You've got two ways to handle this problem: ranting or doing something about it. You've done the former. Maybe you'd like to put on your "start-up" goggles where "problem" == "opportunity," bring some of your friends along and roll up your sleeves? Are you brave enough to risk the kid's college fund to follow your heart? I've done it a coupla times and there's nothing like it.
Saturday, Jun 4, 2005, 9:23 PM in The Spout
More Skype Love
I was chatting with Mike in Australia today and we pulled up Skype as we usually do, 'cuz it just works, e.g. no connection problems, no echo/feedback problems, etc. However, we couldn't get video4skype to work, so we tried switching over to MSN Messenger 7. The video worked just fine from MM7, but the audio was terrible, exhibiting volume, echo and feedback problems. So, we used a hybrid, i.e. MM7 for video and Skype for audio, which worked just fine.
This hybrid model is prevalent in my communications recently:
- queued messaging: email for text and files, vmail for nuance
- text chat: MSN Messenger 7 or Communicator, depending on whether the person is an employee or not
- video chat: MM7 or Communicator
- audio chat: phone, Skype, MM7 or Communicator
- person-to-person app sharing: MM7, Communicator
- group app sharing: LiveMeeting
Would it be too much to ask that one app do all of this well? Do I really need 6 different apps?
Saturday, Jun 4, 2005, 9:18 PM in The Spout
Realistic Conference Expectations
I was chatting today with a friend that complained that he didn't get any deep technical knowledge from a conference talk. I said that he had unreasonable expectations; the most he could expect from a good conference was the following:
- Networking opportunities (hard for geeks; often works via friend-of-a-friend in bars and restaurants, but only if you have at least one friend and s/he has at least two)
- "Info triggers," i.e. if you attend a 90 minute talk on MSMQ and you're having or are about to have a problem that MSMQ solves well, the talk should a) let you know that MSMQ provides a good solution and b) where to go for more info
- Entertainment (and that's only the good conferences)
In general, every talk should be structured like so:
- Name the thing
- What's the thing good for
- A demo of the major use(s) of the thing
- Here's where to go for more info
- Any questions?
- Please remember to tip your waitress
That's why I really love the idea of groktalks. If you attend 3 groktalks instead of 1 regular talk, the chances of you finding an info trigger are 3x, while still keeping your networking and entertainment chances even.
Tuesday, May 31, 2005, 4:52 PM in The Spout
Every PC Should Have A Camera, Mic + Stylus
I've been doing a lot of remote collaborative communications over the last decade. Email, IM and phone calls literally enable me to be an effective remote employee (along with my wit and charm : ). However, to take it to the next level as MS Communicator, MSN Messenger and Skype get real a/v conferencing and app-sharing features (that actually works through VPN and firewalls), every computer needs some extra equipment.
Most modern laptops come with built-in mics, but very few come with built-in cameras. Why should I have to use a strap-on webcam when the camera lens could be built right into the LCD screen? Plus, the mics and software really needs decent noise cancellation (MSN7 and Skype do this well, but not all apps do).
Still, I've got my phone, so I can live w/o audio and once I've already met someone, video is just a novelty, especially when compared with the power of app-sharing (it's like you're sitting right next to someone!).
The thing that I really need that I'm missing is for my computer, and everyone's computer that I'm conferencing with, to have a stylus attached to their screen. The "let's just sketch something on the white board" is really the last remote collaboration frontier 'til we get some kind of fancy "virtual presence" stuff going.
I don't mean that every computer needs to be a Tablet PC. Frankly, I'm not very productive on a computer that doesn't have a keyboard. But, I want to be able to sketch something right on my computer screen like a tablet can and instantly share it as I do so. Plus, and here's the rub, I want everyone else to have a stylus, too. If they don't, they'll turn to the white board and I'm out of luck across the great divide.
Tuesday, May 31, 2005, 3:12 PM in The Spout
Blogging is not marketing copy!
As soon as corps hire bloggers as part of their marketing budget, they've missed the point completely. Marketing and PR folks are chiefly concerned with only saying the good things about their own products and (the good ones anyway) nothing at all about the competitor's products.
Blogs are about the whole truth, which is why are the best corp bloggers are constantly in fear of losing their jobs.
Does anyone see a disconnect here?!?
Monday, May 30, 2005, 9:50 AM in The Spout
URLs in the Footnotes?
Here's a question for folks. Right now, the 1st edition of the WinForms book has several footnotes like the following that include URLs:
"The ntcopyres.exe tool can be obtained from http://www.codeguru.com/cpp_mfc/rsrc-simple.html."
Unfortunately, unlike the browser you're using now, while we can underline an URL in a book, we can't do anything useful with you "click" it, which forces you to type it. Since the URL above is by no means the longest in the book (MS likes to put GUIDs in theirs), I'd prefer not to put that burden on the reader if I don't have to. With the invention of shrinkster, I don't have to:
"The ntcopyres.exe tool can be obtained from http://shrinkster.com/452."
The problem with this, of course, is that I don't really know if shrinkster is going to be around forever or if I want to tie my book to a single external resource that I can't control. The idea I had this morning was to use both, which increases the size of the URL in print but gives the reader a shortcut and doesn't hold me hostage to shrinkster*:
"The ntcopyres.exe tool can be obtained from http://www.codeguru.com/cpp_mfc/rsrc-simple.html (shrinker.com/452)."
What do people think?
*Don't get me wrong. I'm a big shrinkster fan, else I wouldn't be dropping their links into my books at all.
Friday, May 27, 2005, 3:41 PM in The Spout
The Logic of Logic
Here. The one where I re-discover the good parts of constraint logic programming.
Friday, May 27, 2005, 12:00 AM in The Spout
The Logic of Logic
My son came to me the other day and said, "Dad, I need help with a math problem." The problem went like this:
We're going out to dinner taking 1-6 grandparents, 1-10 parents and/or 1-40 children
Grandparents cost $3 for dinner, parents $2 and children $0.50
There must be 20 total people at dinner and it must cost $20
How many grandparents, parents and children are going to dinner?
The reason this problem is interesting is because there are 3 variables, but only 2 equations:
grandparents * 3 + parents * 2 + children * .5 = 20
grandparents + parents + children = 20
Being a coder, I sat down to write the program to enumerate all possible solutions:
class Program {
static void Main(string[] args) {
for( int grandparents = 1; grandparents < 7; ++grandparents ) {
for( int parents = 1; parents < 11; ++parents ) {
for( int children = 2; children < 41; children += 2 ) {
double dollars = grandparents * 3 + parents * 2 + children * .50;
int people = grandparents + parents + children;
if( dollars == 20 && people == 20 ) {
Console.WriteLine("grand parents= {0}, parents= {1}, kids= {2}",
grandparents, parents, children);
}
}
}
}
}
}
Running this program saves my son the time to figure out the solution through tedious trial-and-error (plus, he didn't even have to write the program, since I did that part -- tricky little bastard, isn't he?!?) by producing the following output:
grand parents= 1, parents= 5, kids= 14
That was all well and good 'til Alex, a friend of mine, boiled the problem down to a single-statement Prolog program for me (although this program doesn't capture the range of values the variables can take on):
people_at_the_meal(Grandparents, Parents, Children) :- Grandparents * 3 + Parents * 2 + Children * 0.5 = 20, Grandparents + Parents + Children = 20.
Then I went on to regale Alex about the time my grandmother asked me to schedule her tennis tournament for her on my computer. She had requirements like, "everyone has to place everyone else at least once" and "you have to lose twice to be out of the tournament" and "nobody can play twice in a row" (it's not good politics for a computer program to kill old ladies...). My grandmother's problem statement doesn't fit the traditional algorithmic statements that I'm used to using computers for, nor was I ever able to re-form the problem in those terms (it's not like my grandma was ever going to leave me a bunch of money anyway...). Alex completely understood and informed me that the NBA has the same problem (with slightly sprier players) and they use logic programs to solve it. In fact, in his experience, these problems happen all the time in the business world.
Constraint Logic Programs (CLPs) break down into constants, variables over ranges and relations of truth, which together make up the constraints in a logic system. In my son's case, the constants are the numbers, e.g. 3, 20, etc, the variables are the number of people of each type and the relations form the constraints, e.g. the sum of all people must be 20. The CLP "solver" (in Alex's parlance) provides the logic over a particular "domain" (real numbers in our case) and knows how to do all the iteration and forward and backward chaining to solve the people_at_the_meal problem. A different solver would be able to solve my grandmother's and the NBA's scheduling problem.
It was only after most of this discussion that I realized that I recognized the syntax that Alex had produced: it was Prolog, a CLP language I had blocked. I had taken a Prolog course in it in college and absolutely hated it, but not because of the things that allowed me to solve these kinds of problems: that was great. The things I hated were all of the algorithmic things that I needed to be able to do that Prolog was terrible at, e.g. take input, product output, suck in facts from data external to the system (like the NBA player roster), etc. CLPs themselves are damn cool.
Tuesday, May 24, 2005, 8:08 PM in The Spout
Frequent Flier Miles Suck (Airlines Suck)
I just called to cash in my Alaska Airlines miles on it's partner airline Northwest for a trip 5 weeks in advance and they told me that they don't have any seats available. I know is complete bullshit, because when I search for the flights on the web directly, they're happy to sell me a seat for the specific day I want.
What they mean is, "Oh no, sir, people actually want to pay to fly that day; we couldn't possible honor our frequent flier commitments to award you travel on that day!"
Blackout dates, "saver seats," coach seats built for pigmes... the whole airline industry sucks and you can tell them I said so!
Tuesday, May 24, 2005, 11:29 AM in The Spout
Story-Driven Development
I'm a big believer in the "write the story first" method of software engineering. Like "client-first development" or the increasingly popular "test-driven development," "story-driven development" is about writing what we want from our software before we write the software. This is different from "spec-driven development" or even "design-driven development" in that I mean actually writing the equivalent of one or more MSDN Magazine articles that you'd like to publish when your product is complete. I can't tell you how many issues I'm able to work through using this technique and it's highly recommended if you think in prose. Of course, as the product evolves, so do the articles until the perfect storm happens when the product matches the article and vice versa (modulo bugs, this typically indicates beta 1).
Today, after 5 months of marination, I awoke with the "Intro to Our Stuff" article in my head and I've started outlining it. This one is really "Intro to Our Stuff for Developers" piece, which corresponding "Intro to Our Stuff for IT Pros" and "Intro to Our Stuff for Business Analysts" pieces that needs to happen, too.
Thursday, May 12, 2005, 4:21 PM in The Spout
Survey: Windows Forms Programming 2ed Length
There has been some publisher/author controversy around the length of the 2ed of Windows Forms Programming. WF2 has essentially doubled in size, so I was happy that it looks like we're be less than twice the number of pages (700 for 1ed vs. estimated 1200 for 2ed). However, when I sent this estimate to my publisher last month, they were less than pleased. Apparently if you go above 800 pages, that tends to scare people and may cut into sales. Here are the options we wrestled with:
- Cut 400 pages of material out of the WF2 book, leaving it on the cutting room floor
- Ship a 1200 page WF2 book, increasing the cover price by $10
- Move 400 pages of material out of the WF2 book, releasing them as freely available PDF files on the web (continuing to index and refer to this material in the printed book)
- Split the book into two volumes, priced accordingly (probably $35 each)
There's one piece of information that I'm share later that caused us to lean one way more than the other, but I'm curious what readers would choose when given this choice.
P.S. Believe me when I tell you that we've been diligent about cutting stuff that doesn't belong in the book, although I admit that we've been unwilling to cut material that will be generally useful for WinForms programmers, even if it does decrease sales. I'm still hoping we'll be able to get the page count below 1200, but the upshot is that option #1 has always been a non-starter for me.
P.P.S. I expect the first three reviews on Amazon to be complaints about whichever method we choose and reminising about how wonderful it was to get all of WinForms in 700 pages. Those kinds of complaints should be forwarded to the WinForms team in emails that start with "You put too much good stuff into WinForms 2.0!" : )
Wednesday, May 11, 2005, 1:46 AM in The Spout
Damn I Love Skype!
Skype is the thing that seems to work best for my Australian phone calls (at least once/week if not more) and I love SkypeOut for when I'm just too damn lazy to walk across the room for the phone. If I could use a SkypeIn phone number for getting/sending faxes as well as placing and receiving calls and taking voicemail, I'd have one of those, too (only $4/month!).
That said, MSN7 seems to have fixed the a/v sharing problems through firewalls, so now I use it for that and MS Communicator is damn cool, too.
These communication devices are pretty important for a remote guy. Just today, I had an hour long video counseling session with my boss (it takes me about a year to feel like I'm actually capable of any new job I take) and another hour-long IM with one of the architects on my team arguing about what the hell we're building anyway. The counseling session would've happened no matter where I lived, but even if I lived next door to him in Redmond, I wasn't going to be sitting in the architect's living room from 12:30am - 1:30am chatting with him; new comm was the enabler.
Monday, May 2, 2005, 8:38 PM in The Spout
I am not a graphic artist!
Whenever anyone hears that I program Avalon, the first thing they think is, "Oh, good, let's get Chris to create a cool looking UI for us!" They also tend to lump in data visualization expertise and user experience into that mix as well. On the "beginning to experienced" scaled, I'd rate myself in the following way on these tasks:
- Avalon programming: beginner to intermediate, depending on the bit of Avalon you're taking about
- Visualization expertise: interested beginner (I've attended a 8-hour Edward Tufte seminar, skimmed 3 of his books and wished for something more than the DataGrid)
- User Experience design: intermediate in the realm of standard Windows applications but beginner when those limitations are removed, i.e. what Avalon enables
- Graphic art: untalented hack
Seriously, I can't draw myself out of a paper bag (or in one, for that matter). I hired all of the art done for my web site and I almost never draw pictures for my books. Instead, I write programs and take screen shots or make Mike draw the pictures for me.
Being able to program Avalon doesn't make me a graphics artist any more than being able to program my financial calculator (which I can't do anyway) would make me Warren Buffet. In fact, I'm closer to being Warren Buffett than I am to being a graphics artist, which should give you some indication about the gap we're talking about here...
That's not to say that some enterprising 3rd party couldn't create tools to help artistic yarn heads like me produce useful Avalon graphics. If my experience is any indication, there are going to be a lot of developers moving to Avalon that are expected to create wonderful things w/o an artistic bone in their bodies. Somebody help!