![]() |
||||||||||||||||||||||||||||||||||
Joel on Software painless software management
|
||||||||||||||||||||||||||||||||||
|
Dean Jackson, who's responsible for applications at the W3C: “The good news is that it seems we have many of the big players ready to go in this area. Joel may get some of his wishes sooner than he thinks (let's hope!)” Rhys Jeremiah: “I'll outline the features that I would like to add.” Jeremy Hartley: “I have spent the past two years web-enabling my company's HRM System. My intentions have always been to make the web version of the application as similar to the Win32 version as possible—no compromise allowed. To do this I have had to use every trick in the book as well as making up quite a few myself. The process took me two years. I think I could have done it in six months if I had had the following...” Yoz Grahame: “The current Javascript security philosophy can be easily summarised thus: ‘No.’” Jeremy Smith: “I want a way to access a browser's right-click menu.” Mike Marshall doesn't agree. “Here is the real solution. Microsoft is coming out with ClickOnce in VS 2005 ('Whidbey'). What's that, too platform independent? Java will come with something similar, in fact Java Web Start apps are pretty much already there. You will have your pick at this time next year, believe me.”
The Web Hypertext Applications Technology Working Group is working on extending HTML4 forms to make Web applications work better. In the previous rounds of HTML enhancement, the world's great graphic designers (like Jeffrey Zeldman) made the most noise and got us things like CSS which allow the kind of pixel-perfect page layout that the marketing people like, done in an intelligent way that separates content from presentation. Kudos. They got what they wanted, mostly, and quieted down. Now it's time for us application developers to start clamoring for the features we need to develop great web applications. Here are some examples of the kinds of features I'd like to see in web browsers:
This is just a random list, nothing organized. These things would have happened if browser development hadn't ground to a halt in the late 90s due to the misguided Netscape-rewrite-project and the lock-IE-developers-in-a-dungeon project. What I do not want to hear about:
What are your ideas for improving the HTML/CSS/JavaScript infrastructure to make web app development better? Write them up and post them somewhere; I'll point to the best ones from my blog. Please don't email me your suggestions -- post them on the web and email me a link so everyone can benefit. I just don't have enough time for private email conversations (yesterday's API Wars article generated well over 200 thoughtful email messages which I can never hope to respond to adequately). It's time for application developers to start clamoring for the next generation of the Web now that the graphic designers got their wish list taken care of.
“There are two opposing forces inside Microsoft, which I will refer to, somewhat tongue-in-cheek, as The Raymond Chen Camp and The MSDN Magazine Camp.” How Microsoft Lost the API War
Here are three reasons to switch web browsers today:
You know what drives me crazy? “Everything?” you ask. Well, OK, some of you know me a bit too well by now. But seriously, folks, what drives me crazy is that most software developers don’t realize just how little they know about software development.
Perfectionism If I was as much of a perfectionist as some here would have me be, I would never get out the door in the morning, I'd be so busy scrubbing the floors of my apartment until they sparkle and shaving every ten minutes and removing lint from my clothing with masking tape, and by the time I finished that I'd have to shave again and take out the trash because there was masking tape in the trash and re-scrub the floor because when I took the trash out I might have tracked in dust. And then I'd have to shave again. I could go insane with the web page behind the discussion board. First I could make it 110% xhtml 1.1 + CSS. Heck, why not xhtml 2.0 just to be extra addictive-personality-disordered. Then I could neatly format all the html code so it's perfectly indented. But the html is generated by a script, and the script has to be indented correctly so that it's perfect too, and a correctly indented ASP script does not, by defintion, produce correctly indented HTML. So I could write a filter that takes the output of the ASP script and reindents it so that if anybody does a View Source they would see neatly indented HTML and think I have great attention to detail. Then I would start to obsess about all the wasted bandwidth caused by meaningless whitespace in the HTML file, and I'd go back and forth in circles between compressed HTML and nicely laid out HTML, pausing only to shave. I could spend the rest of my life perfecting the HTML behind every page on all of our sites, or I could do something that might actually benefit someone. Perfectionism is a very dangerous quality in business and in life, because by being perfectionist about one thing you are, by definition, neglecting another. The three days I spent insuring that all icons in CityDesk 3.0 are displayed with perfect alpha-blended effects came at the price of having a web site where the descender of the "g" is not a hyperlink. And both are at the price of working on my next book, or writing another article for Joel on Software, or making CityDesk publish really big sites faster. If you're noticing a recurring theme, it's that I never like to talk about whether or not to do X. The question should never be "X, yes or no?" As long as you have limited time and resources, you always have to look at the cost and the benefit of X. Questions should be "Is X worth the time" or "Will X or Y have a greater return on investment?" Great Minds Think Alike Raymond Chen: “In other words, in an error-code model, it is obvious when somebody failed to handle an error: They didn't check the error code. But in an exception-throwing model, it is not obvious from looking at the code whether somebody handled the error, since the error is not explicit.” (c.f. Joel on Exceptions) Larry Osterman: “I’m not saying that metrics are bad. They’re not. But basing people’s annual performance reviews on those metrics is a recipe for disaster.” (c.f. Joel on Measurement, Joel on Incentive Pay, Why FogBugz isn't a crutch for HR, etc.) By the way, have you noticed how everyone at Microsoft is a blogger now? Dave Winer has managed to successfully and almost single-handedly pull off the most incredible Fire and Motion coup in the history of the software industry. His endless evangelism of blogging now has every Microsoft employee spending more time working on their blogs than working on software development or even picking out polo shirts. Brilliant! And that fifth column thing with Scoble -- there are no words! Bravo! The Best Thing on Television, Ever
Hint to Americans: turn on the English subtitles and you'll catch twice as many jokes.
Dogfood The term “eating your own dogfood,” in the software industry, means using the code you’re developing for your own daily needs: basically, being a user as well as a developer, so the user empathy that is the hallmark of good software comes automatically. This site is produced in CityDesk, and about half of my time is spent writing code for CityDesk, so it’s been my policy to edit Joel on Software using the current, debugging version of CityDesk running inside the debugger. The neat part is that if I'm writing a long essay for the site and the application crashes, I have a chance to debug it right there and then and in fact if I haven't saved in a while I must debug it right there and then, otherwise I won't be able to save my work. Anyway, for the last couple of weeks, the development version of CityDesk has been using a new, smaller database schema (it's mostly the same as the old schema but with some redundancies removed to make it better normalized) and the truth is I was a little bit scared to upgrade the Joel on Software database so I could publish. But dogfood we must eat, so here you go. Interviews Eric Lippert writes: “Dev candidates: if you've done any reading at all, you know that most of your interviews will involve writing some code on a whiteboard. A word of advice: writing code on whiteboards is HARD. Practice!” Good advice. I'm wondering if we should stop giving advice on interviewing... my guerrilla guide is so well read that my old trick of looking for people who write their }'s immediately after their {'s doesn't work any more. Everyone who interviews at Fog Creek always carefully does that now, and then they sort of look at me to make sure I noticed that they wrote their } immediately after their {. Tip: That's not what I'm looking for any more. Memetics and Email Viruses Gary Cornell and I had an interesting conversation about how email viruses are getting cleverer and better written. It reminded me of Richard Dawkins and Oliver Goodenough (Nature, September 1, 1994) who realized that chain letters were a great example of the evolution of memes. Evolution requires:
In a chain letter, you have
The same thing happens with email viruses. The ones with the best fake letters, e.g., the ones that persuade the most people to open the attachment, will survive and reproduce. The ones that aren't very convincing die out. The next stage, which may have already happened, would be for the virus to modify a couple of words at random in the text of the message before sending it out. Instead of blasting a million people the same message, blast groups of 100 people the same message with a different random change. Eventually random mutation will improve the ability of these messages to survive and reproduce by fooling people into opening the attachment. I've said it before, and I'll say it again ... nobody knows more about marketing in the shrinkwrapped software industry than Rick Chapman, and the new fourth edition of his book is the only place you can go to find a complete encylopedia of just about everything there is to know about marketing software. There's really nothing else that compares and if you're trying to market software you really have to read this book. Over the years and the editions Rick has added an awful lot of material, and a lot of it is starting to show its age. In particular a lot of the discussion of channel marketing may not be relevant: thanks to the Internet, plenty of software companies today are doing fine using 100% direct-to-customer without any traditional channel whatsoever. Don't let that stop you from buying the book; it has plenty of useful data on Internet and direct sales, too. Before you try to sell software, you have to at least sit down and read this book cover to cover, if only to gain the humility to realize how much is involved in marketing.
Thanks to everyone who came to the open house last night. If you have pictures, send me a link! We had an interesting conversation about how the impedance mismatch between contemporary high-level programming languages (Java, C#, Python, VB) and relational databases. Since a huge percentage of code requires access to databases, the glue (a.k.a. the connecticazoint) between the RDBMS layer and the application code is very important, yet virtually every modern programming language assumes that RDBMS access is something that can be left to libraries. In other words, language designers never bother to put database integration features into their languages. As a tiny example of this, the syntax for "where" clauses is never identical to the syntax for "if" statements. And don't get me started about data type mismatches: just the fact that columns of any type might be "null" leads to an incompatibility between almost every native data type and the database data types. The trouble with this is that the libraries (think ADO, DAO, ODBC, JDBC, embedded SQL, and a thousand others) need to be general purpose to be reusable, and yet what you really want is a mapping between a native data structure and a table row or query result row. Inevitably, you have to hand roll this mapping and wire it up manually, which is error prone and frustrating. I think this is a fatal flaw in language design, akin to the bad decision by the designers of C++ that it was not necessary to support a native string type. "Let a thousand CString/TString/String/string<char> types flourish," they said, and then spent more than a decade adding new features to the language until it was marginally, but not completely, possible to implement a non-awful string class. And now we have a thousand string types (most large C++ bodies of code I've seen use three or four) and a bunch of really good books by Scott Meyers about why your personal hand-rolled string class is inadequate. It's about time that a language designer admitted that RDBMS access is intrinsic to modern application implementation and supported it in a first-class way syntactically. Now for all the disclaimers to prevent "but what about" emails. (1) in functional languages like lisp the syntax layer is so light that you could probably implement very good RDBMS shims in ways that feel almost native. Especially if you have lazy evaluation of function parameters, it's easy to see how you could build a "where" clause generator that used the same syntax as your "if" predicates. (2) Access Basic, later Access VBA, had a couple of features to make database access slicker, specifically the [exp] syntax and the rs!field syntax, but it's really only 10%. There are probably other niche-languages or languages by RDBMS vendors that do a nice job. (3) Attempts to solve this problem in the past have fallen in two broad groups: the people who want to make the embedded SQL programming languages better (PL/SQL, TSQL, et al), and the people who want to persist objects magically using RDBMS backends (OODBMSes and object persistence libraries). Neither one fully bridges the gap: I don't know of anyone who builds user interfaces in SQL or its derivatives, and the object persistence implementations I've seen never have a particularly good implementation of SELECT.
535 8th Ave. (bet. 36th and 37th), 18th Floor, New York
Top Twelve Tips for Running a Beta Test.
This thread in Ask Joel about offshoring/outsourcing is much better than anything I could have written on the subject myself. Ken sets up the strawman; eloquent readers from around the globe tear it down.
I hope you're not all missing the excellent stuff going down on the Ask Joel forum. On Apress: “ And although they would not put a doggie on the cover of my book as I requested, because a certain other book publisher threatens to sue his competitors when they put anything animal like within 90 feet of their covers, their graphic designer worked overtime to create underground cover art called User Interface Design for Doggies complete with three golden retrievers, which they framed and sent to me. ” On Microsoft Program Managers: “ So the programmers think they're deciding everything and the program managers think they're deciding everything. How can they both be deciding everything? They can't. Who is really deciding, then? Let me give you a hint. Of the program managers and developers you know, on the whole, who has better people skills? eh? speak up boy, I can't hear you. Duh! Of course it's the program managers. You knew that. Developers couldn't people-skill their way out of a summer intern party at BillG's lakeside mansion. Developers have such weak people skills they can't even imagine what people skills could be used for, other than the purely theoretical concept of getting a theoretical date ("I ... like ... big BUTTS and I can not LIE..."), so it's no wonder they're not even aware of the secret that I can finally reveal today. ” On Lisp: “And I have the ultimate respect for Paul Graham -- I think there's a good probability that in a year or two we will credit him with being the man who solved spam. But I think that if you try to ignore the fact that millions of programmers around the world have learned lisp and don't prefer to use it, you're in the land of morbid cognitive dissonance. ” On Big-M Methodologies: “ Everything about RUP, for example, is obsessed with figuriing out what the business objects and business rules are so you can do a payroll system. We do things like add spell checkers to an editor window. ” On Usable Programming APIs: “Indexes are one based. That's how humans count. Zero-based is better, I agree, but one-based is what humans expect, and the program model must conform to the user model for ease of use.” On Starting Fog Creek: “ The law firm that was recommended to us was big and famous and wanted a $30,000 retainer just to talk to us. There was a time during dotcom mania where you weren't someone unless your law firm was VLG or MoFo. I was literally told that you had to use VLG or maybe, distant second, MoFo, or I could never convince VCs to invest. "They won't take you seriously if you don't have a serious lawfirm." I snorted up my milk. ” On teaching your boyfriend C++: “ Forget it! Give up! ... Teach me about women's shoes and I will feign interest and then promptly forget everything you told me.” On software pricing: “With software sold in corporations, as soon as your price gets up in the $3000 level, the amount of approval it needs is so absurd that you are not going to sell products without a salesperson making a few visits. Hiring the salesperson, sending them out to make presentations, hotels, airfare -- now it costs $50,000 to get the sale done just in sales closing costs. That's why you see a lot of software products at $100,000 and a lot under $3000, but anywhere in-between and it's impossible to make sales. ”
Ask Joel I'm running out of my own ideas for article topics. I was going to write about how the search for autotrephination on Google only has one result, which is surprising, considering how there's an entire movie on the subject, although I realized most people probably think autotrephination would mean "automatic-drilling-of-holes-in-the-head" when it's perfectly obvious to me that it should mean "drilling-of-holes-in-one's-own-head" but, hey, what does a word mean that has only been used once in the entire history of Google? And what does it mean to say that a word means something if nobody has ever used it? Anyway, I decided that writing about this would be so headache-inducing you all would try to drill a hole in my head so I didn't write anything about it. Luckily, I have my readers for topic ideas. A lot of times people email me saying, "I'd love to hear what you think about X." Sometimes, that's enough to motivate me to write a long essay. But more often, my opinion is far too shallow and insipid to justify such an effort, so I dash off a paragraph or two to the email correspondent, or, more often, file away the email in a folder full of things I would love to respond to if we lived on Pluto and the day was 153.4 hours long and humans didn't require that much sleep. I decided to try out one of Philip Greenspun's ideas -- the Ask Philip Forum. So, without further ado, I have recycled the dreary old "New Yorkers" forum, which was something of a ghost town anyway, into the shiny new Ask Joel Questions forum. There are still some old New York-related topics there. Ignore them. Put the drill away. Thank you. Linkers The appropriate person at Microsoft blew off my request for a linker. The strongest argument he makes is that Microsoft wants to be able to patch security bugs in the CLR after I've shipped my program. This is a valid concern; when a major security hole was found in zlib everybody had to figure out which programs they had that used it and recompile them all. I wasted a day of my life on that particular bug. But it's easily solved by a simple technology of shims or jump tables. Put on your thinking hat and you'll figure out how to make a linker that produces a single executable plus a jump-table that Microsoft can patch when they find a security hole. PS. Apple had this technology in the original Macintosh, 1984. His other argument about working set size is a decision that should be left to developers. Let me pick the tradeoff I want to make between ease of installation and working set size. Look, I used to be a program manager at Microsoft, and there's a really strong tendency in that culture to treat customer requests as fun intellectual challenges to be fended off like exercises in debating class. But I've been talking to customers since the days of the Visual Basic 1.0 runtime in 1991 -- thirteen years ago! who have been begging for this problem to be addressed. Jason, why don't you go talk to somebody on the FoxPro team. In the late 80s FoxPro clobbered dBase in the market mainly on the strength of the fact that it compiled standalone executables. FoxPro had a linker. xBase developers pleaded with Ashton-Tate, makers of dBase, to develop or acquire a linker, but Ed Esber, reviled CEO of Ashton-Tate, refused to give them one. Learn from your own history. (Thanks to Rick Chapman for reminding me of history repeating itself.) ISV's that I talk to agree that this is the #1 weakness of VB1-6 and .Net. I'm forced to conclude that Microsoft has grown so large they are living in a reality-distortion field. I suppose it's not unusual for someone working on a campus with 45 buildings all full of Microsoft employees to lose track of what the outside world is thinking and doing. OK, anyway, there are third party alternatives. Jitit makes a thing called Thinstall. I haven't tried it. If someone out there wants to write an in-depth technical review of this thing, please contact me and I'll try to get you a review copy. Elsewhere Blogs I've been reading lately: Rory, Scoble, Raymond, Phil. I loved the style, wittiness, humor and erudition of Why's (Poignant) Guide to Ruby but I can't say I learned much about Ruby. Maybe in the next chapter?
Geodog: “So I walked into the cafe tonight and looked around for the Joel group -- like any other geek, I was too shy to ask anyone, but when I spotted a big table lined entirely with males, mostly in their mid-twenties to early forties, not too well dressed, predominantly European-American, I knew that I had found the geek gathering.”
Ted reviews my speech. Scoble: “I hate to play the ‘it'll be fixed in Longhorn’ card, but I'm going to.” OK, you tell me when my customers have Longhorn and I'll think about using .NET then, mm-kay? My money is on 2008. The Salamander .NET Linker and Mini-Deployment Tool might be a solution. Has anyone evaluated it in depth?
For some reason, Microsoft's brilliant and cutting-edge .NET development environment left out one crucial tool... a tool that has been common in software development environments since, oh, about 1950, and taken so much for granted that it's incredibly strange that nobody noticed that .NET doesn't really have one. Please Sir May I Have a Linker? ** Heute verwende ich die deutsche Version von CityDesk um mein Weblog zu erstellen. No, I don't speak German, but I know CityDesk well enough to find my way around! The company I started, Fog Creek Software, makes a terrific product called FogBUGZ for software project management and bug tracking. It's web based, affordable, and runs on your own server, and it's now available for Windows, Unix, or Mac OS X servers. Check it out now — there's a free online trial! Enter your email address to receive a (very occasional) email whenever I write a major new article. You can unsubscribe at any time, of course. |