البرمجة، ذلك الوحش !


أرهقوك بالمصطلحات الغامضة، ضَغَطْتَ على أعصابك فوق وُسْعِكَ لتظفر منهم ولو بشظية أمل..
لكنهم خذلوك…
صَوَّرُوهَا لك كالوحش الضاري ذي الأنياب الذَّرِبَة..
فَخِفْتَ إن أنتَ دَنَوْتَ منه أن ينهش ما بقي لديك من صبر، وجئت هنا كمحاولة أخيرة لتقول لهؤلاء القوم: هذه آخر فرصة لديكم لتقنعوني أن البرمجة ليست وحشا كما تصورت !
أُبَشِّرُكْ، قد وضعت قدميك في المكان الصحيح، في هذه المقالة سترى البرمجة ـ ذلك الوحش الضاري ـ أرنبا ورديا لطيفا، لكن مقابل ذلك أعرني تركيزك لدقائق يسيرة، وأعدك بإرجاع الثقة إليك بعون الله تبارك وتعالى.
خليلي...
سأفترض مسبقا أن علاقتك بالبرمجة كعلاقة الفلاَّح بموسيقى الروك...
ليس من باب تقليص ظلك، وإنما من باب التبسيط، فلا تُلْقِ علي العتب إن أنا أفرطت في التسهيل، لأن وراء الأكمة ما وراءها، وما تراه أنت تافها، كان السبب المباشر لغيرك في رؤية البرمجة وحشا كاسرا..
جاهز؟ فَلْنَمْضِ على بركةٍ من الله إذن...
مبدئيا، لنتفق أن البرمجة لا تعدو أن تكون طريقة للتواصل مع جهاز الحاسوب، نقول له مثلا: قم بتعديل الصورة التالية، أو شغل الملف الصوتي التالي، أو قم بترجمة الكلمات التي سأكتبها لك إلى لغة أجنبية ما...
هذه الأوامر بيننا نحن البشر عادية جدا، سأفهمك إذا خاطبتني بهذه اللغة، وَسَأُنَفِّذُ لك طلباتك إذا كنتُ قادرا عليها، لكن تخيل معي أن هذا الحاسوب لا يفهم لغاتنا البشرية، هذا الكلام لو رددناه له إلى الصبح لن يفقه منه شيئا، لأن للحاسوب لغته الخاصة، التي علينا الإلمام بها إذا أردنا أن نتواصل معه.
أ تدري ما اسم تلك اللغة يا خليلي؟ اسمها لغة الآلة Machine Language، لأن آلة الحاسوب تفهمها..
بعض الناس يسمونها اللغة الثنائية Binary Language، وقد تنظر إلي الآن بنظرات شزراوات وتسألني: وما معنى اللغة الثنائية؟
هدىء من روعك يا خليلي فالمسألة أبسط بكثير مما تتصوره..
السر وراء هذه التسمية، هو أن لغة الحاسوب قائمة بالأساس على وحدتين اثنتين، هما صفر و واحد، ومنهما جاءت هذه التسمية: اللغة الثنائية...
ستبستم حتما، لكنك سرعان ما ستستعيد تجهمك وتسألني من جديد: ما معنى أن لغة الحاسوب قائمة على الصفر و الواحد؟
سأقول لك بكل بساطة: الحاسوب جهاز الكتروني، مكون من أجهزة فرعية متصلة به، بعضها خاص بالإدخال وبعضها خاص بالإخراج، والبعض الآخر يقوم بمعالجة البيانات المدخلة ويقوم بإخراجها.
البيانات التي تدخل إلى الحاسوب ليعالجها (بمعنى أوضح ليتعرف عليها ويقوم بتنفيذها) تدخل على شكل بيانات ثنائية، على شكل سلاسل من الأصفار والآحاد، حينما تدخل تخزن في ذاكرة الحاسوب، فيقوم المعالج Processor بأخذ هذه البيانات وقراءتها وتنفيذها ومن ثم إرسالها إلى أجهزة الإخراج المعدة لها.
سأزيد المسألة تبسيطا وتفكيكا، عبر الصور التالية: التي أتمنى أن تتأملها بحب:
عملية معالجة البيانات من الإدخال إلى الإخراج

سنعطي مثالا للعملية التي توضحها الصورة أعلاه:
وأنت تنوي الدخول إلى حاسوبك الشخصي، ستطالعك واجهة إدخال كلمة السر (ليس في كل الحالات، لكن أنا متأكد أنك تعرف تلك الواجهة)
هل استحضرت صورتها في ذهنك الآن؟
ممتاز، لنواصل إذن..
هذه الواجهة تنتظر منك أن تدخل كلمة السر، أول خطوة ستقوم بها هي الضغط على حروف لوحة المفاتيح لكتابة كلمة السر..
هذه هي عملية إدخال البيانات، لوحة المفاتيح هي جهاز الإدخال، و كلمة السر التي ستكتبها هي البيانات المدخلة..
هذه البيانات حينما تدخل إلى جهاز الحاسوب يتم تخزينها في الذاكرة، والذاكرة يا خليلي مكونة من خانات لاستقبال البيانات الثنائية، هذه الخانات لها عناوين لكي يتعرف المعالج على عنوان كل قيمة مخزنة...
بعد أن يتم تخزين هذه البيانات في الذاكرة، يأتي دور وحدة المعالجة أو المعالج لقراءتها، ومقارنتها بكلمة السر الخاصة بالحاسوب، إن حصل تطابق، يتم فتح الحاسوب، وإلا فإنه يعرض لك رسالة خطأ مفادها أن كلمة السر المدخلة غير صحيحة، وفي الحالتين معا النتيجة المرجعة يتم إخراجها إليك عبر الشاشة، إذن فالشاشة جهاز إخراج، والرسالة المرجعة هي بيانات مخرجة..
اتضحت الصورة الآن يا خليلي؟
إن كان كذلك، فعد إلى الصورة من جديد، وتخيل أحد السيناريوهات التي تقوم بها عادةً، وارسم على ورقة مختلف المراحل التي تقطعها لإنجازه مرورا بالإدخال وانتهاء بالإخراج..
بعد أن تقوم بذلك، وستقوم به بعون الله...أنا أعرفك جيدا، وأقرأُ رسائل النصر في عينيك !
بعد ذلك تعال معي لنتفقد أنفسنا أين نحن..
تعرفنا على جهاز الحاسوب وعلى اللغة التي يفهمها، وعلى الأجهزة الفرعية المتدخلة في عمليات إدخال ومعالجة وإخراج البيانات.
لنا عودة مع لغة الآلة يا خليلي...فأعرني انتباهك يرحمك الله !
ستقرأ عن هذه اللغة في كتاب سأهديه إليك، وسترى أنها لغة سهلة التعلم، لكن لو طلبت منك كتابة برنامج بها، قد لا تتمالك أعصابك وستبحث عن أقرب شيء منك، لتتلقفه في غياب وعي وترسله على رأسي لتشجني، لكنني سأزيغ برأسي وأعود لأقول لك:
خليلي...
لستَ مطالبا بكتابة البرامج بلغة الآلة، فقد وُجِدَتْ بدائل رائعة جدا تسهل عليك ذلك، أ تدري ما اسمها؟
اسمها لغات البرمجة Programming Languages..
إنها لغات وسيطة، قريبة من لغاتنا البشرية، ومن السهل على الحاسوب تحويلها إلى لغته الثنائية.
هذه اللغات سهلت عليك المهمة بشكل رهيب، لكنها كثيرة جدا يا خليلي، فكيف تختار لغتك؟
لن أخذلك يا صديقي وأتركك هنا...
سأدلك على كتاب مختصر، يمكنك قراءته في أسبوع واحد، وبعد مطالعة الكتاب وتطبيق ما جاء فيه، سأدلك على مقطع فيديو يريك كيف تختار لغتك ومن أين تبدأ.
في هذا الكتاب، ستتعلم ماهي اللغة الثنائية، وماهي أنظمة تمثيل البيانات الأخرى المتوفرة، وستتعلم كيف تكتب البرامج على شكل خوارزميات.
الجميل في هذا الكتاب، أنه يأخذ بيدك من الصفر..
والأجمل من ذلك أنه يعلمك البرمجة باللغة العربية، وبل ويترجم لك الخوارزميات باللغة الانجليزية حتى لا تجد صعوبة في تحويلها إلى برامج حقيقية بعد ذلك..
لا أشكر لك الكتاب يا خليلي لأنه من تأليفي، معاذ الله ! وإنما أصف لك ما فيه حقا، وسترى صدق ما أقول بعد أن تختمه..


بعد الكتاب شاهد المقطع المصور التالي:

ففيه ستعرف ماهي لغة البرمجة التي تناسبك...
بعد أن تقوم باختيارها، اشتغل عليها بجد واجتهاد، وحينما تبرمج أول برنامج لك بها...
افتح باب غرفتك، ونادي أمك بهدوء وخضوع..
أو أقول لك: من الأفضل أن تذهب أنت إليها..
بل اذهب أنت إليها..
ثم قبل رأسها ثلاثا وقل لها:
لقد طلب مني ذلك خالد من المغرب الأقصى !

كتاب جديد: المختصر المفيد في تقنية WCF بلغة سي شارب

مقدمة الكتاب:

شهدت بنيات الأنظمة المعلوماتية تطورا ملحوظا مع مرور الزمن، بدء من البنية التقليدية التي كانت تقدم للمستخدمين أنظمة أحادية الخدمة، عبارة عن تطبيقات انفرادية يشتغل عليها مستخدم واحد، بل ولا تقدم له كل ما يحتاجه في عمله، إذ يضطر أن يوزع مهامه بين عدة برامج، فيقوم بإدخال المعطيات في برنامج خاص بقواعد البيانات، ثم بعد ذلك يقوم بالاستعلام عن هذه البيانات من خلال برنامج آخر مخصص لهذا الغرض، فإذا أراد أن ينشىء التقارير Reports توجه إلى برنامج آخر وهكذا دواليك.
أمام هذه التعقيدات، كان لزاما على المعلوميات أن ترقى بمجال الأنظمة، فظهر جيل جديد من البرمجيات يعتمد على الشبكات Networking platforms، بحيث تسمح هذه البنية الجديدة بتقسيم المهام بين الأجهزة والربط فيما بينها عبر الوسيط الشبكي، فعلى سبيل المثال لو أردنا نظاما متصلا بقاعدة بيانات، نقوم بإعداد جهاز سيرڤر نضع عليه برنامج إدارة قواعد البيانات، ثم نقوم بتثبيت التطبيق على مختلف الحواسيب العميلة التي نريدها أن تتعامل معه، ومنه سميت هذه البنية ببنية خادم / عميل Client /Server -.
وظهرت كذلك بنيات أخرى، لعل أبرزها بنية الأنظمة الموجهة خدميا Service Oriented Architecture والمعروفة اختصارا ب SOA، هذه الأنظمة التي تكون عادة في حاجة إلى الاتصال بخدمات الويب بغرض الاستفادة منها عبر الوصول إلى الوظائف Methods التي تقدمها فتستخدمها.
واعتمدت الأنظمة الموجهة خدميا على تقنيات عديدة تسمح بنقل البيانات البرمجية (الكائنات Objects) بين مختلف مكونات النظام عبر الانترنت أو الشبكات المحلية، لأنه ليس لزاما في هذه البنية أن تكون مكونات نظام معين موجودة على نفس الجهاز، إذ أن هذه البنية معدة خصوصا للأنظمة التي تتميز بتباعد مكوناتها جغرافيا، وتسمى هذه الأنظمة بالأنظمة الموزعة Distributed Systems.
من غير شك سبق لك وأن سمعت بالأنظمة الموزعة أو التطبيقات الموزعة Distributed Applications، فهي بكل بساطة أنظمة مركبة وعناصرها متفرقة مكانيا، وتتواصل هاته العناصر فيما بينها عبر الآليات الشبكية، إما عبر الانترنت أو عبر الشبكة المحلية للمؤسسة.
عملية تبادل الكائنات بين مختلف مكونات النظام الموزع تحتاج إلى بعض التقنيات المتقدمة، مثل تقنية خدمات الويب Web Services، تقنية .net remoting، تقنية RMI في لغة جافا، تقنية COM (Component Object Model) التي تسمح بالتواصل بين التطبيقات والمكونات الموجودة على نفس الجهاز، وتقنية DCOM (Distributed COM) التي تعتبر النسخة الموزعة من تقنية COM بحيث تسمح بالتواصل بين التطبيقات والمكونات الموجودة على عدة أجهزة عبر استخدام الشبكات، ويوجد ماهو أحدث منها كتقنية COM+، وتقنيات أخرى كثيرة إلا أننا سنغض الطرف عنهم كلها ونركز فقط على صديقتنا الغالية WCF، وسوف نتناولها بإذن الله في هذا الكتيب المختصر، فما هي تقنية WCF؟ ومتى ظهرت؟ ولماذا سنحتاجها؟ وإذا احتجناها كيف نستخدمها ؟
بداية، فإن تقنية WCF تعد اختصارا ل Windows Communication Foundation، وقد صاحبت إصدار الدوت نيت فريموورك 3.5، وطرحتها ميكروسوفت كتقنية بديلة للتقنيات المستخدمة في الأنظمة الموزعة لإنهاء مشاكل عدم التوافقية بين مكونات النظام.
الجميل في التطبيقات الموزعة أن مكوناتها قابلة لإعادة الاستخدام، إضافة إلى كونها مهيأة للاستخدام المتعدد من طرف عدة تطبيقات في نفس الوقت، والأجمل من هذا وذاك أن هذه المكونات مخفية عن عين المستخدم النهائي End User الذي لا يعلم ما الذي يجري في خفايا النظام الذي يستعمله، إذ كل ما تقع عليه عيناه يتمثل في واجهات الاستخدام، إما نماذج ويندوز Windows Forms أو صفحات ويب Web Forms.
الهدف الرئيسي من تقنية WCF هو السماح بنقل الكائنات Objects عبر الشبكات المحلية للمؤسسات أو عبر الانترنت من أجل تمكين التطبيقات التي تحتاج هذه الكائنات من الوصول إلى وظائفها واستعمالها.
لعمل ذلك، لابد من استضافة خدمات WCF على جهاز سيرڤر، وإعداده بكيفية تجعله قادرا على التجاوب مع استعلامات العملاء Clients.
من جهة العميل Client Side، ونتحدث هنا عن التطبيق المثبت على الأجهزة العميلة التي ستستخدم خدمات WCF المرفوعة على سيرڤر، فلا بد أن نوفر لهذا التطبيق العميل جميع المعلومات الأساسية التي تسمح له بالاتصال بخدمات WCF واستعمالها بشكل سليم.

رابط تحميل الكتاب:

اضغط هنا لتحميل الكتاب بصيغة PDF