In a large heavy saucepan, whisk together sugar, flour, cornstarch and salt.
Gradually whisk in milk. Cook over medium heat, stirring constantly, until mixture is thickened and bubbly. (Reduce heat to medium-low if mixture begins to stick, to avoid scorching.) Approximate cooking time is 10 minutes. Remove from heat.
Stir a small amount of the hot milk mixture into the beaten yolks to temper them so they won't "scramble." Then, whisk the yolks into the hot milk mixture until combined.
Return pan to heat; cook 1 minute longer. (Mixture will bubble almost immediately – keep stirring!)
Remove from heat again – don't forget to turn off the burner! – and stir in butter and vanilla until blended.
Transfer pudding to a bowl; cover with plastic wrap. (Press the wrap directly onto the pudding to keep a "skin" from forming.) Cool, then refrigerate until ready to serve.