كيف ندرس هندسة البرمجيات في جامعة سان بطرسبرج

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



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


عن نفسي


اسمي Yegor Suvorov ، أنا أدرس في المدرسة العليا للاقتصاد ، متدربة لدى Google (مرتين) ، Asana ، GSA Capital ، شاركت بنجاح في أولمبياد البرمجة الدولية ( الطالب والمدرسة ). لقد تخرجت في العام الماضي من الدرجة الجامعية الأولى للجامعة الأكاديمية ، لذلك مررت بكل ما تم وصفه في المنشور. أشارك أيضًا في تطوير برنامج تدريبي لهندسة البرمجيات وأجري تمارين عملية في عدة موضوعات (النماذج ولغات البرمجة ، C ++).


المكونات الرئيسية


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


يتكون التدريب من ثلاثة أجزاء رئيسية. أولاً ، سأقدم نظرة عامة ، ثم سأقول بمزيد من التفصيل عن كل جزء.


  1. العناصر الأساسية . من الفصل الدراسي الأول ، يتعلم الأطفال العمل بأيديهم. كل ستة أشهر ، يجب على جميع "المبرمجين الصناعيين" اجتياز 2-4 مواد أساسية (وبعض المواد مطلوبة للتوجيهات الفرعية الأخرى). الغرض: ضخ طالب في أكثر أو أقل من جميع مجالات البرمجة ، بحيث يمكنك المشي من خلال مستويات التجريدية لأعلى ولأسفل. ابدأ من كتابة نظام التشغيل الخاص بك باستخدام مساحة المستخدم في C باستخدام مجموعة من المجمعات (للأكثر ثباتًا) وسطر الأوامر ، ثم من خلال دلالات الحركة في C ++ وحتى المحولات الأحادية. هذا ضروري لتشكيل آفاق وتجربة البرمجة المختلفة. نحن لا نعلم اللغات فقط: البرمجة المتوازية والشبكات وقواعد البيانات أيضًا. وبالطبع ، فإن بعض الموضوعات لا تتعلق بالكود ، ولكن الأمر كله في الحالة: على سبيل المثال ، هندسة البرمجيات (دورة النظرة العامة: لماذا نحتاج إلى فرق / مدراء / مشروع وإدارة المخاطر) وتصميم الواجهة (وإلا فسوف يفكرون في أن "القوالب تنشط" - إنها سهلة. ") هناك أيضًا الرياضيات والخوارزميات ، ولكن هذا موضوع لنشر منفصل.
  2. ممارسة الفصل الدراسي . يجب إكمالها بالضرورة ، بدءًا من الفصل الدراسي الثاني. الغرض: إعطاء الطالب لمحاولة القيام بأشياء مختلفة أكبر من الواجب المنزلي وفهم ما هو أشبه. في بداية الفصل الدراسي ، يقام معرض للمشروع حيث يتحدث قادة الأبحاث المحتملون عما يمكنك القيام به معهم. بالمناسبة ، تكون شهادة القائد اختيارية - والأهم من ذلك هو ما يمكن أن يقدمه شخص وممارسة معينة للطالب. في فصل دراسي واحد ، يمكنك إنشاء تطبيق سطح مكتب + محمول على Qt وفهم كيفية العمل بشكل عام على مشروع واحد للفصل الدراسي بأكمله دون متطلبات فنية واضحة (بصعوبة). الشيء التالي هو تجربة Android والشعور بأنه "صنع عميل موثوق للشبكة الاجتماعية" - اتضح أن الأمر صعب ، حتى لو كانت الوظيفة محدودة للغاية. في مكان آخر ، حاول أن تجعل نوعًا من أداة التعلم الآلي في Python وأدرك أنك لا تريد التعامل مع هذا الموضوع على الإطلاق. في الرابع - اذهب لإنهاء مترجم هاسكل ، فزع وعود إلى حبيبته C ++ إلى الدبلوم. أو العكس. يعتمد على الطالب - وهذا هو معنى الممارسة. نتيجة لذلك ، يكون الطالب إما اتجاهًا مفضلاً (حيث يمكنك العمل والحصول على دبلوم) ، أو تجربة في مجموعة من الاتجاهات المختلفة. الفوز على أي حال. بالمناسبة ، إذا كنت لا تحب أيًا من المشاريع ، فيمكنك الخروج بمشاريعك الخاصة. لكن في هذه الحالة ، تحتاج أولاً إلى اهتمام بعض المستشارين العلميين أو العثور على شخص من الخارج ، ثم إقناعنا بأن هناك شيئًا ذا معنى ومحمي يمكن أن يخرج من المشروع.
  3. العناصر الاختيارية . تظهر في السنة الثالثة. السبب: لا يريد الجميع الخوض في نواة Linux ، تمامًا كما لا يريد الجميع الخوض في تصميم مجموعات Scala مع الكثير من المجموعات الضمنية. وبذلك يمكنك اختيار الموضوعات التي سيتم البحث فيها. على سبيل المثال ، إذا لم يعجب الطالب بعدد طرق تصوير الركبة في الإيجابيات ، فبإمكانه أن يأخذ دورة تدريبية عن المحاكاة الافتراضية للحاوية في Linux ، والكتابة بلغة C نقية ويكون سعيدًا. والعكس بالعكس: إذا كان لا يزال "المجلد 3 من مطور برمجيات Intel 64 و IA-32 يحتوي على كوابيس ، فيمكنك الذهاب إلى عالم Scala الجميل من خلال تجريدات من حيدات. في كل وحدة (نصف فصل دراسي) ، يتم تقديم ما يقرب من 4 دورات ، ينبغي اختيار دورتين منها.

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


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


العناصر الأساسية


موضوعات البرمجة الأساسية: C ++ ، الأنظمة المشابهة لـ Unix ، النماذج ولغات البرمجة ، هندسة الكمبيوتر ، Java ، أنظمة التشغيل ، البرمجة الوظيفية ، قواعد البيانات ، تصميم البرمجيات ، هندسة البرمجيات ، البرمجة المتوازية ، تقنيات شبكات الكمبيوتر ، تصميم الواجهة ، تطوير الأجهزة المحمولة.


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


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


C ++ . السنة الأولى من الدراسة. تبدأ بـ C ، وتنتهي بـ C ++ 14. نعرض RAII و Valgrind و autotests ، ونتعلم كيفية كتابة كلتا المكتبات (my_vector مع ضمان استثناءات) ، والتطبيقات (نفس أرشيفي). لماذا: نظرًا لأن C ++ لا يزال يستخدم بنشاط في الصناعة ، بالإضافة إلى أنه يتردد صدىًا نشطًا مع برمجة النظام (نقص تجميع البيانات المهملة ، يمكنك إظهار تخطيط البيانات في الذاكرة ...).


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


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


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


جافا السنة الثانية من الدراسة. وينتهي الأمر بتدفقات ومشروع دورة للأندرويد (على سبيل المثال ، تشغيل tic-tac-tac-toe مع روبوت ووضع الشبكة). نعرض Maven ، IDEA ، JUnit ، العمل غير المتزامن مع الشبكة. لماذا: هناك الكثير من الأشياء التي تدور حول JVM الآن ، وهناك الكثير من المكتبات ، من الجيد معرفتها.


أنظمة التشغيل . السنة الثانية. فاضح جدا لا توجد ضجة مملة مع محمل الإقلاع - يتم إعطاء الطلاب تشغيل متعدد في التمهيد ، والتحول إلى الوضع المحمي ، ثم يمكنك كتابة مخصص الذاكرة ، مؤشرات الترابط ، العمليات ، نظام الملفات ، تقسيم حلقة الحماية وحتى تحميل ELF في C. ربما لا تكون واسعة النطاق مثل "أنظمة التشغيل الحديثة" الخاصة بـ Tannenbaum ، لكن يمكنك أن ترى بوضوح ما إذا كان من المثير للاهتمام الخوض فيها مطلقًا أو الرغبة في البقاء في مساحة معزولة من المستخدمين. إذا كنت مهتمًا ، مرحبًا بك في دورة برمجة Linux kernel الخاصة. بالمناسبة ، يتوفر إصدار خفيف جدًا على Stepik - لا توجد كتابة لنظام التشغيل هناك ، ولكن هناك المهام النظرية والتحققية اللازمة. من أجل عدم الخروج بسبب الأداء الضعيف ، ما عليك سوى الاطلاع عليه.


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


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


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


تصميم البرمجيات . كل أنواع الطرق لنمذجة الواقع و (مخططات UML) ، طرق التحلل ، أنماط التصميم. على سبيل المثال ، في نهاية الدورة ، نفهم GFS و BigTable و CMake ... في الممارسة العملية ، لا نتعلم فقط كتابة التعليمات البرمجية ، ولكن أيضًا وصف الهيكل وتطبيق القوالب حيثما يكون ذلك مناسبًا.


البرمجة المتزامنة نبدأ بخيوط وأساليب مزامنة بسيطة ، في النهاية نقوم بتحليل وكتابة خوارزميات خالية من القفل / الانتظار ، ونخترق MESI ، ودراسة التقنيات ذات المستوى الأعلى مثل إطار ربط الشوكة ، OpenMP ، OpenCL ، Intel TBB.


تكنولوجيا شبكات الكمبيوتر . المحاضرات: نظرة عامة مفصلة على البروتوكولات الرئيسية من مكدس TCP / IP: الرسائل في ICMP ، والرحلة التاريخية في RIP ، وجميع أنواع السجلات في DNS ، وكيف يعمل FTP / HTTP / SMTP / DHCP ، وما هو NAT ، وحتى القليل عن IPv6. الممارسات: نكتب على الإيجابيات عميلنا وخادم TCP عبر الأنظمة الأساسية ، أولاً لبرنامج المراسلة ، ثم عميل UDP لنظام DNS.


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


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


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


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


الممارسة


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


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


إليك بعض الصور مع حماية نموذجية. المصور: ديما دروزدوف.




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


العناصر الاختيارية


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


لغات بديلة لل JVM . دورة من وحدتين: في أحدهما يتحدث عن Kotlin ، والآخر عن Scala. بالنسبة إلى Kotlin ، نقوم بتحليل كلاً من interop Java ، وكتابة DSL الخاصة بنا ، و coroutines. آخر واجبات اختيارية هي إضافة مصحح أخطاء باستخدام corutin إلى مترجم لغة اللعبة (مكتوب في الواجب المنزلي السابق). بالنسبة لـ Scala ... اللغة كبيرة ، ولكن لدينا وقت لفهم جميع أنواع الضمنية :)


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


المجمعين نكتب مترجم اللغة الصغير لدينا في OCaml. آلة مكدس وسيطة ، تجميع في x86 دون أي LLVM ، والتكامل مع libc. تعجبت الدهشة للطلاب "لماذا لا تقع إلا على التعبير الذي يبلغ طوله مائة؟" (ربما لأن الخطأ في تخصيص التسجيل). بالمناسبة ، تتوفر دورة مماثلة أيضًا في مركز علوم الكمبيوتر .


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


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


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


ما نريد تحسينه


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


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


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

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


ربما تكون المجالات الوحيدة التي لم تتم تغطيتها الآن هي تطوير الويب (بما في ذلك الواجهة الأمامية) ، وأنظمة التشغيل الآلي المعقدة (مثل 1C أو SAP) وأمن الكمبيوتر (بدأت دورة تجريبية في أوائل فبراير 2019). ربما نسينا شيئًا آخر ، أو تعرف كيف يمكنك أن تدرس البرنامج بشكل أفضل - سنكون سعداء للمناقشة في التعليقات.


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

Source: https://habr.com/ru/post/ar439362/


All Articles