علم نفسك علم الحاسوب Computer Science

مصادر تعلم مجانية لعلوم الحاسوب

علم نفسك علم الحاسوب Computer Science
Photo by Clément Hélardot / Unsplash

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

  • ماهي المواضيع التي يجب أن تتعلمها، و لماذا؟
  • ماهي أفضل الكتب و المحاضارات في كل مجال؟

هذا الدليل هو محاولة للإجابة على هذين السؤالين.

مختصر:

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

الموضوعلماذا يجب أن تدرسها؟أفضل كتابأفضل فيديوهات
البرمجةلا تكن الشخص الذي “لم يفهم تماما ” الأشياء البسيطةStructure and Interpretation of Computer ProgramsBrian Harvey’s Berkeley CS 61A
معمارية الحاسوبإذا لم يكن لديك فهم جيد لكيفية عمل الحاسوب، كل شيء يشتغل على الحاسوب سيكون أصعب .Computer Systems: A Programmer's PerspectiveBerkeley CS 61C
الخوارزميات و هياكل البياناتإذا كنت لا تعلم بعض هياكل البيانات مثل المكدسات، قوائم الإنتضار، الأشجار و البيانات، ستكون بعض المشاكل الصعبة مستحيلة الحل.The Algorithm Design ManualSteven Skiena’s lectures
رياضيات علم الحاسوبعلوم الكمبيوتر هي في الأساس فرع للرياضيات التطبيقية، هذا يجعل تعلم الرياضيات مهم جدا.Mathematics for Computer ScienceTom Leighton’s MIT 6.042J
أنظمة التشغيلمعظم البرامج التي تكتبها تشتغل على نظام تشغيل، لهذا يجب أن تعرف طريقة عملها.Operating Systems: Three Easy PiecesBerkeley CS 162
شبكات الكومبيوترالإنترنت أصبحت شيئا عظيما: إفهم طريقة عملها و افتح كامل قوتها.Computer Networking: A Top-Down ApproachStanford CS 144
قواعد البياناتالبيانات هي في قلب البرامج الأكثر تأثيرا، لكن القليل فقط يعلم كيفية عمل أنظمة قواعد البيانات.Readings in Database SystemsJoe Hellerstein’s Berkeley CS 186
لغات البرمجة و مترجمي اللغاتإذا كنت تعلم حقا كيف تعمل اللغات و مترجمي لغات البرمجة، ستكون برامجك أفضل و سيكون تعلمك للغات الجديدة أسهل.Crafting InterpretersAlex Aiken’s course on Lagunita
الأنظمة الموزعةفي يومنا الحالي، غالبية الأنظمة هي أنظمة موزعة.Designing Data-Intensive Applications by Martin Kleppmann by Maarten van SteenMIT 6.824

لماذا يجب أن تتعلم علم الحاسوب؟

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

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

نظام الرسائل القصيرة (SMS) العالمي يرسل حوالي 20 مليار رسالة يوميا. واتساب حاليا يرسل 42 مليار. مع 57 مهندس .
رسائل واتساب اليومية بالمليار



— Benedict Evans (@BenedictEvans) فبراير 2, 2016

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

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

إرشادات كل موضوع

البرمجة

يبدأ أغلب طلبة علم الحاسوب بـ"مقدمة" لبرمجة الحاسوب. أفضل هذه الدروس لا تلبي حاجة المبتدئين فقط، بل حتى بعض المفاهيم المهمة التي غابت على من تعلم البرمجة من قبل.

توصيتنا لهذا الموضوع هي Structure and Interpretation of Computer Programs (SICP) (هيكل و تفسير برامج الحاسوب)، المتوفر ككتاب، و كمحاضارات مرئية. على الرغم من روعة هذه المحاضارات، إلا أن الفيديوهات التي نوصي بها هي محاضارت براين هارفي. هذه المحاضارات أفضل و موجهة أكثر للطلبة المبتدئين.

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

إذا واجهتك صعوبة في SICP، ننصح بـ How to Design Programs (كيف تصمم البرامج). أما في حال وجدته سهلا، ننصح بـ Concepts, Techniques, and Models of Computer Programming (مفاهيم، تقنيات و نماذج برمجة الحاسوب) .


معمارية الحاسوب

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

The Elements of Computing Systems (عناصر أنظمة الحوسبة)، المعروف أيضا بـ “Nand2Tetris” هو كتاب يطمح أن يعطي مفهوم كامل حول كيفية عمل كل شيء داخل الحاسوب. كل فصل يتضمن بناء جزء صغير من النضام الكامل، إبتداء من كتابة بوابات منطقية بسيطة باستخدام HDL، مرورا بالمعالج ، وصولا إلى صناعة برنامج بحجم لعبة تتريس.

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

النصف الأول من الكتاب (و كل مشاريعها)، متوفر بالمجان من موقع Nand2Tetris. متوفر أيضا على كورسيرا مع مرفق بالفيديوهات.

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

عندما تشعر بأنك فهمت مواضيع Nand2Tetris، اقتراحنا التالي هو Computer Organization and Design (تنضيم و تصميم الحاسوب). ليست كل أجزاء الكتاب أساسية; ننصح بـالمحاضرة التالية من جامعة بركلي CS61C Great Ideas in Computer Architecture (أفكار عظيمة في معمارية الحاسوب) من أجل قراءة مخصصة. ملاحضات و تمارين المحاضرة متوفرة عبر الانترنت، و المحاضارات القديمة متوفرة في أرشيف الأنترنت.

عناصر أنظمة الحوسبة
الأجهزة هي المنصة

— مايك أكتون, مدير المحرك في Insomniac Games (شاهد محاضرته في cppCon)

الخوارزميات و هياكل البيانات

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

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

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

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

أخيرا، ننصح بقوة بـ How to Solve It (كيف تحلها) كدليل رائع و مميز في حل المشاكل.

دليل تصميم الخوارزميات
كيف تحلها
لدي طريقة واحدة فقط أنصح بها كثيرا —هي فكر قبل أن تكتب.

— ريتشارد هامينغ

رياضيات علم الحاسوب

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

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

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

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

بالنسبة للجبر الخطي ، نقترح البدء بـ Essence of linear algebra (جوهر الجبر الخطي) سلسلة فيديو ، يليها كتاب و محاضارات فيديو جيلبرت سترانج .

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

— جون فون نيومان

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

Operating System Concepts (مفاهيم نظام التشغيل) (الكتاب "الدينصور") و Modern Operating Systems (أنظمة التشغيل الحديثة) هي الكتب "الكلاسيكية" عن أنظمة التشغيل. وقد اجتذب كلاهما انتقادات لأنماط كتابتهما ، ولأنهما نوع من الكتب المدرسية المكونة من 1000 صفحة والتي يتم ربطها بها كل بضع سنوات لتشجيع شراء "أحدث إصدار".

Operating Systems: Three Easy Pieces -OSTEP- (أنظمة التشغيل: ثلاث قطع سهلة) هو بديل جيد متوفر مجانا عبر الإنترنت. نحن نحب بشكل خاص هيكل الكتاب ونشعر أن التمارين تستحق القيام بها.

بعد هذا الكتاب ، نشجعك على استكشاف قرارات التصميم لأنظمة تشغيل معينة ، من خلال كتب مثل Lion's commentary on Unix (تعليق ليون على يونكس), The Design and Implementation of the FreeBSD Operating System (تصميم وتنفيذ نظام التشغيل FreeBSD), و Mac OS X Internals (داخل نظام التشغيل Mac OS X).

من الطرق الرائعة لتعزيز فهمك لأنظمة التشغيل قراءة التعليمات البرمجية لنواة صغيرة وإضافة ميزات. xv6 هو خيار رائع،منفذ من Unix V6 إلى ANSI C و x86 يتم صيانته لدورة تدريبية في معهد ماساتشوستس للتكنولوجيا. OSTEP لديه ملحق لـإختبارات xv6 مليء بالأفكار العظيمة للمشاريع المحتملة.

شبكات الكومبيوتر

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

كتابنا المفضل حول هذا الموضوع هو Computer Networking: A Top-Down Approach (شبكات الكمبيوتر: من أعلى إلى أسفل). تستحق المشاريع والتمارين الصغيرة في الكتاب القيام بها جيدًا ، ونحب بشكل خاص إختبارات وايرشارك ، المتوفرة مجانا.

بالنسبة لأولئك الذين يفضلون محاضرات الفيديو ، نقترح محاضرات ستانفورد Introduction to Computer Networking course (مقدمة في دورة شبكات الحاسوب) متاح على منصة MOOC الخاصة بهم Lagunita.

تستفيد دراسة الشبكات من المشاريع أكثر مما تستفيد من التمارين الصغيرة. بعض المشاريع المحتملة هي: خادم HTTP ، تطبيق دردشة قائم على UDP ،mini TCP stack، وكيل أو موازن تحميل ، وجدول تجزئة موزع.

لا يمكنك التحديق في الكرة البلورية ورؤية المستقبل. ما سيكون عليه الإنترنت في المستقبل هو ما يصنعه المجتمع.

— بوب خان
شبكات الكمبيوتر: من أعلى إلى أسفل

قواعد البيانات

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

نظرًا للظروف ، نشجع المتعلمين بأنفسهم على تجنب الكتب المدرسية بشكل عام والبدء بـتسجيلات CS186 لـربيع 2015، دورة قواعد بيانات جو هيلرشتاين في بيركلي ، والتقدم لقراءة الأوراق بعد ذلك.

مصدر واحد يستحق الذكر بشكل خاص للطلاب الجدد هو“Architecture of a Database System (هندسة نظام قاعدة البيانات)”, والذي يوفر بشكل فريد طريقة عرض عالية المستوى لكيفية عمل أنظمة إدارة قواعد البيانات العلائقية (RDBMS). سيكون هذا مفيد لمزيد من الدراسة.

Readings in Database Systems (قراءات في أنظمة قواعد البيانات), المعروف أيضا بـ the databases “Red Book” (قواعد البيانات "الكتاب الأحمر")، هي مجموعة من الأوراق جمعها وحررها بيتر بيليس وجو هيلرشتاين ومايكل ستونبراكر . بالنسبة لأولئك الذين تجاوزوا مستوى محتوى CS 186 ، يجب أن يكون الكتاب الأحمر محطتك التالية.

إذا كنت تصر على استخدام كتاب تمهيدي ، فنحن نقترح Database Management Systems (أنظمة تسيير قواعد البيانات). للطلاب الأكثر تقدمًا ، كتاب جيم جراي الكلاسيكي Transaction Processing: Concepts and Techniques (معالجة المعاملات: المفاهيم والتقنيات) جدير بالاهتمام ، لكننا لا نشجع على استخدامه كمورد أول.

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

أخيرًا ، تعد نمذجة البيانات جانبًا مهملاً وسيئ التدريس من العمل مع قواعد البيانات. كتابنا المقترح حول هذا الموضوع هو Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World (البيانات والواقع: منظور خالد حول إدراك وإدارة المعلومات في عالمنا غير الدقيق).

لغات البرمجة و مترجمي اللغات

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

النص التمهيدي المتعارف عليه هو Compilers: Principles, Techniques & Tools (المترجمون: المبادئ والتقنيات والأدوات)، المعروف باسم "كتاب التنين". لسوء الحظ ، لم يتم تصميمه للدراسة الذاتية ، ولكن بدلاً من ذلك للمعلمين لاختيار موضوعين من فصلين دراسيين لدوراتهم الدراسية. من الضروري جدًا إذن أن تختار المواضيع بعناية ، ويكون ذلك بشكل مثالي بمساعدة مرشد.

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

كبديل محتمل لكتاب التنين نقترح Language Implementation Patterns (أنماط تنفيذ اللغة) بقلم تيرينس بار. تمت كتابته بشكل مباشر أكثر لمهندس البرمجيات الممارس الذي ينوي العمل في مشاريع لغة صغيرة مثل DSL ، مما قد يجعله أكثر عملية لأغراضك. بالطبع ، إنه يضحي ببعض النظريات القيمة للقيام بذلك.

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

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

— راس بوديك في بداية دورة المترجمين

الأنظمة الموزعة

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

كتابنا المقترح للدراسة الذاتية هو كتاب مارتن فان ستين وأندرو تانينباوم Distributed Systems, 3rd Edition (الأنظمة الموزعة، الإصدار الثالث). إنه تحسن كبير مقارنة بالإصدار السابق ، وهو متاح مجانًا عبر الإنترنت بفضل كرم مؤلفيه. نظرًا لأن الأنظمة الموزعة هي مجال سريع التغير ، فلن يعمل أي كتاب مدرسي كدليل للمسار ، ولكن مارتن فان ستين هو أفضل نظرة عامة رأيناها للأسس الراسخة.

دورة جيدة لبعض مقاطع الفيديو على الإنترنت هي ماساتشوستس 6.824 (دورة للخريجين) ، ولكن للأسف جودة الصوت في التسجيلات رديئة ، وليس من الواضح ما إذا كان قد تم التصريح بالتسجيلات. [تحديث @ مارس 2020: لقد تم نشر الفيديوهات الرسمية للمحاضارة !]

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

أسئلة شائعة

ماذا عن الذكاء الإصطناعي/الرسومات/موضوعي-الفلاني-المفضل؟

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

ما مدى صرامة التسلسل المقترح؟

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

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

من هو الجمهور المستهدف لهذا الدليل؟

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

كيف يقارن هذا بمنهج Open Source Society (مجتمع مفتوح المصدر) أو freeCodeCamp؟

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

تركز freeCodeCamp في الغالب على البرمجة ، وليس علوم الكمبيوتر. لمعرفة سبب رغبتك في تعلم علوم الكمبيوتر ، راجع أعلاه.

ماذا عن اللغة الفلانية؟

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

ماذا عن التكنولوجيا الفلانية؟

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

لماذا لا تزال توصي بكتاب التنين؟

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

كيف أتحصل على الكتب بسعر أقل؟

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

من صنع هذا الدليل؟

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

الترجمة العربية (Arabic) by Ounissi Zakaria