15

أيهما تفضل , بناء برمجياتك بنفسك , ام استخدام برمجيات الغير ؟

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

لا أعلم إن كنت صيغت السؤال بشكل سليم ام لا , ولكني أستفسر حول الادوات والكلاسات وحتي إطر العمل

هل تفضل استخدام اطر عمل خاصة بك أنت من برمجها , ام تفضل استخدام الاطر العالمية

شخصياً افضل أطر العمل والادوات التي قمت ببرمجتها

فماذا عنكم يارفقاء العمل البرمجي :)

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

21

مبدأ بسيط, ما حك أنفك مثل ظفرك,

أحاول دائما أن استخدم أدواتى و مكتباتى الخاصة, طالما سمح الوقت بذلك.

كقاعدة أنصح بها دائما, طالما ان لديك القدرة و الوقت, دائما قم ببرمجة كل شىء بنفسك, و هذا له عدة فوائد :

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

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

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

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

لكن أشدد مرة أخرى, لا تفعل ذلك الا اذا كان لديك الوقت, و القدرة. و عليك دائما التخطيط بشكل جيد فى البداية, هل سوف يسمح الوقت لى بتطوير هذه المكتبة و العمل عليها, و هل لدى القدرة لتطويرها و جعلها تعمل مثل نظيراتها التجارية؟!

15

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

14

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

لنفرض نظام بسيط للبحث داخل الملفات على جهازك:

فأنت تحتاج لمحرك بحث تستطيع استخدامه Indexing وليس أن تبنى محرك البحث فسوف يكلفك الكثير في الدراسة والبحث ، لذلك سوف تستخدم محرك جاهز مثل Lucene

لنفرض أن تحتاج لاستخراج النصوص من ملفات PDF ايضاً لن تستطيع بناء ذلك وسوف تحتاج الى القرائه في وثائق ال PDF والكثيير لذلك سوف تستخدم مكتبة اخرى للParsing وهلم جرا مثلاً لHTML Parsing والملفات الأخرى ..

ايضاً مثلاً احتجت الى أن تشفر شيء Encryption أو تضغط شيء Compression أو تقوم بحساب ال Hash فالبتأكيد لن تبرمجها بنفسك،

ايضاً احتجت ان تقرأ الMetadata للصور مثلاً سوف تستخدم مكتبة تسهل عليك..

لديك بيانات تريد رسمها على Chart بالتأكيد سوف تستخدم مكتبة لذلك

الخ...

بدون اعادة استخدام مكتبات جاهزة فسوف تأخذ سنوات حتى تنهي مشروعك والMarket لن ينتظرك وسوف تقف في نقطة ما..

خلاصه:

لديك Business Problem قم بحلها والا فلن تستطيع أن تقوم بأي عمل حقيقي..

اذا كنت تستطيع بناء مكتبات قابله للاستخدام فقم ببنائها منفصله خارج مشروعك كمشروع منفصل

الحديث ليس عن المكتبات فقط فالمكتبات الجاهزة لا بأس باستخدام الجاهز منها

ولكن نتحدث عن أطر عمل تدير عملية إدارة وربط الطبقات

خذ مثال أعمل عليه حاليا

فكما هو معروف في النظام المشهور أن لدينا ثلاث طبقات عرض و عمل و معطيات (في مشروعي الطبقات أكثر من هذه)

الغالبية تنطلق من العرض نزولا للعمل ثم المعطيات

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

لإني افترضت أنه لو أردت عزل الطبقات العليا فلا يجب أن يتعطل العمل

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

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

هذا العمل ربما لا أجده على طلبي في أطر عمل جاهزة

لهذا وضعت الخطوط العريضة لسيناريو العمل و بنيت الإطار من الصفر وجاري التطوير مع تقدم المشروع

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

الشيء الطبيعي لهذا الامر هو استخدام Service Oriented Architecture وهكذا الPresentation سوف يرسل الطلب للService Layer ، بغض النظر عن نوع الPresentation مثلاً Web, Mobile, Desktop App باستخدام الWeb Services مثلاً في دوت نت هناك Web API, WCF . وهكذا اي كلاينت سوف يعمل بسهوله.. حتى لو أردت فصل التطبيق عن الانترنت، فيمكن جعل هذه الطبقة Shared Library كDLL مثلاً ترفق مع الكلاينت وهي بدورها ترسل للBusiness

فمالحاجه لبناء شيء من الصفر؟

الأمر ليس مقتصر على طلب وجواب وإنما هناك آلية لها متعلقات أخرى

كما ذكرت أن الأمر يحتاج موازنة فأنا طالما لدي وقت مفتوح و أنظر إلى الأمام فيتطلب مني بناء أمور خاصة تلبي تطلعاتي

أما الجاهز فقد صمم ليكون عام ويلبي حاجة الجميع قد الإمكان

الأمر أشبه بالجاهز عن التفصيل

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

أما التفصيل تفصل كل جزئياته بما يناسب زوقك ومقاسك

مادمت تملك الوقت و الهمة العالية اعتمد على نفسك و ابن برنامجك كما هو مخطط له لا اكثر ولا اقل

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

أبنى كل شئ بنفسى , على الأقل أتجنب أخطاء الآخرين و أتجنب إستخدام كود معروف للجميع

أفضّل بناءها بنفسي ، لماذا ؟

  • خبرة .

  • حل مشاكل وعصف ذهني وتفكير .

  • إعداد الإطار كما أريد دون الحاجة إلى أدوات لا أستفيد منها .

  • أفهم كل كود مكتوب .

  • أبتكر - أذكر مرة أنني شاهدت دالة معقدة وطويلة ، استطعت فيما بعد اختصارها في 5 أسطر وتعمل نفس عمل الدالة الطويلة بل أسرع منها أيضًا -.

  • لأنني أحب عمل كل شيء بنفسي D: .

  • أجعلها للاستخدام المتعدد ، أي لا أبني هذا الإطار لـ ( المشروع أ ) فقط ، بل أجعله يقبل أكثر من مشروع ( ب ، ج ، د ) .. وعندما أعمل على مشروع جديد آخذ منه ما أحتاج فقط .. ويعمل بكفاءة .

هذه أهم النقاط D: .

العالمية ... بسبب الدعم و المجتمع

global frameworks and library specially open source

ابداء من حيث انتها الأخرون هكذا يكون التطوير

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

مع انك عندما تتذوقها لن تشعر إلا بطعمها اللذيذ و ربما جمال تنسيقها فى الطبق

14

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

ونفس الأمر بالنسبة للصحن والطاولة

وحينها سيصبح إعداد كل صحن سلطة أسرع من الحالة التي ذكرتها

اتكلم عن الطبيعى

بمعنى اذا كنت تريد ان تركب ثيم لبرنامجك وهناك اداة موجودة بالفعل لفعل هذا الامر وتعمل بشكل جيد

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

انما اذا كانت كل ادوات الثيم الموجود كبيرة الحجم وتسبب مشاكل إذاً تنفيذ مكتبة خاصة بك هو الحل

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

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

نعم الأمر بحاجة لموازنة والحالة هي التي تحدد الأنسب

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

أعتقد استخدام framework مناسب هو الأفضل