لماذا يتم سؤال المقابلات عن القوائم المرتبطة

ملاحظة المترجم: تم نشر المقال الأصلي في سلسلة من التغريدات.

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

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

ما الذي يجب تقييمه؟ حسنًا ، أولاً وقبل كل شيء ، معرفة اللغات. وفقًا لـ TIOBE ، في الفترة 1986-2006 ، كانت لغة C هي اللغة الأكثر شعبية في العالم ، تليها لغة C ++. بحلول عام 2006 ، جاءت Java في المرتبة الأولى ، لكن C ظلت قريبة.

عملت C بالقرب من الحديد دون تجريدات غير ضرورية. يستهلك قاموس Python الفارغ ما يصل إلى 288 بايت ، أي 5٪ من إجمالي ذاكرة الجيل الأول Apple II. التجريد غالية جدا ، الكثير من النفقات العامة. إذا كنت بحاجة إلى بنية بيانات معقدة ، فيجب أن تقوم بإنشائها بنفسك باستخدام المصفوفات والهياكل والمؤشرات.

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

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

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

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

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

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

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

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

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

باختصار ، كانت مسألة القائمة المرتبطة اختبارًا جيدًا لقدرة الكتابة في C ، والآن أصبحت اختبارًا سيئًا لـ "هل يمكنك حل المشكلات؟"

الأخلاقية: فكر مرة أخرى في طرح أسئلة حول القوائم المرتبطة في مقابلة.

أخلاقي آخر: يمكن تعلم الكثير من التاريخ.

(المعنوي الثالث: إذا رأيت مقالة نصف مكتملة وفكرت ، "أوه ، من السهل إطلاق مشروع في سلسلة من التغريدات" ، فهذا فخ ، لا تقع فيه)

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


All Articles