I'm going to attempt my own explanation of は vs が, although this might be more technical than some would prefer. Much of what I'm writing here is taken from "The Structure of the Japanese Language" by Susumu Kuno.
There are two meanings to は, and three for が. は is used for contrast and thematic reference. が is used as a direct object marker for certain verbs/verbals, an exhaustive subject marker, and as a 'neutral-descriptive'.
は is often called the 'topic marker', in contrast to the 'subject marker' of が, but this term is almost never explained. The key difference is context. Imagine, if you will, a big box of things that have been mentioned in a conversation. We'll call this box the "universe of discourse". You only use certain constructions when talking about things that are in this box. This sounds rediculously complicated, until you realize that we do this in English as well. For example:
The boy was bouncing a ball off the store wall.
Now, several of you are freaking out right now, since that seems like a perfectly reasonable English phrase. It is... but not without context. If I start the conversation with that phrase, I've left out enough important details that you'd be reasonable to suspect I was playing a game of quotations (or insane...).
I saw a boy in Wallgreen's last night. The boy was bouncing a ball off the store wall.
provides the needed context. The first sentence introduces a boy into the context of the conversation, the "universe of discourse", and "The" selects him out of it as the particular object I wish to make a statement on.
A boy was bouncing a ball off the store wall in Wallgreen's.
is perfectly reasonable. From this we can see that we use "A" to introduce elements to our "universe of discourse", and "the" to select them out. There are several things that are considered to be always in this universe, such as personal referents. Note my first example is perfectly fine if your listener is aware you have a son. This can get a bit messy in English, so let's head to Japanese before the analogy fails.
In Japanese, the thematic は is used with generic noun phrases ("the brits") or things that are already in the universe of discourse. It's sometimes tricky to nail down exactly what is there, but the general idea is that you don't introduce things to the conversation using thematic は。 This is why you cannot use question words with は, the non-specified referent cannot be in the universe of discourse. (だれは来ましたか?) <--- BAD! INVALID! DO NOT USE!
Contrastive は, on the other hand, is much more free, and this partly explains why
「雨は降っていますが、たいしたことはありません」 is valid, while 「雨は降っています。」 is not.** Note that this is more complicated than the textbook contrastive は, as the contrast extends through the meaning of the final predicate, not just the things before the は marker.
And unfortunately it can be ambiguous which は you're looking at. Kuno's example is 「わたくしが知っている人はパーティーに来ませんでした」. If read thematic (if you were talking about all the people you know... such as all your new Japanese friends), it means "Speaking of the people I know, they did not come to the party". If you read it as contrastive, it means "People came to the party, but none that I know." The meaning is similar, but distinct.
There can be only one thematic は in a sentence. If you see a second one, the second is certainly contrastive, and the first might be.
The first meaning of が is trivial, the direct object of certain verbs, particularly those having to do with personal capability or preference, replacing the normal direct object particle を, e.g.「だれが映画が好きですか？」. This is adequately covered elsewhere, and aside from the curious subset of verbs on which this is used, is mostly uninteresting.
The other two meanings, exhaustive-listing and neutral description, are a bit tricky to understand. Any が can be an exhaustive-listing が, but neutral description only works with action verbs, existential verbs, and adjectives/nominal adjectives that represent state change. "Sentences of neutral description present an objectively observable action, existence, or temporary state as a new event." Neutral description is a valid way of introducing something to the universe of discourse, but it is far from the only one. 「空が赤い!」
Stative verbs, and adjectives/nominal-adjectives of permanent states are the predicates, only the exhaustive-listing interpretation is valid. The basic idea is that exhaustive-listing works similar to contrastive は, implying contrast to the rest of the universe of discourse.
できる is a non-action verb, so this is exhaustive-listing. Assume that we are talking about the three new students: Jon, Bill and Tom. If B knows that Jon and Tom can both speak Japanese, B just lied. If B knows Jon can speak Japanese, but doesn't know about the others, the contrastive は is appropriate to use instead of が.
Note that this is only a quick overview of the whole topic, and each of these uses has special-cases that bends the rules... but this is a decent summary of the common cases.
** It's very hard to think of a valid way to introduce rain (in a non-general way) to the conversation without it falling. I'm sure someone can dream up a way for it to work, but for the general meaning of "it's raining", は is not correct.
Edits: Correcting both my English and Japanese tenses
... I should learn a language someday, maybe English!
Edits: Simplifying introduction