نصائح للمبرمجين الطلاب

مرحبا يا هبر! أقدم لكم ترجمة مقالة " نصيحة لطلاب البرمجة ".

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

قرر ما تحتاجه


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

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

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

الرياضيات


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

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

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

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

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

تعلم أفضل ، استخدم أفضل الأدوات


اختر لغتك الأولى. يجب أن تكون مصممة بشكل جيد ، أي:

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

أوصي باختيار إحدى اللغات التالية:

  • مخطط (هناك دورة تمهيدية كلاسيكية ممتازة "هيكل وتفسير برامج الكمبيوتر").
  • سمالتالك
  • إيفل
  • مل

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

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

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

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

فكر بنفسك


أقوم بتدريس البرمجة (C و المجمع) منذ عام 2009 لطلاب جامعة ITMO في سانت بطرسبرغ. يعاني العديد من الأشخاص من مشاكل في البرمجة ولا ينجحون أبدًا في تعلم ذلك لأنهم لا ينشئون تعليمات برمجية. عندما يحصلون على الوظيفة ، يحاولون محاكاة حل موجود ، ربما عن طريق أخذ بعض الأجزاء من Stack Overflow ، وتخصيصها حسب رغبتهم. حسنًا ، حصلت على حل ، فما هو المطلوب أيضًا؟

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

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

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

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

وسع آفاقك


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

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

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

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

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

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

البرمجة هي أكثر بكثير من C / Python / Java / C ++ / C # / Go / Javascript المعروفة ، وهي مبنية على نفس المبادئ: إلزامية ، هيكلية ، مع القليل من OOP والسكر النحوي لمحاكاة أنماط البرمجة الأخرى. عالم البرمجة ضخم. ماذا عن:

  • لغات برمجة وظيفية صناعية مع أنظمة نموذجية معقدة ومدروسة جيدًا (هاسكل ، أوكامل).
  • اللغات الوظيفية ذات الأنواع التابعة التي لا تسمح فقط بالبرمجة ، ولكن أيضًا تسجيل الأدلة (Coq ، Agda ، LEAN).
  • اللغات التسلسلية (الرابعة).
  • البرمجة المنطقية (برولوج ، رفال).
  • آلات الحالة المحدودة (التعابير العادية ، بروميلا).
  • لغات قابلة للتوسيع بقوة تسمح لك بتنفيذ أي تركيبات بناء تقريبًا ، مثل Lisp و Forth و Camlp4 / 5 و Rebol.
  • اللغات الخاصة بالمجال (JetBrains MPS ، XText).

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

كن اجتماعيًا


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

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

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

كتابة الاختبارات


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

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

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


All Articles