طريقة البرمجة الصحيحة

السلام عليكم ورحمة اللهlazarus-ide

في اﻵونة اﻷخيرة أصبحت أهتم كثيراً بالطريقة المثالية لكتابة البرامج وللتصميم الداخلي للأنظمة الحاسوبية، خصوصاً بعدما زاد حجم البرنامج الواحد من حيث عدد اﻷجزاء modules ومن حيث عدد اﻷسطر و عدد المشاريع التي نعمل عليها في نفس الوقت. فكان لابد من التوقف لبُرهة وترك أي شيء والبحث عن افضل طريقة لتصميم معمارية مناسبة مع حاجتنا في تطوير البرامج حتى لا نصل إلى طريق مسدود مع المشروعات التي نطورها.

تهدف البرمجة والتصميم بطريقة صحيحة تحقيق أهداف مهمة في عالم تطوير البرامج منها:

  • سهولة وسرعة تطوير البرامج، بالتالي تقليل تكلفة التطوير.
  • سرعة التعديل بناءً على حاجة الزبائن والعملاء
  • تحقيق اﻹعتمادية والكفاءة في البرامج الناتجة بالنسبة للزبون.
  • إمكانية إضافة أجزاء جديدة modules دون تغيير في هيكل البرنامج
  • عدم الحاجة لتغيير معمارية النظام بعد فترة من تشغيله
  • سهولة دخول مبرمجين جدد في تطوير ذلك النظام أو استلامهم تطويره بالكامل
  • تطوير نسخة واحدة فقط من النظام لاستخدامها لعدد من الزبائن لديهم احتياجات مختلفة

وغيرها من اﻷهداف اﻷخرى والتي تختلف حسب كل مجال برمجي مستهدف.

وجدت أمس نقاط مهمة تصف مباديء و طريقة البرمجة والتصميم الصحيحتين في هذا الرابط، ففكرت بترجمة بعضاً منها، لكن ترجمتها بتصرّف:

  • عدم إعادة الكود: في حال أن هُناك أجزاء من الكود تمت إعادتها أو ظهرت الحاجة لها في أكثر من مرة، نقوم بتطبيق مبدأ التجريد فنستخرج ذلك الجزء من الكود من اﻹجراء الأم إلى إجراء جديد بطريقة تسمح باستخدامه مرة أخرى. بهذه الطريقة نكون قد حققنا مبدأين: مبدأ إعادة الاستخدام ومبدأ التجريد.
  • البساطة: ويهدف هذا المبدأ لكتابة كود بسيط مقروء سهل التعديل، وسهل الصيانة في حالة وجود أخطاء.
  • استخدام الطريقة اﻷبسط: هذا مبدأ مهم جداً، فبدلاً من استخدام مكتبة معقدة أو منصة أو framework معقد وتحتوي على كثير من اﻷشياء غير المستخدمة يمكننا استخدام إجراءات ومكونات قياسية توفرها اللغة نفسها او كتابة مكون جديد يقوم بكتابته المبرمج نفسه إذا لم تأخذ منه وقت طويل. في حال اﻹعتماد على مكونات ومكتبات خارجية معقدة يصبح لدينا بعد فترة برنامج صعب الصيانة و كبير الحجم ويمكن أن تمنعنا هذه المكتبات أن نقوم بالترقية مثلاً إلى نسخة جديدة من لغة البرمجة لأن الشركة أو الفرد الذي قام بكتابة تلك المكتبة لم يتكرم علينا يإصدار نسخة جديدة من تلك المكتبة لتواكب النسخة الجديدة من لغة البرمجة.
  • مبدأ الفتح واﻹغلاق: وهو يعني منع المكتبة أو المكون أو خدمة الويب التي طورناها من التعديل بواسطة اﻵخرين، لكن مع جعله مفتوح للإضافة. أي أن نمنع تغيير السلوك المفترض به أن تسلكه تلك المكتبة في النسخ الجديدة منها، لكن نسمح بإضافة إجراءات وصفات جديدة تجعل هذه المكتبة ذات إمكانات أكبر. ويمكن استخدام الوراثة والتجريد وتعدد الأشكال لتحقيق هذا الهدف: inheritance, abstraction and polymorphism
  • مبدأ الوظيفة الواحدة: كل إجراء لابد أن تكون له وظيفة واحدة، وهذه أيضاً من سمات التجريد. فاﻹجراءات التي تكون لها أكثر من هدف وأكثر من ناتج تكون أكثر تعقيداً وأصعب في الصيانة وتكون أقل استخداماً في نفس البرنامج و أقل استخداماً بين البرامج المختلفة.
  • تقليل اﻹرتباط: لابد لتحقيق الـ portability لأي كائن أو حتى إجراء أن لا يرتبط بمكونات أو أجزاء كثيرة في البرنامج. فيمكن استخراج الجزء المتصل بالبرنامج المعين في مكتبة أو مكون أو إجراء آخر أي تقسيمه إلى طبقتين ليتم اﻹستفادة من الطبقة العليا في برامج أخرى. يمكن تطبيق نفس المبدأ على مستوى البرامج، مثلاً برنامج حسابات مرتبط مع برامج إدارة موارد بشرية أو العكس، فبدلاً من اﻹرتباط المباشرة مع نوع معين من البرامج، يمكن عمل برنامج أو خدمة ويب أو مكتبة وسيطة تسمح بتجريد النظام اﻵخر وجعل البرنامج الأساسي يمكن أن يرتبط مع أي برنامج مختلف مع تغيير الطبقة الوسيطة فقط.
  • اخفاء التفاصيل: إخفاء التفاصيل الكود للإجراءات المختلفة مع إظهار الـ header فقط لتلك الدالة تسمح للمبرمج تعديل تلك التفاصيل والكود الداخلي implementation دون تغيير أجزاء الكود التي تستخدم ذلك اﻹجراء.

نلاحظ أن المباديء السابقة يتكرر فيها مبدأ التجريد، فيمكن أن نعتبر أنه أساس لطريقة البرمجة والتصميم الجيد لأي مشروع برمجي. وتختلف كما ذكرنا سابقاً أهمية هذه المباديء من نظام لآخر حسب المجال وحسب المدرسة البرمجية التي يتبعها فريق تطوير البرامج.

اﻷدوات المخفية تظل غير موجودة

السلام عليكم ورحمة الله

اليوم كُنت ابحث عن مسمار بين اﻷدوات، فوجد مفك داخل علبة المسامير، وهو مفك مميز لم أعرف أنه موجود، لم استخدمه كثيراً. ففكرت أن اﻷداة المخفية تكون كأنها غير موجودة، أي مادام لا نستفيد منها فوجودها مثل عدمها.

توجد الكثير من اﻷدوات، سواءً كانت كهربائية، أو ميكانيكية، أو برامج مساعدة أو حتى لغات برمجة، فإذا لم يتم التسويق لها جيداً تفقد الفائدة وراء تصنيعها. فيمكن لأدوات بسيطة غير مكلفة في التصميم والتصنيع أن تلقى رواجها بين المستخدمين وتكون لها فائدة كبيرة جداً، ويمكن أن تكون هذه الفائدة ذات عائد أكبر من تكلفة تصنيعها أو اختراعها. لكن في المقابل هُناك أدوات يتم اﻹستثمار فيها كثيراً لكن العائد يكون أقل من هذا اﻹستثمار.

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

وجدنا افكار كثيرة فُرضت علينا لا أدري ماهو اصلها، مثل فكرة التخصص، وأن الشخص لابد أن يكون له تخصص واحد ومسار واحد ووظيفة واحدة في الشركة أو المؤسسة التي يعمل بها.

السؤال هو ما مصير هذا الشخص الذي وجد نفسه في التخصص غير الصحيح مقارنة مع قدراته. ربما هُناك شخص غير ناجح في مجال يعمل به، هل يتم اعطاء فرصة له أن يكون ناجحاً في مجال آخر أم أنه سوف يُحكم عليه للأبد أنه غير ناجح وغير كفوء.

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

اعتقد أن هُناك عدداً كبيراً من الناس يتوظفون بموهبتهم الثانية أو الثالثة ويتركون موهبتهم اﻷولى سراً لا يعرفها أحد ويبرعون في كتمان هذا السر كأنه إثم.

صور من السودان

السلام عليكم

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

بحثنا عن صور للرصيرص في اﻹنترنت لكننا لم نجد، فقررنا أننا عندما نرجع سوف نقوم بوضع الصور في صفحة في اﻹنترنت لتعريف الناس بهذه المنطقة.

سافرنا عصراً إلى مدينة مدني ووصلنا بعد مغيب الشمس، ثم بتنا في فندق، ثم في الصباح سافرنا جنوباً إلى الرصيرص. مررنا بمدينة سنار وكان السفر بمحاذاة النيل اﻷزرق الذي ينبع من الحبشة. بعد مرورنا بمدينتي سنار وسنجة لاحظنا أن الشجر على جوانب الطريق يزداد طولاً وكثافة، كأننا متجهين إلي جنوب السودان، خصوصاً في المنطقة التي تُحاذي منطقة الدندر التي بها محمية طبيعية. كان الجو غائماُ عند منتصف الطريق وهطلت بعض اﻷمطار، مع أن الخريف لم يبدأ بعد في الخرطوم.

CIMG0048

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

CIMG0058

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

CIMG0109

رحلة العودة كانت جميلة أيضاً حيث استرحنا في منطقة قرب الدندرمليئة باﻷشجار، واكلنا بعض الفواكه التي اشتريناها من الرصيرص.

CIMG0020

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

قُمت بوضع صور رحلة الرصيرص في هذا الموقع.

وهذا هو مكان  خزان الرصيرص في الخريطة.

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

منذ فترة تعرف على موقع flickr قمت برفع عدد من الصور الطبيعية التي صورتها في مناطق مختلفة خلال تجوالي في مناطق مختلفة في اﻷعوام السابقة. معظمها نهر النيل وشمال السودان والمناطق الزراعية وبعض اﻵثار.

اسميت حسابي في هذا الموقع صور من السودان. يمكنكم زيارته لمعرفة هذا القطر الذي انضم مؤخراً أو سوف ينضم للبلدان السياحية.

sudan

اﻷدوات اﻹلكترونية التعليمية وكورس اﻹلكترونيات

السلام عليكم

أهداني الأخ عبدالله المهيري قبل عامان Electronic kit وهي وسيلة تعليمية للإكترونيات والكهرباء من أجل أن اعلم بها أبنائي.
قمت بتشغيلها مرة لهم لكن رأيت أنها كبيرة قليلاً عليهم، فحفظتها عندي لمدة قرابة العامان، ثم احتجت لدراسة كورس الكترونيات لمشروع من المشروعات المحتمل أن اعمل عليها، فاصبحت استخدمها منذ ذلك الحين.
electronic-kit
كان الكورس عن برمجة المعالج Atmel وهو من نوع Microcontroller وقد استخدمنا لغة سي لبرمجته، حيث يتم كتابة برنامج يتحكم في منافذ كهربية يتم وصلها بأي مكونات إلكترونية أو كهربية مثل الـ LEDs والمقاومات أو أي دوائر اخرى. كذلك يمكن قراءة القيم الكهربية أو اﻹلكترونية من أي دائرة خارجية يتم وصلها بهذا المتحكم.
آخر كورس إلكترونيات وكهرباء درسته كان في الجامعة عام 1998 تقريباً، وكان قبله مادة الفيزياء في الصف الثاني والثالث ثانوي، حيث درسنا أساسيات الكهرباء وكيفية حساب الدوائر الكهربية، لكن للأسف في الثانوي لم يمكن هناك تطبيق عملي، أما في الجامعة فقد كان هُناك تطبيق عملي لكن كان النظري أكثر وكانت مادة صعبة جداً.

قمت بدعوة عدد من زملائنا من فريق البرمجة لحضور هذا الكورس، مع أننا لم نخطط بأن يعملوا معنا في هذا المشروع، لكن كان هذا لفائدتهم العامة وربما يستفيدوا منه لاحقاً أو يمكن أن تكون هواية يقضوا بها بعض الوقت في اﻷشياء المفيدة.

codevision

أداة التطوير

simulator

صورة من المحاكي

يوجد تداخل بين مفاهيم البرمجة العامة وبرمجة النظم اﻹلكترونية، لكن اﻹلكترونيات يغلبها الجانب الفيزيائي متمثلاً في الكهرباء والجانب اﻹلكتروني.
في الحقيقة كان الكورس شيق جداً وكان كل يوم سبت، وقد قام بتدريسنا له اﻷخ محمد جمال، وهو خريج هندسة إلكترونية، وكان يغلب على الكورس الجانب العملي، بل كان معظم الوقت هو الجانب العملي، لذلك كان الكورس ممتع جداً. وقد استفدنا منه أكثر من كورس الجامعة، حيث كان كورس الجامعة الهدف منه النجاح، لكن هذا الكورس كان الهدف منه التعلم.

كُنت أقوم بعمل بعض التجارب أثناء دراستي لهذا الكورس عندما ارجع للمنزل، وقد أثارت هذه التجارب الرغبة في أبنائي لتعلمه، فعملت عدد من التجارب الكهربية لهم وقد استوعبوها تماماً، حيث فهموا معنى مصدر الطاقة والمقاومات والدوائر الكهربية والتيار وفرق الجهد. وهذا أول عمل لي يحرك الرغبة لهم في تعلمه، حيث لم يستسيغوا تعلم البرمجة بعد، ولم يفهموا طبيعة عملي بوضوح، فقد وجدت أن تعلم لغة البرمجة للأطفال ليست بالشيء الشيق بالنسبة لهم، وربما يحتاجوا لوقت طويل حتى ينجزوا بها شيء يجعلهم يواصلون دراستها، لكن بالنسبة لتعلم الكهرباء فقد أثار انتباههم من البداية، فهي شيء ملموس، ويروا نتائج مبهرة أمامهم، مثل إضاءة لمبة أو تشغيل محرك صغير. وقد وعدتهم بأن يكون لكل واحد منهم في المستقبل لوح إلكتروني breadboard و multimeter
بعد هذا الكورس اصبحنا نقوم بقياس وحساب استهلاك اﻷجهزة الكهربائية المختلفة وذلك حتى نستفيد منها عملياً. وقد كان اول شيء عملي جعلتهم يقوموا بحسابه هو أننا اشترينا سخان للطبخ مكتوب عليه أن قدرته 3000 واط، ثم احترق المشترك المتصل بالوصلة، فقمت بشراء رأس جديد ذو 13 أمبير. فطلبت منهم حساب التيار الذي يحتاجه هذا السخان، واعطتيهم هذه المعلومة:
القدرة = فرق الجهد مضروبة في التيار
القدرة = 3000 واط
فرق الجهد = 220 فولت
أما التيار فهو مجهول
فقاموا بحسابه، وكان حوالي 13 أمبير.
لكن للأسف لم تكن قدرة السخان دقيقة، فهو من النوع الغير معروف الصناعة. فقمت بقياس استهلاكه من الكهرباء من عداد المنزل وقد كان حوالي 2000 واط فقط.
فعند استخدام هذه القدرة يكون التيار هو 9 أمبير فقط.

معلومة القدرة بالواط وفرق الجهد والتيار مهمة لكل من يستخدم اﻷدوات الكهربائية بكثرة، حتى يعرف كل جهاز كم يحتاج من التيار، وماهو احتمال الوصلات الكهربائية حتى لا يحدث حرق في هذه التوصيلات.

في نهاية الكورس قمت بعمل تجربة بجهاز الراسبري باي، حيث أن به منافذ كهربية تُسمى الـ GPIO و هو اختصار لـ General Purpose Input Output. قمت بعمل برنامج بالجافا لإضافة لمبة LED وإغلاقها ثم قمت بتحميل هذا البرنامج في الراسبري باي. وقد عملت التجارب بنجاح. ايضاً عملنا تجربة لقراءة منفذ لمعرفة هل هو On أم Off حيث وجدنا أن هذه المنافذ digital فقط بها حالتنا 0 أو 1. أما المعالج من نوع Atmel فبه منافذ digital ومنافذ analog. وفائدة المنافذ الـ analog هي امكانية قراءة مدى كبير من القيم، مثلاً يمكن توصيله بمقاومة ضوئية أو مقياس درجة حرارة، أو قياس فرق جهد في دائرة خارجية، وهذه من الفوائد الكبيرة للنوع من هذه المعالجات، وهو أن نجعله يتصل بالعالم الخارجي ثم يكون به برنامج يقرر ماذا يفعل بناءً على هذه القراءات للمنافذ.

rasp-gpio

التطور الطبيعي للمبرمج : العام الخامس

السلام عليكم ورحمة اللهprogramming

هذا العام الخامس للإجابة على السؤال الذي طرحته في عام 2011 عن ماهو التطور الطبيعي للمبرمج. وقد تعودت أن اكتب عنه كل عام.

عام 2015 كان اﻹتجاه فيه بالنسبة لي أكثر في مجال اﻹدارة، فاصبحت اعتمد أكثر على باقي المبرمجين في كل المشروعات وقلّت المشروعات أو الساعات التي أقضيها في كتابة الكود. لكن كان هُناك وقت أكثر لدراسة أشياء جديدة، أهمها Asterisk حيث قدمنا مشروع لشركة إتصالات نعمل معها يعتمد على هذه التقنية، وقد توسعت فيها كثيراً وورفعت أحد البرامج التي قمت بعملها في اﻹنترنت . وقد كتبت عنها في تدوينة سابقة.

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

مع التوسع في المشاريع والعملاء ومع زيادة كفاءة المبرمجين الذين يعملون معنا، لم اكتفي بالمهام اﻹدارية، حيث أنها لا تأخذ وقتاً كبيراً خصوصاً في ظل حوسبة عدد من البرامج مثل برنامج الحسابات، والمرتبات، مثلاً الأرباح والخسائر لكل عام تصدر من برنامج الحسابات في اقل من دقيقة، فلماذا احتاج محاسب؟ ربما احتاج لمدير مالي عندما تكبر الشركة، لكن اﻵن لا يوجد لدينا وظائف إدارية، كل من يعمل معنا هم مبرمجون فقط، وقد التزم بعضهم أن يساعدني في المهام الإدارية متى ما احتجنا .

الوقت الذي لا تكون لدي فيه مهمة إدارية اتجه لتطوير بعض البرامج التي مازلت أعمل عليها، واحياناً ابحث عن مشاريع جديدة لتوسيع القاعدة من العملاء . لكن المهام اﻹدارية لها اﻷولوية.

اصبحت أميل أكثر للعمل كمعماري أنظمة ،  software architect  حيث اقوم بالتخطيط لأي مشروع برمجي من ناحية البنية التحتية له وتقسيمه إلى أجزاء modules وتحديد لغات البرمجة المناسبة وطريقة الربط بين تلك اﻷجزاء، أحياناً أقوم بتنفيذ جزء من هذا المشروع إلى نهايته، واحياناً اكتفي فقط بالمتابعة.

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

اﻹدارة والبرمجة والتطوير والتصميم والدراسة كلها مرتبطة ببعضها البعض لا استطيع التخلي عن احدها، فكل واحد يوجد موازنة للآخر، فحسب رأيي إذا اقللت من كتابة البرامج ومتابعة الجديد فإن هذا سوف يضر بالطريقة التي ادير بها فريق برمجي يستخدم آخر التقنيات المتوفرة. وإذا اهملت الجانب اﻹداري فإن هذا سوف يضر باستمرارنا مع الزبائن واستمرار المبرمجين معنا وربما يقودنا إلى اﻹنهيار.

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

حاولت أيضاً في هذا العام تعلم لغة Go وكنت انوي عمل أحد البرامج الصغيرة بها لإجراء بعض العمليات في الملفات، لكني في النهاية فضلت عليها Free Pascal حيث تتميز بالسهولة في التعامل مع الملفات. درست لغة Go لفترة ثم تركتها، لم اجد مشروع مناسب استخدمه فيها. ربما استخدمها في وقت لاحق أو ربما لا استخدمها.

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

احصاءات المدونة لعام 2015

أعد موظفو مساعد إحصاءات وردبرس.كوم تقرير 2015 سنوي لهذه المدونة.

فيما يلي أحد المقتطفات:

تسع قاعة الحفلات في دار أوبرا سيدني 2700 شخص. تم عرض هذه المدونة حوالي 48,000 مرات في 2015. لو كانت حفلة موسيقية في دار أوبرا سيدني، فستستغرق رؤية هذا العدد الكبير من الأشخاص لها حوالي 18 عرض مباع.

أكثر المواضيع قراءة:

أكثر المعلقين:

أكثر الدول زيارة للمدونة:

  • المملكة العربية السعودية
  • مصر
  •  الجزائر

 

إضغط هنا لترى التقرير الكامل

SimpleTrunk برنامج لإدارة مقسمات Asterisk

السلام عليكم

اليوم قمت برفع برنامج لإدارة ومراقبة مقسمات Asterisk حيث عملت مؤخراً في مشروع مركز إتصال لإستقبال مكالمات من عملاء. وقد استخدمنا Asterisk، وقد وجدت أنه منصة اتصالات ضخمة بها امكانات كبيرة يستحق التعمق فيه، واصبح الإهتمام به متزايد والحلول التي تم تنفيذها به منتشرة في العالم. ومن هذه الإمكانات:

  • إمكانية عمل مقسم داخلي في المؤسسة للمكالمات الداخلية بين الموظفين
  • إمكانية الربط مع شركات اﻹتصالات للإتصال مع الهواتف اﻷخرى.
  • إمكانية تسجيل المكالمات في حال استخدامه كمركز خدمات للعملاء
  • إمكانية إعداد نظام رد آلي لتوصيل رسالة صوتية معينة للمتصلين، والتفاعل معهم بواسطة خيارات يتم التحكم بها باﻷرقام
  • إمكانية استقبال وتسجيل بريد صوتي
  • إمكانية ربط مواقع المؤسسة المختلفة بهواتف sip phones باستخدام اﻹنترنت كناقل لهذه اﻹتصالات.

وغيرها من اﻹمكانات التي لم نجربها.

البرنامج الذي قمت بكتابته هو بديل لإستخدام شاشة اﻷوامر command prompt في التعامل مع هذا المقسم. وقد كتبته بلغة جافا، ويحتوي على جزئين:

  • خدمة ويب STAgent : ويتم تثبيته  في جميع المقسمات المراد إدارتها
  • برنامج ويب STPanel: ويتم تثبيته في مخدم واحد ليسمح بمراقبة وإدارة جميع المقسمات

وهذا هو هيكل النظام

SimpleTrunk Diagram

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

http://code.sd/products/simpletrunk/

وهذه بمثابة مساهمة بسيطة في هذا المشروع الضخم