ما تتعلمه في درجة 4 في علوم الكمبيوتر

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

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

البرمجة الأول والثاني

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

بدأ هذا الفصل بإنشاء ملف فارغ وجعله مترجمًا في IDE (استخدمت Code :: Blocks). وعملنا بأنفسنا على طول الطريق لإنشاء لعبة معركة نصية خاصة بنا. بالنظر إلى الوراء في الكود الذي كتبته يجعلني أشعر بالحرج. لقد قطعت شوطا طويلا منذ ذلك الحين. هذا هو الريبو إذا كنت تريد أن تضحك (لا أستخدم سوى ملف main.cpp به 1063 سطرًا من التعليمات البرمجية).

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

الهياكل المنفصلة في علوم الكمبيوتر

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

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

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

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

هياكل البيانات

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

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

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

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

تحليل الخوارزميات

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

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

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

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

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

تطوير الشبكة

يمتلك هذا الفصل معظم المهارات التي كانت قابلة للتطبيق بشكل مباشر على وظيفة في مجال التكنولوجيا. لقد تعرفت على HTML و CSS و JQuery و JavaScript و PHP و JSON. لقد تعلمت كيف يتم إرسال طلب من الواجهة الأمامية لموقع الويب إلى النهاية الخلفية ، وكيف تتم معالجته في النهاية الخلفية ثم يتم إرساله مرة أخرى إلى الواجهة الأمامية مع الرد. تعلمت كيفية إنشاء واجهة المستخدم وكيفية التفاعل مع طبقة البيانات التي تتفاعل بعد ذلك مع الشبكة.

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

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

مقدمة في قواعد البيانات

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

هندسة البرمجيات 1 ، 2

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

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

هندسة الحاسوب ولغة التجميع

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

كانت معظم لغات البرمجة التي استخدمتها لأخذ هذا الفصل من اللغات عالية المستوى. تميل اللغات عالية المستوى إلى أن تكون أقرب إلى لغة الإنسان من رمز الآلة. MASM قريب جدًا من رمز الجهاز وأود أن أقول إنه أقرب إلى لغة الآلة على لغة الإنسان.

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

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

أنظمة التشغيل

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

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

مقدمة لشبكات الحاسوب

كان هذا الفصل مفيدًا جدًا. ذهب إلى كيفية عمل شبكات الكمبيوتر. وشمل ذلك تجاوز بروتوكولات الشبكة مثل HTTP و HTTPS و TCP و IP و FTP و IMAP و POP3 و SSH و DNS. تعرفت على الغرض من استخدام كل من هذه البروتوكولات ، وكيفية تنفيذها ، وفهم سبب إنشائها.

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

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

مقدمة في هندسة قابلية الاستخدام

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

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

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

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

تطوير برامج الجوال والسحابة

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

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

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

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

مشروع برنامج Capstone

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

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

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

افكار اخيرة

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

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

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

أحب ما تقرأ؟ تحقق من مقالاتي الأخرى

بدء مهنة تقنية من لا شيء.

اختر أفضل مهنة تقنية لنفسك - Dev Ops ، ومهندس الهاتف المحمول ، وعالم البيانات ، ومدير المشروع ، والواجهة الأمامية.

نصائح لمقابلتك التقنية الأولى.

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

Swift مقابل Objective-C