مصطفى 36a2

ما هي حقيقة البرمجة ؟؟!

18 ردود في هذا الموضوع

بسم الله الرحمن الرحيم

أود في هذه المشاركة أن أطرح على حضراتكم سؤالاً أرقني في الشهرين الماضيين ...

وخلاصة القول تتلخص في كلمة واحدة : الحرية ....

أما بالتفصيل.... فسأبث إليكم أوجاعي وشجوني :

ما هي البرمجة!!!

أو بتعبير أصح ما هي حقيقة البرمجة ...؟

هل هي أن تحترف مفاهيم البرمجة الكائنية والبنى والتعامل مع الذاكرة بمراجعها ومؤشراتها ؟؟

هل هي أن تتقن كتابة برنامج نظيف خالي من الأخطاء...ومعقد بشكل كافٍ ليُقال أنك محترف؟؟!

هل البرمجة هي معرفة الدوال السحرية :S وأعني بها دوال ال API التي تعمل كل شيء في ويندوز ...أو ما يقابها في اليونكس

وتعلم برمجة الواجهات والopenGL وال DirectX وما يتعلق بالرسوميات...

هل البرمجة هي أن أبقى مستعبداً(برمجياً) من قبل شركة ما .. أومن قبل فريق برمجي ما أو حتى مبرمج عظيم ...ما :mad:

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

وسطائها والتي لن تكون إلا الكثيير من البنى structures والعديد من الأنواع .. ثم سأحاول استعمالها ...

هل أكون عاقلاً .. إذا أمضيت الأشهر والسنوات وأنا أتعلم الدوال التي كتبها مبرمجوا مايكروسوفت

في ال kernel32.dll وال user32.dll وغيرها من (( مكاتب الربط الديناميكية )) لاحظوا حتى التسمية يجب أن نخضع لها ... :dry:

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

ولكن إذا كانت البرمجة هي أن أتبع خطوات حددها أحدهم ... فلا أرغب في أن أكون مبرمجاً .... :excl:

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

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

مستقل تماماً عن الحاسوب وتابع فقط للهدف الذي نريد الوصول له ...

العنصر الأساس في كل ذلك هو الفكرة الصحيحة ...الخطوات الصحيحة ... الخوارزمية الصحيحة ... والتي تحددها أنت ...

لماذا برأيكم نعتبر ان الوصول للقمر عن طريق الحاسوب وحده مستحيل ؟؟؟ :blink:

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

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

اخترعوا من أجله الصواريخ ومكوك الفضاء ... فهم أسياد الآلات ... وليس العكس ....

ما يحدث معنا كعرب عموماً وكمبرمجين خصوصاً ( وإن كانت كلمة مبرمج أكبر من أن نطلقها على معظمنا وأنا أولهم )

ما يحدث معنا هو أننا نأخذ الاختراعات ثم نستخدمها دون فهم بداياتها وخطوات الوصول إليها ...

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

نعتبره كل شيء ....بل وفرضنا على أنفسنا إتقان التعامل معه على أننا لن نخرج منه أبداً....

إلا أننا نخرج منه عادة .... ولكن إلى صندوق ضيق آخر ... لشركة أخرى أو فريق برمجي أو مبرمج عظيم ...

لا أريد أن يفهمني أحدهم بأنني أناقش فكرة الاحتكار .. وأحيي المصادر المفتوحة ...

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

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

ويمكننا أن نضيف لها ما يحسنها أو نحذف منها مساوئها ... حسب رؤيتنا نحن لا رؤيتهم هم ....... ( ليس بالضرورة أن نقو بذلك ولكن يجب أن نكون على مستوى القيام بذلك)

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

وأنتظر الإجابة على السؤال : هل البرمجة هي اتباع التعليمات والتقليد أم هي التفكير المجرد والمطلق ...ثم التطبيق أياً كان شكله.. وأياً كانت وسائله ؟

//جوابي على هذا السؤال هو أن البرمجة يجب أن تكون كلمة مكافئة لكتابة الخوارزمية ...

//وعلى هذا الأساس فالبرمجة لا تتبع لغة معينة أو طريقة معينة لكل منا طريقة تفكيره وبالتالي أسلوبه في البرمجة ...

//نحن العرب في هذا العصر أصبحنا في أحسن حالاتنا نتعلم كيف ندرس جزء من اختراع لأحد العلماء الغرب...

//فأين نحن منهم...

إليكم هذا المثال ..

في لغة الأسمبلي ... نحن ندرس لغة الآلة ... ونعتبر جازمين ... أن هذه هي اللغة الأم لأننا لا نفكر أبداً في أن الحاسوب مجرد اختراع

بل ... نرى أنه الأصل وهو الثابت ونحن المتبدل ... هذا أحد الصناديق المغلقة والتي نحن بداخلها ...

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

نرى الاعتماد الكامل ... على برامج التنقيح مثل olly وpeid ثم نرى الفصل الثالث والمخصص فقط لشرح طريقة فك الضغط وكسر الحماية لبعض البرامج ....

وهنا نعود إلى الابتعاد عن جوهر البرمجة وهو فهم الخوارزميات بدلاً من فهم البرامج ...

إليكم بعض الأمثلةعن الابتعاد عن الجوهر :

http://www.arabteam2000-forum.com/index.php?showtopic=259522

http://www.arabteam2000-forum.com/index.php?showtopic=261939

http://www.arabteam2000-forum.com/index.php?showtopic=257571

http://www.arabteam2000-forum.com/index.php?showtopic=227110

نحن في غنى عن ذكر الكتب والدورات والدروس التي تشرح خفايا وأسرار الويندوز وتعتبره الثابت المقدس والذي منتهى علمنا أن نكتشف خفاياه وأسراره ....

أحمد الله أن المعجزة الكبرى كانت كتاباً نقرؤه .... وليست نظام تشغيل نكتشف أسراره ... :lol:

لا أظن أننا بحاجة لذكر كتب البرمجة والدروس فقط لمعرفة التعامل مع كومبايلر الC++ أو java او أو ... بدلا من أن نجد الدروس عن الخوارزميات البرمجية ...

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

جزء من الخوارزمية

أعتذر على الإطالة ... ولكني أردت أن أوضح الموضوع تماماً ... والسلام عليكم

شكراً لقراءتكم والسلام عليكم ....

تم تعديل بواسطه مصطفى 36a2
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

الخوارزمية عادة تكون فقط في الجزء الجوهري من برنامج , مثلا محرك بحث جوجل خوارزميته تكمن في الجزء الخاص بكيفية ترتيب النتائج Sorting , لكن الى جانب هذه الخوارزمية هناك العديد من الامور التي يجب علينا اخذها بعين الاعتبار عند كتابة برنامج ما مثل واجهة الاسنخدام , طرق التخزين و الاسترجاع ..الخ , وهي جزء مهم ايضا من البرنامج و غالبا ما تستهلك الوقت الاكبر من حياة المطورين, لذلك عند تطوير البرنامج من ناحية عملية ( بعيدا عن مثالية "علم الحاسوب" ) تتداخل فيها العديد من الامور التقنية و غير التقنية و لا يمكن حصرها فقط في الخوارزميات ...

 "in theory there is no difference between theory and practice but in practice there is"

تم تعديل بواسطه ahmad123
2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الخوارزميات مهمة,

لكن بخبرتى الخوارزميات لا تقابلها كثيرا داخل برنامجك, و قد لا تقابلها على الاطلاق.

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

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

جزء من الخوارزمية

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

فى المقابل فانك لو علمته لغة برمجية باتقان سوف يستطيع كتابة برامج بجودة مرتفعة, و سوف يصبح من السهل عند تعلمه الخوارزميات ان يحولها الى كود جيد (الخوارزميات ليست وظيفة المبرمج بل هى وظيفة محلل النظم).

الأمر مماثل لمهندس و حرفى!

المهندس يمتلك كما كبيرا من النظريات الهندسية و هو مهنى, و لكنه لا يعرف كيف يقوم بفك المحرك و تركيبه!

فى المقابل فان الحرفى قد لا يعرف القراءة و لا الكتابة, لكنه يعرف كيف يفك المحرك و يصلحه و يركبه.

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

البرمجة هى حرفة أصلا و ليست مهنة علمية,

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

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

بيل جيتس كان فى كلية الاقتصاد و تركها ليؤسس مايكروسوفت.(بيل جيتس كتب مفسرات البيسك التى كانت تستخدم فى معظم الاجهزة المنزلية فى الثمانينات).

ستيف ووزنياك كان مهندس و لم يدرس خوارزميات, و هو الذى كتب نظم أبل الاولية DOS 3.3 و SOS.

هؤلاء صنعوا خوازرميات تم تدريسها فى الجامعة بعد ذلك.

مهندس الطائرات مثلا يدرس ألة صنعها "عجلاتى", لم يدرس هذا الكم من النظريات و الحسابات!

فى النهاية أود ان اقول,

لا تستهر ب"حرفة" البرمجة, فهى حرفة صعبة, و اتقان لغة برمجية تحتاج الى وقت و خبرة, و هذا أصعب من الخوارزميات, لكى تكتب برنامجا كبيرا يجب ان تكون معتادا على اللغة بشكل جيد و كأنها لغتك الام!

-2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

نعم اوافقك في غالب ما ذكرت

لكن لكي يصبح الحديث مفيد للجميع، واستطيع ان افيد واثري الموضوع

ممكن توضح وباختصار، انت متضايق من ماذا؟

انتظر الاجابة..

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

الجواب هو الخيار الثاني أكيد

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

مدرسة ترى استخدام التعليمات والتقليد، ومدرسة أخرى ترى الحرية والتفكير المفتوح

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

يعني مثلا لو تعلمت فيجوال بيسك ستتعلم ثقافة فيجوال بيسك، ولو حاولت تبدع سيصعب عليك لان المقالات والدروس تعكس الثقافة والكوميونيتي

ولو تدخل في لغة بايثون مثلا لازم تكون مبدع وتحب التطوير المستمر ولازم تتابع باستمرار والا ستتعب معهم،

وهكذا كل لغة لها طريقة،

نفس الحكاية لو شركة جديدة، عندها قسم الحاسب، عندها خيارات اما انها تجعل بيئة التطوير .net او php او java كل قرار راح يكون مؤثر

فريق يقول:

يظل أصحاب مدرسة التقليد يدافعون عن ادواتهم القديمة، حتى مع ظهور لغات حديثة ووجود frameworks وأدوات احترافية،

هل يوجد أحد يستخدم ASP.net كيف يطيقون هذا!!

وفريق يقول:

لغة روبي!! ايش الهبل هذا، لغة عيال جيكس، php هي لغة الويب ولا يوجد احسن من ASP.net

هل يعقل أن نترك فيجوال ستوديو ونستخدم أدوات هؤلاء الهواة.

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

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

كل جماعة تدافع عن نفسها والموضوع خاضع للاختيار الشخصي ولا يوجد عداوات انما هي تفضيلات

- الذي يريد الاستقرار والثبات سيفوته الاشياء الاحدث، والذي يريد الجديد سيحتاج للتعلم المتواصل

حسب ما فهمت انك تريد التركيز على حل المشكلة وليس الانشغال باكواد ليس لها علاقة

هذا المصطلح يسمى Boilerplate code يجعل المبرمجين منشغلين باعداد البيئة على حساب التركيز في الـ business logic والـ core problem

البويلربليت كود يتم تقليصه في اللغات الحديثة، ويوجد frameworks احترافية جدا تجعلك تركز على كودك الاساسي

مثلا صحيفة الجارديان ثاني اكبر صحيفة على النت،

كانت تستخدم لغة جافا وكان حجم الكود 10,000 سطر، انتقلوا للغة سكالا Scala صار حجم الكود 6000

وليس المقصود تعقيد الكود وضغطه، بل بالعكس أصبح مقروء ومعبر أكثر

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

شاهد مثلا MVC frameworks ، وكذلك نفس هذه الـ frameworks تحوي على مفاهيم مثل DRY و convention over configuration ومفاهيم كثيرة

لغة الجافا مثلا جاءت لتحل المشاكل الكثيرة التي ذكرتها في التعامل مع مكتبات الـ low-level باستخدام الـjvm،

وكذلك معالجة الذاكرة مفهوم مثل garbage collection يجعلك ترتامح من عناء التعامل مع البوينترات

ومفاهيم عديدة في الجافا مثل كونها تجعل بعض الـ desigen patterns الي في الكتب صارت feature في اللغة نفسها

اتكلم عن فترة مع بداية الالفين، تعتبر "لغة الجافا" حاليا متأخرة كـ"لغة برمجة"، لكن الـ JVM تبع الجافا قوي جدا، حاليا يوجد لغات برمجة كثيرة تعمل على الـjvm غير لغة الجافا

List of JVM languages

مدرسة 1 تفضل: PHP ,VisualStudio , Delphi

مدرسة 2 تفضل: Python, Scala, Ruby

أنا محايد لست ضد اي لغة

لو كنت من المدرسة الثانية ابتعد عن منتجات مايكروسوفت واوراكل

استخدم web MVC frameworks: مثل Rails, django, play! framework

- تعلم functional programming وطبق مفاهيمها في لغة Scala

- استخدم ORM وتخلص من كتابة sql وركز على تصميم الـ model

في المشروعات الحديثة أحاول ابتعد عن الجافا والـ #C

لكن ضيق الوقت احيانا يجعلني مع هذه اللغات

مختصر ما أريد قوله

كنت اشتكي من نفس الكلام الي ذكرته

لحد ما وجدت Stackoverflow فوجدت مواضيع ثرية جدا، عكفت على الموقع شهرين متواصلات،

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

هي مدرستين، ولن يقف الصراع بينهم،

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

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

لست متعصب لأي لغة، اللغة مجرد وسيلة ويأتي غيرها، وكل خمس سنوات لازم يكون التغيير طبيعي جدا

انما ابحث عن الوسيلة التي تحقق العمل المطلوب وتجعلني اركز على حل العمل الاساسي

واصعب شيء يواجهني ليس الادوات واللغات، انما تعلم المفاهيم الجديدة، "كيف اغير طريقة تفكيري"

MVC REST FP ORM

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

هل ممكن تستخدم قواعد بيانات من غير جداول؟ ولماذا وما الفائدة

هنا يتغير طريقة تفكير الواحد

تم تعديل بواسطه بـارع
6

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أعتقد أنك تبحث عن الأصل , الكمبيوتر ماهو وكيف أقوم بإنشاء كمبيوتر !!

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

هذه هي البرمجه التي نقوم بها يوميا نحن نعتمد على خبرات واعمال الغير ونطور عليها ولا دخل بالعربي والأعجمي بذلك فيمكنك البدء في إنتاج أو تطوير نظام تشغيل ولن يوقفك أحد , المهم هو البدء بالعمل دون النظر إلى كوني عربي أو غربي

6

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

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

المبرمج الأمثل هو من يسيطر على الجانبين المفاهيمي و العملي.

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

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

بارع كفيت ووفيت حقاً , سلمت يداك على هذا الطرح الرائع .

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

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

والبرمجة وسيلة وليست غاية , إذاً أى شى يوصلنى لما أريد فى أقل وقت وأقل جهد وأعلى أداء هو ما أحاول الوصول إليه دائماً .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

موضوع جيد للنقاش .. وفكرة أحييك عليها :)

بالنسبة لسؤالك

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

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

أشكر الأخ بارع الذي كفى ووفى ما شاء الله

وأحيي كاتب الموضوع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بسم الله الرحمن الرحيم

أولا شكرا لردكم على الموضوع ..

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

فالخوارزمية هي قلب ذلك كله ... ويبقى لنا قفط أن نبحث عن الوسائل وهي متوفرة بكثرة .. وإن لم تتوفر سنخترعها لأن الحر لا يوقفه عدم توفر الوسائل عن اكمال طريقه .. ألا توافقني؟

أخي فادي++ كلمة الخوارزمية كطريقة تفكير أبعد ما تكون عن حفظ خوارزميات العالم .. ولو كان الأمر بالحفظ لكان الأهون هو ألا يُطرح الموضوع أصلا.. الخوارزمية هي خطوات التنفيذ فكيف لا نواجهها في البرمجة ؟

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

فالخطوات تكون على الورق قبل أن تكون على الجهاز ... وهذا في كل العلوم ويقوم به كل الناجحين..

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

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

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

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

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

//////حسب ما فهمت انك تريد التركيز على حل المشكلة وليس الانشغال باكواد ليس لها علاقة

هذا المصطلح يسمى Boilerplate code يجعل المبرمجين منشغلين باعداد البيئة على حساب التركيز في الـ business logic والـ core problem

/////البويلربليت كود يتم تقليصه في اللغات الحديثة، ويوجد frameworks احترافية جدا تجعلك تركز على كودك الاساسي

بالضبط هذا ما قصده

لست متعصب لأي لغة، اللغة مجرد وسيلة ويأتي غيرها، وكل خمس سنوات لازم يكون التغيير طبيعي جدا

انما ابحث عن الوسيلة التي تحقق العمل المطلوب وتجعلني اركز على حل العمل الاساسي

وللأسف نرى عكس هذا الكلام في أوساط البرمجة ...

واصعب شيء يواجهني ليس الادوات واللغات، انما تعلم المفاهيم الجديدة، "كيف اغير طريقة تفكيري"

يا عيني عليك ... وهذا ما عنيته تماما في تعلم الخوازميات كطريقة تفكير ... يا أخي والله أنك فاهم علي تمام

ربما علينا أن تعلم لغة جافا كطريقة تفكير ولغة بايثون كطريقة تفكير والc++ كطريقة تفكير ... وعندها لن نجد مشكلة في التعامل مع أي لغة ... ولن نكون قد أضعنا عمرنا في تعلم دقائق وتفاصيل نحن في غنى عنها ...

أستاذ بسام لو أردت القيام بما تقوله فإنني سأبدأ من دراسة أنصاف النواقل والترانزستور ثم الدارات المنطقية...

حتى أصل إلى المايكروكونترولر ... ثم اتابع كما قلت !! على أي حال أنا طالب هندسة الكترون وهذا ما افعله الآن ..

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

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

أخي neptonia بارك الله فيك ..

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

أما من ناحية ..

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

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

بأنني لاحظت من حولي هذا التفكير الغريب والذي يعتبر أننا إن كنا نريد أن نكون مبرمجين فيجب بالدرجة الاولى أن نعرف ماذا توفر لنا اللغة .. وماهي إمكانيات البيئة التي نعمل عليها .. (حاسوب,موبايل,انترنت,مركبة فضاء...)

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

ثم يأتي بعد ذلك البحث عن الإمكانيات المتوفرة ...

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

وفي البرمجة يجب أن تكون الفكرة سابقة للغة البرمجة ......

فإن استطعنا تعلم التفكير بحرية ... سيكون كتابة الكود أمراً (في قمة السهولة )...

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

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

فما هي إمكانية كتابة جدولا بأوامر اللغة وأمام كل أمر وظيفته ...

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

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

جزاكم الله كل خير ... والسلام عليكم ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عذرا اخي مصطفي لم اري ردك الاخير لانه طويل الي حد ما ربما سأقراه لكن بعد ان اكتب سؤال موجه لك

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

اشهر مسائل NP-Complete مسألة البائع المتجول. حيث يوجد لدينا عدة مدن مرتبطة مع بعضها بمجموعة من الطرق، ويريد بائع متجول أن يمر على هذه المدن جميعاً دون أن يمر بنفس المدينة مرتين، والسؤال: هل يمكن إيجاد ترتيب للمدن بشكل يضمن له أن يمر بها جميعاً دون أن يكرر مروره بنفس المدينة مرتين؟ الواقع أن هذه المسألة من أصعب المسائل في علوم الحاسوب. ولا توجد خوارزمية تسمح بإيجاد هذا الترتيب بسرعة من أجل أي خريطة! بينما يمكن التحقق من حل ما بسهولة. بمعنى أنه لو قدم لنا أحدهم ترتيباً للمدن، وأدعى أن هذا الترتيب يحقق المطلوب، فإنه بإمكاننا أن نتأكد من حله بسهولة (نمر على كل مدينة بالترتيب ونلون المدينة التي مررنا عليها).

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

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

وانصحك بأنك تهتم بهذه الاشياء بزيارتها

http://alahham.wordpress.com/

تحياتي

تم تعديل بواسطه MohamedIBrahim
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

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

لا يمكن كتابة خوارزمية لمسألة في حالة واحدة ... وهي ألا تفهم المسألة ... فيما عدا ذلك ... فالحل ممكن بإذن الله ..

وان شاء الله افكر في حلها في المنزل ... وشكرا جزيلا لمرورك ..

وشكرا للأخ أحمد سعود والأخت الحاسوبية ... جزاهم الله خيرا

وشكرا لكم جميعا في غير مكان كنت ( ماحدا شالني من ارضي) فجزاكم الله خيرا والسلام عليكم))

تم تعديل بواسطه مصطفى 36a2
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم أخي محمد

وعليكم السلام اخي مصطفي

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

لا يمكن كتابة خوارزمية لمسألة في حالة واحدة ... وهي ألا تفهم المسألة ... فيما عدا ذلك ... فالحل ممكن بإذن الله ..

لا اعلم لماذا لم تروق لي هذه الجملة ربما لانها تختلف فى رأيي من ناحيتها عموما هو مجرد رأي طبعا لا كره لما ذكرته ولا شئ لكننا فى مقام نقد ونقاش وسأحكي لك من منطلق انني اقضي معظم الوقت فى دراسة الخوارزميات بدون النظر الي التطبيقات الا بشكل عملي وتكون فى نهاية المرحلة وحيث ان كل مشاريعي تنتمي الي النوع التعليمي Educational Projects والتي لا تري النور ابدا لاحد غيري وهي تختلف حسب دراستي المختلفة وحسب ما اتعلمه وما انطلق فيه من Compilers وOpreating systems مرورا بلغة EAMPL (لغة برمجة لNuclea Projects Simulation Apps شاركت فى تصميمها فى فريق هندسي ومن الفيزيائيين والفكرة جائت من التطبيقات المتاحة من شركة فوكشيما النووية ) المهم خلال مرحلتي تلك معظم الخوارزميات او الافكار اذا اردنا التعميم لم استطع شرحها للجميع او حتي لآحد فمثلا كل الخوارزميات التي اعلم البسيط عنها فى Quantom Computing لا استطيع شرحها بشكل كامل (تحتاج الي ان تكون Ninja فى الرياضيات لتقوم بذلك) رغم انني قد افهم معظم الجزئيات الموجودة بها كما أن امكانية تحقيقها يكون هنا صعب بل وقد لا يتحقق والشاهد مما اقصده انه ليست الخوارزميات دائما كما مثلت لك فى علوم الحاسب بأن تكون قابلة للحل المثالي او المسبق أحيانا كثيرة التفاعلية قد تضفي عناصر جديدة لابد من ادراجها

تخيل نظام أمني لمؤسسة كبيرة ولنقل مثل NASA هل يمكن مسبقا تصميم الخوارزميات والافكار المنطلقة والتي طبعا ستكون متغيرة من وقت لآخر فهنا لماذا اقيد نفسي بتطوير نظام قد يحتاج الي التطوير دائما بشكل مستمر بدلا من اترك التفاعلية وامكانية الاحلال والدمج والتي اهم من التصميم الاولي والمبدئي للنظام نفسه فكل الانظمة والتطبيقات الناجحة والعملاقة تستعمل مبادئ الفاعلية والاحلال والدمج والتفاعل بدلا من الجمود المعهود

قد يكون كلامك هو السائد فى حالة تطبيقات موجهة مثلا لادارة صيدليات , مواقع ويب للتسوق (تطبيقات معتادة من قبل المستخدمين العاديين) وغيرها من تلك الامور

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

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

احيانا تفهم المسألة المطلوبة لكنك لا تستطيع تنفيذها

البرمجة هي وسيلة وليست غاية فمثلا التصميم الهندسي للحاسب لا يمكننا ان نقول انه الحاسب وانه ذلك التطور الرهيب فمن غير Software والوسيط بينه وبين الHardware لا يمكنه ان يتحول الي هذا العملاق الذي غير مجري التاريخ

ولكل من تلك المجالات رجالها وعلومها المختلفة وتخصصاتها الواسعة وبحور من حبر علمها

فمثلما الرياضيات هي اللغة التي يتم تحويل وتنفيذ افكار ومعطيات وقوانين الفيزياء الطبيعية ليتم استخدامها وتسخير قوي الطبيعة والعمل من اساسها فان البرمجة هي الوسيلة لتسخير قدرات الكائن الذي اسميه Computing

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أخي محمد يمكن أنا أصغر من أني أجاوب على كلامك ... فخبرتي في الموضوع لم تصل إلى هذه الامتحانات ولكن هذا لا يمنع أن ندخل في مثال عملي واضح ...

وبشكل عام ... من مزايا جمع الخوارزمية مع الحاسب (أي كتابة برنامج) هي أنا الحاسب يمكنه تجربة كل الاحتمالات ...

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

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

أرجو منك أن تمرر لنا بعض الأسئلة العملية ... لاختبار القدرة على كتابة الخوارزمية او لا ...

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

وبشكل عام ... من مزايا جمع الخوارزمية مع الحاسب (أي كتابة برنامج) هي أنا الحاسب يمكنه تجربة كل الاحتمالات ...

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

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

وبالطبع، فإن هذا العدد يجب أن يكون أصغر من عدد المربعات اللاتينية، وذلك بسبب التقييدات الإضافية المفروضة على الشبكات الجزئيّة منها . يوجد 12 مربعا لاتينيا فقط من المرتبة 3 و576 من المرتبة 4، لكنْ هناك 5,524,751,496,156,842,531,225,600 مربع لاتيني من المرتبة 9. إلا أن نظرية الزمر تنص على أن الشبكة التي يمكن اشتقاقها من أخرى هي مكافئة للشبكة الأصلية. فعلى سبيل المثال، إذا قُمْتَ منهجيا بالاستعاضة عن كل عدد بعدد آخر (مثلا: 1 أصبح 2 و2 أصبح 7، وهكذا)، أو إذا بادلت بين سطرين أو عمودين، فإن النتائج النهائية ستكون بالضرورة نفسها. لذا فإذا أحصينا الصيغ المختزلة فقط، أصبح عدد المربعات اللاتينية من المرتبة التاسعة مساويا 377,597,570,964,258,816. وهذه نتيجة وردت عام 1975 في كتاب Discrete Mathematics، الذي ألفه بامل وروثْسْتَايْنْ

وهذا التوع من التحديد ايضا يتطلب التجارب الاحتمالية والتحقق المتتابع وهذا نابع من قدرتنا

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

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

هذا الجزء يخرج بنا الي عالم AI (الذكاء الاصطناعي ) وهذا شئ أخر لكن المشكلة هنا ان الذكاء البشري وقدرة الحاسوب من خلال خوارزيمته ما زالت قاصرة اذ انه ليسا متكاملان بالشكل الواسع فالعقل البشري كمن يعطي مجال التحديد والتفكير للحاسوب وعلي الحاسوب ان يقوم هو بالتجربة الاحتمالية فمثلا انا اعطي للحاسوب مجالا للتفكير فى قيمة متغير ما ضمن برنامج واضع له تفاصيل لمعايير الاختيار واضع له المجال المحدد من 1 الي 85000 وغيرها لكن فى الحالات التي لا يستطيع فيها عقل الانسان تحديد المجال وادخالها للحاسوب فماذا سوف يحدث ؟

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

بالعكس فهم الحاسوب يختلف عن فهم الخوارزميات فالخوارزميات المعلوماتية ما زالت جزء نظري يتعامل مع الرياضيات والمعلوماتية وليس الحاسب

فهم الحاسب يتطلب طريقة عمله وطريقة استخدامه (اقصد الكاملة وليس تصفح الانترنت وقراءة الملفات) وطرائق برمجته وغيرها والي ذلك هندسته الداخلية فهي عملية واسعة ولها مجالات وأفاق واسعة

أرجو منك أن تمرر لنا بعض الأسئلة العملية ... لاختبار القدرة على كتابة الخوارزمية او لا ...

يمكنك ان تجد بعض المسائل الهامة لتتعرف اكثر عن الامور بنظرة ثاقبة وتقرأ اكثر

مثلا مسائل مثل الحوسبة بواسطة الدنا

خوارزمية فرق تسد

خوارزمية فرق تسد

الخوارزميات الجينية

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

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

المجال واسع للغاية ولا يمكن للحاسب حله حتي ويحتاج الي تدخل بشري لكن الحاسوب هو من يستطيع اختبار مدي صحة الحل بتجربته ومحاكاته

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

المهمة الأساسية هي حل المشاكل ، فاذا كانت المشكلة تتطلب معرفة بنظام الويندوز (مثلاً اقوم بكتابة درايفر لفحص اي باكت مرسل من الجهاز، بعباره اخرى اريد عمل برنامج Parental Control مثلاً) هل سوف أقول لماذا اتعلم خفايا النظام فهي ليست مهمة بالتالي لن تنتج شيء ,, مشروعي يحتاج لAdvanced Windows Knowledge لذلك أقوم بالقرائه والتعمق في ذلك,, مشروعي كبير جداً ويحتاج معرفة بOOP/Design Pattern لذلك أتعمق فيها, مشروعي الحالي عباره عن نظام Authentication بالتعرف على صورة ألوجه فلماذا لا اتعمق كثيراً في مكتبة ولتكن مثلاً OpenCV بدونها على سبيل المثال لن استطيع حل المشكلة التي بين يدي في الوقت المناسب,,, هناك مشاكل تحتاج البحث عن خوارزمية سريعه تفيد، مثلاً اريد البحث في جهازي وهو يحتوي على اطنان من الملف والكتب اريد البحث عن معلومة ، أو اريد عمل Visulization لها بحيث اعرف ماهيه هذه البيانات الخ..

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

في لغة الأسمبلي ... نحن ندرس لغة الآلة ... ونعتبر جازمين ... أن هذه هي اللغة الأم لأننا لا نفكر أبداً في أن الحاسوب مجرد اختراع

بل ... نرى أنه الأصل وهو الثابت ونحن المتبدل ... هذا أحد الصناديق المغلقة والتي نحن بداخلها ...

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

نرى الاعتماد الكامل ... على برامج التنقيح مثل olly وpeid ثم نرى الفصل الثالث والمخصص فقط لشرح طريقة فك الضغط وكسر الحماية لبعض البرامج ....

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

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

نحن مهنتنا هي حل المشاكل ,, بغض النظر كل شيء ,, حتى الدراسات الأكاديمية في علوم الحاسوب لن تجد شخصاً يدرسك سي++ فقط، بل ستدرس رياضيات خوارزميات في نظم الشغيل ، معمارية الجهاز ،، كل هذه الامور سوف تزيد من خبرتك في حل المشاكل Problem Solving Skills ,,

جرب ان تقوم بحل اي مشكلة، ولتكن "حماية برنامجك بشكل بسيط" وستجد انك سوف تحتاج لبرامج التنقيح لكي تختبر وتتأكد من هذه الحماية ,, وبالتالي كتاب الفريق العربي للهندسه العكسية مفيد جداً والا فلن تتقدم شبر واحد :) .

بالتوفيق،

تم تعديل بواسطه Wajdy Essam
1

شارك هذا الرد


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

فهمت من هذا الكلام أنه هناك عدة حلول للشبكة لولم يكن هناك أرقام مكتوبة بالأسود الغامق happy.gif, لكن (لا أريد أن ادخل بالموضوع مباشرة ) ما قصدك بالمربعات اللاتينية ... سأبحث عن ذلك .شكرا ...

فمثلا لو انني اريد محاكاتك وانت تقتل احدهم بدون ان اعلم الاداة التي تمتلكها او استخدمتها (خلاص ورطتك)
laugh.gif الله يستر .. يظهر إلك باع بالتحقيق الجنائي laugh.gif
لكنه يظل به نفس القصور والذي يفرقه عن الانسان وهذه الفروقات اصلا تكمن فى الخوارزميات التي يعمل من خلالها انا لا اتحدث هنا عن نقص المعطيات التي يمكننا ادارتها وادخالها للحاسب فهذه مشكلة اخري

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

بالخلاصة أخي : ما دمت فاهم على حالك يمكنك أن تفهم الحاسب ..

آسف أخي فهمت عليّ غلط بسبب نقض التشكيل على الكلمة والعبارة هي : بالخلاصة أخي : ما دمت فاهم على حالك يمكنك أن تُفَهِّمَ الحاسب .. هذا ما قصدته فكلامك عن فهم الحاسب صحيح بالتأكيد ... ولا غبار عليه ... جزاك الله خيراً

أستاذ وجدي .. شكراً لك على ردك ... لاشك أننا سنحتاج أثناء حل مشكلة ما غلى معرفة البيئة التي نتعامل معها ... والبيئة التي سنستخدمها ...

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

جرب ان تقوم بحل اي مشكلة، ولتكن "حماية برنامجك بشكل بسيط" وستجد انك سوف تحتاج لبرامج التنقيح لكي تختبر وتتأكد من هذه الحماية ,, وبالتالي كتاب الفريق العربي للهندسه العكسية مفيد جداً والا فلن تتقدم شبر واحد :)

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

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

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

في الختام ...

فإن استطعنا تعلم التفكير بحرية ... سيكون كتابة الكود أمراً (في قمة السهولة )...

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

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

فما هي إمكانية كتابة جدولا بأوامر اللغة وأمام كل أمر وظيفته ...

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

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

اكتشفت منذ أسبوع انه بالفعل هناك شيء مماثل لذلك .. بل ربما موافق له تماما ...

هل سمع احدكم بلغة (محمود ) للمهندس الأستاذ محمود فايد ... والبرمجة بدون كود ... والSuperServer يبدو انه من الصعب العثور على باب لم يُطرق أو موضوع لم يُتحدّث به من قبل ... حتى أنني وجدت عنه بعض المواضيع في المنتدى ... أحد المواضيع في المنتدى عن البرمجة بدون كود

والكثير من الكتب عن البرمجة بدون كود

بالنهاية تسود الخوارزمية مكان الكود ... ولكن هل توجد خوارزمية لكل مشاكلنا؟... أظن ان هذا هو السؤال الآن ...

أشكر لكم متابعتكم

وأستودعكم الله والسلام عليكم ....

تم تعديل بواسطه مصطفى 36a2
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

موضوعك ذكرني بأغنية على قناة سبيستون الي يقول فيها الفنان ( لماذا تطير الطيور في السماء ) هههههههه :lol:

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

هذا مافهمته من موضوعك !

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

والله يا أستاذي الفاضل لقد فهمت علي لب الحديث ... بفارق وهو أن الطيور من خلق الله الذي لا يمكن الإتيان بمثله ونقف عاجزين أمام إعجازه

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

سؤال يراودني..laugh.gif

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .