user61357: According to the bitcoin wiki, the most common form of transaction (pay-to-pubkey-hash) looks like this:
scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
scriptSig: <sig> <pubKey>

I am curious why OP_CHECKSIG comes at the end. Couldn't we check the signature even before doing the hash?
More precisely, couldn't it instead do:
scriptPubKey: OP_CHECKSIGVERIFY OP_DUP OP_HASH160 <pubKeyHash> OP_EQUAL
scriptSig: <pubKey> <sig>

This way you don't have to go through all the hashing if the pubkey and sig don't match to begin with. 
I'm sure there's a good reason for this or i'm completely misunderstanding something, please enlighten me. Thank you!

user208: 
Couldn't we check the signature even before doing the hash?

We certainly could, but that would be silly. The hash is about 1000x faster than checking a signature. Doing the signature check when the hash fails would be a waste of time

More precisely, couldn't it instead do:
scriptPubKey: OP_CHECKSIGVERIFY OP_DUP OP_HASH160  OP_EQUAL

No, that certainly wouldn't work. The OP_CHECKSIGVERIFY would remove the public key from the stack, so there is nothing to compare it with. The OP_DUP would always fail, as there is nothing to duplicate anymore.

61357: <p>According to the <a href="https://en.bitcoin.it/wiki/Script" rel="nofollow noreferrer">bitcoin wiki</a>, the most common form of transaction (pay-to-pubkey-hash) looks like this:</p>

<pre><code>scriptPubKey: OP_DUP OP_HASH160 &lt;pubKeyHash&gt; OP_EQUALVERIFY OP_CHECKSIG
scriptSig: &lt;sig&gt; &lt;pubKey&gt;
</code></pre>

<p>I am curious why <code>OP_CHECKSIG</code> comes at the end. Couldn't we check the signature even before doing the hash?</p>

<p>More precisely, couldn't it instead do:</p>

<pre><code>scriptPubKey: OP_CHECKSIGVERIFY OP_DUP OP_HASH160 &lt;pubKeyHash&gt; OP_EQUAL
scriptSig: &lt;pubKey&gt; &lt;sig&gt;
</code></pre>

<p>This way you don't have to go through all the hashing if the pubkey and sig don't match to begin with. </p>

<p>I'm sure there's a good reason for this or i'm completely misunderstanding something, please enlighten me. Thank you!</p>
 208: <blockquote>
  <p>Couldn't we check the signature even before doing the hash?</p>
</blockquote>

<p>We certainly could, but that would be silly. The hash is about 1000x faster than checking a signature. Doing the signature check when the hash fails would be a waste of time</p>

<blockquote>
  <p>More precisely, couldn't it instead do:</p>
  
  <p>scriptPubKey: OP_CHECKSIGVERIFY OP_DUP OP_HASH160  OP_EQUAL</p>
</blockquote>

<p>No, that certainly wouldn't work. The OP_CHECKSIGVERIFY would remove the public key from the stack, so there is nothing to compare it with. The OP_DUP would always fail, as there is nothing to duplicate anymore.</p>
