Aug 13    Keep it simple stupid…K.I.S.S

August 13th, 2007

Keep it simple stupid هو مبدأ يقوم على إعتبار البساطة روح أى عمل , هذا المبدأ يتواجد فى مختلف التخصصات المعرفية و بالتالى فى مجال الويب و يعتبر بالنسبة للأخير مبدأ هام من مبادىء تصميم البرامج “software design ” و قد نادى بهذا المبدأ عدد من الشخصيات المعروفة مثل :

 

occam s’ razzor . و يعد أقدم من نادوا بهذا المبدأ :

. entities should not be multiplied beyond necessity

” البرت اينشتين”

. everything should be made as simple as possible, but no simpler

Antony de Saint Exupery

. Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away

و من بين كل من نادوا بة أرى فى وصف “Antony de Saint Exupery ” لهذا المبدأ أقرب ما يكون لمضمونة و هو يقول بأن ” أعلى درجة للكمال فى تصميم البرنامج تتحقق ليس عندما لا يوجد شىء يضاف و لكن عندما لا يوجد شىء يمكن استبعادة ” و هو بذلك يحدد ان ان الضروريات فقط هى التى يجب ان تضاف للعمل .

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

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

التصميم :

ما معنى ان يكون التصميم بسيط ؟

هناك أساسيات لبساطة التصميم يجمع عليها عدد كبير من الخبراء و المهتمين بالتصميم مثل :

  • - أن يساعد تصميم الموقع على إظهار محتواة وهدفة بحيث يكون محتوى الموقع هو العنصر الطاغى الذى يفرض نفسة بقوة و يلفت إنتباة الزائر لة .
  • -الا يتوقف المستخدم فى الموقع و لا يعرف الى اين يذهب أو كيف يتوجة لصفحة ما , يجب ان تكون خريطة الموقع واضحة و سهلة الإستخدام.
  • -ان كل عنصر و كل صورة فى التصميم يكون لها وظيفة و معنى , لا تتواجد ابدا عناصر زائدة تزحم الموقع ( و لعلك تصادف فى الكثير من المواقع ازدحاماُ هائلاُ بعناصر ان تم ازالتها لفقد الموقع نصف حجمة ..و لا أدرى حتى هذة اللحظة ما سبب وضع البعض لساعة على سبيل المثال بموقعهم !! …و قس على ذلك عناصر كثيرة تقع تحت هذا البند)

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

البرمجة :

لنأتى أولا بالصورة النهائية التى أرغب فى الوصول اليها كهدف وهو برنامج أو موقع مكتوب صممت برمجتة بطريقة بسيطة , أى من الممكن على أى مطور ان يتوصل لكيفية عمل البرنامج , تركيب البرنامج واضح و مفهوم و سهل تعديل أى جزء بدون إجراء تعديلات واسعة النطاق فى أجزاء أخرى لا علاقة لها بالنقطة المراد تعديلها….

اتباع لطرق المباشرة الواضحة فى تنفيذ الوظائف , عدم تكرار الكود و محاولة تطبيق إعادة الإستخدام , التخطيط الجيد للبرنامج , فصل كود المنطق عن التصميم ..إستخدام غرضية التوجية “OOP” بكل مميزاتها , عمل تخطيط و ملخص للعمل “api”..تبدو الطرق المتاحة لتنفيذ هذة الصورة البسيطة النقية.

أود ان القى الضوء على جانب مهم للغاية و هو الإستخدام الخاطىء لبعض النظريات و المفاهيم التى وضعت بالأساس لتطبيق مبدأ البساطة فى كتابة البرنامج , هذة النظريات و ضعت لتساعد و ضعت لتستخدم بكيفية معينة فى اطار محدد.. منها مثلا استخدام غرضية التوجية أو “OOP” لو نظرنا لمثال للغات النصية “scripting language” و هى لغة “php” لوجدنا انة من الممكن كتابة البرنامج بطريقتين إما بطريقة اجرائية “procedural way” و هى التى تعتمد على عمل الكود فى شكل وظائف ليست محكومة فى قالب واحد مغلق , أو بالطريقة الغرضية التوجية و هى التى تتميز بكيفية اعادة الاستخدام و العديد من المميزات الأخرى …و بالطبع فالطريقة الأخيرة كان لها نصيب الأسد من الإهتمام فى النسخة الأخيرة من لغة “php” لما تحققة من مميزات هائلة و لكن ما يتم التغافل عنة هو انة ليس معنى ذلك ان الطريقة الإجرائية القديمة ليس لها نطاق معين تستخدم من خلالة و تحقق فائدة ..ففى بعض الحالات التى يكون بها حجم البرنامج صغير من الممكن ان يكتب البرنامج بالطريقة الإجرائية لإنة لن يكون هناك توسع يستدعى إعادة استخدام الكود من الأساس فالأسرع و الأبسط للتناول هنا هو ذلك الإختيار و ليسالإختيار الاخر الذى يقع فى دائرة الضوء الاّن وهو غرضية التوجية

أيضا نقطة أخرى و هو اختيار هيكل العمل للبرنامج أو “framework”…تبرز للأمام بعض الهياكل المشهورة القوية التى تتميز بضخامة البناء نوعا ما لتقليل الجهد المبذول من الطور فى كتابة الكود فيتولى الهيكل الجزء الأكبر من البرمجة و يترك للمطور استخدام طرق مختصرة بواسطة الهيكل لتنفيذ الخطوات..هذة النوعية من الهياكل تقدم التبسيط فى كتابة الكود بتقليل عمل المطور نفسة و بلا شك فهى ذات نفع كبير لطبيعة البرامج التى تتميز بكبر الحجم و تنوع الوظائف فمن خلال هذة الهياكل من الممكن تنفيذ مثل هذة البرامج فى وقت قليل نسبيا و بجهد قليل و لكن…..كما توفر هذة الهياكل الوقت بتقديم الوظائف الجاهزة فعلى الناحية الأخرى لن يكون الأمر كذلك اذا ما أحببت الخروج بشكل أو بأّخر عن نمط عمل الهيكل أو تناولة لعمل الوظائف , ففى هذة الحالة ستضطر للدخول فى بناء الهيكل لتعديلة وفقا لمتطلباتك و هو ما سيأخذ منك الوقت و الجهد لفهم تفاصيل عمل الهيكل ثم تعديلة بعد ذلك و هو مايثبت انة حتى تلك الهياكل المصممة لتقليل جهد المطور لن تستطيع ان توفر عليك بشكل كامل فلن يقوم بتطوير الموقع الا انت…كل ذلك مقبول ان كان حجم البرنامج يستدعى هيكل كبير..فما بالك فيمن يستخدم تلك الهياكل فى برامج صغيرة ! فلكى تعدل وظيفة ما ستبذل مجهود ووقت اكبر بكتير جدا مما كان البرنامج البسيط يستدعى ..و لعل ذلك يجعلنا نقول ان لكل مناخ و متطلبات عمل اختيار يعتمد على دراسة لتبسيط العمل على المطور.

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



17 تعليقات

  1. كريم

    موضوع مهم جدا الحقيقة .. وتفتقده الغالبية العظمي من المواقع العربية .. وخاصة في جانب التصميم .. فأحيانا أرى بعض المواقع تتحول دون تدري لألبومات من كثرة ملفات الفلاش بالصفحة !! ويصرف النظر في الأصل عن هدف الموقع !!
    أما البرمجة .. فدائما وأبدا معظم النظريات تدعوا إلى البساطة وهي صعبة للغاية في حالة تنفيذها في الأفكار الكبيرة ..
    فـ مثلا مبدأ البرمجة غرضية التوجه Object-oriented programming من أهم مبادئه تجريد البرنامج من كل ما هو زائد وغير أساسي لزيادة الإنتاجية في التعامل معه الأن ومستقبلا ..

  2. Stylish

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

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

    تحياتي

  3. Ahmed Essawy

    ما شاء الله …كالعاده مقاله جديده … انا سعيد جدا اني اري مثل هذه المعلومات بالعربيه …
    انا مع Stylish في ما يقول … افضل المواقع تصميم من وجهه نظري هي c4arab & Gmail .

  4. FTM

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

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

    Ahmed Essawy :
    مرحبا بك , فعلا موقع جيميل يعتبر مثالا للمواقع البسيطة التى تقدم الخدمة بامتياز و هو من أوضح الأمثلة لتطبيق البساطة على التصميم ..

  5. القرش

    مقال رائع جدا ومن اجمل ما قرأت … فعلا البساطه في كل شئ مطلوبه حتى في الحياة العامه
    والغريب فعلا في عالم البرمجه ان يتوجه بعض المبرمجين الى تعقيد برامجهم حتى على انفسهم اعتقادا منهم انه الاحتراف مع العلم ان المفترض ان البرمجه تسير في اتجاه تسهيل وتبسيط استخدامها

  6. رادار

    بالفعل التخطيط السليم هو الأساس ،

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

    شكراً على هذه المقالة

    مدونتك أكثر من رائعة ، اسمحي لي بأن أضيف مدونتك لدي

    في آمان الله

    رادار

  7. FTM

    القرش :
    شكرا لرأيك , فعلا يعتقد البعض أن اتباع أعقد الطرق فى كتابة الكود يعكس حرفية عالية فى حين ان العكس هو الصحيح..و المشكلة تكمن فى ضيق الرؤية فقليل من سيدعمون المبرمج ان اتبع الطرق البسيطة و سيظنون ان اتباعة للبساطة قلة و فقر فى امكانياتة ….مرحبا بك .

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

  8. هارون

    فاطمة :
    لا بد لكل أمر نريد أن نفعله من التخطيط له ، و من دراسة إيجابياته و سلبياته ؛ حتى لا يقع الإنسان في أخطاء متكررة ، حتى حياتنا تحتاج إلى تخطيط و رسم و تصميم …

    شكرا لك على هذا المواضيع التقنية الجميلة ، فأنت أستاذتنا في هذه الأمور .

  9. FTM

    هارون :
    بالفعل التخطيط نصف العمل وبدونة يكون النجاح احتمالا ضعيفا …شكرا لتشجيعك و زيارتك .

  10. s.oumerzoug

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

  11. FTM

    s.oumerzoug :

    مرحبا بك أخ اومرزوك , الحمد لله و شكرا لمرورك و رأيك ..دمت بخير .

  12. 102 تصميم المواقع - التصميم

    [..]التصميم هو طريقة تقديم محتوى الموقع من خطوط وألوان وترتيب وصور تحسينية وغير ذلك. ويختلف تصميم المواقع عن التصميم الدعائي بنقطة جوه[..]

  13. BinO

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

  14. Pal Coder

    مقال رائع جدا ،

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

    :)

  15. FTM

    BinO :
    معك حق التكلف ينتقص من العمل و جمالة و تكاملة و فعلا هى بالظبط مرادف لمفهوم الفزلكة عندنا :D

    Pal Coder :
    مرحبا بك فى المدونة , فعلا استخدام ال OOP لا بد و ان يكون حسب طبيعة البرنامج و حجمة و العكس من ذلك يأتى على حساب قابلية البرنامج للفهم و التعديل…شرفت بزيارتك

  16. ألِف

    شرح جيد لمفاهيم البرمجة المختلفة و فلسفات التصميم. و أنا مثلك مللت “فرح العمدة” الذي أراه في المواقع العربية (و منها المدونات).

    لكنك كتبت “إستخدام غرضية التوجية “OOP” بكل مميزاتها

    فلماذا تترجم Object-oriented إلى “غرضية التوجيه”؟!
    المعنى الذي تؤديه هذه العبارة هو “[الطريقة] التي تنحو إلى الكائنات|الكيانات|الأشياء”
    لذلك اصطلح على ترجمة OOP إلى “البرمجة الشيئية” و أحيانا “البرمجة بالكائنات” يمكننا أن نبحث عن صيغة أفضل بالطبع، لكنها بالتأكيد ليست “غرضية التوجه”

    أظنك فهمت object-oriented على أنها تعني شيئا مثل objective، بمعنى “الغرض أو الهدف أو التوجه”. لكن هذا غير صحيح: فكلمة object في صيغتها هذه تعني “كائن|كيان|شيئ”، كما أن وجود الشرطة hyphen بين كلمتين إنجليزيتين يحولهما إلى كلمة واحدة مركبة و ينبغي عندها إعادة قراءتها على أنها “تنحو إلى الكائنات” أو “متجهة إلى الكيانات”
    قارن مثلا “profit-oriented” أو “peace-oriented”.

    و هذا يتفق مع فلسفة تقنية البرمجة هذه الذي تمثل فيها كيانات برمجية مغلقة و مكتفية بذاتها، لها خصائص properties و سلوك تتفاعل به مع بعضها البعض عن طريق methods و تتصف بالتحوصل encapsulation و تتوارث خصائصها و سلوكها inheritance.

    ترجمة function في البرمجة قد تجوز على “وظيفة” كما كتبت، باعتبارها وحدة برمجية تؤدي وظيفة معزولة محددة. لكني أفضل الرجوع إلى الأصول الرياضياتية للبرمجة و استخدام المصطلحات الرياضياتية في العربية مثلما فعل علم الحوسبة في اللغات الأخرى، و لذلك أفضل استخدام “دالّة”. كلا البديلين لا زالا مطروحين للنقاش في عربايز، و يمكنك أن تشارك فيها ما دمت مهتما بتعريب التقنية.

  17. ألف

    معذرة يا فاطمة، كنت أخاطبك بالمذكر غفلة مني.
    تحياتي.

أكتب تعليقاً

(عفوا أرحب بالتعليقات الجادة فقط التى تتناول الموضوع المذكور أعلاة , شكرا لتشريفكم )

تتم الموافقة على التعليقات من قبل صاحب الموقع ..من فضلك انتظر ظهور تعليقك.