مقدمات الكتاب
الدافع
حين كنت عالم بيانات (data scientist) في Quora، كان الناس يسألونني عن مصادر لتعلّم SQL. وقد واجهت صعوبة في العثور على شيء أستطيع أن أؤيده، لأنني رأيت أن المصدر الجيد يجب أن يكون مجانيًا، وألا يفرض التسجيل، وأن يهتم فعليًا بمنهجية التعليم (pedagogy) — أي أن يهتم بمستخدميه اهتمامًا حقيقيًا، ولم يكن هناك شيء بهذه الصفات متاحًا.
وبعد تجاوز بعض العقبات التقنية البسيطة، أعتقد أن Select Star SQL حقق هذا المعيار. وأملي أن يصبح Select Star SQL، كما فعل Learn You a Haskell for Great Good! وBeautiful Racket مع Haskell وRacket، أفضل مكان على الإنترنت لتعلّم SQL.
منهجية التعليم
هذه المبادئ وجّهت تصميم هذا المشروع:
- أفضل طريقة لتعلّم البرمجة هي الممارسة. تشكّل التمارين نسبة عالية من المادة، وينبغي أن يستغرق التفكير فيها ومحاولة حلّها معظم وقتك.
- ينبغي أن تكون التمارين واقعية وجوهرية. وبكلمات Alan Kay: «لا تدع المتعلّم يفعل شيئًا ليس الشيء الحقيقي أبدًا — لكن عليك أن تكدّ وتجتهد حتى تكتشف ما هو الشيء الحقيقي في سياق طريقة عمل عقله في تلك المرحلة التطورية». وبالمثل، صُمّمت التمارين هنا لتقديم تقنيات SQL متزايدة التعقيد تدريجيًا، مع استكشاف مجموعة البيانات بطرق تهم الناس فعلًا.
- تعلّم البرمجة هو تعلّم نموذج ذهني. هدفنا هنا ليس تعلّم قواعد استخدام
GROUP BYأو متى نختارLEFT JOINبدلًا منINNER JOIN. سنعرف أننا نجحنا إذا استطعت بعد كتابة استعلام (query) SQL أن تغمض عينيك وتتخيّل ما سيفعله الحاسوب وما الناتج الذي سيعطيه. عندئذ فقط ستتمكن من حلّ مشكلات العالم الحقيقي بـ SQL.
مجموعة البيانات
توثّق مجموعة بياناتنا (dataset) حالات نزلاء محكوم عليهم بالإعدام في تكساس ونُفّذ فيهم الحكم منذ عام 1976، حين أعادت المحكمة العليا العمل بعقوبة الإعدام، حتى الوقت الحاضر. وقد استُخرجت من موقع Texas Department of Criminal Justice بوسائل آلية حيث أمكن ذلك. غير أن كثيرًا من بيانات ما قبل عام 1995 لا يتوافر إلا في صورة صور لوثائق ورقية، وقد تطلّب استخراجها يدويًا جهدًا شاقًا.
البيانات الخام متاحة بصيغة csv لـتنزيلها. وبفضل ما جرى من استخراج وتنظيف يدويين، فهي على الأرجح أكمل مجموعة بيانات عن نزلاء الإعدام في تكساس على الإنترنت. ويمكنك أيضًا استكشاف مجموعة فرعية منها أعددتها لهذا الكتاب:
في أحد مستوياتها، ليست البيانات إلا جزءًا من كتاب برمجة عادي. وفي مستوى آخر، يمثّل كل صف (row) معاناة هائلة، وأرواحًا فُقدت، وفي بعض الحالات خلاصًا وتقبّلًا مذهلين. وأثناء إعداد مجموعة البيانات هذه، تأثرت بعمق بعدد من التصريحات، ووجدت نفسي أعيد تقييم موقفي من عقوبة الإعدام. وآمل أن تتأمل أنت أيضًا، ونحن نفحص البيانات، القضايا الأعمق المطروحة.
الجوانب التقنية
- قواعد بيانات تعمل في جانب العميل (client-side databases). كان أحد تحديات جعل هذا الموقع مجانيًا هو تجنّب دفع تكاليف استضافة الويب. لكن لمنح المستخدمين تجربة عملية مع قاعدة بيانات (database) (انظر منهجية التعليم)، يلزم استضافة خدمة خلفية (backend) مناسبة ودفع ثمنها. وممّا يبعث على الارتياح وجود قواعد بيانات تعمل في جانب العميل. وهذا يتيح لي استخدام الاستضافة المجانية للصفحات الثابتة من Github Pages' وتشغيل قاعدة بيانات SQLite في متصفحك. وقد أتاح ذلك Alon Zakai وآخرون عبر نقل شيفرة SQLite المكتوبة بلغة C إلى Javascript باستخدام Emscripten.
- Matthew Butterick. تعرفت على Matthew في Racket Summer School وأذهلني العمل الرائع الذي أنجزه في Beautiful Racket وPractical Typography. وكما يمكنك أن تلاحظ، استعرت منه كثيرًا من أفكار التصميم.
- Jekyll. لولا Jekyll لانتهى بي الأمر بكتابة كل شيفرة html يدويًا. الحمد لـ Jekyll.
- مكوّنات الويب (Web Components). استطعت إعادة استخدام قدر كبير من الشيفرة بكتابة مكوّنات التمارين والاختبارات التفاعلية كـوسوم html مخصّصة. وهو تطوير حديث نسبيًا بحسب فهمي، وآمل أن يواصل W3C دفع اعتماده على نطاق أوسع.
الشكر والتواصل
للتصحيحات والاقتراحات، اكتبوا إليّ (Kao) على zichongkao@gmail.com. ويمكنكم معرفة المزيد عني في Kaomorphism.
أنجز Noam Castel وJowan Vogel عملًا رائعًا في الترجمة العبرية والهولندية. تواصلوا معهما للثناء والاقتراحات، أو إن كنت مهتمًا بترجمة الكتاب إلى لغات أخرى.
شكر جزيل لـ Sonja Lea Heinze وQuinn Batten وNicholas Retallack على ملاحظاتهم القيّمة.