Archive
User Interface Design for Programmers - A book about designing user interfaces, intended for software developers for whom the whole process is a bit of a mystery. Nine chapters are available on this site. A longer version is available in print from Apress.
Chapter: 1 2 3 4 5 6 7 8 9Other Software Design Topics
Software in the 1980s, when usability was "invented," was all about computer-human interaction. A lot of software still is. But the Internet brings us a new kind of software: software that's about human-human interaction. When you're writing software that mediates between people, after you get the usability right, you have to get the social interface right. And the social interface is more important. The best UI in the world won't save software with an awkward social interface. It's Not Just Usability.
Painless Functional Specifications - A series of articles on writing functional specifications. "Software engineers who dive into code without writing a spec tend to think they're cool gunslingers, shooting from the hip. They're not. They are terribly unproductive. They write bad code and produce shoddy software, and they threaten their projects by taking giant risks which are completely uncalled for."
Part 1: Why Bother?
Part 2: What's a Spec?
Part 3: But... How?
Part 4: Tips
Working on CityDesk - A series of articles about the process of creating my company's flagship content management software CityDesk.
Part: 1 2 3 4 5Growing A Team - How to build a top-notch development team.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> An important thing to remember about interviewing is this: it is much better to reject a good candidate than to accept a bad candidate. A bad candidate will cost a lot of money and effort and waste other people's time fixing all their bugs. If you have any doubts whatsoever, No Hire. The Guerrilla Guide to Interviewing
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> The idea was that you would get a big lucite tombstone the size of a dictionary when your product shipped. This was somehow supposed to give you an incentive to work, you see, because if you didn't do your job-- no lucite for you! Incentive Pay Considered Harmful
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> You would think that after all the Quality mania of the 80s, with all kinds of meaningless international "quality" certifications like ISO-9000 and buzzwords like "six-sigma", managers today would understand that having high quality products makes good business sense. In fact, they do. Most have managed to get this through their heads. But they still come up with lots of reasons not to have software testers, all of which are wrong.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> There are hundreds of thousands of programmers out there, and you can hire them, if you know how. This article is about the "programmer's perspective" on how to find people and convince them to work for you.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> How do You Compensate Programmers? Part one of a three-part attempt to create a fair and effective compensation system.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Feedback on Programmer Compensation
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Fog Creek Software's Final Compensation Policy
The Joel Test - I've come up with my own, highly irresponsible, sloppy test to rate the quality of a software team. The great part about it is that it takes about 3 minutes. With all the time you save, you can go to medical school.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Why doesn't anybody make a schedule? One, it's a real pain. Two, nobody believes that it's worth anything. Why go to all the trouble working on a schedule if it's not going to be right? Here's a simple, painless way to make schedules that are actually correct.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> If you are developing code, even on a team of one, without an organized database listing all known bugs in the code, you are simply going to ship low quality code. Painless Bug Tracking
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> A daily build is an automatic, daily, complete build of the entire source tree. Daily Builds Are Your Friend.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Eating your own dog food is the quaint name that we in the computer industry give to the process of actually using your own product. I had forgotten how well it worked, until a month ago, I took home a build of CityDesk (thinking it was about 3 weeks from shipping) and tried to build a site with it.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> As a software developer, fixing bugs is a good thing. Right? Isn't it always a good thing? No! Fixing bugs is only important when the value of having the bug fixed exceeds the cost of the fixing it. Hard-assed Bug Fixin'
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> This site is supposed to be about software management. But sometimes you don't have the power to create change in your organization by executive fiat. Obviously, if you're just a grunt programmer at the bottom of the totem pole, you can't exactly order people to start creating schedules or bug databases. And in fact even if you're a manager, you've probably discovered that managing developers is a lot like herding cats, only not as fun. Merely saying "make it so" doesn't make it so.
A Philosophy of Management - Running your team the Joel way
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> At Microsoft, if you're the Program Manager working on the Excel macro strategy, even if you've been at the company for less than six months, it doesn't matter - you are the GOD of the Excel macro strategy, and nobody, not even employee number 6, is allowed to get in your way. Period.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Imagine that the goal of your software company is not to solve some specific problem, but to be able to convert money to code through programmers.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Nobody at Juno owned anything, they just worked on it, and different layers of management happily stuck their finger into every pie, giving orders left and right in a style which I started calling hit and run management because managers tended to pop up unannounced, give some silly order for exactly how they wanted something done, dammit, without giving any thought to the matter, and leave the room for everyone else to pick up the pieces. Command and Conquer and the Herd of Coconuts
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Knowledge workers work best by getting into "flow", also known as being "in the zone", where they are fully concentrated on their work and fully tuned out of their environment. They lose track of time and produce great stuff through absolute concentration. This is when they get all of their productive work done.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Let's compare a McDonald's cook, who is following a set of rules exactly and doesn't know anything about food, to a genius like The Naked Chef, the British cutie Jamie Oliver. (If you chose to leave this site now and go watch the MTV-like videos of The Naked Chef making basil aioli, you have my blessing. Go in good health.) Big Macs vs. The Naked Chef.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> A programmer coding at full throttle is keeping zillions of things in their head at once: everything from names of variables, data structures, important APIs, the names of utility functions that they wrote and call a lot, even the name of the subdirectory where they store their source code. If you send that programmer to Crete for a three week vacation, they will forget it all. Human Task Switches Considered Harmful
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> The combination of nothing-is-as-simple-as-it-seems and reduce-risk can only lead you to one conclusion: You have to design things before you implement them.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Five Worlds: not all software development is the same.
The CTO's Playbook - What top technology managers need to know.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> There's a subtle reason that programmers always want to throw away the code and start over. The reason is that they think the old code is a mess. And here is the interesting observation: they are probably wrong.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> When I sit down to architect a system, I have to decide which tools to use. And a good architect only uses tools that can either be trusted, or that can be fixed. Otherwise you will be Up the Tata Without a Tutu.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> When you go too far up, abstraction-wise, you run out of oxygen. Sometimes smart thinkers just don't know when to stop, and they create these absurd, all-encompassing, high-level pictures of the universe that are all good and fine, but don't actually mean anything at all. Don't Let Architecture Astronauts Scare You.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> If you don't believe me look at NeXT and Be ... you can build the best dang computer in the world with a killer architecture, but if it doesn't run Microsoft Excel, nobody wants one.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> When you're working on a really, really good team with great programmers, everybody else's code, frankly, is bug-infested garbage, and nobody else knows how to ship on time. In Defense of Not-Invented-Here Syndrome
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> You want your compiler and your development environment to be as strict as possible; you want it to literally generate random return values for GlobalSize so that you don't get into the habit of counting on something that won't be there everywhere; you want to use French international settings on Chinese Windows 2000 with an absurd color scheme, DVORAK keyboard, trackball, 640x480 VGA mode, and huge ugly fonts on your development system so that you remember to bake in the code that adjusts for all these things.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> One reason people are tempted to rewrite their entire code base from scratch is that the original code base wasn't designed for what it's doing. It was designed as a prototype, an experiment, a learning exercise, a way to go from zero to IPO in nine months, or a one-off demo. And now it has grown into a big mess that's fragile and impossible to add code to, and everybody's whiny, and the old programmers quit in despair and the new ones that are brought in can't make head or tail of the code so they somehow convince management to give up and start over while Microsoft takes over their business. Today let me tell you a story about what they could have done instead.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> "I don't know what's wrong with my development team," the CEO thinks to himself. "Things were going so well when we started this project. For the first couple of weeks, the team cranked like crazy and got a great prototype working. But since then, things seem to have slowed to a crawl. They're just not working hard any more." He chooses a Callaway Titanium Driver and sends the caddy to fetch an ice-cold lemonade. "Maybe if I fire a couple of laggards that'll light a fire under them!" The Iceberg Secret, Revealed
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> How do you pick a ship date?
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> You're a software developer. Me too. But we may not have the same goals and requirements. In fact there are several different worlds of software development, and different rules apply to different worlds.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Here are a few tips for running a beta test of a software product intended for large audiences -- what I call "shrinkwrap". These apply for commercial or open source projects; I don't care whether you get paid in cash, eyeballs, or peer recognition, but I'm focused on products for lots of users, not internal IT projects. Top Twelve Tips for Running a Beta Test
Software Strategy: The Big Picture - OK, you're running a software company. How do you make the strategic decisions it takes to succeed?
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Building a company? You've got one very important decision to make, because it affects everything else you do. No matter what else you do, you absolutely must figure out which camp you're in, and gear everything you do accordingly, or you're going to have a disaster on your hands.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> If you're in the platform creation business, you are probably going to suffer from what is commonly known as the chicken and egg problem. Nobody is going to buy your platform until there's good software that runs on it, and nobody is going to write software until you have a big installed base. Ooops.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> The best way to eliminate people's objections to switching to your product is to make it easy to switch back. Nobody wants to switch to a product that is going to eliminate their freedom in the future.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Atomz.com is hoping to achieve what I call "stealth lock-in." They don't even want to you realize that you're becoming dependent on a service. In the future, when you're hooked, they can start charging you a bundle, and you'll pay them just to avoid the cost of switching.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> There are lots of great reasons for bloatware. For one, if programmers don't have to worry about how large their code is, they can ship it sooner. And that means you get more features, and features make your life better (when you use them) and don't usually hurt (when you don't). Bloatware and the 80/20 Myth
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Microsoft's squashing of Netscape could well have been intended as a stern warning across the bow of Kleiner Perkins to stay the hell out of their garden; as much as Marc Andreessen's childish threats to replace Windows was threatening, it was even more threatening that John Doerr seemed to have lost the fear of Microsoft that is vital to Microsoft's dominance of the software industry. A review of Michael E. Porter's Competitive Strategy.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> The trouble comes when you can't think of any new features, so you put in the paperclip, and then you take out the paperclip, and you try to charge people both times, and they aren't falling for it. Good Software Takes Ten Years. Get Used To It.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Many of my days go like this: (1) get into work (2) check email, read the web, etc. (3) decide that I might as well have lunch before getting to work (4) get back from lunch (5) check email, read the web, etc. (6) finally decide that I've got to get started (7) check email, read the web, etc. (8) decide again that I really have to get started (9) launch the damn editor and (10) write code nonstop until I don't realize that it's already 7:30 pm.
Somewhere between step 8 and step 9 there seems to be a bug, because I can't always make it across that chasm.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> In thinking about the microeconomic principle of complements, I noticed something interesting about open source software, which is this: most of the companies spending big money to develop open source software are doing it because it's a good business strategy for them, not because they suddenly stopped believing in capitalism and fell in love with freedom-as-in-speech. Strategy Letter V
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> If you want a platform to be successful, you need massive adoption, and that means you need developers to develop for it. The best way to kill a platform is to make it hard for developers to build on it. Most of the time, this happens because platform companies either don't know that they have a platform (they think it's an application) or they get greedy (they want all the revenue for themselves.)
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0>
When Apple releases a new product, they tend to surprise the heck out of people, even the devoted Apple-watchers who have spent the last few months riffling through garbage dumpsters at One Infinite Loop.
Microsoft, on the other hand, can't stop talking about products that are mere glimmers in someone's eye. Alpha testers outside the company were using .NET about three years before it finally shipped.
So, which is right? Should you talk endlessly about your products under development, in hopes of building buzz, or should you hold off until you've got something ready to go?
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> There are certain fundamental assumptions about doing business in the VC world that make venture capital a bad fit with entrepreneurship. And since it's the entrepreneurs who create the businesses that the VCs fund, this is a major problem.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0>
Most software managers know what good office space would be like, and they know they don't have it, and can't have it. Office space seems to be the one thing that nobody can get right and nobody can do anything about. There's a ten year lease, and whenever the company moves the last person anybody asks about how to design the space is the manager of the software team, who finds out what his new veal-fattening pens, uh, cubicle farm is going to be like for the first time on the Monday after the move-in.
Well, it's my own damn company and I can do something about it, so I did.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Writing code is not production, it's not always craftsmanship (though it can be), it's design. Design is that nebulous area where you can add value faster than you add cost. The New York Times magazine has been raving about the iPod and how Apple is one of the few companies that knows how to use good design to add value. But I've talked enough about design, I want to talk about craftsmanship for a minute: what it is and how you recognize it.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0>
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
Rants and Raves - In which I whine and bitch and moan about something or other that irked me, or (much rarer) praise something to high heavens.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> REALBasic's strategy should have been to seduce Visual Basic for Windows developers with the prospect of a cheap Macintosh port. But their desire to be Macintosh-politically-correct will cost them a fortune in potential business.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Microsoft Goes Bonkers, a critique of premature hoopla surrounding .NET.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> In July, 2000, I scooped the pundits by about 18 months, noticing with increasing alarm the risks of Microsoft's Big Brother Passport system. Does Issuing Passports Make Microsoft a Country is the most popular Joel on Software article of all time.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Alter-Joel used my money to sign me up for the latest exciting service: "Wireless Web", a.k.a. WAP service, from Verizon Wireless (mongrel spawn of BellAtlantic, GTE, and AirTouch) . This is the "service" that lets you "surf" the "web" on your cellphone. Hmmm.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> The number of dumb things going on here exceeds my limited ability to grok all at once. I'm a bit overwhelmed with what a feeble business idea the CueCat is.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Netscape 6.0 has been a terrific illustration of so many of the points I've made in Joel on Software over the last 6 months. Unfortunately, it's usually an illustration of what not to do.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> A review of The Ricochet Wireless Modem, R.I.P.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> The clear plastic serves no purpose whatsoever except to imitate FedEx envelopes which have the same plastic to hold the mailing manifest, much like those little butterflies which have fierce markings in attempt to convince butterfly-eaters that they themselves are fierce, even though they couldn't be less fierce if they were dressed up like Julie Andrews in high heels singing "My Favorite Things." How Many Lies Can You Find In One Direct Mail Piece?
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> If you want to be successful in the software business, you have to have a management team that thoroughly understands and loves programming, but they have to understand and love business, too. Finding a leader with strong aptitude in both dimensions is difficult, but it’s the only way to avoid making one of those fatal mistakes that Rick catalogs lovingly in this book. So read it, chuckle a bit, and if there’s a stupidhead running your company, get your résumé in shape and start looking for a house in Redmond.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> My foreword from Mike Gunderloy's excellent new book Coder To Developer.
Random Interesting Stuff
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> I took a self-funded sabbatical in 1995, and another in 2000. I think they're great.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> NDAs and Contracts That You Should Never Sign
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Auto-motion in Excel
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Stuck behind a desk? Brighten your monitor a bit with these high resolution digital pictures I took this summer in East Hampton.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Not to rain on everybody's parade, but there are three important ideas from computer science which are, frankly, wrong, and people are starting to notice. Ignore them at your peril.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> One thing that arsDigita did very, very, right was the personal voice thing. The biggest thing I think about with Fog Creek is how to maintain that personal voice, and if we can do it, I'll owe a big, big debt to Philip Greenspun.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Ask Joel
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Thinking about boring first-year computer-science stuff like how strcat and malloc actually work has given you new tools to think about the latest, top level, strategic and architectural decisions that you make in dealing with technologies like XML. Back to Basics
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Fog Creek Software's April 2002 plan for future migration to .NET
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> You think you're working on a death march, impossible project? It's probably nothing compared to Napster, where courts are requiring you to do things that are technologically impossible, and most of your time is spent on "briefs, declarations, depositions, and very frequent meetings with the RIAA's and the Court's Technical Experts." Eddie Kessler, VP Technology at Napster, explains.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> You can't drive as fast when it's raining, even though your car has windshield wipers and headlights and a roof and a heater, all of which protect you from caring about the fact that it's raining (they abstract away the weather), but lo, you have to worry about hydraplaning (or aquaplaning in England) and sometimes the rain is so strong you can't see very far ahead so you go slower in the rain, because the weather can never be completely abstracted away, because of the Law of Leaky Abstractions.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Lord Palmerston: "The Schleswig-Holstein question is so complicated, only three men in Europe have ever understood it. One was Prince Albert, who is dead. The second was a German professor who became mad. I am the third and I have forgotten all about it." Programming has gotten too hard.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> To isolate and simplify all access to the CityDesk database, all database access code goes through a set of classes called entity classes.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> I've moved Joel on Software to a new server, at a colocation facility operated by Peer 1 Network. In the process of finding a new home and getting it up and running I've learned quite a bit about how web hosting works, so I thought I'd describe a bit of it here and in the process provide a glimpse Behind The Scenes.
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Building Communities with Software
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> This may be, possibly, the most off-topic article I've ever done here. But I try to write only about things I know about, and, recently, I learned a lot more about commercial real estate than I ever imagined I would need to know. Finding an Office in New York City
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> When I discovered that the popular web development tool PHP has almost complete ignorance of character encoding issues, blithely using 8 bits for characters, making it darn near impossible to develop good international web applications, I thought, enough is enough.
So I have an announcement to make: if you are a programmer working in 2003 and you don't know the basics of characters, character sets, encodings, and Unicode, and I catch you, I'm going to punish you by making you peel onions for 6 months in a submarine. I swear I will.
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
" src="http://www.joelonsoftware.com/bullet.gif" width=5 border=0> Please do not use cover letters that you copied out of a book. If you write "I understand the position also requires a candidate who is team- and detail-oriented, works well under pressure, and is able to deal with people in departments throughout the firm" then at best people will think you're a bullshit artist and at worst they will think that you were not born with the part of the brain that allows you to form your own thoughts and ideas. Getting Your Résumé Read
Old Front Pages
December 1999
March 2000
April 2000
May 2000
June 2000
July 2000
August 2000
September 2000
October 2000
November 2000
December 2000
January 2001
February 2001
March 2001
April 2001
May 2001
June 2001
July 2001
August 2001
September 2001
October 2001
November 2001
December 2001
January 2002
February 2002
March 2002
April 2002
May 2002
June 2002
July 2002
August 2002
September 2002
October 2002
November 2002
December 2002
January 2003
February 2003
March 2003
April 2003
May 2003
June 2003
July 2003
August 2003
September 2003
October 2003
November 2003
December 2003
January 2004
February 2004
March 2004
April 2004
May 2004
June 2004
July 2004
August 2004
September 2004
October 2004
November 2004
本文地址:http://com.8s8s.com/it/it24762.htm