Como forçar a execução sequencial de Javascript?

Eu só encontrei respostas bastante complicadas envolvendo classes, manipuladores de eventos e callbacks (o que me parece ser uma abordagem um tanto ou quanto maluca). Eu acho que retornos de chamada podem ser úteis, mas eu não consigo aplicar isso no contexto mais simples. Veja este exemplo:

<html>
  <head>
    <script type="text/javascript">
      function myfunction()  {
        longfunctionfirst();
        shortfunctionsecond();
      }

      function longfunctionfirst() {
        setTimeout('alert("first function finished");',3000);
      }

      function shortfunctionsecond() {
        setTimeout('alert("second function finished");',200);
      }
    </script>
  </head>
  <body>
    <a href="#" onclick="javascript:myfunction();return false;">Call my function</a>
  </body>
</html>

Neste, a segunda função completa antes da primeira função; qual é a maneira mais simples (ou existe uma?) para forçar a segunda função a atrasar a execução até que a primeira função esteja completa?

---Editar---

Então esse foi um exemplo de lixo, mas graças a David Hedlund eu vejo com este novo exemplo que ele é de fato síncrono (junto com a falha do meu navegador no processo de teste!):

<html>
<head>

<script type="text/javascript">
function myfunction() {
    longfunctionfirst();
    shortfunctionsecond();
}

function longfunctionfirst() {
    var j = 10000;
    for (var i=0; i<j; i++) {
        document.body.innerHTML += i;
    }
    alert("first function finished");
}

function shortfunctionsecond() {
    var j = 10;
    for (var i=0; i<j; i++) {
        document.body.innerHTML += i;
    }
    alert("second function finished");
}
</script>

</head>

<body>
  <a href="#" onclick="javascript:myfunction();return false;">Call my function</a>
</body>
</html>

Como o meu problema real foi com jQuery e IE eu vou ter que postar uma pergunta separada sobre isso, se eu não posso chegar a lugar nenhum eu mesmo!

questionAnswers(10)

yourAnswerToTheQuestion