Ask Joel

I've been reading the Ask Joel forum lately and it's quite nice and usually high level discussion. Beside that there's a good laugh once in a while aswell. For example from this topic: What Is The "Next Big Thing" In Development?:

We will have robots in our kitchens to wash the dishes!

And in elevators to operate the elevator controls!

Instead of tellers in banks, there will be rows of ultra-modern computers that dispense stacks of crisp, new dollar bills (although in the future even common laborers will make enough money to take out ten, twenty, or even forty dollars each time they go to the bank!)

Flying machines will whisk us in comfortable pressurized air from city to city. Perhaps you might even be served a simple hot meal, high above the clouds!

The world's largest encyclopedia, bigger, indeed, than a school library, will be instantly available in homes by means of pneumatic tubes or perhaps electrical wires.

A special telephotograph-machine will enable the spread of education throughout the world, giving even the poorest dustbin-cleaner an opportunity to better themselves by learning the classics, eliminating hunger and suffering.

Oh, and C# will have anonymous methods, allowing the code associated with a delegate to be written in-line where the delegate is used, conveniently tying the code directly to the delegate instance.

But also useful advice, such as in this topic: Software usability (particulary API usability):

There were a bunch of things we did there for usability considerations; I can't remember all of them. Here are some things -- you may think some are misguided, but they were all intended for usability:

(1) 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.

(2) No APIs use abbreviations. Everything is spelled out, because when the API uses an abbreviation, you have to remember what the abbreviation is, but if everything is spelled out, this is one less thing to memorize.

(3) APIs should never require that you understand pointers. Pointers are one of the great dividing skills between hard core programmers and dabblers. 90% of the people who dabble in code and need to write macros just don't understand pointers and can't be expected to make them work. So for example in the Excel object model, there is >always< a way to get an index of something in some collection which you can later use to get the original thing back. Same effect as a pointer but easier to understand for the pointer-deficient.

(4) Lots of rules for consistency. Consistency is one of the best ways to get usability because it allows learned skills to be reused elsewhere. For example in the Excel object model every collection class has a plural name and every non-collection class has a singular name. If you have a collection class you are guaranteed to be able to For Each it, to call Count on it, etc.