Mohcin Bounouara's Space – Telegram
Mohcin Bounouara's Space
518 subscribers
84 photos
19 videos
8 files
128 links
{فَأَمَّا الزَّبَدُ فَيَذْهَبُ جُفَاءً ۖ وَأَمَّا مَا يَنفَعُ النَّاسَ فَيَمْكُثُ فِي الْأَرْضِ} [الرعد: 17]

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

لكن اسعَ دائمًا للأفضل، وكن دائمًا ممتنًا للأشخاص أو المؤسسات التي تمنحك فرصة التعلم.
7🔥1
توقف عن استخدام magic numbers في كود ال php

في هذه الحالة مثلا، استخدام قيم ثابتة مثل 200 بطريقة مباشرة داخل الكود، يجعله عرضة للأخطاء مستقبلا، و صعب التغير عليه.. استخدم ال const أو ال enums بدلاً من هذه الطريقة.

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

#PHP #CleanCode
تحدث عندما يحتاج الامر ان توضح شيئا، او ان توضح تأخيرا او ان تبرر شيئا ما..

حتى ولو كان هذا سيغضب مديرك..

التحدث في الوقت المناسب في فرق هندسة البرمجيات شيء ضروري..

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

و تذكر الامر لله من قبل ومن بعد.

#softwareEngineering
5🔥1
لو أردت أن أنشر حول شيء متأكد منه في مجال هندسة البرمجيات والبرمجة، فسيكون: استغلال الوقت، التعلم المستمر، ونشر ما تتعلمه.

بخصوص الأولى، لا تضيع وقتك إذا كان لديك وقتٌ متاح.. (و يجب ان تخصصه اذا أردت السير على الطريق..). خصص وقتًا ثابتًا للتعلم في المجال، خصوصًا الأساسيات، وكن منظمًا في ذلك.

الثانية، التعلم المستمر، ابنِ لنفسك خطة مبنية على:

- فجواتك التقنية.

- أين أنت الآن.

- إلى أين تريد أن تصل.

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

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

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

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

فإستعن بالله ولا تعجز، وتذكر قليل دائم خير من كثير منقطع.
11🔥1
لمن يستخدم Windsurf IDE الذي هو مبني على Vs Code أساسا و يواجه مشكلة في تثبيث vs code extentions حتى بعد تعديل الخيار by default الخاص بوويندسورف، إليك هذا المنشور السريع الذي سيحل مشكلتك إن شاء الله.

https://mohcinbounouara.com/fixing-vs-code-marketplace-connection-issues-in-windsurf-ide/
2🔥1
بدأت قراءة كتاب Fundamentals of Software Architecture الإصدار الثاني.. لا أعتبر نفسي Architect بعد، لكن مؤلفيي الكتاب يوضحان أن هذا الكتاب موجّه أيضًا للمطورين الذين يتخذون قرارات معمارية من وقت لآخر، أو الذين يرغبون في الانتقال لهذا الدور في المستقبل.

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

كيف يتم تعريف هندسة برنامج ما، التعريف يتكون من أربعة مكونات رئيسية:

- خصائص المعمارية Architecture characteristics : ما يجب أن يفعله النظام ببساطة (القدرات الأساسية).

- المكونات المنطقية Logical components : و تتمثل في سلوكيات النظام وتدفق عمله (work flow). 

- نمط المعمارية architecture style : يتم اختياره بعد تحديد الخصائص والمكونات (مثل: Layered، Microservices، Event-driven…).

- القرارات المعمارية architecture decisions : القواعد والاختيارات اللازمة لبناء النظام (مثل: نوع قاعدة البيانات، مونوليث أو مايكروسيرفيسز، الأُطر المستخدمة…). وهكذا..

#softwarearchitecture #software
6
جميل جدا، دائما ما كان عندي نفس التصور حتى قبل موجات ال ai.

القياس يجب ان يكون مبني على قدرة المطور على بناء برامج وتطبيقات بمختلف الاحجام و المجالات، و العمل في فرق و هكذا.. لا على coding puzzles.. و احب في هذا الشركات التي تاتي ب task حقيقية وتعطيها للمبرمج ليقوم بها على اساس انها ااختبار.. او pair session.. و هكذا.

و هذا لا ينفي ضرورة الالگوريتمس و ال data structures في بناء اسس صلبة و طرق تفكير جيدة.

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

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

إعمل لدنياك كأنك تعيش أبدًا، واعمل لآخرتك كأنك تموت غدًا.. وأعطِ كلَّ ذي حق حقَّه؛ فلربك عليك حق، ولنفسك عليك حق، ولأهلك عليك حق، ولزَورك عليك حق.. فَأَعطِ كل ذي حق حقه.

قسِّم يومك لما يقرّبك إلى الله أولًا، ويجعلك تعيش هنا مسلمًا قويًا قدر الإمكان، لا أن تعيش فقط لما يقويك هنا.. وتنسى ما ينجيك هناك.

تعلّم دينك قدر الإمكان، واعمل بما تعلمت "الآن"، وتعلّم ما يعينك في أمر دنياك.

هو كلام أقوله لنفسي وأدوّنه للعودة إليه لو قدّر الله ذلك مستقبلًا، ولعلّه ينفع من يقرأه.

وتذكّر هذه الآيات والأحاديث:

قال تعالى: "وَإِن تَعُدُّوا نِعْمَةَ اللَّهِ لَا تُحْصُوهَا ۗ إِنَّ اللَّهَ لَغَفُورٌ رَّحِيمٌ"

قال تعالى: "وَهُوَ الَّذِي أَحْيَاكُمْ ثُمَّ يُمِيتُكُمْ ثُمَّ يُحْيِيكُمْ ۗ إِنَّ الْإِنسَانَ لَكَفُورٌ"

قال تعالى: "{وَنُنَزِّلُ مِنَ الْقُرْآنِ مَا هُوَ شِفَاءٌ وَرَحْمَةٌ لِّلْمُؤْمِنِينَ}"

ما قاله سلمان الفارسي لأخيه أبي الدرداء عندما زاره فوجده قد انقطع للعبادة حتى أهمل حق زوجته وحق نفسه. فقال "إنَّ لِرَبِّكَ عَلَيْكَ حَقًّا، ولِنَفْسِكَ عَلَيْكَ حَقًّا، ولأَهْلِكَ عَلَيْكَ حَقًّا، فَأَعْطِ كُلَّ ذِي حَقٍّ حَقَّهُ". وقد أقره النبي صلى الله عليه وسلم على ذلك بقوله: [صدق سلمان]. وفي رواية: [إن سلمان أفقه منك]، وفي رواية: [لقد أوتي سلمان علما].

قال صل الله عليه وسلم:" لا تزول قدما عبدٍ حتى يُسألَ عن عمُرهِ فيما أفناهُ، وعن علمِه فيما فعل، وعن مالِه من أين اكتسَبه وفيما أنفقَه، وعن جسمِه فيما أبلاهُ"
7🔥1
السلام عليكم و رحمة الله.

فيديو تعريفي بقناة اليوتيوب الجديدة-القديمة.

لعله يكون فاتحة خير لي و لكل من سيتفيد شيئا منه.

https://youtube.com/shorts/fmxAUTkl9xU?feature=share
5
مرة أخرى مع كتاب Fundamentals of Software Architecture حسب المؤلفين، و بعد بحث طويل وصلوا إلى ثلاث قوانين أساسية في هندسة البرمجيات:

1- "Everything in software architecture is a trade-off"
كل قرار معماري له مميزات وله عيوب، لا يوجد حل مثالي يحل كل المشاكل بدون آثار جانبية.


2- "Why is more important than how"
الأهم من كيفية فعل الأشياء هو لماذا سنقوم بها بهذه الطريقة و ما خلفيات اتخاذنا للقرارت المعمارية. السبب والسياق والتوازنات أهم من التنفيذ نفسه.


4- "Most architecture decisions aren’t binary but rather exist on a spectrum between extremes"
معظم القرارات المعمارية ليست أبيض أو أسود، (ليس الحلول المعمارية مبنية فقط Monolith أو Microservices، بل هناك حلول وسطية، و أخرى ابسط..).

#softwarearchitecture #software
3
التوقعات المطلوبة من ال Architect.

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

- Make architecture decisions
المعماري هو من يوجّه فريق التطوير لاختيار ال technology stack المناسب بما يتماشى مع الأهداف المعمارية و ال resources الموجودة، أحيانًا يتخذ المعماري القرار بنفسه، لكن غالبًا دوره أن يسهّل ويضمن أن الفريق يتخذ القرار الصحيح.

- Continually analyze the architecture
ال architecture ليست ثابتة.. يجب على المعماري متابعة كيف يتطور النظام أثناء التطوير، تقييم التغييرات التي يضيفها الفريق، وتعديل التصميم إذا تغيرت المتطلبات.

- Keep current with latest trends
المعماري يجب أن يبقى على اطلاع بأحدث التقنيات مثل ال cloud, AI, ممارسات ال deployment... لا يشترط أن يكون خبيرًا بسفة معمقة، لكن على الأقل يكون لديه فهم عملي للأدوات المعروفة.

- Ensure compliance with decisions
ليس كافيًا أن تضع architecture يجب أيضًا التأكد أن الفريق يطبقها بصفة صريحة.. قد يتطلب ذلك مراجعات يومية أو أسبوعية مع فريق التطوير.

- Understand diverse technologies
المعماري ليس مطلوبًا أن يتقن كل framework، platform أو language. لكن يجب أن يكون لديه معرفة عامة بتقنيات متعددة ليتمكن من عمل trade-offs صحيحة وتوجيه النقاشات.

- Know the business domain
فهم المجال التجاري يجعل التصميم أكثر نضجا، مثلا إذا كنت تبني habit-tracking app، يجب أن تعرف عن بناء العادات والجوانب النفسية وراء العادات الجيدة والسيئة، اكتسابا و تخلصا منها، مما يساعدك على اتخاذ قرارات تصميم أفضل.

- Lead a team and possess interpersonal skills
المعماري ليس مجرد خبير تقني فقط،، بل يجب أن يمتلك مهارات قيادة وتعاون، يسهل عمل الفريق، ويقوده عند الحاجة.

- Understand and navigate organizational politics
القرارات التقنية لا تعيش بمعزل عند سياسات الشركة.. حتى القرارات البرمجية الجيدة لها تكلفة تنظيمية (ميزانية، عملاء، resources).. المعماري يجب أن يوازن هذه العوامل بحذر.

اتمنى ان هنالك افادة من نوعية المنشورات هاته..

#softwarearchitecture #software
2
من الأشياء المعجب بها في Perplexity هي البحث في المصادر بشكل جيد, وأحيانا أتصفح بعض المصادر التى كانت ستأخذ وقت طويل في إيجادها أو يجمع لك حل لم يخطر على بالك.
اساسيات يتجاهلها المبرمجون في بداية مشوارهم (بقصد أو بدون قصد) تعود باشياء سلبيا لاحقا..

https://youtu.be/1LXDxs-g8t4?si=dpSzUhH3hVtn3gfn
2
تعليمات تثبيت ال php على جهازك من موقع php الرسمي معقدة قليلا..

استخدم http://php.new اذا كنت تريد البدء في تطوير البرمجيات بال php.

موقع بسيط تعليمات مباشرة لتثبيت، على كل من ماك، ويندوز و لينكس.

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

دعواتكم لأخيكم، في وعكة صحية، و الحمد لله.

بارك الله لكم و فيكم.
6
في كتاب Fundamentals of Software Architecture الكاتبان شددا على نقطة كنت دائما اشير اليها قبل ان تكون لي معرفة بان هذا اصلا شيء معروف.

ال 20mins rule.

كنت دائما اقول 15/30 دقيقة يوميا لتعلم شيء جديد في المجال كفيلة بأن تنقل مستواك الى مستوى عال في مدة قصيرة...

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

#contuniuelearning #Coding #softwaredevelopment
9
Software Architecture Trade-off

في معمارية البرمجيات، كل شيء هو Trade-off بمعنى "تتنازل عن ميزات للحصول على أخرى".

وهذا ليس أمرًا ثابتًا، ولا يمكنك أن تجد الإجابة النهائية لهذه التنازلات على Google أو أي LLM.. كما يقول المؤلفان.

القرارات تعتمد على:

- خبرة الـ Architect وفريقه

- الموارد المتوفرة (مادية وبشرية)

- مهارات الفريق وقدراته

- فهمك لمجال التطبيق (Domain Knowledge)

لذلك لا توجد إجابة واحدة صحيحة، بل دائمًا "It depends".

على سبيل المثال، اختيار أن يكون النظام Microservices أو Monolithic أو Serverless يعتمد على السياق والاحتياجات، وليس على قاعدة عامة.


#softwarearchitecture #software #softwareEngineering
👍2🤔1