Channel: Mohcin Space
ال ai لن يستبدلك اذا تعلمت كيفية استخدامه.
منذ مدة توقف عن الخوض في هذا النقاش.. لكن من باب التذكير لعله ينفع.
الذي يعرف كيفية استخدام ال ai سيزيد من انتاجيته و من قيمته لدى المؤسسة التي يعمل بها.
و ال ai لا يفكر هو فقط يعطيك اقتراحات بناءا على طريقة تفكيرك انت.. فهو لا يفكر.. لكنه بناءا على حجم ال data التي لديه يساعدك كثيرا بل و يحسن من الكود الذي قد تكتبه انت.. لكن المبرمج، المهندس، و المطور هو انت في الاخير.
و هذه لقطات من الشاشة لحالة صار فيها ال ai يخبط، لكن بفضل الله وجهته الى حل يخدم حالتي، وهو ساعدني في كتابة كود نظيف و جيد و بسرعة، عدلت عليه قلييلا جدا.
استخلص ما ينفعك و استمر دون الخوض في نقاشات فارغة.
منذ مدة توقف عن الخوض في هذا النقاش.. لكن من باب التذكير لعله ينفع.
الذي يعرف كيفية استخدام ال ai سيزيد من انتاجيته و من قيمته لدى المؤسسة التي يعمل بها.
و ال ai لا يفكر هو فقط يعطيك اقتراحات بناءا على طريقة تفكيرك انت.. فهو لا يفكر.. لكنه بناءا على حجم ال data التي لديه يساعدك كثيرا بل و يحسن من الكود الذي قد تكتبه انت.. لكن المبرمج، المهندس، و المطور هو انت في الاخير.
و هذه لقطات من الشاشة لحالة صار فيها ال ai يخبط، لكن بفضل الله وجهته الى حل يخدم حالتي، وهو ساعدني في كتابة كود نظيف و جيد و بسرعة، عدلت عليه قلييلا جدا.
استخلص ما ينفعك و استمر دون الخوض في نقاشات فارغة.
المهم في رحلتك كسينيور مبتدئ أو متمرس هي قابلية التعامل مع أشياء لا تعرفها اصلا.
لكن لديك القدرة لان تتأقلم معها بسرعة.. خصوصا مع ال ai.. سينيور متمرس يعني قدرة على تكريس الخبرات السابقة و الادوات المتاحة حاليا -وهي كثيرة الشيء الذي لم يكن قبلا- للعمل على اي مشروع و الخروج من اي موقف صعب، و التأثير ايجابا في الفرق التي تعمل بها.
#Softwareengineering
لكن لديك القدرة لان تتأقلم معها بسرعة.. خصوصا مع ال ai.. سينيور متمرس يعني قدرة على تكريس الخبرات السابقة و الادوات المتاحة حاليا -وهي كثيرة الشيء الذي لم يكن قبلا- للعمل على اي مشروع و الخروج من اي موقف صعب، و التأثير ايجابا في الفرق التي تعمل بها.
#Softwareengineering
ال Recursion، ما هي؟ نظرة عامة و فهم عام!، -من الاساسيات-
ال Recursion هي تقنية مفيدة لحل المشاكل عن طريق تقسيمها إلى base case و recursive case.
تقنيا؛ هي لما تقوم دالة function بالنداء على نفسها داخل الكود. من أشهر الأمثلة على استخدامها هي طريقة/تقنية divide-and-conquer، اللي تُستخدم كثير في حل المشاكل المعقدة بطريقة ذكية و سريعة.
لكن لو نسيت تحدد base case، ممكن الكود يدخل في infinite loop ويوقف التطبيق تماما.
مثال بسيط يوضح المشكلة:
function countdown($number) {
echo $number . "\n";
countdown($number - 1);
}
countdown(20);
الكود أعلاه سيستمر في إستدعاء نفسه إلى ما لا نهاية.. لأنه لا يتوفر على شرط يوقف الـ recursion.
الحل: استخدم الـ base case
function countdown($number) {
if ($number <= 0) {
return;
}
echo $number . "\n";
countdown($number - 1);
}
في هذا المثال:
if ($number <= 0) { return; } ==> the base case
countdown($number - 1); ==> recursive case.
أنا استخدمت early return بدل if/else لأن القراءة أوضح (خيار شخصي).
الـ recursion من الناحية التقنية تستخدم نفس مفهوم الـ loops، ولا تعطيك أداء أعلى، لكن في بعض الحالات تكون أوضح وأسهل للفهم، خاصة لو كنت تتعامل مع هياكل متكررة أو المشاكل المعقدة و الضخمة.
#PHP #Recursion #ProgrammingTips #DX #CleanCode #Algorithms
ال Recursion هي تقنية مفيدة لحل المشاكل عن طريق تقسيمها إلى base case و recursive case.
تقنيا؛ هي لما تقوم دالة function بالنداء على نفسها داخل الكود. من أشهر الأمثلة على استخدامها هي طريقة/تقنية divide-and-conquer، اللي تُستخدم كثير في حل المشاكل المعقدة بطريقة ذكية و سريعة.
لكن لو نسيت تحدد base case، ممكن الكود يدخل في infinite loop ويوقف التطبيق تماما.
مثال بسيط يوضح المشكلة:
function countdown($number) {
echo $number . "\n";
countdown($number - 1);
}
countdown(20);
الكود أعلاه سيستمر في إستدعاء نفسه إلى ما لا نهاية.. لأنه لا يتوفر على شرط يوقف الـ recursion.
الحل: استخدم الـ base case
function countdown($number) {
if ($number <= 0) {
return;
}
echo $number . "\n";
countdown($number - 1);
}
في هذا المثال:
if ($number <= 0) { return; } ==> the base case
countdown($number - 1); ==> recursive case.
أنا استخدمت early return بدل if/else لأن القراءة أوضح (خيار شخصي).
الـ recursion من الناحية التقنية تستخدم نفس مفهوم الـ loops، ولا تعطيك أداء أعلى، لكن في بعض الحالات تكون أوضح وأسهل للفهم، خاصة لو كنت تتعامل مع هياكل متكررة أو المشاكل المعقدة و الضخمة.
#PHP #Recursion #ProgrammingTips #DX #CleanCode #Algorithms
كثيرًا ما نبدأ تعلم أشياء جديدة في البرمجيات بحماس كبير، ثم نرفع سقف توقعاتنا إلى حد يصعب الالتزام به. نخطط لساعات طويلة، ودورات مكثفة، وبناء مشاريع ضخمة… وفجأة نتوقف.. لا أعتقد ان هنالك مطورون لم يقعوا في هذا!
فرفع سقف التوقعات أكثر من طاقتنا الفعلية يؤدي إلى الانقطاع في الأخير ما يجعل العودة للإلتزام صعبة.
الحل بسرعة و بطريقة مباشرة؛ تعلم بالتقسييم لفترات قصيرة.. بدلًا من الضغط على نفسك لساعات، استخدم هذه الطريقة البسيطة، لنفترض انك بدأت اكتشاف و تعلم تقنيات y, x, z.
قسّم وقتك إلى فقرات صغيرة، إذا كنت تتعلم بعد العمل أو في وقت محدود، جرّب هذا النموذج البسيط:
- 10/20 دقيقة لل x
- 10/20 دقيقة ل y
- 10/20 دقيقة ل z
اذا استطعت ان تقوم بهذا يوميا فهذا جميل، اذ لم تستطع فمرتين او ثلاث في الاسبوع جيدة ايضا.. المهم انك مستمر وغير متوقف.. قد تبدوا لك هذه الحلول غبية قليلا.. لكنها مفيدة و صعبة التطبيق في نفس الوقت.
الفكرة ليست الإنجاز بسرعة و بكثافة، بل الاستمرارية و الخطوات الصغيرة فأنت لا تسابق احدا، بل تتعلم لأجل نفسك في المستقبل... و تذكر حديث اشرف الخلق.. "احب الاعمال الى الله ادومها و ان قل".
و هذا منشور اذكر به نفسي و اياكم، اذا وجدته نافعا ولو قليلا شاركه مع غيرك.. و لك حرية عدم ذكر اسمي لو اردت نسخه/لصقه في مكان آخر.. فاسأل الله العلم و العمل النافع.
فرفع سقف التوقعات أكثر من طاقتنا الفعلية يؤدي إلى الانقطاع في الأخير ما يجعل العودة للإلتزام صعبة.
الحل بسرعة و بطريقة مباشرة؛ تعلم بالتقسييم لفترات قصيرة.. بدلًا من الضغط على نفسك لساعات، استخدم هذه الطريقة البسيطة، لنفترض انك بدأت اكتشاف و تعلم تقنيات y, x, z.
قسّم وقتك إلى فقرات صغيرة، إذا كنت تتعلم بعد العمل أو في وقت محدود، جرّب هذا النموذج البسيط:
- 10/20 دقيقة لل x
- 10/20 دقيقة ل y
- 10/20 دقيقة ل z
اذا استطعت ان تقوم بهذا يوميا فهذا جميل، اذ لم تستطع فمرتين او ثلاث في الاسبوع جيدة ايضا.. المهم انك مستمر وغير متوقف.. قد تبدوا لك هذه الحلول غبية قليلا.. لكنها مفيدة و صعبة التطبيق في نفس الوقت.
الفكرة ليست الإنجاز بسرعة و بكثافة، بل الاستمرارية و الخطوات الصغيرة فأنت لا تسابق احدا، بل تتعلم لأجل نفسك في المستقبل... و تذكر حديث اشرف الخلق.. "احب الاعمال الى الله ادومها و ان قل".
و هذا منشور اذكر به نفسي و اياكم، اذا وجدته نافعا ولو قليلا شاركه مع غيرك.. و لك حرية عدم ذكر اسمي لو اردت نسخه/لصقه في مكان آخر.. فاسأل الله العلم و العمل النافع.
السلام عليكم و رحمة الله.
عندي مدونة الكترونية أنشر فيها من حين لآخر، لاسباب اهمها:
- نشر ما اعرفهة/اتعلمه مع غيري لعله ينفع شخصا ما
- بناء وجود شخصي على النت لأهداف مهنية
- لمحاولة دفع نفسي لشرح مفاهيم لزيادة وتعميق فهمي لها.
سؤالي؛ المدونة بالانجليزية.. هل تحويلها للغك العربية قد يؤثر على اهدافها؟ خصوصا الهدف المهني علما انني اتعامل مع اناس ناطقين بالانجليزية كلغة أولى؟
*علما انني احب جدا الكتابة و التحدث بالعربية لاهداف لا حاجة لذكرها هنا؟
عندي مدونة الكترونية أنشر فيها من حين لآخر، لاسباب اهمها:
- نشر ما اعرفهة/اتعلمه مع غيري لعله ينفع شخصا ما
- بناء وجود شخصي على النت لأهداف مهنية
- لمحاولة دفع نفسي لشرح مفاهيم لزيادة وتعميق فهمي لها.
سؤالي؛ المدونة بالانجليزية.. هل تحويلها للغك العربية قد يؤثر على اهدافها؟ خصوصا الهدف المهني علما انني اتعامل مع اناس ناطقين بالانجليزية كلغة أولى؟
*علما انني احب جدا الكتابة و التحدث بالعربية لاهداف لا حاجة لذكرها هنا؟
ميزة مجال البرمجيات حاليًا هي أنه أصبح مجالًا مفتوحًا، والناس تشارك فيه المعارف والخطط والأساسيات والمسارات الجيدة، وتشارك حتى أخطاءها ليستفيد منها المستجدون وحتى المتمرسون.
دائمًا ما أقول؛ لو أنني اكتشفت بعض الأمور مبكرًا، مثل أهمية التركيز على الأساسيات، وتجنُّب التنقّل من شيء لآخر بشكل عشوائي... ناهيك عن شحّ المصادر وقتها، لكان مستواي اليوم أفضل بكثير. لكن الحمد لله، الآن نحاول سدّ تلك الفجوات شيئًا فشيئًا على الطريق.
لكن بما أننا في زمن الذكاء الاصطناعي وتوفُّر المصادر، فأنصح بتواضع بالتالي:
- لا تُشتّت نفسك، ركّز على الأساسيات أولًا، وبعدها اقرأ في المواضيع التي يمكن فهمها بالتوازي.
- طوّر مهارات التواصل لديك، فهي مهمة مهما كان مستواك التقني.
- لا تُقارن نفسك بأحد، قارن نفسك بنفسك، وضع أهدافًا تقنية/مهنية جديدة من وقت لآخر.
- لا تعتمد على الشغف فقط (الشغف هو ما جعلني أتنقّل من شيء لآخر دون إتقان الأول... وهكذا.. ).
- وقبل كل هذا استعن بالله ولا تعجز وأصلح نواياك.
لعل هذه النصائح تكون مفيدة للمبتدئين، وحتى للمتمرسين الذين يحاولون إصلاح الفجوات في رحلتهم التقنية.
دائمًا ما أقول؛ لو أنني اكتشفت بعض الأمور مبكرًا، مثل أهمية التركيز على الأساسيات، وتجنُّب التنقّل من شيء لآخر بشكل عشوائي... ناهيك عن شحّ المصادر وقتها، لكان مستواي اليوم أفضل بكثير. لكن الحمد لله، الآن نحاول سدّ تلك الفجوات شيئًا فشيئًا على الطريق.
لكن بما أننا في زمن الذكاء الاصطناعي وتوفُّر المصادر، فأنصح بتواضع بالتالي:
- لا تُشتّت نفسك، ركّز على الأساسيات أولًا، وبعدها اقرأ في المواضيع التي يمكن فهمها بالتوازي.
- طوّر مهارات التواصل لديك، فهي مهمة مهما كان مستواك التقني.
- لا تُقارن نفسك بأحد، قارن نفسك بنفسك، وضع أهدافًا تقنية/مهنية جديدة من وقت لآخر.
- لا تعتمد على الشغف فقط (الشغف هو ما جعلني أتنقّل من شيء لآخر دون إتقان الأول... وهكذا.. ).
- وقبل كل هذا استعن بالله ولا تعجز وأصلح نواياك.
لعل هذه النصائح تكون مفيدة للمبتدئين، وحتى للمتمرسين الذين يحاولون إصلاح الفجوات في رحلتهم التقنية.
ال scalar values في لغة ال PHP هي نوع من data type وهي قيم ثابته غير متغيرة و غير قابلة للتقسيم او التفويق، ليست كال arrays او ال objects.
وفي ال php هنالك اربع انواع من هذه الtypes.
int (integer)
float
String
Boolean
#PHP
وفي ال php هنالك اربع انواع من هذه الtypes.
int (integer)
float
String
Boolean
#PHP
لو أنت كمبرمج عارف ماذا تريد، من أين تنطلق و الى اين تصل - في مهمة ما - فال ai يساعد كثيرا في عملية كتابة الكود و عمل Refactoring افضل منك بكثير بحكم ال data التي يستخدمها و له الوصول اليها.
لكن مرة اخرى يجب ان تكون لديك دراية قوية ومعرفة ب:
- الأساسيات في علوم الحاسوب عموما و البرمجة خصوصا،
- تكون على دراية ببعض اشهر ال design patterns،
- تكون لديك مهارة التفكير و حل المشكلات،
- ان تكون لديك مهارة ال debugging لانها مهمة جدا،
- ان تفهم لغة البرمجة/الفريمووركس التي تستخدمها بعيوبها و نقاط قوتها لكي تعرف كيف تستغل ال ai لصالحك،
- أن تحاول القراءة كثيرا في هندسة البرمجيات و ما الى ذلك.. ففهم العلم الان صار ضرورة لا اضافة.
و نسأل الله ان نوفق لما كتبناه ايضا.
#Softwareengineering #programming #AI
لكن مرة اخرى يجب ان تكون لديك دراية قوية ومعرفة ب:
- الأساسيات في علوم الحاسوب عموما و البرمجة خصوصا،
- تكون على دراية ببعض اشهر ال design patterns،
- تكون لديك مهارة التفكير و حل المشكلات،
- ان تكون لديك مهارة ال debugging لانها مهمة جدا،
- ان تفهم لغة البرمجة/الفريمووركس التي تستخدمها بعيوبها و نقاط قوتها لكي تعرف كيف تستغل ال ai لصالحك،
- أن تحاول القراءة كثيرا في هندسة البرمجيات و ما الى ذلك.. ففهم العلم الان صار ضرورة لا اضافة.
و نسأل الله ان نوفق لما كتبناه ايضا.
#Softwareengineering #programming #AI
Mohcin Space
لقد قمت بعمل الفورم الخاص بالأسئلة،، مرحبا بأسالتكم :) اسألني أسئلة عن تطوير البرمجيات، التعلم أو التحسن في هذا المجال.. إذا كانت لدي معرفة أو خبرة حول ما سٌألته، فسأجيبك.. إذا كنت أعرف مصدرًا مفيدًا، فسأشير إليه.. وإذا لم أكن أعرف الإجابة، فسأقول إنني لا…
للتذكير لدينا فورم لتلقي الأسئلة لعلها تكون نافعة.
و لم اقرر هذا لقوتي التقنية او احترافي او او... نسأل الله الستر.
لكن قمت بهذا لمشاركة ما اتعلمه و تعلمته من تجارب الدراسة، الاخطاء، طرق التعلم و محاولة استدراك ما فات و اصلاح الفجوات المعرفية.. و و و في مسيرة تقارب ال 8 سنوات الان بكل ما فيها من تقصير و اخطاء و نجاحات بفضل الله عز وجل.
فنسأل الله العلم و العمل و التعليم.
و لم اقرر هذا لقوتي التقنية او احترافي او او... نسأل الله الستر.
لكن قمت بهذا لمشاركة ما اتعلمه و تعلمته من تجارب الدراسة، الاخطاء، طرق التعلم و محاولة استدراك ما فات و اصلاح الفجوات المعرفية.. و و و في مسيرة تقارب ال 8 سنوات الان بكل ما فيها من تقصير و اخطاء و نجاحات بفضل الله عز وجل.
فنسأل الله العلم و العمل و التعليم.
لكي تطور نفسك في مجال البرمجيات سواءا قبل ال ai أو بعد ال ai.
افتح ال code editor الخاص بك و اكتب برامج وتطبيقات بمختلف الأحجام..
و قم بالاخطاء و اسهر لحلها و هكذا..
اقرأ ما استطعت حول المجال..
و بعدها الاشياء تأتي تباعا.. غير هذا هو فقط كلام لا نفع يأتي من وراءه.
هو تذكير فقط، واللهم انا نسألك هذا.
#programming #softwaredevelopment
افتح ال code editor الخاص بك و اكتب برامج وتطبيقات بمختلف الأحجام..
و قم بالاخطاء و اسهر لحلها و هكذا..
اقرأ ما استطعت حول المجال..
و بعدها الاشياء تأتي تباعا.. غير هذا هو فقط كلام لا نفع يأتي من وراءه.
هو تذكير فقط، واللهم انا نسألك هذا.
#programming #softwaredevelopment
لمن يستخدمون ادوات ال ai في عملهم اليومي كمطوري برمجيات.. ماهي الادوات التي تستخدمونها في ال:
- coding,
- testing,
- reviewing other's code
- Refactoring
بارك الله في كل من سيرد :)
- coding,
- testing,
- reviewing other's code
- Refactoring
بارك الله في كل من سيرد :)
كتابة الـ tests في صناعة البرمجيات ليست رفاهية (على الأقل كما كنت أظن سابقًا).
الكود الذي لم يتم اختباره، على الأقل في الـ correct path و الـ wrong path، هو كود قابل بنسبة كبيرة لأن يُنتج أخطاء - كثيرة- bugs مستقبلاً بشكل قطعي.
ناهيك عن الـ nested cases التي من الصعب اختبارها كاملة، لكن على الأقل الـ happy/unhappy path هي ضرورة.
لماذا؟
أولاً لأنك ستختصر على نفسك وقت البحث عن الأخطاء في التغييرات المقبلة. لنفترض أنك ستقوم بتغيير أو إضافة ميزة، غالبًا ستكتب اختبارًا جديدًا، ثم ستقوم بتشغيل جميع الاختبارات. هنا، سيظهر لك غالبًا اختبارات أخرى يجب تحديثها، دون الحاجة لأن تقوم بمراجعة كل واحدة منها بصفة أحادية..
أيضًا كتابة الاختبارات تجعلك تفهم التغييرات التي قمت بها بشكل أعمق، وربما أثناء كتابة اختبار ما، تظهر لك أشياء يجب أن تغيّرها في الكود الذي كتبته و تحاول اختباره.
خلاصةً، الاختبارات ليست رفاهية.. اكتبها حتى لو لم تكن مطلوبة منك، وحتى لو لم تكن هناك عملية تشغيل للاختبارات على السيرفر أو قبل الـ deployment.
الإختبارات ستجعلك مبرمجا أفضل.
#tests #unittests
الكود الذي لم يتم اختباره، على الأقل في الـ correct path و الـ wrong path، هو كود قابل بنسبة كبيرة لأن يُنتج أخطاء - كثيرة- bugs مستقبلاً بشكل قطعي.
ناهيك عن الـ nested cases التي من الصعب اختبارها كاملة، لكن على الأقل الـ happy/unhappy path هي ضرورة.
لماذا؟
أولاً لأنك ستختصر على نفسك وقت البحث عن الأخطاء في التغييرات المقبلة. لنفترض أنك ستقوم بتغيير أو إضافة ميزة، غالبًا ستكتب اختبارًا جديدًا، ثم ستقوم بتشغيل جميع الاختبارات. هنا، سيظهر لك غالبًا اختبارات أخرى يجب تحديثها، دون الحاجة لأن تقوم بمراجعة كل واحدة منها بصفة أحادية..
أيضًا كتابة الاختبارات تجعلك تفهم التغييرات التي قمت بها بشكل أعمق، وربما أثناء كتابة اختبار ما، تظهر لك أشياء يجب أن تغيّرها في الكود الذي كتبته و تحاول اختباره.
خلاصةً، الاختبارات ليست رفاهية.. اكتبها حتى لو لم تكن مطلوبة منك، وحتى لو لم تكن هناك عملية تشغيل للاختبارات على السيرفر أو قبل الـ deployment.
الإختبارات ستجعلك مبرمجا أفضل.
#tests #unittests
خاطرة كتبتها كرد على منشور فيه سؤال عن مسالة "ضاع العمر بعد ال 30، او ال 40، او الخمسين".
-----------------------
المؤمن وقتما استدرك يستدرك عند رب الكون.. الامر فيه سعة و فيه فقه.. و هناك كتاب يتحدث عن هذا من منظور شرعي/عملي اسمه "فقه الاستدراك" لا يحضرني اسم صاحبه الان.
المقياس لفلاح المؤمن في الدنيا هو ان يكون مسلما يحاول ان يطور من نفسه في كل مجالات الحياة بنية لله عز و جل، و ان يحاول تزكية نفسه في محاولة لانتشال المحيطين به بعدها و ان يكون كل امره لله بقدر الإستطاعة، عملا كان، بيتا كان، اسرة كانت و هكذا،، و هلم جرا...
الامر صعب في ظل الحياة المادية التي ابتلينا بها الان، لكن الانسان يجب ان لا يسقط في رفع سقف توقعاته كثيرا، و ان يحاول ان يتعلم في دينه لكي يفهم سنن الله في الكون..
ربما افكاري في هذا التعليق غير مرتبة، لكن اظن ان فكرتي واضحة.
اسأل الله ان يسهل علينا هذا، و يسهل علينا مجاهدة انفسنا في هذا العصر، فكثير مما نقوله هو صعب علينا تطبيقه ايضا، نسال الله الصدق، و نسال الله ان ينتفع شخص ما بهذا التعليق.
بارك الله فيكم و نفع بكم!
#خاطرة
-----------------------
المؤمن وقتما استدرك يستدرك عند رب الكون.. الامر فيه سعة و فيه فقه.. و هناك كتاب يتحدث عن هذا من منظور شرعي/عملي اسمه "فقه الاستدراك" لا يحضرني اسم صاحبه الان.
المقياس لفلاح المؤمن في الدنيا هو ان يكون مسلما يحاول ان يطور من نفسه في كل مجالات الحياة بنية لله عز و جل، و ان يحاول تزكية نفسه في محاولة لانتشال المحيطين به بعدها و ان يكون كل امره لله بقدر الإستطاعة، عملا كان، بيتا كان، اسرة كانت و هكذا،، و هلم جرا...
الامر صعب في ظل الحياة المادية التي ابتلينا بها الان، لكن الانسان يجب ان لا يسقط في رفع سقف توقعاته كثيرا، و ان يحاول ان يتعلم في دينه لكي يفهم سنن الله في الكون..
ربما افكاري في هذا التعليق غير مرتبة، لكن اظن ان فكرتي واضحة.
اسأل الله ان يسهل علينا هذا، و يسهل علينا مجاهدة انفسنا في هذا العصر، فكثير مما نقوله هو صعب علينا تطبيقه ايضا، نسال الله الصدق، و نسال الله ان ينتفع شخص ما بهذا التعليق.
بارك الله فيكم و نفع بكم!
#خاطرة
الكونستراكتر (constructor) هو method خاصة تُنفذ تلقائيًا في كل مرة تنشئ فيها instance جديد من الكلاس الذي تعمل عليه.
فائدتها الرئيسية هي تجهيز أو تهيئة الأشياء الأساسية مثل الاتصال بقاعدة البيانات أو تعيين قيم ابتدائية للخصائص و ما الى ذلك.
مثال بسيط:
class Database {
public function __construct() {
echo "connection has been established";
}
}
كل ما تعمل instance جديد، الكونستراكتر يشتغل تلقائيًا.
$database = new Database()
السذر البرمجي فوق سيقوم باخراج او طبع:
"connection has been established"
#PHP #SoftwareDevelopment #Fundamentals
فائدتها الرئيسية هي تجهيز أو تهيئة الأشياء الأساسية مثل الاتصال بقاعدة البيانات أو تعيين قيم ابتدائية للخصائص و ما الى ذلك.
مثال بسيط:
class Database {
public function __construct() {
echo "connection has been established";
}
}
كل ما تعمل instance جديد، الكونستراكتر يشتغل تلقائيًا.
$database = new Database()
السذر البرمجي فوق سيقوم باخراج او طبع:
"connection has been established"
#PHP #SoftwareDevelopment #Fundamentals
أول ما يجب ان تفكر فيه أثناء البدء في عمل ميزة جديدة في نظام ما هو هل هنالك plug-in/package/library/.. يقوم بالحاجة في وقت اقل، دون الحاجة لبناءه من البداية.. لا حاجة لإعادة بناء العجلة.
هذا يحتاج ان تحول عقليتك من coder/programmer الى software developer/engineer.
هنا ستبدأ بالنمو، و التفكير في المشاريع على انها منتجات و البرمجة هي وسيلة لتحقيقها لا العكس.
#Software #mindset #Softwareengineering
هذا يحتاج ان تحول عقليتك من coder/programmer الى software developer/engineer.
هنا ستبدأ بالنمو، و التفكير في المشاريع على انها منتجات و البرمجة هي وسيلة لتحقيقها لا العكس.
#Software #mindset #Softwareengineering
قراءة و فهم التعليمات البرمجية المكتوبة مسبقا في codebase معين أصعب من كتابة الكود الجديد، و أهم قبل بداية كتابة كود جديد.
ااه و مرهقة جدا، لكن تعلمك الكثييير.
اقرأ الكود بالقدر الذي تود به كتابته، فهما بنفس الاهمية.
ااه و مرهقة جدا، لكن تعلمك الكثييير.
اقرأ الكود بالقدر الذي تود به كتابته، فهما بنفس الاهمية.
ما هو UUID؟ ولماذا يُستخدم بدلًا من ID العادي؟
الـ UUID هو اختصار لـ Universally Unique Identifier، ويُستخدم لتوليد مُعرّفات فريدة تُستعمل غالبًا بدلًا من الـ ID العادي في قواعد البيانات، خاصة عند استرجاع البيانات عبر طلبات الـ GET يعني في ال retrieving.
مثال:
لدينا جدول في قاعدة البيانات يحتوي على الأعمدة التالية:
posts (id, title, body, created_at, updated_at)
عند استرجاع مقال معين، نرسل عادة طلب GET بالشكل التالي:
site.name/posts/1
هذا يعني أننا نطلب المقال الذي يحمل الـ ID = 1.
هنا قد تتساءل: ما الحاجة لاستخدام UUID؟
السبب الرئيسي لاستخدام UUID هو زيادة الحماية وصعوبة التنبؤ بهوية ال records فقط.
عند استخدام أرقام تسلسلية كـ ID (1، 2، 3...)، يمكن للمهاجم بسهولة تخمين عناوين موارد أخرى (مثلاً: /posts/2، /posts/3...). اذا لم تكن متاحة.. وهذا يُسهل بعض أنواع الهجمات مثل:
- الهندسة الاجتماعية (Social Engineering): كثيرًا ما يكون المستخدم صاحب ID = 1 هو ال admin، وبالتالي يكون هدفًا واضحًا... وهكذا.
- استكشاف غير مصرح به (Unauthorized Enumeration): يستطيع المهاجم استعراض محتوى الموقع أو واجهة API فقط بتغيير الرقم.
لكن عند استخدام UUID، يصبح الرابط على الشكل:
site.name/posts/6f8a9e2c-1d4e-41a2-bb0e-5f2ef3fc29f1
هذا يُصعّب جدًا عملية التخمين أو التلاعب، مما يعزز الأمان العام للموقع او التطبيق.
ملاحظات مهمة:
- ال UUID لا يُعتبر "تشفيرًا"، بل هو معرف غير قابل للتخمين، فقط.
- رغم فوائده الأمنية، ال UUID أكبر حجمًا من الأرقام العادية وقد يكون أبطأ من حيث ال indexing (يمكننا اننتحدث عن هذا مستقبلا ان شاء الله).
- استخدام UUID مفيد خاصة في الـ APIs المفتوحة أو الأنظمة التي تتطلب حماية لهوية ال recourses.
اذا استفدت شارك الموضوع مع معارفك!
الـ UUID هو اختصار لـ Universally Unique Identifier، ويُستخدم لتوليد مُعرّفات فريدة تُستعمل غالبًا بدلًا من الـ ID العادي في قواعد البيانات، خاصة عند استرجاع البيانات عبر طلبات الـ GET يعني في ال retrieving.
مثال:
لدينا جدول في قاعدة البيانات يحتوي على الأعمدة التالية:
posts (id, title, body, created_at, updated_at)
عند استرجاع مقال معين، نرسل عادة طلب GET بالشكل التالي:
site.name/posts/1
هذا يعني أننا نطلب المقال الذي يحمل الـ ID = 1.
هنا قد تتساءل: ما الحاجة لاستخدام UUID؟
السبب الرئيسي لاستخدام UUID هو زيادة الحماية وصعوبة التنبؤ بهوية ال records فقط.
عند استخدام أرقام تسلسلية كـ ID (1، 2، 3...)، يمكن للمهاجم بسهولة تخمين عناوين موارد أخرى (مثلاً: /posts/2، /posts/3...). اذا لم تكن متاحة.. وهذا يُسهل بعض أنواع الهجمات مثل:
- الهندسة الاجتماعية (Social Engineering): كثيرًا ما يكون المستخدم صاحب ID = 1 هو ال admin، وبالتالي يكون هدفًا واضحًا... وهكذا.
- استكشاف غير مصرح به (Unauthorized Enumeration): يستطيع المهاجم استعراض محتوى الموقع أو واجهة API فقط بتغيير الرقم.
لكن عند استخدام UUID، يصبح الرابط على الشكل:
site.name/posts/6f8a9e2c-1d4e-41a2-bb0e-5f2ef3fc29f1
هذا يُصعّب جدًا عملية التخمين أو التلاعب، مما يعزز الأمان العام للموقع او التطبيق.
ملاحظات مهمة:
- ال UUID لا يُعتبر "تشفيرًا"، بل هو معرف غير قابل للتخمين، فقط.
- رغم فوائده الأمنية، ال UUID أكبر حجمًا من الأرقام العادية وقد يكون أبطأ من حيث ال indexing (يمكننا اننتحدث عن هذا مستقبلا ان شاء الله).
- استخدام UUID مفيد خاصة في الـ APIs المفتوحة أو الأنظمة التي تتطلب حماية لهوية ال recourses.
اذا استفدت شارك الموضوع مع معارفك!
HTML Embed Code: