خلط الأوراق والتوزيع

في القسم 14.2 كتبت شفرة زائفة لخوارزمية خلط الأوراق. بفرض أننا نملك عملية باسم shuffleDeck تأخذ مجموعة ورق لعب كمعامل وتخلطها، يمكننا استعمالها لتوزيع الأوراق على اللاعبين:
كود:
Deck deck = new Deck();
shuffleDeck(deck);
Deck hand1 = subdeck(deck, 0, 4);
Deck hand2 = subdeck(deck, 5, 9);
Deck pack = subdeck(deck, 10, 51);
هذه الشفرة تضع الأوراق الخمسة الأولى في يد، والأوراق الخمسة التالية في يد أخرى، والباقي يعود إلى العلبة.
عندما فكرت بتوزيع الورق، هل تخيلت أننا سنعطي ورقة واحدة لكل لاعب بالتبادل كما هو شائع في ألعاب الورق الحقيقية؟ لقد فكرتُ بالموضوع، ثم تبين لي أن ذلك ليس ضرورياً بالنسبة لبرنامج حاسوب. اصطلاح توزيع الورق بالتبادل يقصد منه تقليل أثر خلط الورق غير المثالي وتصعيب الغش على من يوزع الورق. كلا السببين ليسا مشكلة بالنسبة للحاسوب.
هذا المثال سيذكرك بأحد أخطر مجازات الهندسة: أحياناً نفرض قيوداً غير ضرورية على الحواسيب، أو نتوقع منها إمكانيات لا تملكها، لأننا نوسع مجازاً ما أبعد من حدوده بدون وعي.