Overreacted

أشياء لا أعرفها اعتبارًا من 2018

٢٨ ديسمبر ٢٠١٨ • ☕️ 5 min read

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

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

إليكم لماذا أعتقد أن هذا مهم.


أولًا، هناك توقعات غير واقعية أن المهندس المتمرس يعلم كل التكنولوجيات في مجاله، هل رأيت من قبل “خارطة تعلم” تتكون من مئات المكتبات والأدوات؟ إنها مهمة - لكن مرعبة.

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

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

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

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

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


بإبعاد هذا الكلام الذي يحوي تنصل من المسئولية، إليك بعض الأشياء التي لا أعرفها:

  • أوامر يونيكس وباش. يمكنني استخدام ls و cd لكن أي شيء آخر غيرهما أبحث عنه. أنا أعي مفهوم ال piping لكني أستخدمه في حالات بسيطة. لأ أعلم كيف أستخدم أمر xargs لصنع سلاسل معقدة، أو كيف يمكنني عمل تركيب أو إعادة توجيه لمجريات الخرج المختلفة. أنا أيضًا لم أتعلم بشكل متقن الباش حتى يمكنني فقط أن أكتب سكريبتات شيل بسيطة (وتحوي مشاكل أغلب الوقت).
  • اللغات منخفضة المستوى أنا أفهم أن لغة الأسيمبلي تمكنك من تخزين الأشياء في الذاكرة العشوائية والتنقل بين الكود لكن هذا كل ما أعرفه عنها. كتبت عدة سطور بلغة سي وأفهم معنى البوينترز، لكن لا أعرف كيف أستخدم malloc أو تكنيكات إدارة الذاكرة العشوائية بشكل يدوي. لم أجرب لغة راست من قبل.
  • قسم الشبكات. أعلم أن الكمبيوترات تمتلك عناوين IP، وال DNS هو كيف نحل أمر ال holnames. أعلم أن هناك بروتوكولات منخفضة المستوى مثل TCP/IP لتبادل المعلومات التي (ربما؟) تضمن الأمان. هذا كل شيء - أنا أتوه في التفاصيل.
  • الحاويات. لا أملك أدنى فكرة عن طريقة استخدام Kubernetes أو Docker. (هل هما مرتبطان أصلًا؟) لدي فكرة ضبابية عن الحاويات أنها تسمح لي بإدارة VM منفصلة بطريقة متوقعة. تبدوا ممتعة لكن لم أجربها قط.
  • Serverless. أيضًا تبدوا ممتعة. لم أجربها قط. لا أملك فكرة واضحة عن كيفية تغيير هذا النموذج لبرمجة ال backend (إذا كان يفعل على الإطلاق).
  • Microservices. إذا كان فهمي صحيحًا، هذا يعني فقط ”الكثير من نهايات ال API التي تتواصل مع بعضها البعض“. لا أعلم ما هي الفوائد العملية أو العيوب لهذا المسار لأني لم أتعامل معها من قبل.
  • Python أشعر بالسوء حيال هذه - لقت عملت بPython لسنوات عديدة حتى نقطة ما ولم أكلف نفسي عناءًا لتعلمها. هناك الكثير من الأشياء مثل ال import behavior التي هي غير واضحة لي تمامًا.
  • Node backends. أفهم كيفية تشغيل Node، استخدمت بعض ال APIs مثل fs لبناء ال tooling، ويمكنني تنصيب Express. لكني لم أستخدم Node للتواصل مع قاعدة بيانات ولا أعلم طريقة كتابة backend باستخدامها. أنا أيضًا لست معتادًا على إطارات عمل React مثل Next أقصى من كتابة أمر “hello world”.
  • Native platforms. جربت تعلم لغة Objective c في مرحلة ما لكنها لم تفلح معي. لم أتعلم لغة سويفت أيضًا. تعلمت القليل عن لغة جافا. (لكني أستطيع الكتابة بها بما أني تعاملت مع لغة C#.)
  • الخوارزميات أكثر ما يمكنك استخلاصه مني هو bubble sort وربما quicksort في أفضل الأحوال. يمكنني عمل مهمات graph traversing بسيطة إذا كانوا متعلقين بمشكلة عملية محددة. أفهم ال the O(n) notation لكن فهمي لا يتخطى “لا تضع لوب بداخل لوب”.
  • Functional languages. مالم تحتسب لغة JavaScript، فأنا لست متمكن من أي لغة برمجة.(أنا فقط متمكن من لغة C# ولغة JavaScript - وأنا بالفعل نسيت أغلب لغة ال C#.) أعاني لقراءة كود لغة برمجة مستلمة من LISP (مثل Clojure)، أو لغات مستلهمة من Haskell (مثل Elm)، أو مستلهمة من ML (مثل OCaml).
  • Functional terminology. Map و reduce هما أقصى معرفتي. لا أعلم ال monoids، functors، etc. أعلم ما هو ال monad لكن يمكن أن يكون وهمًا أيضًا.
  • Modern CSS. لا أعلم عن ال Flexbox or Grid. ال Floatsهي المفضلة عندي.
  • CSS Methodologies. استخدمت BEM (أقصد جزء ال CSS، وليس ال BEM الأصلي) لكن هذا كل ما أعرفه. لم أجرب OOCSS أو طرائق أخرى.
  • SCSS / Sass. لم أتعلمهم أبدًا.
  • CORS. أنا أتوجس من هذه الأخطاء! أعلم أنه يجب علي تنصيب بعض ال headers لإصلاحهم لكني أضعت ساعات في هذا في الماضي.
  • HTTPS / SSL. لم أنصبهم من قبل. لا أعلم كيف تعمل أكثر من فكرة private and public keys.
  • GraphQL. يمكنني قراءة query لكن لا أعلم حقًا كيف أعبر عن الأشياء باستخدام nodes and edges، متى أستخدم ال fragments, وكيف يعمل ال pagination هناك.
  • Sockets. فكرتي عنهم أنهم يسمحون للكمبيوترات بالتواصل مع بعضهم البعض خارج نموذج ال o request/response model لكن هذا كل ما أعرفه.
  • Streams. على الجانب من Rx Observables، لم أعمل مع ال streams بشكل قريب. استخدمات ال Node streams القديمة مرة أو مرتين لكن أفسد التعامل مع الأخطاء.
  • Electron. لم أجربها قط.
  • TypeScript. أنا أفهم مبدأ ال types ويمكنني قراء ال annotations لكن لم أكتب بها من قبل. في المرات القليلة التي حاولت فيها، واجهتني صعوبات.
  • Deployment and devops. I can manage to send some files over FTP or kill some processes but that’s the limit of my devops skills.
  • الرسومات الحاسوبية. إذا ما كانتcanvas، SVG، WebGL أو low-level رسومات حاوسوبية منخفضة المستوى، أنا لست منتِجًا فيها. أفهم الصورة الكلية لكن أحتاج لتعلم الأساسيات.

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


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

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

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

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

تحديث: أيضًا كتبت عن بعض الأشياء التي أعرفها.