ما هي المهارات التي يجب علي كمبرمج امتلاكها ؟!
في الأونة الاخيرة ومع هذا التضخم التقني أصبح المعظم يميل لأن يكون مبرمجا ليستطيع ترجمة أفكاره و أحلامه في المشاريع التقنية التي يريد أن يطبقها على أرض الواقع , وحقا لا أنكر أن تخصص البرمجة هو تخصص يدر الكثير من الدخل للعاملين فيه حتى صرت ألاحظ ان هناك اتجاه لعالم البرمجة حتى من الأشخاص الغير أكاديميين و غير المتخصصين أساسا في دراسة اكاديمية في مجال الحاسوب وهذا الشيء طبيعي في هذا العصر التقني , ولكن تخصص البرمجة يمكن تشبيه بأنها عالم أخر مستقل عن العالم المادي ولا يكفي أن تحب هذا المجال لتعمل به لا بل يجب عليك التدرب و التعب بجهد كبير لتتمكن من جني ثمار تعلم البرمجة , وما يزيد الطين بلة هو أن معظم طلاب البرمجة عندما يفاجئ بهذا التخصص الضخم وصعوبته تطير أحلامه في أن يصبح مبرمجا !!
المشكلة ليست أن تخصص البرمجة صعب أم لا بل المشكلة هي أن نقطة البداية في تعلم البرمجة شبه مجهولة وتحتاج الى ارشاد لكل شخص يريد تعلم البرمجة !
في هذا المقال سأشرح ما هي المهارات التي يجب عليك امتلاكها لتصبح مبرمجا محترفا وناجحا :
1- الخوارزميات وحل المشاكل برمجياً: بحيث يتمكن المبرمج من تحليل مشكلة معينة وتحويلها إلى أكواد باستخدام عناصر البرمجة الأساسية مثل الجمل الشرطية (مثل if) وجمل التكرار (مثل for و while) واستخدام المصفوفات (arrays) وغيرها.
2- البرمجة الكائنية Object-Oriented: بحيث يتمكن المبرمج من تمثيل الأشياء في الحياة الواقعية على هيئة Classes و Objects، واستخدام المفاهيم المساعدة مثل Inheritance و Abstraction و Encapsulation و Polymorphism.
3- تراكيب البيانات Data Structures: وهي حاويات لحفظ عناصر داخلها بترتيب معينة، بحيث يكون الوصول إلى عناصرها وإجراء بعض العمليات عليها (مثل search و sort) ذو كفاءة عالية. ومن أمثلتها: List, Queue, Set, Tree, Map.
4- أنماط التصميم البرمجية Design Patterns: وهي عبارة عن حلول ونماذج جاهزة تستخدم لتصميم هيكلة الـ Objects وطرق إنشائها وكيفية التواصل بين بعضها البعض. من أمثلتها: Singleton, Builder, Factory method, Adapter, Composite, Decorator, Facade, Command, Iterator, Strategy, Visitor.
5- البرمجة المتوازية Concurrent Programming: بحيث يتم تنفيذ البرنامج باستخدام أكثر من Thread. كل Thread يقوم بتنفيذ عدة أوامر متتالية، والـ Threads جميعها يتم تنفيذها بشكل متزامن أو في آن واحد. توجد مفاهيم ذات علاقة، مثل: synchronization, locks, mutex, semaphore, race condition.
6- التعامل مع الملفات: يجب على المبرمج أن يفرق بين الملفات النصية والملفات الغير نصية (binary) (مثل ملفات الصور والفيديو وغيرها) وكيفية قراءتها وتخزينها على المساحة التخزينية، ويتعرف على مفهوم الـ Encoding (مثل UTF-8) وهي الطريقة المستخدمة لتمثيل النصوص على هيئة binary.
7- الملفات النصية الشائعة: هناك عدة أشكال formats تستخدم لتخزين البيانات على هيئة نصوص. مثل: CSV, XML, JSON, YAML.
8– التعابير المنطقية Regular Expressions أو اختصاراً Regex: وهي سلسلة من الحروف تستخدم للبحث عن تطابق داخل نص معين، ويمكن استخدامها أيضاً لتبديل كلمات بأخرى داخل النص أو للتحقق من مدخلات نصية Text Validation. أنصح باستخدام هذا الموقع أثناء بناء regex معين: https://regex101.com
9- التعامل مع قواعد البيانات Databases: بحيث يتمكن المبرمج من كتابة برنامج يتصل بقاعدة بيانات ويستخدم لغة SQL للبحث داخل الجداول أو لإضافة أو تعديل سجلات. معظم لغات البرمجة بها أدوات تساعد في هذه العملية. فمثلاً في لغة جافا، يمكن استخدام JDBC.