Well, I suppose we're operating with a different definition of "understand", regarding the semantics.
RE: Sawzall, haven't used it, but assuming it's similar to Pig, that's pretty domain specific. You'll probably write different code a year from now than you're writing now, though.
It's more than your respective definition of "understand". You learn differently.
You sound like a "practice" guy. To learn a language, you need to see and write code in that language. You take a good look at the standard library, you practice, you learn the trivia, how things are done, and as you become proficient, you acquire a good intuition of the language semantics.
jemfinch, on the other hand, is more a "theory" guy. To learn a language he needs the (reference) manual. He reads it, compares the various features of the new language with the ones he already know, which let him get the semantics fairly quickly. Proficiency only comes when he learns the trivia as he needed, with practice.
The difference between the two of you is that for you, understanding takes practice, while for him, it's a prerequisite to practice. You could argue that both approaches eventually amounts to the same (to write actual code, you need proficiency anyway), but they do not.
Programming languages aren't just rigid tools your boss forces you to use (or at least they shouldn't be). They're something you should chose, and sometimes transform, or even build. In such cases, you often need to choose between several languages, some of which you never practised. Some in which no code were written yet. So you need to judge the languages for themselves.
Furthermore, the "practice first" approach tend to make you blindly parrot current styles. That makes you more likely repeat past mistakes without realizing it. The "understanding first" approach may be more error prone at first, but at least here you can confront 2 styles (your own, and the established practice), and challenge either of them.
It's not so much that we learn differently, I think everyone in CS who's any good is a "theory" guy to some extent.
But understanding the basic flow of a language well enough to write "hello world" doesn't mean you fully grasp the semantics. Sure, you need to get a basic understanding down before you start coding but you don't actually understand things until you've had to look at them from a few angles. I used to assume I had something once I had the basic idea, but I've been bitten enough times by all of those unspoken assumptions that I have a healthy respect for the practice as well, is all. First inclinations notwithstanding.
RE: Sawzall, haven't used it, but assuming it's similar to Pig, that's pretty domain specific. You'll probably write different code a year from now than you're writing now, though.