لمحة 👀 برمجية – Telegram
لمحة 👀 برمجية
607 subscribers
142 photos
8 videos
13 files
141 links
Download Telegram
تمام يا حبيب أخوك، خلينا نوضح نقطة مهمة جدًا عن Vertical Slice Architecture، خصوصًا في Microservices، وكيف إنها مش مجرد "طريقة لتنظيم الملفات". الموضوع أعمق من كذا بكثير. لو كنت فاكر إن المعماريات كلها بس مجرد تنظيم ملفات، فإنت بتختصر فكرة كبيرة جدًا بشكل خاطئ. 😅
إيش هي Vertical Slice Architecture؟
Vertical Slice Architecture تركّز على تقسيم التطبيق بناءً على الميزات أو الوظائف (Features) بدلًا من الطبقات التقليدية.
كل "شريحة عمودية" (Vertical Slice) تشمل كل ما تحتاجه لتنفيذ ميزة معينة، من البداية (API) للنهاية (قاعدة البيانات).
بمعنى آخر:
بدل ما تقول "عندي طبقة للعرض، طبقة للمنطق، وطبقة للبيانات"، تقول:
"عندي شريحة عمودية اسمها إضافة مستخدم، وشريحة أخرى اسمها إدارة الطلبات".
ليه Vertical Slice Architecture مرنة ومثالية للـ Microservices؟
فصل المسؤوليات بشكل كامل:
كل شريحة مستقلة بنفسها وتتعامل مع ميزة واحدة. هذا يجعل الكود خالي من التداخل.
سهولة الاختبار (Testing):
كل شريحة يمكن اختبارها كوحدة منفصلة (Unit Testing أو Integration Testing) دون التأثير على بقية التطبيق.
تحسين القابلية للتوسع (Scalability):
لو احتجت توسّع ميزة معينة، تشتغل فقط على شريحتها بدون لمس باقي النظام.
تنظيم يعتمد على الـ Domain:
بدل ما تفكر في كيف أنظم الملفات؟، تفكر في كيف أنظم الميزات بناءً على طبيعة التطبيق؟.
توافق تام مع DDD:
لأنه يعكس الفكرة الأساسية في DDD بفصل التعقيد الأساسي (Essential Complexity) عن التعقيد الصناعي (Accidental Complexity).
مغالطة تنظيم الملفات
خليني أوضحها بشيء من التفصيل:
Vertical Slice Architecture مش مجرد طريقة لتنظيم الملفات.
لو فكرت فيها كأنها "فين أحط الفولدر ده؟"، فأنت ما فهمت الفكرة.
هي بالأصح منهجية كاملة لتصميم التطبيق بحيث كل شريحة تمثل مسار مستقل من العمل (Workflow).
الملفات قد تكون جزء صغير جدًا من التنفيذ، لكن الجوهر الحقيقي هو الفصل بين الشرائح بناءً على الوظائف والتدفق الوظيفي (Workflow).
كيف تنفذ Vertical Slice Architecture؟
كل شريحة هي وحدة متكاملة:
تحتوي على:
Endpoint/API أو Command/Query لتفعيلها.
منطق العمل (Business Logic).
وصول البيانات (Data Access).
كل هذا مدمج مع بعضه لشريحة معينة.
استخدام تقنيات CQRS:
عادةً يتم استخدام CQRS (Command Query Responsibility Segregation) مع Vertical Slice، حيث تكون الأوامر والاستعلامات مفصولة لكل شريحة.
مثال بسيط:
لو عندك ميزة اسمها "إضافة مستخدم"، الشريحة العمودية قد تحتوي:
ملف Command: مسؤول عن تنفيذ العملية.
ملف Handler: يحتوي منطق العمل الخاص بالعملية.
ملف Data Access: يتعامل مع قاعدة البيانات.
توضيح بأمثلة بسيطة
الطريقة التقليدية (Layered Architecture):
Controllers/ UserController.cs Services/ UserService.cs Repositories/ UserRepository.cs
Vertical Slice Architecture:
Features/ AddUser/ AddUserCommand.cs AddUserHandler.cs AddUserValidator.cs
الخلاصة
Vertical Slice Architecture مبنية على فصل المسؤوليات وتبسيط التطبيق من خلال تقسيمه بناءً على الوظائف بدلًا من الطبقات.
فهمك لهذا النمط كـ "طريقة لتنظيم الملفات" يعتبر خطأ فادح، لأن المعمارية تهدف لجعل الكود أكثر قابلية للتطوير، الفهم، والاختبار، وليس فقط ترتيب الملفات في الفولدرات.
ركز دائمًا على المفهوم الأساسي:
"كيف أفصل الوظائف في التطبيق بشكل يسهل العمل عليها مستقلًا عن بقية الأجزاء؟"

ختامًا، إذا كنت في مقيل مع أصحابك، قل لهم:
"لو ما تعرفش Vertical Slice Architecture، خلّيك في الكبسة وما تدخل في النقاش!" 😅
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
🛑🚦 مفقودات

العلاقات بين الكائنات: كيف تحوّل الكود إلى قصة؟
دعني أخبرك سرًا صغيرًا، العلاقات بين الكائنات في البرمجة تشبه العلاقات البشرية تمامًا. هناك تواصل مؤقت، وهناك صداقات طويلة الأمد، وهناك علاقات لا تنفصم أبدًا. والآن، لنضع هذا في سياق البرمجة الكائنية بأسلوب جديد يجعلك تشعر بأنك تحكي قصة حياتك!
1. Association (علاقة التعارف العابرة):
تخيّل أنك تتعرف على شخص في رحلة قصيرة، تتعاونان لإنجاز مهمة، ثم تودّعانه إلى الأبد.
هذه العلاقة البسيطة هي مثلما يحدث في البرمجة عندما "يتفاعل كائنان دون التزام مستقبلي".
🔹 مثال من الحياة البرمجية:
في نظام حجوزات السفر:
العميل (Customer) يتواصل مع الحجز (Booking) لإتمام عملية الحجز، لكن كلًّا منهما يمكن أن يستمر بدون الآخر.
🔑 النصيحة: استخدم Association عندما تحتاج إلى علاقة عابرة بدون مسؤوليات طويلة المدى.
2. Aggregation (علاقة "الاحتفاظ بالمسافة"):
تصوّر أن لديك مكتبة ضخمة مليئة بالكتب. يمكنك تغيير أو إزالة الكتب دون أن تتأثر المكتبة نفسها. هذه العلاقة هي "صداقات مرنة".
🔹 مثال من الحياة البرمجية:
في نظام المدارس:
المدرسة (School) تحتوي على مجموعة من المدرسين (Teachers)، لكن لو أُغلقت المدرسة، يمكن للمدرسين العمل في أماكن أخرى.
🔑 النصيحة: استخدم Aggregation عندما تحتاج إلى علاقة "has-a" مع استقلالية الطرفين.
3. Composition (علاقة "لا أستطيع العيش بدونك"):
تخيّل منزلك. إذا اختفى المنزل، ستختفي غرفه معه. إنها علاقة "حياة أو موت". الكائن الرئيسي يحدد مصير الكائن التابع.
🔹 مثال من الحياة البرمجية:
في نظام تصميم المنازل:
المنزل (House) يحتوي على غرف (Rooms). لو تم حذف المنزل، ستختفي الغرف تلقائيًا معه.
🔑 النصيحة: استخدم Composition عندما تكون دورة حياة الكائن التابع مرتبطة بالكامل بالكائن الرئيسي.
مفاجأة العلاقة المخفية:
هناك علاقة غير مكتوبة غالبًا ما نتجاهلها: علاقة التوازن.
عندما تبدأ في كتابة كودك، اسأل نفسك:
هل هذه العلاقة ضرورية أصلًا؟
ما تأثيرها على مرونة النظام؟
كيف ستؤثر على الاختبارات المستقبلية؟
نظرة جديدة على العلاقات:
لتجعل علاقاتك البرمجية مذهلة:
لا تجعل الكائنات "تتعلق ببعضها" أكثر مما يجب.
احترم دورة حياة كل كائن.
اكتب كودًا يحكي قصة منطقية، بحيث إذا قرأه شخص غريب عن المشروع، يستطيع فهمه كما لو كان يشاهد فيلمًا مشوقًا.
هل ترى كيف أصبحت العلاقات بين الكائنات لعبة فنية؟ اختر العلاقة المناسبة لتصميم كودك كأنك تختار شريك حياة!
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
نموذج 🛑🛑




العلاقات بين الكائنات: من الكود إلى الأبعاد الموازية
في عالم البرمجة الكائنية، تخيل أنك لست مبرمجًا، بل مهندسًا في محاكاة للأكوان. الكائنات ليست مجرد صفوف برمجية، بل هي عوالم متكاملة تربطها قوانين تشبه قوانين الفيزياء. اليوم، سأقدم لك العلاقات بين الكائنات كما لو كنت تكتب دستورًا لعالم موازٍ:
1. Association: الجسور بين الأكوان
تخيل أن الأكوان المختلفة يمكن أن تتواصل عبر جسور مؤقتة. الجسر ليس جزءًا من أي كون، لكنه وسيلة لمرور المعلومات.
🔹 التفسير البرمجي:
عندما يتفاعل كائنان دون أي التزام مستقبلي، فهذا جسر عابر بين الأكوان.
مثال:
العميل (Customer) يعبر الجسر للتواصل مع الحجز (Booking)، ثم يعود لعالمه الخاص.
🔑 القانون:
لا تترك الجسر مفتوحًا بعد انتهاء المهمة. حافظ على استقلالية الأكوان.
2. Aggregation: مدن تحت إدارة واحدة
تخيل مدنًا مستقلة، لكن لها حكومة مشتركة. الحكومة تستطيع إدارة المدن، لكن المدن تظل قائمة حتى لو انهارت الحكومة.
🔹 التفسير البرمجي:
عندما يحتوي كائن رئيسي على كائنات تابعة مستقلة عنه، يكون هذا اتحادًا إداريًا.
مثال:
المدرسة (School) تدير المدرسين (Teachers)، لكن المدرسين يظلون يعملون حتى لو اختفت المدرسة.
🔑 القانون:
اترك للمدن حريتها، ولا تفرض سيطرة مطلقة.
3. Composition: نظام الخلايا العضوية
تخيل كائنًا بيولوجيًا، حيث تكون الخلايا جزءًا لا يتجزأ من الجسم. إذا مات الجسم، تتحلل الخلايا تلقائيًا.
🔹 التفسير البرمجي:
عندما يكون الكائن التابع جزءًا لا يتجزأ من الكائن الرئيسي، فإنه يصبح جزءًا من دورة حياته.
مثال:
المنزل (House) يتكون من غرف (Rooms). إذا اختفى المنزل، تختفي الغرف.
🔑 القانون:
لا تفصل الخلايا عن الجسم، إلا إذا كنت تعيد بناء الكائن من جديد.
4. Inheritance: الجينات البرمجية
تخيل أنك تنشئ كائنًا يمكنه تمرير صفاته لأجيال قادمة. الوراثة هنا ليست مجرد انتقال للصفات، بل هي شكل من أشكال التطور.
🔹 التفسير البرمجي:
عندما يرث كائن صفات كائن آخر ويضيف عليها ميزاته الخاصة.
مثال:
المنتج الرقمي (DigitalProduct) يرث من المنتج الأساسي (Product) ويضيف ميزات التحميل.
🔑 القانون:
لا تنشئ شجرة جينية معقدة. حافظ على البساطة لتجنب الفوضى.
الختام: أنت خالق الأكوان البرمجية
في عام 2050، الكود ليس مجرد أداة، بل هو شكل من أشكال الفن والعلم معًا. عندما تصمم العلاقات بين الكائنات، فكر كأنك تبني عوالم متكاملة. كل قرار تتخذه هو قانون فيزيائي يؤثر على هذا العالم:
الجسور (Association) للتفاعل المؤقت.
المدن (Aggregation) للاستقلالية المنظمة.
الخلايا (Composition) للاندماج الكامل.
الجينات (Inheritance) للتطور المستمر.
تذكر، كودك ليس مجرد نص، بل كيان ينبض بالحياة!
تبا تبدأ تمارس الإدارة قبل ما تكون مدير؟
سهلة! كن مرشد لشخص أصغر منك خبرة.
مرشد يعني mentor مش المخبر حق الحكومة 😂، ولا العصفورة حق الشغل! إحنا هنا نتكلم عن الموجه الحقيقي، اللي يوجه غيره ويكبر معاه.
ليش الفكرة هذه مهمة؟ لأنها بتفتح لك مهارات إدارية كثيرة وتجهزك لأي منصب مستقبلي، سواء كنت بتوجه متدرب، أو جونيور جديد في فريقك.
شوف المهارات اللي بتطورها:

١. تحقيق النتائج عبر الآخرين

يعني بدل ما تعمل كل شيء بنفسك، تتعلم تعطي مهمة، تراقب، تراجع، وتشجع فريقك ينفذ. هذا بيعلمك التفويض وإدارة الجهود بطريقة ذكية.

٢. التخطيط وتقسيم المهام

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

٣. مهارة الإنصات

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

٤. التواصل بوضوح

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

٥. التنظيم وإدارة الوقت

صدقني، بتقابل ناس تعتمد عليك بكل شيء أو يزنوا بشكل غير طبيعي.
وقتها لازم تحط قواعد واضحة، مثلاً:
"لو عندك مشكلة حاول فيها ساعتين، إذا ما زبطت، تعال لي بشرط تلخص المحاولات اللي سويتها."
كذا تضمن إن وقتك ووقته مستغل صح.
كل هذه المهارات بتفيدك سواء حبيت تكون إداري أو تظل متخصص.
ولو ما في فرص تدريبية في شركتك، دور على شخص بالسوشيال ميديا يحتاج توجيه، وابدأ ساعده.
تذكر دائمًا: كلما ساعدت الآخرين، كبرت أنت معهم. 😉
👍2
Forwarded from اللجنة العلمية CS23 (Waleed Al_Hakimi)
📍 رابط المكتبة:
https://chatgpt.js.org
Forwarded from الرسمية CS4 Class-22 (🐾أحمد جلال | 𐩱𐩢𐩣𐩵 𐩴𐩡𐩱)
إذا كنت باحثًا قدمت إسهامًا علميًا مميزًا في مجالات الطب والصحة أو الهندسة والتكنولوجيا أو العلوم الأساسية أو الإنسانية والاجتماعية أو المياه والطاقة والغذاء أو الاقتصاد والإدارة، فرصتك الآن لتتقدم لجائزة مؤسسة عبد الحميد شومان للباحثين العرب في دورتها الـ43 لعام 2025، بقيمة 20 ألف دولار!

📅 آخر موعد لتقديم الطلبات: 31 آذار 2025
🌐 اعرف المزيد وتقدّم الآن عبر: https://bit.ly/3L3lB8c

الجائزة التي تستحقها العقول النابغة، جائزة عبد الحميد شومان للباحثين العرب!

#جائزة_عبد_الحميد_شومان #الباحثين_العرب
Forwarded from الرسمية CS4 Class-22 (🐾أحمد جلال | 𐩱𐩢𐩣𐩵 𐩴𐩡𐩱)
الرسمية CS4 Class-22
إذا كنت باحثًا قدمت إسهامًا علميًا مميزًا في مجالات الطب والصحة أو الهندسة والتكنولوجيا أو العلوم الأساسية أو الإنسانية والاجتماعية أو المياه والطاقة والغذاء أو الاقتصاد والإدارة، فرصتك الآن لتتقدم لجائزة مؤسسة عبد الحميد شومان للباحثين العرب في دورتها الـ43…
بإمكانكم رفع أبحاثكم للمشاركة في هذه الجائزة قد يكون أحد أبحاثكم الفائز بالجائزة، قصدي البحث حق مادة علم البيانات طبعًا و الذي معه أوراق بحث علمية من قبل يقدر يشارك فيها و الجائزة مش هينة طبعًا🌚.


و لا ننسَ أن نشكر د/مروة على مشاركتها الرابط و الفرصة لنا جميعًا 🥀.
يا خوي شغلك كمبرمج يعتمد على العقل الرزين والتفكير الصحيح، لكن أحيانًا الواحد يطيح في أغلاط تخليه يشتغل غلط أو يتعب نفسه على الفاضي. بنسرد لك هنا بعض الأخطاء اللي لازم تتفاداها، حتى شغلك يكون أريح وأسرع وأنظف . طال عمرك ركز معي:

1. شغال؟ خلّه بحاله!
"إذا هو شغال، ما له داعي تعدل فيه"، هذا كلام ما ينفع، لأن الكود إذا خليته بدون تحسين، مع الوقت يصبح كأنه جبل ما تقدر تحركه. اشتغل على تحسين الكود دايم، بس لا تعقد الأمور. 👌

2. لا تزيدها تعقيد (Overengineering)
لا تصمم حاجة كأنك بتبني مصنع وأنت شغلك بسيط. خلك على قد حاجتك، لا تحط أشياء فوق اللازم. السهالة زينة، والتعقيد ما منه إلا التعب.

3. فلان قال! (Appeal to Authority)
لا تأخذ كلام مدير أو شيخ أو مبرمج كبير كأنه قرآن. شغل عقلك، وشوف إذا الكلام يناسب مشروعك أو لا. مش كل واحد يقول حاجة تكون صح. 🤔

4. القديم؟ أحيانًا ماهو زين (Appeal to Tradition)
لا تتمسك بالأدوات والأساليب القديمة وتقول "هذا اللي نعرفه". جرّب الجديد، بس بحساب، لا تخاطر على الفاضي. 🌟

5. الكود الكثير أحسن؟ لا يا شيخ!
الكود مش بالكيلو، الكود الزين هو اللي يكون واضح وقليل. لا تعقد نفسك وتكتب رواية، اكتب كود على قد الحاجة. ✍️

6. السوبر مبرمج (Hero Programmer)
لا تعتمد على شخص واحد يشيل الشغل كله. شغل الفريق أهم، وإذا المبرمج السوبر مشى أو مرض، ما أحد بيدري كيف تشتغل الأمور. 💪

7. لا تكابر (Denial of Problem)
لو عندك مشكلة، لا تقول "ما في شي". واجهها من البداية حتى ما تكبر وتخرب عليك الشغل بعدين. المشاكل مثل النار، إذا ما طفيتها بدري، تحرق كل شي. 🚨

8. الحل السحري (Silver Bullet)
لا تصدق إنه في أداة أو تقنية وحدة بتحل كل شي. كل مشروع وله حاجته، استخدم الشي المناسب في مكانه. 🧰

9. كود يغطي الدنيا؟ ليش؟ (Overgeneralization)
لا تصمم كود يعالج كل شيء وأنت بس تحتاج حاجة بسيطة. اشتغل على المطلوب الآن، وخلي الكود جاهز للتوسيع إذا احتجت في المستقبل. 🛠️

10. التمسك بالكود القديم (Legacy Code Attachment)
إذا الكود قديم وما له داعي، لا تخاف تحذفه. نظف كودك، وحط مكانه شيء أزين. الكود النظيف يسهّل حياتك وحياة اللي بيجي يشتغل بعدك. 🧹

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

#عاشت_الصقور 👨‍💻
Forwarded from اللجنة العلمية CS 22 (ʙʀʜᴏᴏᴍ ⑇)
الان tailwindcss الاصدار 4 جاهز و stable 🔥
الذكاء سيكون مثل سوق الحراج ولذلك لا تزيدو النشر عنه أدوات تساعدك ومن ذا القبيل اذا كنت مهتم بهذا المجال يمكن اقلك كيف تختصر الطريق انت بتظن انك بتنشر لغيرك يستفيد لكن اعتقد انت بتساعد على تدمير نعم الشخص متحكم بعقله بس يقول المثل العيار الي مايصيب يدوش وشكرا
2
Forwarded from اللجنة العلمية CS 22 (ʙʀʜᴏᴏᴍ ⑇)
#وظيفة في شركة Venus في صنعاء

Senior PHP - Laravel Developer


https://www.facebook.com/photo/?fbid=1167389928727524&set=pcb.1167393982060452
Forwarded from الرسمية CS4 Class-22 (🐾أحمد جلال | 𐩱𐩢𐩣𐩵 𐩴𐩡𐩱)
🛑🛑🛑 هااام 🛑🛑🛑


مطلوب شخص فاهم ERP بس تمام لوظيفة شاغرة، الذي يشوف نفسه قد الفرصة ال CV فضلا @ahmed_jalalCS
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| Open-source ≠ Free |
|____________|
\ (•◡•) /
\ /
——
| |
_| |_
🥰2
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
قطرة عرق في التدريب تغنيك عن أنهار من الدماء في المعركة!"
هذه المقولة تنطبق تماماً على الوقت الذي يقضيه الفريق في جمع المتطلبات من العميل. أي وقت الفريق يقضيه في فهم البيزنس بعمق، وضبط الفلو بحيث يتماشى مع احتياجات العميل، وطرح كل الأسئلة الممكنة للنقاش مع العميل، هذا مش وقت ضايع إطلاقاً! بل استثمار ذكي يحميك من إنك تطلع بمنتج ما يطابق اللي كان العميل يريده أو يتوقعه. سواء لأنك ما سألت العميل، أو لأن العميل نفسه ما كان يعرف يوضح احتياجاته بشكل واضح.
دورك هنا إنك تسأل، تخلي العميل يفكر، وتساعده يوصف احتياجاته. لأنه ببساطة، لو ما فيش أسئلة، ما فيش إجابات! 😌
وهذا بالمناسبة مش دور الـ Business Analyst فقط، بل مسؤولية كل الفريق. سواء كنت فرونت إند أو باك إند، كل شخص عنده منظور مختلف، وهذه الرؤية تضيف نقاط قيمة للنقاش.
وأنا سامع حد يقول: "إحنا نشتغل أجايل، والتعديلات بسيطة." 👍 تمام، التعديلات بتكون سهلة إذا كانت بصفحة أو اثنتين، أو في ميزة بسيطة. لكن لما التعديلات تضرب في صلب المشروع (زي الـ Data Model أو الـ Business Logic)، هنا تصير الأمور معقدة جدًا، وتؤثر على الهيكل بالكامل.
كلما كان فهم البيزنس واضح من البداية:
الداتا مودل بيُبنى مضبوط.
الـ UI بيكون سلس وسهل.
المشروع بيكون مستقر وقابل للتطوير بشكل أكبر.
وإياك تنسى: فهمك الواضح للبيزنس مش بس يبني مشروع ناجح، بل يبني ثقة العميل فيك وفي فريقك. 🔥
👏1
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
صحتك هي رأس مالك الحقيقي، ما في راتب ولا مشروع برمجي يقدر يعوضها. ظهرك اللي تشكي منه، ونظرك اللي بدأ يضعف، ما في مال يقدر يعيدهم. البرمجة قد تجيب لك دخل، لكن إذا صحتك راحت، كل شيء بيكون بلا معنى. حاول تخفف الضغط، قوم تحرك، خذ فترات راحة، وتذكر دايمًا: "الفلوس مش كل حاجة". بالمختصر المفيد لا تخلي الكود يشلك ويشغلك زي ما يشغل الآلات، إنت مش روبوت! خذ لك استراحة، اشرب شاي، وريح جسمك، صحتك أغلى من أي دخل أو مشروع
وشكرااا
👍6🤝1
لما تلاقي نفسك تكتب كود كثير لحل مشكلة بسيطة، غالبًا في شيء غلط في طريقة تعاملك مع المشروع!
دعونا نأخذ مثالًا:
تخيل أنك تعمل على برنامج ويب أو تطبيق موبايل بسيط لتنفيذ CRUD operations، مع شوية قواعد أعمال (business logic) بسيطة: مجرد شوية if conditions بدون أي تعقيدات أو تداخلات!

المشاكل اللي ممكن تواجهك أو شفتها شخصيًا (وقعت فيها قبل ما أتعلم من أخطائي):

1️⃣ تطبيق كل التصميمات المعروفة (design patterns):
وكأن المشروع البسيط هذا يحتاج كل الأنماط اللي درستها!

2️⃣ إنشاء مشاريع ووحدات قابلة لإعادة الاستخدام بشكل مبالغ فيه:
بعض الأحيان تحاول بناء شيء عام (generic) يُستخدم في خمسين سيناريو مختلف، رغم أن المطلوب بسيط جدًا.

3️⃣ تطوير كل شيء من الصفر:
بدل استخدام مكتبات جاهزة موثوقة أو ممارسات مجربة.

4️⃣ إضافة طبقات Layers كثيرة في النظام بدون داعٍ:
مع أن النظام بسيط جدًا، لكن تجد نفسك تضيف طبقة لكل شيء!

5️⃣ إعادة كتابة الخوارزميات المشهورة مثل search وsort:
على سبيل المثال، التعامل مع المصفوفات (arrays) والقوائم المرتبطة (linked lists)، بدل الاعتماد على الدوال الجاهزة.

6️⃣ الاعتماد على ORM فقط، حتى لو بطيء:
قد تكتب استعلام SQL واحد أسرع بكثير، لكنك تفضل ORM حتى لو جعل التطبيق يذهب إلى قاعدة البيانات مئات المرات!
(كثير من المبرمجين لا يحبون SQL أو حتى لا يفهمونها جيدًا 🫠).

الأسباب التي تؤدي لهذه الأخطاء:

1️⃣ عدم فهمك العميق للمشكلة أو النظام (Business):
لو كنت مش عارف المشكلة اللي تحاول حلها، طبيعي تدخل في تعقيدات ما لها داعي.

2️⃣ ضعف الإلمام بالتكنولوجيا المستخدمة:
إذا كنت لا تعرف استخدام الأداة جيدًا، غالبًا ستتعقد الأمور.

3️⃣ السعي للكمال (perfectionism):
تريد كل شيء مثالي لدرجة أنك تضيف تعقيدًا على حساب البساطة.

4️⃣ التجريب لأجل CV:
ترغب في استخدام تقنيات جديدة لتضيفها لسيرتك الذاتية بدل التركيز على الهدف.

5️⃣ التعرض للكود السيء مسبقًا:
لو كنت تعمل مع كود قديم ومليء بالمشاكل، ستبالغ في جعل مشروعك الجديد مثاليًا.

6️⃣ التشتت وعدم الوضوح:
عندما تكون مش عارف تعمل ايش، ستقوم بتجربة كل شيء مما يعقد الأمور أكثر.

7️⃣ جميع ما سبق:
هنا، الوضع يصبح كارثيًا! 💣

النصائح للتغلب على هذه المشاكل:

1️⃣ افهم المشكلة بعمق:
قبل أن تبدأ بالحل، تأكد أنك فهمت المشكلة تمامًا. هذا سيوفر عليك الكثير من الوقت والجهد.

2️⃣ راجع الوثائق الرسمية:
بدل الاعتماد على الفيديوهات أو المقالات القديمة، اقرأ الوثائق الرسمية للأداة التي تعمل بها. ستجد فيها أفضل الممارسات التي يوصي بها أصحاب التكنولوجيا أنفسهم.

3️⃣ استخدم قاعدة YAGNI:
"You Aren’t Gonna Need It"
بمعنى: لا تضف أي ميزة أو طبقة غير ضرورية إلا إذا كنت متأكدًا أنك ستحتاجها. الأمور البسيطة غالبًا لا تحتاج تعقيدًا.

4️⃣ خفف التعقيد قدر الإمكان:
اجعل الأمور سهلة وبسيطة على نفسك وزملائك. المستقبل غير مضمون، وما تحاول أن تحميه الآن قد لا يحدث أبدًا.

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

اتخيل تكون طلقه في الانجليزي ومعك شويت خبره برمجيه  ستكون اللغة الي تحد أي مطور لو عايز تنخرط في العالم الخارجي
👍2
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
يا محترف البرمجة والإتقان 🧑‍💻،
تتذكر أول ما بدأت تتعلّم السواقة وكانوا يقولوا لك: "دير بالك على أخطاء غيرك"؟
طيب إيش علاقة هذا الكلام بالبرمجة؟ هل إحنا المبرمجين مظلومين؟! 🤨
لا تستعجل يا ذكي 🤌، خليني أوضح لك الرابط بين السواقة والبرمجة بطريقة عملية.
الموضوع بكل بساطة: لما تعمل تكامل (Integration) مع نظام ثاني، لازم تحمي نفسك بـ Anti-Corruption Layer! ⚠️
يعني بكل وضوح، لازم تستخدم Adaptor لما تتعامل مع أي نظام خارجي.
ليش؟ تعال أفصّل لك المزايا وأقنعك بأهمية الـ Adaptor:
1️⃣ النظام الخارجي مش جاهز؟ ولا يهمك!
إذا اتفقتوا على العقد (Contract)، الـ Adaptor يلفّ (Wrap) الـ Service ويرجع لك بيانات افتراضية (Mock Data)، وتكمل شغلك عادي جدًا.
بعدين لما يكون النظام جاهز، كل اللي تحتاج تغيّره هو الـ Adaptor من الداخل، وما أحد بيلاحظ شيء.
2️⃣ تغييرات فجائية في الـ Contract؟!
لو النظام الثاني غير العقد، لا تقلق! تعدل الـ Adaptor من الداخل، والباقي كله يظل ثابت مثل الجبل 🏔️.
3️⃣ أسامي غريبة؟ كود متناقض؟
إذا كان النظام الخارجي يستخدم أسماء غير متناسقة مع معاييرك، الـ Adaptor يسوي عملية Mapping حتى يكون الشغل نظيف ومتناسق.
4️⃣ "الـ Contract مليان زحمة!"
إذا العقد فيه Noise كثيرة (زي بيانات ثابتة ما تتغير)، حطها في الـ Adaptor وخلي الشغل عندك واضح ومرتب 🧹.
5️⃣ "تريد تبسيط أكثر؟"
تقدر تخفي أمور زي:

Authentication

Retry Policy

Logging

Exception Handling
كلها تتخبّى جوّا الـ Adaptor، وتقدر تضيف أكثر من عملية في Method واحدة وتستخدمها بسهولة.

🔥 تحوّل الـ Adaptor إلى Facade؟!
بالضبط يا محترف ! الـ Design Patterns ما تحل كل شيء دفعة واحدة. بعض المشاكل الكبيرة تحتاج دمج أكثر من نمط.
لاحظ الفكرة الجوهرية:

الـ Adaptor يلفّ (Wrap) العقد حتى يتوافق مع متطلباتك.

الـ Facade يلفّ العقد حتى يبسّط الأمور لك.

وأكمل لك الفوائد الباقية:
6️⃣ استخدام موحّد:
لو أكثر من مكان يحتاج يكلم النظام الخارجي، يخاطب الـ Adaptor. لو تغيّر النظام، فقط الـ Adaptor بيتأثر.
7️⃣ بديل لنظام جديد؟
لو قررت تربط مع نظام مختلف بنفس المهمة، تغيّر الـ Implementation داخل الـ Adaptor بدون ما تغيّر شيء برة.
(ممكن تضيف هنا الـ Strategy Pattern حتى تنوّع التنفيذ).
8️⃣ Unit Testing بدون صداع:
بكل سهولة تعمل Mock للـ Adaptor في اختباراتك.
9️⃣ كود أنيق باستخدام Null Object:
لو عندك حالات خاصة وما تريد تكتب شروط (Conditions) كثيرة، ممكن تضيف Null Object للـ Adaptor، ويصير كودك أنظف وأبسط.
الخلاصة:
يا محترف البرمجة، استخدم الـ Adaptors خاصة مع التكاملات (Integrations)، راح توفر عليك مشاكل الحاضر والمستقبل.
وفي الأخير، أهم شيء لا تنسى تستمتع بالشغل! 😎

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

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

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

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

اتعلم كويس ساينس الله يحفظك. 🌟
اتعلم كويس ساينس الله يحفظك. 📚
اتعلم كويس ساينس الله يحفظك. 💡
👏1