أشياء لا أعرفها في عام 2018

مرحبا يا هبر! أقدم إليكم ترجمة مقالة "أشياء لا أعرفها حتى عام 2018" للمخرج دان أبراموف .


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


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


لماذا أعتقد أن هذا مهم


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


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


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


سماع أن "كلنا مطورون مبتدئون" يمكن أن يكون أمرًا محبطًا ويبدو كأنه محادثة فارغة مع الطلاب الذين يواجهون فجوة معرفة فعلية. اعترافات من الممارسين الخيرين مثلي الذين لا يستطيعون التغلب على هذا.


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


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


مع هذا لست مسؤولاً ، إليك بعض الأشياء التي لا أعرفها:


  • أوامر يونكس وباش يمكنني أن أفعل ls و cd ، ولكن أيضا تجسس على كل شيء آخر. فهمت مفهوم الأنابيب ، لكنني استخدمها فقط في الحالات البسيطة. لا أعرف كيفية استخدام xargs لإنشاء سلاسل معقدة أو كيفية إنشاء وإعادة توجيه تدفقات الإخراج المختلفة. لم أدرس Bash بشكل صحيح ، لذلك لا يمكنني كتابة برامج نصية بسيطة للغاية (وغالبًا ما تكون عربات التي تجرها الدواب).
  • لغات المستوى المنخفض. أدرك أن التجميع يسمح لك بتخزين الأشياء في الذاكرة والتنقل عبر الشفرة ، لكن هذا كله. كتبت عدة أسطر في C وأدركت ما هو المؤشر ، لكنني لا أعرف كيفية استخدام malloc أو غيرها من أساليب إدارة الذاكرة اليدوية. لا تعبث مع Rust.
  • كومة الشبكة. أعلم أن أجهزة الكمبيوتر لديها عناوين IP ، وأن DNS هو كيفية تعاملنا مع أسماء المضيفين. أعلم أن هناك بروتوكولات منخفضة المستوى مثل TCP / IP لتبادل الحزم يضمن سلامة (ربما؟). هذا كل شيء - أنا لا أفهم التفاصيل.
  • الحاويات. ليس لدي أي فكرة عن كيفية استخدام Docker أو Kubernetes. (هل هي مرتبطة؟) لدي فكرة غامضة أنها تسمح لي بنشر جهاز افتراضي منفصل. هذا يبدو رائعًا ، لكنني لم أجربه.
  • Serverless. يبدو أيضا بارد. لم تحاول ذلك. ليس لدي فكرة واضحة عن كيفية تغيير هذا النموذج لبرمجة الواجهة الخلفية (إذا حدث ذلك على الإطلاق).
  • Microservices. إذا فهمت بشكل صحيح ، فهذا يعني ببساطة أن "العديد من نقاط النهاية لواجهة برمجة التطبيقات تتصل ببعضها البعض." لا أعرف ما هي المزايا أو العيوب العملية لهذا النهج ، لأنني لم أعمل معها.
  • بيثون. إنه لأمر سيء دائمًا أن أتذكر هذا - لقد كنت أعمل مع بيثون منذ عدة سنوات ، ولم أكن أزعجني أبدًا من تعلم ذلك. هناك أشياء كثيرة ، مثل سلوك الاستيراد ، وهي بالنسبة لي غابة مظلمة.
  • العقدة JS. أفهم كيفية بدء Node ، واستخدام بعض واجهات برمجة التطبيقات ، على سبيل المثال ، fs ، لإنشاء أدوات ، ويمكنني تكوين Express. لكنني لم أتواصل مطلقًا من خلال Node مع قاعدة بيانات ولا أعرف كيفية كتابة خلفية بها. كما أنني لست على دراية بأطر React مثل Next ، أي "عالم الترحيب".
  • منصة الأصلي. حاولت تعلم الهدف - C في مرحلة ما ، لكن هذا لم يساعدني. لم أعلم سريعًا أيضًا. نفس الشيء مع جافا. (ربما كنت أتقنهم لأنني عملت مع C #.)
  • الخوارزميات. الحد الأقصى الذي ستحصل عليه مني هو فرز الفقاعات ، وربما ، فرز سريع في أحسن الأحوال. ربما يمكنني القيام بمهام اجتياز الرسم البياني البسيطة إذا كانت مرتبطة بمشكلة عملية محددة. أفهم ترميز O (n) ، لكن فهمي ليس أعمق بكثير من "لا تضع الحلقات في حلقات".
  • اللغات الوظيفية. إذا كنت لا تحسب جافا سكريبت ، فلن أتحدث بأي لغة وظيفية تقليدية. (أنا مجاني فقط في C # و JavaScript - لقد نسيت بالفعل C #.) بالكاد يمكنني قراءة مستوحاة من Lisp (مثل Clojure) أو مستوحاة من Haskell (مثل Elm) أو ML-inspired (مثل OCaml).
  • المصطلحات الوظيفية. الخريطة والحد منها وأنا أعلم كم هو مطلوب. لا أعرف المونويدات والمجانين وما إلى ذلك ... أعرف ما هو الموناد ، ولكن ربما هذا مجرد وهم.
  • المغلق الحديث. لا أعرف Flexbox أو الشبكة. يطفو هو كل شيء لي.
  • منهجيات CSS. لقد استخدمت BEM (وهذا يعني كجزء من CSS ، وليس BEM الأصلي) ، ولكن هذا كل ما أعرفه. لم أحاول OOCSS أو غيرها من المنهجيات.
  • SCSS / ساس. لم أبدأ دراستها أبدًا.
  • CORS. أنا خائف من هذه الأخطاء! أعلم أنني بحاجة إلى ضبط الرؤوس من أجل إصلاحها ، لكن في الماضي قضيت الكثير من الوقت في هذا الأمر.
  • HTTPS / SSL. أبدا إعداده. لا أعرف كيف يعمل هذا ، باستثناء فكرة المفاتيح الخاصة والعامة.
  • GraphQL. يمكنني قراءة الاستعلام ، لكنني لا أعرف حقًا كيفية التعبير عن الأشياء بالعقد والحواف ، ومتى يجب استخدام الشظايا وكيفية عمل ترقيم الصفحات هناك.
  • مآخذ. حسب فهمي ، فهي تسمح لأجهزة الكمبيوتر بالاتصال ببعضها البعض خارج نموذج الطلب / الاستجابة ، ولكن هذا كل ما أعرفه.
  • مجاري المياه. بخلاف Rx Observables ، لم أعمل مع مؤشرات الترابط قريبة جداً. لقد استخدمت مؤشرات ترابط العقدة القديمة مرة واحدة أو مرتين ، لكني حصلت دائمًا على خطأ في المعالجة.
  • الإلكترون. لم تحاول ذلك.
  • نسخة مطبوعة على الآلة الكاتبة. أفهم مفهوم الأنواع وأستطيع قراءة التعليقات التوضيحية ، لكنني لم أكتبها مطلقًا. حاولت عدة مرات ، لكن واجهت صعوبات.
  • نشر و devops. يمكنني إرسال عدة ملفات عبر FTP أو قتل بعض العمليات ، ولكن هذا هو الحد الأقصى لمهاراتي في برامج devops.
  • الرسومات. سواء أكان قماشًا أو SVG أو WebGL أو رسومات منخفضة المستوى ، فأنا لست ذكيًا في ذلك. فهمت الفكرة العامة ، لكنني لست بحاجة لتعلم أشياء بسيطة.

بالطبع ، هذه ليست قائمة كاملة. هناك أشياء كثيرة لا أعرفها


قد يبدو هذا غريباً للمناقشة. هذا لا يستحق حتى الكتابة عنه. هل أتباهى بجهلي؟ استنتاجي لهذا المنصب هو كما يلي:


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

أعلم فجوات معرفتي (على الأقل بعضها). يمكنني ملئها لاحقًا إذا أصبحت مهتمة أو احتجت إليها في المشروع.


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

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


All Articles