سؤال

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

  • وحدة التجارب
  • التحكم في الإصدار
  • تطوير البرامج بتقنية أجيل

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

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

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

المحلول

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

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

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

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

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

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

نصائح أخرى

لأن معلمينا:

  1. لم أحاول أبدًا اختبار الوحدة،
  2. لا أعرف كيفية استخدام التحكم في الإصدار و
  3. لم أسمع حتى عن "التنمية الرشيقة".

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

كتب ليوناردو دافنشي،

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

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

لقد كانت علوم الكمبيوتر دائمًا متناقضة إلى حد ما؛الجزء الذي يتعلق بالكمبيوتر ليس علمًا، والجزء الذي يتعلق بالعلم لا يتعلق بالكمبيوتر.

تميل الجامعات إلى الاعتماد أكثر على الجانب "العلمي" (الخوارزميات، وهياكل البيانات، والمجمعات، وما إلى ذلك) لأن هذه الأشياء "خالدة" أكثر بكثير من أفضل ممارسات الصناعة الحالية، والتي تميل إلى التطور والتغيير من سنة إلى أخرى.التحكم في الإصدار، على سبيل المثال، خضع لتغييرات مذهلة في آخر 5 أو 10 سنوات، لكن big-O لا يزال big-O، ولا تزال التجزئة وbtrees والتكرار مفيدة كما كانت قبل 40 عامًا.تتمثل فكرتهم بشكل عام في إعطائك ما يكفي من الأسس التي يمكنك بعد ذلك التقاط أدوات مثل git وفهم ما يعنيه عندما يتم إخبارك أن بنية البيانات الأساسية عبارة عن رسم بياني موجه غير دوري لتجزئة SHA-1، وأن المطورين قد عملوا بجد لتحسين عدد مكالمات النظام بحيث تكون مرتبطة بـ io.

الآن، فكر في المكان الذي تعلمت فيه كل الأشياء التي كان عليك معرفتها لفهم الجملة الأخيرة - إذا كانت الإجابة "الجامعة"، فإنهم يقومون بعمل جيد.

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

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

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

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

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

لماذا يعتقد الناس أن cmm أو Agile أو أيًا من الآخرين هو موضة؟لماذا يعتقدون أنهم ليسوا كذلك؟لماذا قام الأستاذ بتعليمك البرمجة بهذه الطريقة؟لتجنب gotos أو لتجنب الثوابت أو لتجنب هذا وذاك؟هل لأنه ينتج كودًا أكثر موثوقية؟كود أداء أفضل؟يقلل من الخطأ البشري؟أم أنه من الأسهل تصنيف الأوراق/البرامج مما يمنحهم مزيدًا من الوقت لإجراء الأبحاث؟هل لأنهم لا يعرفون كيفية البرمجة وأنهم يتابعون فقط كتاب شخص آخر حول هذا الموضوع؟هل علموك أنه لا يمكنك الحصول على كود قابل للصيانة وموثوق وعالي الأداء؟لا يمكنك حتى "اختيار أي اثنين" يتعارضان مع الأداء الموثوق والعالي؟في بعض الأحيان تضحي بالموثوقية من أجل الأداء.في بعض الأحيان، لا تهتم بالموثوقية أو الأداء، فأنت فقط تريد الانتقال من الإصدار 117.34.2 لبرنامج محاسبة آخر إلى الإصدار 118.0.0.يعتمد نموذج عملك على بيع ترقيات الإصدارات والدعم الفني، وبقدر ما يفعله مطورو البرامج، يمكن لأي روبوت قديم أن يكتب نفس الكود بنفس الطريقة.استبدل الجهاز المحترق بالجهاز الجديد الذي تخرج من الكلية واستمر في بيع الترقيات.

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

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

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

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

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

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

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

تذكر أن مهندسي الأجهزة تركوا الكلية بصندوق من الأدوات الجديدة اللامعة تمامًا كما فعلت أنت.لقد تعلمت 17 لغة برمجة مختلفة لا يمكنك استخدام سوى لغة واحدة منها، وسيتم اختراع باقي اللغات التي ستستخدمها في مسيرتك المهنية بعد أن تترك الكلية.عندما تركوا الكلية يمكنهم إخبارك بما يعرفونه عن حساب التفاضل والتكامل والنظرية النسبية عن عدد الإلكترونات الموجودة في كل عنصر وحساب الشحنة حول سطح غاوسي.لكن الجزء الأكبر من حياتهم المهنية هو واحد، صفر، و، أو لا (مرحبًا لدينا تلك الأشياء المشتركة، كل ما تحتاج حقًا لمعرفته حول أجهزة الكمبيوتر، واحد، صفر، و، أو وليس مهندس أجهزة أو برمجيات).من المسلم به أن القوانين الأساسية للفيزياء، وحساب التفاضل والتكامل، لن تتغير الإلكترونات بنفس السرعة التي تتغير بها لغات البرمجة.لكن أساسيات البرمجة هي نفسها في جميع اللغات وستظل كذلك في المستقبل.هل تركت الكلية وأنت تعلم ذلك أم تركتها معتقدًا أن Java مختلفة وأفضل من C++ لأن هذا وذاك والآخر؟

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

يا إلهي لا تجعلني أبدأ

لقد أخبرني ذات مرة عميد علوم الكمبيوتر في إحدى الجامعات المرموقة أن البرمجة الموجهة للكائنات كانت مجرد "بدعة" لذا لم يقدموا أي دروس في تمرير الخيالات مثل C++

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

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

الفصول التي تعلمك التحكم في الإصدار، أو كيفية كتابة اختبارات الوحدة الفعالة...من شأنه أن يعلمك أ تجارة, أي تطوير البرمجيات (الجيدة).

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

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

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

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

ذلك يعتمد على الجامعة.تخرجت عام 2003 من إحدى الجامعات الأسترالية.في ذلك الوقت تعلمنا UML، واختبار الوحدة، وXP (ومنهجيات Agile الأخرى)، بالإضافة إلى جميع الأشياء الرسمية مثل Z، والخوارزميات وهياكل البيانات، وأنظمة التشغيل، وما إلى ذلك.

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

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

وأنا أتفق بشدة مع ما قاله جليف أيضًا.يعد علوم الكمبيوتر مجالًا غير ناضج، ولم يظهر إلا في الخمسين عامًا الماضية، لدرجة أننا لا نعرف ما الذي يجب أن نتعلمه وما هو مجرد بدعة عابرة.أعطها 150 عامًا، وربما تستقر الأمور أكثر.يوضح عدد المشاريع الفاشلة في العالم الحقيقي أن هذه الصناعة غير ناضجة.تخيل لو أن 80% من مشاريع البناء فشلت!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

وبالمثل بالنسبة لاختبار الوحدة - لماذا تختار اختبار الوحدة؟من المؤكد أن اختبار قابلية الاستخدام واختبار النظام واختبار قبول المستخدم واختبار قبول المصنع أكثر أهمية؟حسنًا، إنها كذلك إلا إذا كنت تعتبر أن عملك مكتمل بمجرد شحن الرمز إلى قسم الصيانة :)

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

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

ما ورد أعلاه كلها "مهارات ناعمة" لا تمتلكها يحتاج لكتابة رمز جيد.

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

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

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

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

وأنا أتفق مع ما تقوله.لقد بدأت للتو العمل في عالم تطوير البرمجيات وبدأت بالفعل في التعرف على التطوير السريع، وهو أمر لم أتعلمه مطلقًا في الجامعة.

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

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

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

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

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

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

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

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

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

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

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

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

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

سدادة:بعد حصولي على درجة البكالوريوس في Comp Sci والماجستير في Soft Eng من جامعة DePaul، كنت أتلقى تعليمي في الغالب على يد مدرسين/أساتذة يقومون بالتدريس بدوام جزئي، وهو أمر جيد بالنسبة لي لأنني أفضل أن يأتيوا بحكاية من اليوم السابق ويتحدثوا عنها. إلى الفصل.نظرًا لكون هذه المدرسة في الغالب عبارة عن مدرسة ركاب / بدوام جزئي، فإن معظم الطلاب لديهم وظائف في استخدام ما يتعلمونه.

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

خلال اختبار الوحدة التعليمية كان حاضرًا دائمًا.على الرغم من أنهم بدأوا العمل على Java، إلا أنهم جعلونا نستخدم ANT وJUnit لجميع المشاريع.والتي كانت بداية جيدة في تكوين البناء واختبار الوحدة.

وتم تضمين البرمجة المتطرفة في حوالي 3 أو 4 من الفصول الدراسية التي أخذتها.أتذكر أنهم جميعًا بدأوا بالجوانب الـ 12 المختلفة، بدءًا من البرمجة الزوجية وحتى اختبار الوحدة (انظر أعلاه).والآن يبدو أن التركيز ينصب على Agile.

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

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

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

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

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

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

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

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