الدار السودانية للكتب

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

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

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

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

كُنت أنوي الكتابة عن موضوع بعنوان “الكتب بديلاً للتلفاز” والموضوع يتضمن هذه المكتبة، فأحببت أن أتكم عن المكتبة أولاً في موضوع منفصل نسبة لأهميتها وحتى يكون العنوان فقط يتكلم عن تلك المكتبة

bookshop

.

موقع المكتبة هو – وسط الخرطوم، شارع البلدية، شمال بنك التضامن، وهذه المنطقة بها أكبر تجمع لمحلات الكمبيوتر في السودان، وهذا موقع المكتبة في ويكيبيديا:

http://wikimapia.org/#lang=en&lat=15.603942&lon=32.530453&z=16&m=b

التجريد في البرمجة

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

التجريد (abstraction) في عالم هندسة البرمجيات من المواضيع المهمة، حيث يحقق عدة أهداف سوف نتحدث عنها لاحقاً بإذن الله في هذه المقالة. لكن قبل أن نتكلم عنها من ناحية برمجية دعونا نشرحها كمفهوم عام للتجريد في حياتنا اليومية.

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

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

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

 

public ArrayList<SMSMessage> getNewMessages(String shortCodeText){

  success = false;
  try
  {
    ArrayList<SMSMessage> messages;
    PreparedStatement statement = connection.prepareStatement("select * from inbox\n" +
    "inner join shortcodes on shortcodes.ShortCodeID = inbox.ShortCodeID\n" +
    "inner join smppconnections on smppconnections.CONNECTIONID = inbox.connectionid\n" +
    "where Lower(shortCode) = ? \n" +
    "and isProcessed = 0");
    statement.setString(1, shortCodeText.toLowerCase());
    ResultSet result = statement.executeQuery();
    messages = new ArrayList<>();
    while (result.next()){

      SMSMessage message = new SMSMessage();
      message.connectionID = result.getInt("connectionID");
      message.operatorID = result.getInt("operatorID");
      message.fromMDN = result.getString("fromMDN");
      message.shortMessage = result.getString("ShortMsg");
      message.shortCodeStr = result.getString("ShortCodeStr");
      message.isProcessed = result.getInt("isProcessed");
      message.messageID = result.getInt("id");
      message.shortCodeID = result.getInt("shortCodeID");
      message.msgTime; = result.getTimestamp("msgTime");
      messages.add(message);
    }

    success = true;
    return(messages);

  }
  catch (SQLException ex) {
    lastError = "Error in getNewMessages: " + ex.toString();
    General.writeEvent(lastError, "");
    return(null);
  }

}

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

public ArrayList<SMSMessage> getNewMessages(String shortCodeText){

  success = false;
  try
  {
    ArrayList<SMSMessage> messages;
    PreparedStatement statement = connection.prepareStatement("select * from inbox\n" +
    "inner join shortcodes on shortcodes.ShortCodeID = inbox.ShortCodeID\n" +
    "inner join smppconnections on smppconnections.CONNECTIONID = inbox.connectionid\n" +
    "where Lower(shortCode) = ? \n" +
    "and isProcessed = 0");
    statement.setString(1, shortCodeText.toLowerCase());
    messages = readInbox(statement);

    success = true;
    return(messages);

  }
  catch (SQLException ex) {
    lastError = "Error in getNewMessages: " + ex.toString();
    General.writeEvent(lastError, "");
    return(null);
  }

}

واﻷجراء الجديد هو:

private ArrayList<SMSMessage> readInbox(PreparedStatement statement) throws SQLException {
  ArrayList<SMSMessage> messages;
  ResultSet result = statement.executeQuery();
  messages = new ArrayList<>();
  while (result.next()){

    SMSMessage message = new SMSMessage();
    message.connectionID = result.getInt("connectionID");
    message.operatorID = result.getInt("operatorID");
    message.fromMDN = result.getString("fromMDN");
    message.shortMessage = result.getString("ShortMsg");
    message.shortCodeStr = result.getString("ShortCodeStr");
    message.isProcessed = result.getInt("isProcessed");
    message.messageID = result.getInt("id");
    message.shortCodeID = result.getInt("shortCodeID");
    message.msgTime = result.getTimestamp("msgTime");
    messages.add(message);
  }
  return messages;
}

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

    إمكانية إعادة إستخدام الكود
    سهولة الصيانة لأي جزء من الكود
    سهولة القراءة والفهم ومن ثم سهولة إيجاد المشكلة
    سهولة التعديل واﻹختبار

مشكلة مفتاح الموتور

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

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

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

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

القدرة = الفولتية * التيار

إذاً

التيار = القدرة مقسومة على الفولتية

مثلاً جهاز له قدرة 1000 واط (أو كيلو واط) فإنه يحتاج إلى تيار 1000/220 = 4.5 أمبير ففي هذه الحال نتشري له توصيلات أو مفتاح 5 أمبير على اﻷقل، لكن بما أن الفولتية يمكن أن تزيد فاﻷفضل أن يكون المفتاح أو التوصيلة أعلى من ذلك، مثلاً 10 أمبير.

1line-switch

burned-switch.jpg

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

نتمنى من أهل الفيزياء والكهرباء أن يجاوبونا على تلك اﻷسألة المهمة.

من غشنا فليس منا

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

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

عَنْ أَبِي هُرَيْرَةَ أَنَّ رَسُولَ اللَّهِ صَلَّى اللَّهم عَلَيْهِ وَسَلَّمَ مَرَّ عَلَى صُبْرَةِ طَعَامٍ فَأَدْخَلَ يَدَهُ فِيهَا فَنَالَتْ أَصَابِعُهُ بَلَلًا فَقَالَ مَا هَذَا يَا صَاحِبَ الطَّعَامِ قَالَ أَصَابَتْهُ السَّمَاءُ يَا رَسُولَ اللَّهِ قَالَ أَفَلَا جَعَلْتَهُ فَوْقَ الطَّعَامِ كَيْ يَرَاهُ النَّاسُ مَنْ غَشَّ فَلَيْسَ مِنِّي

ونجد أن رسول الله صلى الله عليه وسلم لم ينهى البائع عن بيع الطعام الذي به بلل، إنما أمره أن يجعله واضحاً للناس حتى يعرف المشتري العلة التي فيه.

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

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

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

عيد أضحى مبارك

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

OLYMPUS DIGITAL CAMERA

تقبل الله منا ومنكم، وأعاد الله علينا عيد الأضحية باليُمن والبركات.

اﻷعياد من أكثر المناسبات التي تجعل المسلم يتوقف عن الحياة الرتيبة والعمل الرتيب ويتوجه إلى صلة اﻷرحام التي اصبح فيها تقصير إلى حد ما بسبب الإنشغال واﻹزدحام وتوالي اﻷعمال.

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

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

اﻹصدار الثاني لكتاب: رحلة استكشافية للغة البرمجة جافا

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

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

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

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

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

هذه صفحة الكتاب

المبرمج الحقيقي لا يحب الكتابة

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

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

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

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

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