سؤال

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

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

هل كانت مفيدة؟

المحلول

وعندما تخرجت من الكلية، وأنا افترض أنني كنت على قدم المساواة مع الجميع: "لدي BS في CS، وهكذا تفعل الكثير من الناس الآخرين، ونحن جميعا يمكن أن تفعل أساسا نفس الأشياء." اكتشفت في النهاية أن بلدي الافتراض خاطئ. أنا وقفت، وكان خلفيتي الكثير لتفعله حيال ذلك - ولا سيما شهادتي

وكنت اعرف ان كان هناك اختلاف واحد "طفيف"، في أن لدي "شهادة البكالوريوس" في CS لأن دراستي كانت واحدة من أولى (المفترض # 2 في عام 1987) في البلاد في الحصول على الاعتماد لبرنامج درجة CS لها، وتخرجت في الدرجة الثانية أن يكون هذا الاعتماد. في ذلك الوقت، لم أكن أعتقد أنه يهم كثيرا.

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

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

في بلدي سلاح الجو شهادة تدريب كان ما مجموعه ثلاثة عشر شخصا (بمن فيهم أنا). كما ضباط القوات الجوية أو ما يعادلها، كان لدينا كل درجة BS. كنت في منتصف القائم على أساس السن ورتبة (I كان O-2 بين ستة O-1s و ستة O-3S وما فوق). في نهاية هذا التدريب، سلاح الجو المطاط ختم لنا جميعا كما المختصة على قدم المساواة في اكتساب جنسيتها أو بناء وتصميم وصيانة وتشغيل أي نظام الكمبيوتر أو التواصل عن أي جزء من وزارة الدفاع.

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

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

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

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

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

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

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

وهكذا، بالضبط ما قد اكتشفت؟ ليس كل واحد يساوي، وذلك على ما يرام - أنا لست أفضل شخص لأنني أستطيع أن البرنامج فعال، ولكن أنا أكثر من المفيد إذا كان هذا هو ما تحتاجه من لي. تعلمت أن خلفيتي يهم حقا:     ينشأون في أسرة مكونة من الكهربائيين والمهندسين الكهربائيين،     مجموعات بناء الالكترونيات،     قراءة حرفيا كل كتاب الحاسوب في المدرسة / المكتبات العامة لأنني لم يكن لديك الوصول إلى جهاز كمبيوتر حقيقي،     ثم الانتقال إلى مدينة جديدة حيث لم مدرستي الثانوية لديهم أجهزة كمبيوتر،     ثم الحصول على جهاز الكمبيوتر الخاص بي كهدية،     الذهاب الى المدارس التي لديها أجهزة الكمبيوتر من كثير من مختلف الأحجام والأنواع (أجهزة الكمبيوتر إلى كبيرة)،     الحصول على شهادة معتمدة من كلية الهندسة جيدة جدا،     الحاجة إلى كتابة الكثير من البرامج بلغات مختلفة على أنواع مختلفة من أجهزة الكمبيوتر،     الحاجة إلى كتابة برامج الصلبة (مثل بلدي الجهاز الظاهري الخاصة مع لغة مخصصة التجمع، أو تنفيذ ضغط هوفمان، الخ)،     الحاجة إلى استكشاف الأخطاء وإصلاحها لنفسي،     بناء أجهزة الكمبيوتر الخاصة بي من أجزاء وتركيب ALL البرنامج،     وما إلى ذلك.

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

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

وأنا راضين تماما مع ذلك. ولكن ننصحك بأن تجرب.

نصائح أخرى

وقصة حقيقية:

عند حصولي على أول وظيفة البرمجة من كلية الدراسات العليا، وكان الرجال التي تمتلك الشركة التي عملت للطيارين. بعد أسابيع قليلة تم التعاقد I، واحد منهم سألني هذا السؤال:

<اقتباس فقرة>   

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

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

وولهذا مثال واحد.

وبالتأكيد، انها مفيدة.

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

Blah blah blah ${MyTemplateString} blah blah blah.

وويبدأ بسيط، مع قليل من التعبير العادية صفيق ل peform بدائل.

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

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

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

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

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

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

والشيء عن نظرية، في الواقع، هو أن كل ممارسة تقوم على نظرية. من الناحية النظرية.

الأشياء التي أستخدمها أكثر:

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

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

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

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

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

والتظاهر، للحظة، أن علم الحاسوب والفيزياء ... والسؤال يبدو سخيفا؟

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

وقصتي لهذه النقطة: ما زالت تدرس نظرية الآلي و، لأنه لا يزال لديه أهمية. مشكلة وقف لا يزال موجودا، ويوفر حدود لما يمكنك القيام به.

والآن، هل هذه الأشياء لها أهمية إلى الفارس قاعدة بيانات بلورة C # رمز؟ على الاغلب لا. ولكن عند بدء التحرك إلى مستوى أكثر تقدما، فأنت تريد أن تفهم جذورك والمؤسسات.

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

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

<ط> الشمع على ... الشمع من ... الشمع على ... الشمع قبالة ... ماذا يجب أن نفعل ذلك مع الكاراتيه، على أي حال؟

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

وكتبت الحل التي حولت الشبكات ن شجرة 3 من عقد من قاعدة البيانات إلى بنية البيانات حيث تم تخزين كل عقدة مرة واحدة في مجموعة هيكل عقدة والعلاقة ن شجرة تم تحويله إلى ثلاث شجرات ثنائية باستخدام doubly- مؤشرات مرتبطة ضمن مجموعة بحيث الشبكة يمكن أن تعزى بسهولة في أي اتجاه.

وكان اثنان على الأقل من حيث الحجم بشكل أسرع، وثلاثة على آثار حقا المصب فترة طويلة.

كان

والشيء المحزن أن اضطررت لتعليم عمليا فئة في ن الأشجار، شجرة ثنائية، المؤشرات، والقوائم المرتبطة على نحو مضاعف لعدد من المبرمجين الآخرين الذين تم تدريبهم على قواعد البيانات وVB من أجل دفعهم لفهم خوارزميات.

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

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

"هناك طريقتان لبناء تصميم البرمجيات:إحدى الطرق هي جعل الأمر بسيطًا للغاية بحيث لا توجد أوجه قصور واضحة، والطريقة الأخرى هي جعل الأمر معقدًا للغاية بحيث لا توجد أوجه قصور واضحة.الطريقة الأولى هي أصعب بكثير." - سيارة.هور

حظا موفقا في دراستك!

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

ومعظم المعرفة ليست "عملية"، ولكن يساعدك على ربط النقاط في الطرق التي لا يمكن أن نتوقع، أو يعطيك المفردات الغنية لوصف أفكار أكثر تعقيدا.

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

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

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

والمفاهيم الهامة 1) دولة، 2) ترميز، 3) Nondeterminism. إذا كنت لا تعرف لهم أنها لن تساعدك. ما النظرية يجب أن توفر لك مع هي الصورة الكبيرة والشعور كيف تناسب المفاهيم الأساسية معا. وينبغي أن تساعدك شحذ الحدس الخاص بك.

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

وغذاء للفكر: آلة تورينج نموذجية ليست هي الطريقة الوحيدة لتصميم آلة انتقال الدولة. ومن شأن آلة تورينج مع اثنين بدلا من واحد الشريط تعطيك الكثير من السرعة لعدد من الخوارزميات. http://www.math.ucla.edu/~ynm/papers/ eng.ps

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

ولقد وجدت كتاب روزنبرغ المثيرة. http://www.amazon.com/The-Pillars-Computation-Theory-Nondeterminism/ موانئ دبي / 0387096388 إذا كان لديك كتاب واحد فقط على نظرية IMHO هذا ينبغي أن يكون واحد.

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

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

وأنا لا يستخدمونه بشكل يومي. ولكنه أعطاني الكثير من التفاهم أن يساعدني كل يوم.

ولقد وجدت أن كل ما تحتاجه لالنعيم اليومي من العالم النظري CS هو الكلام من شعار "اقتران المنخفضة والعالية التماسك". روجر S. بريسمان جعلت العلماء قبل <وأ href = "الشبكي: / /rads.stackoverflow.com/amzn/click/com/0735619670 "يختلط =" نوفولو noreferrer "> ستيف ماكونيل جعلت من المألوف.

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

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

بسيط.على سبيل المثال:إذا كنت أستخدم RSACryptoServiceProvider أود أن أعرف ما هو ولماذا يمكنني الوثوق به.

ولأن القوالب C ++ هي في الواقع نوع من حساب التفاضل والتكامل امدا. انظر www.cs.nott.ac.uk/types06/slides/michelbrink_types_06.pdf

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

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

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

وأنت لا تعرف ما رئيسك سوف يطلب منك أن تفعل، قد تضطر إلى استخدام شيء ما كنت اعتقد انه لن يكون BENEFICAL، وجيفري L Whitledge قال.

لنكون صادقين، وأنا من النوع نختلف مع الكثير من الإجابات هنا. كتبت مترجم لقائي الاول (للمتعة، وأنا <م> حقا لدينا الكثير من القهوة / وقت الفراغ) دون أخذ دورة في المجمعين. أساسا أنا فقط تفحص رمز لمترجم آخر، ويتبع نمط. يمكنني أن أكتب محلل في C من على قمة رأسي، لكنني لا أعتقد أنني يمكن أن نتذكر كيفية رسم اوتومات الدفع السفلي إذا تتوقف حياتي على ذلك.

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

ومعرفة أساسيات الحوسبة (أي كيف افتراضية تعمل الذاكرة، كيفية عمل نظام الملفات، خيوط / جدولة، SMP، وهياكل البيانات) وقد أثبتت جميع مفيدة للغاية. نظرية التعقيد وكبير-O الاشياء وقد ثبت في بعض الأحيان مفيدة (مفيدة بشكل خاص لأشياء مثل تصميم RDBMS). مشكلة توقف والآلي و/ تورينج نظرية الجهاز؟ أبدا.

أعلم أن هذا قديم، لكن ردي المختصر على أولئك الذين يزعمون أن النظرية "عديمة الفائدة" وأنهم يستطيعون ممارسة مهنتهم بدونها هو هذا:

بدون النظرية الأساسية، هناك لا يمارس.

لماذا النظرية مفيدة؟

النظرية هي الأساس الذي تقوم عليه الأشياء الأخرى.عندما تكون النظرية مُطبَّق, والممارسة هي النتيجة.

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

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

لنفترض أن أحد أصدقائك حصل على وظيفة في مكان ما X، وأثناء وجوده هناك، يقدم المدير بعض الطلبات البسيطة، مثل هذه الأمثلة:

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

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

في الواقع، لديهم لا فكرة لماذا يعمل النظام بمستوى "مقبول" عند فحص 5 مدن، لكنه يصبح بطيئًا جدًا عند 10 مدن، ويتجمد فقط عند الوصول إلى 40 مدينة فقط.إنهم السبب في ذلك فقط "مدن أكثر بمقدار 2x و8x من اختبار المدن الخمس" وتتساءل لماذا لا يتطلب البرنامج ببساطة "2x و8x المزيد من الوقت" على التوالي...

إن فهم النظرية كان ليسمح لهم بإدراك ما يلي، على الأقل في لمحة:

  1. إنها TSP
  2. TSP هو NP-hard
  3. ترتيب نمو الخوارزمية الخاصة بهم هو على!)

الأرقام تتحدث عن ذاتها:

+--------------+-------+-----------------------------------------------------------------+
|  No. Cities  | O(N!) |  Possibilities                                                  |
+--------------+-------+-----------------------------------------------------------------+
|       5      |   5!  | 120                                                             |
|      10      |  10!  | 3,628,800                                                       |
|      40      |  40!  | 815,915,283,247,897,734,345,611,269,596,115,894,272,000,000,000 |  <-- GG
+--------------+-------+-----------------------------------------------------------------+

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

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

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

ولكن لديهم مشروع آخر في الاعتبار.واحد أبسط في الواقع.يأتون بعد أسبوع ويطلبون قول ما يلي:

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

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

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

ولذلك، فإن مجرد البدء في العمل على حل هذه المشكلة بالتحديد كان خطأً كان من الممكن تجنبه ومنعه.لو كان الإطار النظري لفهم ما هو مطلوب موجودًا، لكان من الممكن أن يقترحوا إطارًا مختلفًا قابل للتحقيق, ، حل...مثل تنفيذ عملية المراقبة التي يمكن ببساطة kill -SIGTERM <id> من أي مستخدم العملية (حسب قائمة المستخدمين) التي تحتكر وحدة المعالجة المركزية لبعض الفواصل الزمنية التعسفية/المعقولة في ظل افتراضات معينة (على سبيل المثال.نحن نعلم أن كل تشغيل للبرنامج يجب أن ينتهي خلال 10 دقائق، لذلك يجب أن يتم إنهاء أي مثيل يعمل لمدة تزيد عن 20 دقيقة killإد).

ختاماً، الممارسة بدون نظرية مثل البناء بدون أساس.عاجلا أم آجلا، المقدار المناسب من الضغط من الزاوية اليمنى سيجعله ينهار على نفسه.لا استثناءات.

هل سبق لك استخدامه في البرمجة اليومية؟

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

ومن المؤكد أننا:

  1. استخدام أجهزة الكمبيوتر يوميًا، والتي تعتمد على النماذج الحسابية (على سبيل المثال.آلات تورينج)
  2. كتابة التعليمات البرمجية، والتي تعتمد على نظرية الحسابية (على سبيل المثال.ما هو قابل للحساب) وحساب التفاضل والتكامل لامدا (على سبيل المثالللغات البرمجة)
  3. الاعتماد على نظرية الألوان والنماذج (على سبيل المثال.نماذج الألوان RGB وCMYK) لشاشات العرض الملونة والطباعة، وما إلى ذلك.
  4. نظريات أويلر في رسومات الحاسوب بحيث يمكن بناء المصفوفات لتدوير الكائنات حول محاور عشوائية، وهكذا...

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

هل كان من قبيل المصادفة حقاً أنه خلال أغلب فترات التاريخ لم يكن أحد قادراً على بناء آلة طيران (وقد مات عدد قليل منهم أثناء اختبار ماكيناتهم) إلى أن فهم الأخوان رايت بعض المفاهيم النظرية حول الطيران وتمكنوا من وضعها موضع التنفيذ؟

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

واعتقد ان ذلك يعتمد على الحقل الذي تذهب فيه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top