إن طريق لكي تصبح مبرمجا طريق طويل وشاق . وبخلاف ما قد تجده في بعض الكتب أو المقالات، لا يمكن تعلم البرمجة بصورة فعلية في غضون 7، أو21 أو حتى 365 يوما. والبرمجة عبارة عن عملية تراكمية بحيث تطور من مهاراتك يوما بعد يوم وسنة بعد سنة. ومع ذلك ، يمكنك أن تجعل من البرمجة أمرا مسليا ومجزيا في الوقت نفسه (عقليا ،وروحيا وماديا). سيرشدك هذا المقال من خلال وضع النقاط الأساسية لكيف تصبح مبرمجا في إحدى مجالات البرمجة الحديثة. كما لا يعدك هذا المقال بطريقة سحرية ، سهلة التطبيق لأن تصبح مبرمجا ، كما أن ترتيب الخطوات المذكور ليس ملزما البتة.
أ. خذ دورة تمهيدية واحدة على الأقل في الرياضيات (رياضيات تمهيدي على سبيل المثال حيث سيحسن من خبرتك كمبرمج بشكل ملحوظ).
ب. خذ دورة تمهيدية في المنطق ، الرياضيات المنفصلة (Discrete) أو كلاهما.
ج. تعرف على واحدة على الأقل من تقنيات مفاهيم البرمجة التالية: (كلما تعمقت في البرمجة ستحتاج لتعلم جميع التقنيات المذكورة تقريبا. تم ترتيبهم حسب الترتيب المتعارف عليه). • رسوميات التحكم Flow Charting (عالميا تعتبر الأسهل للتعلم).
• البرمجة بأسلوب أشباه الأكواد (Pseudo-Code).
• لغة النمذجة الموحدة (UML).
• نموذج العلاقات الكائنية (ORM).
د. تعرف على مفاهيم قواعد البيانات البسيطة مثل الجداول ، views/queries ، والإجراءات. يمكنك استخدام أي تطبيق قواعد بيانات للقيام بذلك مثل MS access, DB V, Fox Pro, Paradox.
هـ. تعرف على أساليب البرمجة (ستكون مقدمة كافية للوقت الحالي) ، ومن أهمها الاجرائية ، الكائنية التوجه ، الوظائفية ، المنطقية أو البرمجة التصريحية.
2. قرر أي نوع من المبرمجين تريد أن تكون/تصبح!! المبرمجون بصفة عامة يندرجوا تحت واحدة من الفئات التالية: أ. مبرمج ويب
ب. مبرمج تطبيقات مكتبية • موجهة حول نظام تشغيلي (مرتبطة بنظام تشغيلي واحد أو مجموعة من أنظمة التشغيل).
• مستقل متعدد المنصات.
ج. مبرمج تطبيقات موزعة.
د. مبرمج إطار عمل/منصة/مكتبة
هـ. مبرمج أنظمة • مبرمج نواة (كيرنل)
• مبرمج تعريفات الأجهزة
• مبرمج مترجمات
و. عالم برمجة .
3. تعلم لغات البرمجة والتقنيات ذات الصلة بالمجال الذي قمت باختياره. في الفصول القادمة سنقوم بتقسيم الخطوات الثلاث الرئيسية إلى مهام أكثر تحديدا.
تطبيقات الويب عبارة عن أجزاء برمجية صممت للعمل على أساس الهندسة المعمارية للشبكة المعلوماتية. وهذا يعني أنه يتم الوصول لهذه التطبيقات عن طريق استخدام متصفحات الويب مثل فايرفوكس أو انترنت اكسبلورر. على الرغم من أنها بنيت على أساس الهندسة المعمارية للانترنت ، الا أنها لا تتطلب بالضرورة اتصال نشط بالانترنت. وانما يعني ذلك أن تطبيقات الويب مبنية على معايير تقنيات الشبكة مثل HTTP ، FTP ، POP3 ، SMTP ، TCP وبروتوكول IP ، ولغات مثل HTML ، XML ، ASP ، JSP ، PHP و ASP.NET إلى جانب العديد من تقنيات الانترنت. شبكات الانترانت المتعلقة بالشركات تعد أمثلة على تطبيقات الويب التي لا تحتاج لتشغيلها اتصال نشط بشبكة الانترنت.
1. تصفح العديد من مواقع الانترنت المتنوعة لتتعلم كيف تبدو هذه المواقع في العادة. نعني بالتنوع في هذا السياق هو من ناحية النوع/المحتوى الذي يتضمنه الموقع وليس عدد المواقع التي تمت زيارتها. عموما ، فأنت بحاجة لزيارة موقع واحد على الأقل من كل الأنواع التالية لمواقع الانترنت: o مواقع الشركات (الشركات التجارية ، المنظمات/الشركات الغير ربحية و المنظمات الحكومية)
o محركات فهرسة الويب (محركات البحث ، مواقع بحث البيانات الوصفية ، محركات البحث المتخصصة و الأدلة)
o مواقع تنقيب البيانات
o المواقع الشخصية
o صفحات الموسوعات/المعلومات (ويكي ، صفحات البيانات ، المواصفات التقنية ، أدلة سرد كتيبات الإرشاد ، المدونات والمفكرات ، المواقع الإخبارية ومواقع الوكالات الإخبارية والأدلة التجارية)
o المواقع الاجتماعية (البوابات الاجتماعية ، مواقع التصنيف ومواقع التدوين)
o المواقع التعاونية (وهذا يشمل الفئات الأخرى المذكورة أعلاه مثل الويكي والمدونات)
2. تعلم واحدة عى الأقل من تقنيات/طرق تبادل الأفكار (العصف الذهني) وبرنامج يقوم بتطبيق هذه الطريقة (على سبيل المثال:رسوم العصف الذهني البيانية و MS Visio)
3. تعرف على هيكلة مواقع الانترنت (إنشاء تخطيطات الويب التخيلية ، خرائط الموقع وطرق الإبحار في الويب).
4. خذ دورة سريعة في التصميم وتعلم استخدام تطبيق واحد على الاقل من تطبيقات تحرير الرسوميات (هذا البند اختياري ولكنه موصى به بشدة) 5. تعلم أساسيات البنية التحتية للانترنت. ويشمل هذا الحصول على فكرة أساسية عن كل من:
o قاعدة بروتوكولات خدمات الشبكة (HTTP, FTP, SMTP, و POP3 أو IMAP4)
o برامج خادم الويب (ويفضل واحد للمنصة التي ستعمل عليها في الغالب)
o برامج تصفح الانترنت
o برامج البريد الإلكتروني.
6. تعلم لغات مثل HTML و CSS إلى جانب بعض تطبيقات "ما تراه هو ما ستحصل عليه(WYSIWYG)” لتحرير صفحات HTML.
7. تعلم XML والتطبيقات ذات الصلة مثل XSL و XPath (اختياري ولكن يوصى به)
8. قم بإنشاء مواقع بسيطة ساكن حتى تكون لغة HTML مألوفة لديك ومرتاح لاستخدامها.
9. تعلم لغة تفاعلية -من جانب الزبون- (يتعلم أغلب المستخدمين أما لغة Javascript أو VBScript ، ولكن يفضل البعض تعلم لغة بيرل أو لغة أخرى بدلا من ذلك) كما تعلم DHTML.
10. عوّد نفسك على استخدام اللغة التفاعلية التي قمت بتعلمها. حاول الوصول لهدفك عن طريق استخدام تلك اللغة فقط. انتقل للخطوة التالية فقط عند إتقانك للغة التفاعلية.
11. تعلم لغة تفاعلية -من جانب الخادم-. إذا اخترت أن تحد نفسك بتطبيق خادم واحد ، فتعلم لغة واحدة مدعومة من قبل ذلك التطبيق. أما إذا لم تقم بذلك ، فعليك تعلم لغة برمجية واحدة على الأقل على كل خادم تعمل عليه.
12. قم بإنشاء مشروع تجريبي لك بعد الانتهاء من تعلم اللغة التفاعلية -المتعلقة بالخادم-.
13. احصل على موقعك الشخصي وابدأ تجاربك الخاصة من على صفحتك بالشبكة.
1. الوقوف على مختلف بنيات أجهزة الحاسب الآلي. وأخذ دورة تمهيدية في تصميم الدوائر الرقمية وأخرى في هندسة الحاسب المعمارية أمر مفيد ، الا أن البعض يرى أنها صعبة كنقطة بداية في هذا المشوار ، ولذلك تكفي قراءة مقالين تعليميين أو ثلاثة ، ثم يمكنك العودة لهذه الخطوة في وقت لاحق ، بعد أن تتقن لغتك البرمجية الأولى.
2. تعلم لغة برمجية بسيطة (للأطفال). لا تخجل من تعلم مثل هذه اللغة فقط لأنك أكبر سنا من أن يطلق عليك "طفل”. بحيث يمكن لمثل هذه اللغات البرمجية أن تسهل من ألم تعلم لغتك البرمجية الأولى بصورة ملحوظة. ولكن هذه الخطوة اختيارية ويمكن القيام بها قبل الخطوة السابقة.
3. الحصول على مدخل في أساليب البرمجة الوظيفية ، الكائنية المصدر والبرمجة الإجرائية.
4. أخذ دورة تمهيدية في واحدة من لغات البرمجة الإجرائية. بغض النظر عن اللغة التي ستختارها لاحقا ، فأنك ستحتاج للبرمجة الإجرائية عند مستوى معين. كما أن أغلب المبرمجين يرونها بأنها الأسهل للاستعمال كنقطة بداية ولتكوين فكرة عن البرمجة عموما.
5. تعرف على واحدة على الأقل من تقنيات النمذجة المتقدمة مثل UML أو ORM.
6. ابدأ بكتابة بعض تطبيقات سطر الأوامر الصغيرة (يمكنك الاستفادة من التمارين العامة في كتب لغات البرمجة).
7. خذ دورة متقدمة في اللغة البرمجية التي قمت باختيارها في الخطوة رقم 3. تأكد من فهمك المفاهيم التالية جيدا مع إمكانية التطبيق دون صعوبة تذكر قبل المضي قدما: o إدخال وإحراج المعلومات إلى مستخدمي البرنامج.
o الانسياب المنطقي وانسياب تنفيذ تعليمات البرامج بالنسبة للبرمجة الاجرائية.
o تصريح ، وتعيين ومقارنة المتغيرات.
o تراكيب البرمجة الشرطية مثل if..then..else و select/switch..case.
o التراكيب التكرارية (الحلقية) مثل while..do ، do..while/until ، for..next.
o القواعد اللغوية للغتك البرمجية الخاصة بإنشاء واستدعاء الإجراءات والدوال.
o أنواع البيانات وطرق استعمالها.
o أنواع البيانات المعرفة من قبل المستخدم (الوحدات/التراكيب/السجلات) واستخدامها.
o إذا كانت اللغة المستخدمة تدعم overloading functions ، فافهمها.
o طرق وصول اللغة المستخدمة للذاكرة مثل (المؤشرات ، الخ...)
o اذا كانت اللغة المستخدمة تدعم operators overloading ، فافهمها.
o اذا كانت اللغة المستخدمة تدعم مؤشرات الدوال/المندوبين ، فافهمها.
8. قم بتطبيق التقينيات المتقدمة التي تعلمتها.
9. خذ دورة تمهيدية في لغة برمجية واحدة على الأقل ضمن نموذج برمجي مغاير ، ويفضل في إحدى النماذج التالية (نوصي بتعلم لغة برمجية واحدة من كل مسار ، وأغلب المبرمجين المحترفين يقومون بذلك ، ومع ذلك ، فأنك عادة ما تبدأ مع نموذج واحد ، والعمل عليه مع تطبيق وممارسة ما قمت بتعلمه ، ثم وفي وقت لاحق قم بتعلم اللغة الأخرى بعد أن تكون لديك خبرة عملية في البرمجة). o البرمجة الكائنية المصدر
o البرمجة المنطقية
o البرمجة الاجرائية
10. حاول إجراء مقارنة بين أي لغتين برمجيتين تعلمتهما حتى الآن للوقوف على مواطن القوة والضعف لكل منهما. وعادة ما يتم ذلك عن طريق: o أخذ عينات بسيطة من أعمالك المبكرة في اللغة البرمجية الأولى وإعادة كتابتها مستخدما اللغة البرمجية الثانية.
o أنشأ مشروع جديد وحاول تنفيذه باستخدام كل من اللغتين. أحيانا ، وحسب اختيارك للمشروع واللغات البرمجية المستخدمة في تنفيذه ، قد لا تكون قادرا على تنفيذ المشروع باستخدام إحدى اللغات!
o كتابة ورقة سريعة أو جدول تلخيصي للمقارنة بين التراكيب المتشابهة في كل من اللغتين والخصائص المميزة لكل منهما.
o حاول إيجاد طرق لمحاكاة الخصائص المميزة بكل من اللغتين باستخدام اللغة الأخرى.
11. تعرف على مفاهيم البرمجة المرئية باستخدام احد اللغات البرمجية (جميع اللغات البرمجية تقريبا تتضمن إصدارات/مكتبات تدعم البرمجة المرئية وأخرى تدعم البرمجة النصية أو شبه النصية). ويمكن تحقيق ذلك عن طريق ما يلي: o الحصول على مقدمة في البرمجة الموجهة بالأحداث. بحيث أغلب البرمجية المرئية في بعض المستويات تعتمد على الأحداث وطرق معالجتها (مستخدما اللغة البرمجية خاصتك).
o حاول استخدام أكبر قدر ممكن من التطبيقات المكتبية وافهم وظيفة كل منها. كما تصدر أغلب شركات تطوير البرامج نسخ تجريبية (بيتا) من منتجاتها ليتسنى تجربة البرنامج من قبل المستخدمين. والاطلاع على أحدث تطويرات واجهة المستخدم.
o قراءة بعض المقالات أو الدروس التعليمية في واجهات المستخدم الرسومية.
12. ابدأ بتطبيق الجانب النظري من خلال تصميم مشاريع برمجية متواضعة. حاول تطبيق خبرتك البرمجية لحل المشاكل التي تواجهها في حياتك اليومية . فعلى سبيل المثال ، قم بتصميم برامج تقوم بتغيير أسماء الملفات بشكل جماعي ، تقارن ملفات نصية مرئيا ، تقوم بنسخ أسماء الملفات في الدليل للذاكرة أو ملف نصي ، أو أشياء من هذا القبيل. ابقه بسيطا في البداية.
13. قم بإنشاء مشروع تخرج افتراضي والذي يتعين عليك إكماله ، مطبقا تقنيات البرمجة البصرية التي تعلمتها حتى الآن.
14. وسع إدراكك للتطبيق/المكتبة/الإطار البصري الذي تعلمته مسبقا من خلال أخذ دورات متقدمة ، مع تركيز إضافي على العديد من التفاصيل والخدع والنصائح لإطار العمل الذي تستخدمه من على الإنترنت.
15. ابحث عن حزم/مكتبات أخرى من العناصر البصرية للغات البرمجية التي قمت بتعلمها.
16. أخذ دورة في الرسوميات (ليس التصميم الجرافيكي) سيكون مساعدا جدا للمبرمجين الراغبين في كتابة عناصر جذابة لواجهة المستخدم الرسومية.
17. تعتبر برمجة الألعاب ،في أغلب أجزائها، برمجة لتطبيقات سطح سطح مكتبية. وإذا كنت تنوي أن تصبح مبرمج ألعاب ، فانك بحاجة لمعرفة المزيد عن برمجة الألعاب بعد الانتهاء من هذه الخطوات. بحيث تعتبر دورة الرسوميات إلزامية لمبرمجي الألعاب كما يجب أن تكون لغة الاختيار الثانية في الخطوات السابقة أحد اللغات البرمجية المنطقية/الوظيفية (يفضل لغة Prolog أو Lisp).
1. خذ دورة سريعة في أنظمة الاتصال الهاتفية وأجهزتها. هذه الخطوة اختيارية. مع ذلك ، تعتبر مفيدة لفهم علوم الشبكات.
2. تعرف على الهندسة المعمارية للشبكات والاجهزة المستخدمة مثل المجمعات ، و المبدلات ، والراوترز.
3. خذ دورة في أساسيات وبروتوكولات الشبكات. فأنت بحاجة لفهم جيد لكل من نموذج OSI ، شبكة الإيثرنت ، IP ، TCP ، UDP و HTTP قبل البدء ببرمجة مثل هذه التطبيقات.
4. تعلم لغة XML وتعرف على حيثياتها.
5. قم بالخطوة الثانية والثالثة من خطوات إعداد نفسك لبرمجة تطبيقات سطح المكتب. 6. ابدأ من خلال تعلم لغة نصية -سطر الأوامر-. في إذا كنت تبرمج تحت نظام ويندوز ، فيمكنك اختيار أي لغة نصية تعمل ضمن مضيف ويندوز للغات النصية. أما بالنسبة للبرمجة على نظام لينكس ، فيكفي استخدام كل من نصوص Bash و Perl. كما يوصى بشدة اعتماد Javascript لهذه المهمة في كل من المنصتين (لينكس/ويندوز) وذلك للأسباب التالية:
o توفر الدعم من قبل أي مضيف نصي في أي نظام تشغيلي (يدعم نظام ويندوز javascreipt بشكل افتراضي ، كما أن اغلب توزيعات لينكس تحتوي على حزمة لدعم برمجة javascript).
o تعتبر الأسهل للتعلم من قبل العديد من المطورين.
o تحتوي على قواعد مستمدة من ALGOL والذي يجعل من اللغات الأخرى أمرا مألوفا عند رغبتك باختيار لغة برمجية ثانية (تحتوي كل من C, C++, C#, Java و J# على هذه الخاصية)
o عن طريق تعلم Javascript ، ستعرف نفسك على البرمجة -الموجهة للعميل- والتي تعتبر اثر جانبي إضافي.
7. قم بتطبيق البرمجة الإجرائية فقط باستخدام اللغة البرمجية النصية كبداية. بعد ذلك ، يمكنك استخدام نماذج وتقنيات برمجية متقدمة أكثر حسب اللغة المستخدمة والتقنيات التي تدعمها. جميع اللغات البرمجية النصية تحتوي على بعض سمات البرمجة الإجرائية.
8. استخدم اللغة النصية التي تعلمتها في كتابة نصوص برمجية تقوم باتصالات بين الأجهزة. تعرف على النقاط الأساسية للقيام بذلك. ويكفي القيام باتصالات بسيطة.
9. انتقل لاستخدام لغة برمجية/نصية مكتبية. من المفضل اختيار لغة تدعم عدة أساليب برمجية مثل بايثون. خذ مقدمة بسيطة لهذه اللغة البرمجية الثانية. تعتبر لغة جافا من اللغات المفضلة لأغلب المبرمجين في هذا المجال لأسباب عدة ، ومع ذلك فإن لغة #C اكتسبت زخما سريعا في هذا المجال. يفض استخدام لغة جافا و #C وذلك للأسباب التالية:
o تعتبر من اللغات البرمجة الكائنية التوجيه ، والتي تحمي المبرمجين - بشكل عام - من الاهتمام بتفاصيل التنفيذ لأنهما على حد سواء تدعم وحدات (الوحدات هي عبارة عن مجموعة من الشفرات المصدرية شبه مترجمة ، و تقوم بمهمة محددة مع امكانية استخدامها في برامج أخرى).
o تدعمان البرمجة الموجهة بالأحداث كما تدعمان كل من البرمجة الكائنية و البرمجة الاجرائية على نفس المستوى.
o إطار العمل الذي بني عليه اللغة موزع بطبيعته (يعمل على الكثير من المنصات) (في حالة لغة جافا).
o توفر العديد من الحزم الجاهزة والتي تتعامل مع الشبكات سواء كشفرة مصدرية مفتوحة المصدر أو كحزم مدمجة باطار العمل على حد سواء ، بحيث يسهل للمبرمجين امكانية البناء على عمل الأخرين.
10. ركز أكثر على الميزات الرئيسية للغة ، خاصة تلك التي تدعم الربط الشبكي. أولِ اهتمام أقل على عناصر واجهة المستخدم مثل الاخراج ، تقنيات تصميم النوافذ ، وعناصر واجهة المستخدم الرسومية.
11. خذ دورة في تصميم والهندسة المعمارية للبرامج التوزيعية. يمكن القيام بذلك من خلال الاستعانة بالكتب ، دروس تعليمية من على الشبكة أو مقررات دراسية. على أية حال ، فهم مفاهيم الهندسة المعمارية لمثل هذه البرامج أمر ضروري.
12. تعلم بناء الخدمات و المكونات الخدمية باستخدام لغتك البرمجية.
13. تعرف على واحدة أو أكثر من التقنيات التالية. يفضل بأن تحصل على مقدمة على الأقل لكل منها. أغلب مبرمجي هذا المجال لا يتوقفوا عند حد لغة برمجية واحدة أو اثنتين ، ولكن يتعلموا لغة برمجية واحدة على الأقل لكل نظام تشغيلي. ولذلك في حالة رغبتك أن يكون تطبيقك "موزعا” ، عليك بتوفير نسخة من التطبيق لكل نظام تشغيلي رئيسي على الأقل. CORBA
SOAP
AJAX
DCOM
NET Remoting
XML Web Services
2. خذ دورة متقدمة في كل من UML و ORM. أغلب مطوري المكتبات يستخدمون احداهما أو كلاهما.
3. خذ دورة في هندسة البرمجيات.
4. تعرف على الأقل على مفاهيم وتقنيات كل من التراكيب ، كائنية المصدر ، والبرمجة الموجهة بالأحداث. فكلما زاد اطلاعك على عدد من اللغات والنماذج البرمجية ، كلما زادت فرصتك بأن تكون مبرمج حزم/مكتبات ناجح.
5. تعرف أكثر على الأنظمة التشغيلية المختلفة وأطر العمل البرمجية المدعومة من قبل هذه الانظمة التشغيلية.
6. ركز جهودك على منصة معينة وتعرف على كل من التقنيات واللغات البرمجية وأطر العمل التي تدعمها.
7. اذا كانت اللغات البرمجية التي تعلمتها حتى الآن تدعم كل من معايير ANSI/ISO/IEEE. فعليك باتقانها ومحاولة استخدامها عند الإمكان.
8. حاول تقليد مكتبات بسيطة موجودة مسبقا ، خاصة اذا كانت مفتوحة المصدر. فهذه النقطة مفيدة خلال المرحلة المبكرة في مشوارك لكي تصبح مبرمج حزم/مكتبات. ابدا مع حزم بسيطة مثل مجموعات وحدات التحويل وحزم الحسابات العلمية المتوسطة. اذا كنت طالب جامعي ، حاول الاستفادة من المواد غير برمجية عن طريق محاولة معاملة المعادلات والجانب العلمي كمكتبات.
9. حاول استخدام الحزم المفتوحة المصدر في مجالك البرمجي. في بداية الأمر قم بتنزيل الحزم الثنائية/القابلة للتنفيذ ،حاول استعمالها والتركيز على نقاط القوة والضعف. بعد ذلك ، حاول فهم طريقة عمل البرنامج وكيف تم القيام بذلك من خلال قراءة الشفرة المصدرية للبرنامج. حاول اعادة كتابة هذه المكتبات أو أجزاء منها. في البداية قم بذلك بعد الاطلاع على الشفرة ، وبعد ذلك حاول القيام بذلك قبل الاطلاع عليها. في المراحل المتأخرة ، حاول اضافة بعض التحسينات لهذه المكتبات.
10. تعرف على النهج المختلفة المستخدمة في نشر وتوزيع مثل هذه العناصر على المبرمجين.
11. عادة ما يميل مبرمجو الحزم/المكتبات على التفكير بشكل متكرر بكل المشاكل التي تواجههم.عند قيامك بذلك ، حاول التفكير بكل مشكلة على أنها مجموعة من المشاكل الصغيرة (تسلسل من المهام البسيطة) أو كعملية متكررة في تضييق نطاق المشكلة لمجالات أصغر نطاقا ثم تقوم بعد ذلك بتجميع هذه المجالات مع بعضها البعض.
12. يميل مبرمجي الحزم/المكتبات إلى التعميم. وذلك ، عندما تعرض عليهم مشكلة بسيطة ومحددة ، يقوموا بالتفكير في مشكلة أشمل ويحاولوا معالجة هذا المشكلة العامة والتي بدورها تقوم بمعالجة المشكلة اﻷصغر بصورة تلقائية.
2. خذ دورة تمهيدية في الجبر الخطي (linear Algebra).
3. خذ دورة في التكامل و التفاضل.
4. خذ دورة في المنطق و/أو الرياضيات المنفصلة (Discrete).
5. عرف نفسك لعدة أنظمة تشغيلية مجردة. ويمكن القيام بذلك من خلال: o معرفة طريقة تثبيت الأنظمة التشغيلية.
o معرفة طريقة تثبيت عدة أنظمة تشغيلية على جهاز واحد (خطوة اختيارية ولكنها مستحسنة).
o قم تثبيت عدة أنظمة تشغيلية. لا تثبت أي حزم خدمية مساعدة ،وانما حاول الاعتماد على القدرات الوظيفية المجردة التي تقدمها الأنظمة التشغيلية نفسها.
6. خذ دورة (أو اقرأ كتب بدلا عن ذلك) في هندسة مكونات الحاسب المعمارية.
7. توسيع مداركك لمنصات أجهزة الحاسب المختلفة.
8. الحصول على فهم مبدئي للغة التجميع/الآلة لنظامك التشغيلي/منصة الأجهزة المستخدمة. (ستتعلم لاحقا لغة التجميع الخاصة بالأنظمة/المنصات الأخرى).
9. تعلم لغة ANSI C ، جنبا إلى جنب مع مفاهيم البرمجة الاجرائية.
10. قم بفهم وممارسة المكتبات الافتراضية للغة C خاصة STL وربما ATL أيضا.
11. قم بالبحث في مصادر الشبكة ، الكتب والمواد الدراسية لمعرفة الصفات المميزة للغة C ضمن منصتك التشغيلية.
12. قم بممارسة لغة C من خلال كتابة شفرة متقدمة.
13. انتقل لاستخدام لغة ++C.
14. تعلم خصائص متقدمة من لغة التجميع (Assembly).
15. خذ دورة في تصميم نظم التشغيل.
16. قراءة وثائق نظامك التشغيلي (ستكون هذه العملية سهلة اذا كان نظامك التشغيلي مبني على نظام يونكس التشغيلي). افهم طريقة عمل نظامك التشغيلي بصورة جيدة.
17. قم بممارسة المعرفة النظرية المكتسبة. قم بانشاء برامج خدمية متواضعة. وهي عادة ما تكون مفيدة لـ: o حاول اعداة انشاء أدوات ضغيرة والموجودة مسبقا بالنظام.
o حاول نقل بعض الأدوات الموجودة على الأنظمة التشغيلية الأخرى لنظامك التشغيلي.
18. هذا هو المكان الوحيد الذي عليك أن تكون حذرا في اختيار لغتك البرمجية الأولى. فعليك بتعلم لغة ANSI C ، وليس لغة ++C ، ولا #C ، ولا Java ، ولا حتى لغة D.
19. التقيد بلغة C فقط لأن برمجة الأنظمة التشغيلية لأن ذلك يتطلب فهم كل من المفاهيم التالية: o تجميع كامل وحقيقي من الشفرة المصدرية.
o التعامل مع ملفات اخراج كائنية منخفضة المستوى.
o الربط بين الملفات الثنائية.
o برمجة لغة التجميع/لغة الألة من اللغات المنخفضة المستوى. بحيث تعتبر لغة C لغة تنكرية/سهلة للتعلم مقارنة مع لغة التجميع (Assembly). كما يمكنك اضافة شفرات من لغة اﻷلة ضمن الشفرة المصدرية متى رغبت بذلك ، و تعتبر لغة اجرائية شأنها في ذلك شأن لغة التجميع.
1. الحصول على خبرة معرفية علمية توازي درجة الباكلوريوس/الدبوم في علوم الحاسب الآلي. ويمكن أن يتم ذلك عن طريق سلوك أحد المنحيين التاليين: o الحصول على درجة أكاديمية فعلية ( وهذا ما يتم عادة).
o الحصول على خطة دراسية لدرجة أكاديمية مماثلة من احدى الجامعات الحديثة ، وتقوم بعد ذلك بدراسة هذه المواد بنفسك أو كمواد دراسية منفصلة. نظريا يمكن تحقيق ذلك ، ولكن يفضل سلوك المنحى الأول.
2. تحديد مجال التخصص. وكلما كنت أكثر تحديدا في اختيارك كلما كان أفضل لك. يعتمد الاختيار حسب ميولك ، ولكن ، هذه قائمة ببعض المواضيع الرئيسية في علوم برامج الحاسوب: o تصميم الخوارزميات مثل (البحث ، الفهرسة ، التشفير ، فك التشفير ، واكتشاف الأخطاء في الاتصالات).
o تحسين/تصميم المترجمات/لغات برمجية.
o مجالات الذكاء الاصطناعي (التعرف على الأنماط ، التعرف على الكلام ، معالجة اللغات الطبيعية والشبكات العصبية).
o علوم الروبوتات
o البرمجة العلمية.
o أجهزة الحاسب الفائقة السرعة.
o التصميم/النمذجة بمساعدة الحاسوب.
o الواقع الافتراضي.
o علوم رسوميات الحاسوب. عادة ما يخلط بين هذا المجال ومجال التصميم الرسومي أو تصميم واجهة المستخدم الرسومية. مجال رسوميات الحاسوب عبارة عن العلم المختص بكيفية تمثيل الرسوميات في أنظمة الحاسوب.
3. حاول الحصول على درجة علمية عليا مثل الماجستير أو حتى الدكتوراة 4. تعرف على اللغات البرمجية والتقنيات المستخدمة ضمن التخصص الذي قمت باختياره.
ترجمة للمقال:How to Become a Programmer بواسطة: زاهر النوتكي
الترخيص : Creative Commons
الخطوات
1. هيئ نفسك لكي تصبح مبرمجا:أ. خذ دورة تمهيدية واحدة على الأقل في الرياضيات (رياضيات تمهيدي على سبيل المثال حيث سيحسن من خبرتك كمبرمج بشكل ملحوظ).
ب. خذ دورة تمهيدية في المنطق ، الرياضيات المنفصلة (Discrete) أو كلاهما.
ج. تعرف على واحدة على الأقل من تقنيات مفاهيم البرمجة التالية: (كلما تعمقت في البرمجة ستحتاج لتعلم جميع التقنيات المذكورة تقريبا. تم ترتيبهم حسب الترتيب المتعارف عليه). • رسوميات التحكم Flow Charting (عالميا تعتبر الأسهل للتعلم).
• البرمجة بأسلوب أشباه الأكواد (Pseudo-Code).
• لغة النمذجة الموحدة (UML).
• نموذج العلاقات الكائنية (ORM).
د. تعرف على مفاهيم قواعد البيانات البسيطة مثل الجداول ، views/queries ، والإجراءات. يمكنك استخدام أي تطبيق قواعد بيانات للقيام بذلك مثل MS access, DB V, Fox Pro, Paradox.
هـ. تعرف على أساليب البرمجة (ستكون مقدمة كافية للوقت الحالي) ، ومن أهمها الاجرائية ، الكائنية التوجه ، الوظائفية ، المنطقية أو البرمجة التصريحية.
2. قرر أي نوع من المبرمجين تريد أن تكون/تصبح!! المبرمجون بصفة عامة يندرجوا تحت واحدة من الفئات التالية: أ. مبرمج ويب
ب. مبرمج تطبيقات مكتبية • موجهة حول نظام تشغيلي (مرتبطة بنظام تشغيلي واحد أو مجموعة من أنظمة التشغيل).
• مستقل متعدد المنصات.
ج. مبرمج تطبيقات موزعة.
د. مبرمج إطار عمل/منصة/مكتبة
هـ. مبرمج أنظمة • مبرمج نواة (كيرنل)
• مبرمج تعريفات الأجهزة
• مبرمج مترجمات
و. عالم برمجة .
3. تعلم لغات البرمجة والتقنيات ذات الصلة بالمجال الذي قمت باختياره. في الفصول القادمة سنقوم بتقسيم الخطوات الثلاث الرئيسية إلى مهام أكثر تحديدا.
مبرمجي الويب
تكمن تطبيقات الويب في خادم ويب ويتم الوصول إليها عن طريق متصفح ويب.تطبيقات الويب عبارة عن أجزاء برمجية صممت للعمل على أساس الهندسة المعمارية للشبكة المعلوماتية. وهذا يعني أنه يتم الوصول لهذه التطبيقات عن طريق استخدام متصفحات الويب مثل فايرفوكس أو انترنت اكسبلورر. على الرغم من أنها بنيت على أساس الهندسة المعمارية للانترنت ، الا أنها لا تتطلب بالضرورة اتصال نشط بالانترنت. وانما يعني ذلك أن تطبيقات الويب مبنية على معايير تقنيات الشبكة مثل HTTP ، FTP ، POP3 ، SMTP ، TCP وبروتوكول IP ، ولغات مثل HTML ، XML ، ASP ، JSP ، PHP و ASP.NET إلى جانب العديد من تقنيات الانترنت. شبكات الانترانت المتعلقة بالشركات تعد أمثلة على تطبيقات الويب التي لا تحتاج لتشغيلها اتصال نشط بشبكة الانترنت.
1. تصفح العديد من مواقع الانترنت المتنوعة لتتعلم كيف تبدو هذه المواقع في العادة. نعني بالتنوع في هذا السياق هو من ناحية النوع/المحتوى الذي يتضمنه الموقع وليس عدد المواقع التي تمت زيارتها. عموما ، فأنت بحاجة لزيارة موقع واحد على الأقل من كل الأنواع التالية لمواقع الانترنت: o مواقع الشركات (الشركات التجارية ، المنظمات/الشركات الغير ربحية و المنظمات الحكومية)
o محركات فهرسة الويب (محركات البحث ، مواقع بحث البيانات الوصفية ، محركات البحث المتخصصة و الأدلة)
o مواقع تنقيب البيانات
o المواقع الشخصية
o صفحات الموسوعات/المعلومات (ويكي ، صفحات البيانات ، المواصفات التقنية ، أدلة سرد كتيبات الإرشاد ، المدونات والمفكرات ، المواقع الإخبارية ومواقع الوكالات الإخبارية والأدلة التجارية)
o المواقع الاجتماعية (البوابات الاجتماعية ، مواقع التصنيف ومواقع التدوين)
o المواقع التعاونية (وهذا يشمل الفئات الأخرى المذكورة أعلاه مثل الويكي والمدونات)
2. تعلم واحدة عى الأقل من تقنيات/طرق تبادل الأفكار (العصف الذهني) وبرنامج يقوم بتطبيق هذه الطريقة (على سبيل المثال:رسوم العصف الذهني البيانية و MS Visio)
3. تعرف على هيكلة مواقع الانترنت (إنشاء تخطيطات الويب التخيلية ، خرائط الموقع وطرق الإبحار في الويب).
4. خذ دورة سريعة في التصميم وتعلم استخدام تطبيق واحد على الاقل من تطبيقات تحرير الرسوميات (هذا البند اختياري ولكنه موصى به بشدة) 5. تعلم أساسيات البنية التحتية للانترنت. ويشمل هذا الحصول على فكرة أساسية عن كل من:
o قاعدة بروتوكولات خدمات الشبكة (HTTP, FTP, SMTP, و POP3 أو IMAP4)
o برامج خادم الويب (ويفضل واحد للمنصة التي ستعمل عليها في الغالب)
o برامج تصفح الانترنت
o برامج البريد الإلكتروني.
6. تعلم لغات مثل HTML و CSS إلى جانب بعض تطبيقات "ما تراه هو ما ستحصل عليه(WYSIWYG)” لتحرير صفحات HTML.
7. تعلم XML والتطبيقات ذات الصلة مثل XSL و XPath (اختياري ولكن يوصى به)
8. قم بإنشاء مواقع بسيطة ساكن حتى تكون لغة HTML مألوفة لديك ومرتاح لاستخدامها.
9. تعلم لغة تفاعلية -من جانب الزبون- (يتعلم أغلب المستخدمين أما لغة Javascript أو VBScript ، ولكن يفضل البعض تعلم لغة بيرل أو لغة أخرى بدلا من ذلك) كما تعلم DHTML.
10. عوّد نفسك على استخدام اللغة التفاعلية التي قمت بتعلمها. حاول الوصول لهدفك عن طريق استخدام تلك اللغة فقط. انتقل للخطوة التالية فقط عند إتقانك للغة التفاعلية.
11. تعلم لغة تفاعلية -من جانب الخادم-. إذا اخترت أن تحد نفسك بتطبيق خادم واحد ، فتعلم لغة واحدة مدعومة من قبل ذلك التطبيق. أما إذا لم تقم بذلك ، فعليك تعلم لغة برمجية واحدة على الأقل على كل خادم تعمل عليه.
12. قم بإنشاء مشروع تجريبي لك بعد الانتهاء من تعلم اللغة التفاعلية -المتعلقة بالخادم-.
13. احصل على موقعك الشخصي وابدأ تجاربك الخاصة من على صفحتك بالشبكة.
مبرمجي التطبيقات المكتبية
تطبيقات سطح المكتب لا تحتاج لمتصفح وتعمل بشكل مستقل. متصفح الإنترنت نفسه هو أحد تطبيقات سطح المكتب ، وأغلب مبرمجي تطبيقات سطح المكتب يكتبون برامج كحلول تجارية ، فلذلك أخذ فكرة عن الأعمال التجارية والهيكل التنظيمي والمالي للمؤسسات سيوفر لك الوقت والجهد الكثير.1. الوقوف على مختلف بنيات أجهزة الحاسب الآلي. وأخذ دورة تمهيدية في تصميم الدوائر الرقمية وأخرى في هندسة الحاسب المعمارية أمر مفيد ، الا أن البعض يرى أنها صعبة كنقطة بداية في هذا المشوار ، ولذلك تكفي قراءة مقالين تعليميين أو ثلاثة ، ثم يمكنك العودة لهذه الخطوة في وقت لاحق ، بعد أن تتقن لغتك البرمجية الأولى.
2. تعلم لغة برمجية بسيطة (للأطفال). لا تخجل من تعلم مثل هذه اللغة فقط لأنك أكبر سنا من أن يطلق عليك "طفل”. بحيث يمكن لمثل هذه اللغات البرمجية أن تسهل من ألم تعلم لغتك البرمجية الأولى بصورة ملحوظة. ولكن هذه الخطوة اختيارية ويمكن القيام بها قبل الخطوة السابقة.
3. الحصول على مدخل في أساليب البرمجة الوظيفية ، الكائنية المصدر والبرمجة الإجرائية.
4. أخذ دورة تمهيدية في واحدة من لغات البرمجة الإجرائية. بغض النظر عن اللغة التي ستختارها لاحقا ، فأنك ستحتاج للبرمجة الإجرائية عند مستوى معين. كما أن أغلب المبرمجين يرونها بأنها الأسهل للاستعمال كنقطة بداية ولتكوين فكرة عن البرمجة عموما.
5. تعرف على واحدة على الأقل من تقنيات النمذجة المتقدمة مثل UML أو ORM.
6. ابدأ بكتابة بعض تطبيقات سطر الأوامر الصغيرة (يمكنك الاستفادة من التمارين العامة في كتب لغات البرمجة).
7. خذ دورة متقدمة في اللغة البرمجية التي قمت باختيارها في الخطوة رقم 3. تأكد من فهمك المفاهيم التالية جيدا مع إمكانية التطبيق دون صعوبة تذكر قبل المضي قدما: o إدخال وإحراج المعلومات إلى مستخدمي البرنامج.
o الانسياب المنطقي وانسياب تنفيذ تعليمات البرامج بالنسبة للبرمجة الاجرائية.
o تصريح ، وتعيين ومقارنة المتغيرات.
o تراكيب البرمجة الشرطية مثل if..then..else و select/switch..case.
o التراكيب التكرارية (الحلقية) مثل while..do ، do..while/until ، for..next.
o القواعد اللغوية للغتك البرمجية الخاصة بإنشاء واستدعاء الإجراءات والدوال.
o أنواع البيانات وطرق استعمالها.
o أنواع البيانات المعرفة من قبل المستخدم (الوحدات/التراكيب/السجلات) واستخدامها.
o إذا كانت اللغة المستخدمة تدعم overloading functions ، فافهمها.
o طرق وصول اللغة المستخدمة للذاكرة مثل (المؤشرات ، الخ...)
o اذا كانت اللغة المستخدمة تدعم operators overloading ، فافهمها.
o اذا كانت اللغة المستخدمة تدعم مؤشرات الدوال/المندوبين ، فافهمها.
8. قم بتطبيق التقينيات المتقدمة التي تعلمتها.
9. خذ دورة تمهيدية في لغة برمجية واحدة على الأقل ضمن نموذج برمجي مغاير ، ويفضل في إحدى النماذج التالية (نوصي بتعلم لغة برمجية واحدة من كل مسار ، وأغلب المبرمجين المحترفين يقومون بذلك ، ومع ذلك ، فأنك عادة ما تبدأ مع نموذج واحد ، والعمل عليه مع تطبيق وممارسة ما قمت بتعلمه ، ثم وفي وقت لاحق قم بتعلم اللغة الأخرى بعد أن تكون لديك خبرة عملية في البرمجة). o البرمجة الكائنية المصدر
o البرمجة المنطقية
o البرمجة الاجرائية
10. حاول إجراء مقارنة بين أي لغتين برمجيتين تعلمتهما حتى الآن للوقوف على مواطن القوة والضعف لكل منهما. وعادة ما يتم ذلك عن طريق: o أخذ عينات بسيطة من أعمالك المبكرة في اللغة البرمجية الأولى وإعادة كتابتها مستخدما اللغة البرمجية الثانية.
o أنشأ مشروع جديد وحاول تنفيذه باستخدام كل من اللغتين. أحيانا ، وحسب اختيارك للمشروع واللغات البرمجية المستخدمة في تنفيذه ، قد لا تكون قادرا على تنفيذ المشروع باستخدام إحدى اللغات!
o كتابة ورقة سريعة أو جدول تلخيصي للمقارنة بين التراكيب المتشابهة في كل من اللغتين والخصائص المميزة لكل منهما.
o حاول إيجاد طرق لمحاكاة الخصائص المميزة بكل من اللغتين باستخدام اللغة الأخرى.
11. تعرف على مفاهيم البرمجة المرئية باستخدام احد اللغات البرمجية (جميع اللغات البرمجية تقريبا تتضمن إصدارات/مكتبات تدعم البرمجة المرئية وأخرى تدعم البرمجة النصية أو شبه النصية). ويمكن تحقيق ذلك عن طريق ما يلي: o الحصول على مقدمة في البرمجة الموجهة بالأحداث. بحيث أغلب البرمجية المرئية في بعض المستويات تعتمد على الأحداث وطرق معالجتها (مستخدما اللغة البرمجية خاصتك).
o حاول استخدام أكبر قدر ممكن من التطبيقات المكتبية وافهم وظيفة كل منها. كما تصدر أغلب شركات تطوير البرامج نسخ تجريبية (بيتا) من منتجاتها ليتسنى تجربة البرنامج من قبل المستخدمين. والاطلاع على أحدث تطويرات واجهة المستخدم.
o قراءة بعض المقالات أو الدروس التعليمية في واجهات المستخدم الرسومية.
12. ابدأ بتطبيق الجانب النظري من خلال تصميم مشاريع برمجية متواضعة. حاول تطبيق خبرتك البرمجية لحل المشاكل التي تواجهها في حياتك اليومية . فعلى سبيل المثال ، قم بتصميم برامج تقوم بتغيير أسماء الملفات بشكل جماعي ، تقارن ملفات نصية مرئيا ، تقوم بنسخ أسماء الملفات في الدليل للذاكرة أو ملف نصي ، أو أشياء من هذا القبيل. ابقه بسيطا في البداية.
13. قم بإنشاء مشروع تخرج افتراضي والذي يتعين عليك إكماله ، مطبقا تقنيات البرمجة البصرية التي تعلمتها حتى الآن.
14. وسع إدراكك للتطبيق/المكتبة/الإطار البصري الذي تعلمته مسبقا من خلال أخذ دورات متقدمة ، مع تركيز إضافي على العديد من التفاصيل والخدع والنصائح لإطار العمل الذي تستخدمه من على الإنترنت.
15. ابحث عن حزم/مكتبات أخرى من العناصر البصرية للغات البرمجية التي قمت بتعلمها.
16. أخذ دورة في الرسوميات (ليس التصميم الجرافيكي) سيكون مساعدا جدا للمبرمجين الراغبين في كتابة عناصر جذابة لواجهة المستخدم الرسومية.
17. تعتبر برمجة الألعاب ،في أغلب أجزائها، برمجة لتطبيقات سطح سطح مكتبية. وإذا كنت تنوي أن تصبح مبرمج ألعاب ، فانك بحاجة لمعرفة المزيد عن برمجة الألعاب بعد الانتهاء من هذه الخطوات. بحيث تعتبر دورة الرسوميات إلزامية لمبرمجي الألعاب كما يجب أن تكون لغة الاختيار الثانية في الخطوات السابقة أحد اللغات البرمجية المنطقية/الوظيفية (يفضل لغة Prolog أو Lisp).
مبرمجي التطبيقات الموزعة
يعتبر الكثيرون برمجة التطبيقات الموزعة من أصعب أنواع البرمجة كما أنها تتطلب معرفة متنوعة في كل من الحاسوب وتكنولوجيا الاتصالات.1. خذ دورة سريعة في أنظمة الاتصال الهاتفية وأجهزتها. هذه الخطوة اختيارية. مع ذلك ، تعتبر مفيدة لفهم علوم الشبكات.
2. تعرف على الهندسة المعمارية للشبكات والاجهزة المستخدمة مثل المجمعات ، و المبدلات ، والراوترز.
3. خذ دورة في أساسيات وبروتوكولات الشبكات. فأنت بحاجة لفهم جيد لكل من نموذج OSI ، شبكة الإيثرنت ، IP ، TCP ، UDP و HTTP قبل البدء ببرمجة مثل هذه التطبيقات.
4. تعلم لغة XML وتعرف على حيثياتها.
5. قم بالخطوة الثانية والثالثة من خطوات إعداد نفسك لبرمجة تطبيقات سطح المكتب. 6. ابدأ من خلال تعلم لغة نصية -سطر الأوامر-. في إذا كنت تبرمج تحت نظام ويندوز ، فيمكنك اختيار أي لغة نصية تعمل ضمن مضيف ويندوز للغات النصية. أما بالنسبة للبرمجة على نظام لينكس ، فيكفي استخدام كل من نصوص Bash و Perl. كما يوصى بشدة اعتماد Javascript لهذه المهمة في كل من المنصتين (لينكس/ويندوز) وذلك للأسباب التالية:
o توفر الدعم من قبل أي مضيف نصي في أي نظام تشغيلي (يدعم نظام ويندوز javascreipt بشكل افتراضي ، كما أن اغلب توزيعات لينكس تحتوي على حزمة لدعم برمجة javascript).
o تعتبر الأسهل للتعلم من قبل العديد من المطورين.
o تحتوي على قواعد مستمدة من ALGOL والذي يجعل من اللغات الأخرى أمرا مألوفا عند رغبتك باختيار لغة برمجية ثانية (تحتوي كل من C, C++, C#, Java و J# على هذه الخاصية)
o عن طريق تعلم Javascript ، ستعرف نفسك على البرمجة -الموجهة للعميل- والتي تعتبر اثر جانبي إضافي.
7. قم بتطبيق البرمجة الإجرائية فقط باستخدام اللغة البرمجية النصية كبداية. بعد ذلك ، يمكنك استخدام نماذج وتقنيات برمجية متقدمة أكثر حسب اللغة المستخدمة والتقنيات التي تدعمها. جميع اللغات البرمجية النصية تحتوي على بعض سمات البرمجة الإجرائية.
8. استخدم اللغة النصية التي تعلمتها في كتابة نصوص برمجية تقوم باتصالات بين الأجهزة. تعرف على النقاط الأساسية للقيام بذلك. ويكفي القيام باتصالات بسيطة.
9. انتقل لاستخدام لغة برمجية/نصية مكتبية. من المفضل اختيار لغة تدعم عدة أساليب برمجية مثل بايثون. خذ مقدمة بسيطة لهذه اللغة البرمجية الثانية. تعتبر لغة جافا من اللغات المفضلة لأغلب المبرمجين في هذا المجال لأسباب عدة ، ومع ذلك فإن لغة #C اكتسبت زخما سريعا في هذا المجال. يفض استخدام لغة جافا و #C وذلك للأسباب التالية:
o تعتبر من اللغات البرمجة الكائنية التوجيه ، والتي تحمي المبرمجين - بشكل عام - من الاهتمام بتفاصيل التنفيذ لأنهما على حد سواء تدعم وحدات (الوحدات هي عبارة عن مجموعة من الشفرات المصدرية شبه مترجمة ، و تقوم بمهمة محددة مع امكانية استخدامها في برامج أخرى).
o تدعمان البرمجة الموجهة بالأحداث كما تدعمان كل من البرمجة الكائنية و البرمجة الاجرائية على نفس المستوى.
o إطار العمل الذي بني عليه اللغة موزع بطبيعته (يعمل على الكثير من المنصات) (في حالة لغة جافا).
o توفر العديد من الحزم الجاهزة والتي تتعامل مع الشبكات سواء كشفرة مصدرية مفتوحة المصدر أو كحزم مدمجة باطار العمل على حد سواء ، بحيث يسهل للمبرمجين امكانية البناء على عمل الأخرين.
10. ركز أكثر على الميزات الرئيسية للغة ، خاصة تلك التي تدعم الربط الشبكي. أولِ اهتمام أقل على عناصر واجهة المستخدم مثل الاخراج ، تقنيات تصميم النوافذ ، وعناصر واجهة المستخدم الرسومية.
11. خذ دورة في تصميم والهندسة المعمارية للبرامج التوزيعية. يمكن القيام بذلك من خلال الاستعانة بالكتب ، دروس تعليمية من على الشبكة أو مقررات دراسية. على أية حال ، فهم مفاهيم الهندسة المعمارية لمثل هذه البرامج أمر ضروري.
12. تعلم بناء الخدمات و المكونات الخدمية باستخدام لغتك البرمجية.
13. تعرف على واحدة أو أكثر من التقنيات التالية. يفضل بأن تحصل على مقدمة على الأقل لكل منها. أغلب مبرمجي هذا المجال لا يتوقفوا عند حد لغة برمجية واحدة أو اثنتين ، ولكن يتعلموا لغة برمجية واحدة على الأقل لكل نظام تشغيلي. ولذلك في حالة رغبتك أن يكون تطبيقك "موزعا” ، عليك بتوفير نسخة من التطبيق لكل نظام تشغيلي رئيسي على الأقل. CORBA
SOAP
AJAX
DCOM
NET Remoting
XML Web Services
مبرمجي منصة/اطار عمل/مكتبة
مبرمجي الأساس عبارة عن مبرمجي ذو خبرة فحسب حيث انتقلوا من برمجة التطبيقات لبرمجة شفرات مصدرية يمكن استخدامها من قبل مبرمجين آخرين. 1. تعلم لغة برمجية تدعم بناء حزم/مكونات قابلة لاعادة الستعمال اذا كنت لم تقم بذلك في رقم 1.2. خذ دورة متقدمة في كل من UML و ORM. أغلب مطوري المكتبات يستخدمون احداهما أو كلاهما.
3. خذ دورة في هندسة البرمجيات.
4. تعرف على الأقل على مفاهيم وتقنيات كل من التراكيب ، كائنية المصدر ، والبرمجة الموجهة بالأحداث. فكلما زاد اطلاعك على عدد من اللغات والنماذج البرمجية ، كلما زادت فرصتك بأن تكون مبرمج حزم/مكتبات ناجح.
5. تعرف أكثر على الأنظمة التشغيلية المختلفة وأطر العمل البرمجية المدعومة من قبل هذه الانظمة التشغيلية.
6. ركز جهودك على منصة معينة وتعرف على كل من التقنيات واللغات البرمجية وأطر العمل التي تدعمها.
7. اذا كانت اللغات البرمجية التي تعلمتها حتى الآن تدعم كل من معايير ANSI/ISO/IEEE. فعليك باتقانها ومحاولة استخدامها عند الإمكان.
8. حاول تقليد مكتبات بسيطة موجودة مسبقا ، خاصة اذا كانت مفتوحة المصدر. فهذه النقطة مفيدة خلال المرحلة المبكرة في مشوارك لكي تصبح مبرمج حزم/مكتبات. ابدا مع حزم بسيطة مثل مجموعات وحدات التحويل وحزم الحسابات العلمية المتوسطة. اذا كنت طالب جامعي ، حاول الاستفادة من المواد غير برمجية عن طريق محاولة معاملة المعادلات والجانب العلمي كمكتبات.
9. حاول استخدام الحزم المفتوحة المصدر في مجالك البرمجي. في بداية الأمر قم بتنزيل الحزم الثنائية/القابلة للتنفيذ ،حاول استعمالها والتركيز على نقاط القوة والضعف. بعد ذلك ، حاول فهم طريقة عمل البرنامج وكيف تم القيام بذلك من خلال قراءة الشفرة المصدرية للبرنامج. حاول اعادة كتابة هذه المكتبات أو أجزاء منها. في البداية قم بذلك بعد الاطلاع على الشفرة ، وبعد ذلك حاول القيام بذلك قبل الاطلاع عليها. في المراحل المتأخرة ، حاول اضافة بعض التحسينات لهذه المكتبات.
10. تعرف على النهج المختلفة المستخدمة في نشر وتوزيع مثل هذه العناصر على المبرمجين.
11. عادة ما يميل مبرمجو الحزم/المكتبات على التفكير بشكل متكرر بكل المشاكل التي تواجههم.عند قيامك بذلك ، حاول التفكير بكل مشكلة على أنها مجموعة من المشاكل الصغيرة (تسلسل من المهام البسيطة) أو كعملية متكررة في تضييق نطاق المشكلة لمجالات أصغر نطاقا ثم تقوم بعد ذلك بتجميع هذه المجالات مع بعضها البعض.
12. يميل مبرمجي الحزم/المكتبات إلى التعميم. وذلك ، عندما تعرض عليهم مشكلة بسيطة ومحددة ، يقوموا بالتفكير في مشكلة أشمل ويحاولوا معالجة هذا المشكلة العامة والتي بدورها تقوم بمعالجة المشكلة اﻷصغر بصورة تلقائية.
مبرمجي نظم التشغيل
يتعامل مبرمجي نظم التشغيل مع نواة النظام التشغيلي التي تدير العتاد ، و مع التعريفات الأجهزة و التطبيقات المنخفضة المستوى مثل المترجمات . 1. اتبع الخطوات الثلاث الأولى في برمجة تطبيقات سطح المكتب.2. خذ دورة تمهيدية في الجبر الخطي (linear Algebra).
3. خذ دورة في التكامل و التفاضل.
4. خذ دورة في المنطق و/أو الرياضيات المنفصلة (Discrete).
5. عرف نفسك لعدة أنظمة تشغيلية مجردة. ويمكن القيام بذلك من خلال: o معرفة طريقة تثبيت الأنظمة التشغيلية.
o معرفة طريقة تثبيت عدة أنظمة تشغيلية على جهاز واحد (خطوة اختيارية ولكنها مستحسنة).
o قم تثبيت عدة أنظمة تشغيلية. لا تثبت أي حزم خدمية مساعدة ،وانما حاول الاعتماد على القدرات الوظيفية المجردة التي تقدمها الأنظمة التشغيلية نفسها.
6. خذ دورة (أو اقرأ كتب بدلا عن ذلك) في هندسة مكونات الحاسب المعمارية.
7. توسيع مداركك لمنصات أجهزة الحاسب المختلفة.
8. الحصول على فهم مبدئي للغة التجميع/الآلة لنظامك التشغيلي/منصة الأجهزة المستخدمة. (ستتعلم لاحقا لغة التجميع الخاصة بالأنظمة/المنصات الأخرى).
9. تعلم لغة ANSI C ، جنبا إلى جنب مع مفاهيم البرمجة الاجرائية.
10. قم بفهم وممارسة المكتبات الافتراضية للغة C خاصة STL وربما ATL أيضا.
11. قم بالبحث في مصادر الشبكة ، الكتب والمواد الدراسية لمعرفة الصفات المميزة للغة C ضمن منصتك التشغيلية.
12. قم بممارسة لغة C من خلال كتابة شفرة متقدمة.
13. انتقل لاستخدام لغة ++C.
14. تعلم خصائص متقدمة من لغة التجميع (Assembly).
15. خذ دورة في تصميم نظم التشغيل.
16. قراءة وثائق نظامك التشغيلي (ستكون هذه العملية سهلة اذا كان نظامك التشغيلي مبني على نظام يونكس التشغيلي). افهم طريقة عمل نظامك التشغيلي بصورة جيدة.
17. قم بممارسة المعرفة النظرية المكتسبة. قم بانشاء برامج خدمية متواضعة. وهي عادة ما تكون مفيدة لـ: o حاول اعداة انشاء أدوات ضغيرة والموجودة مسبقا بالنظام.
o حاول نقل بعض الأدوات الموجودة على الأنظمة التشغيلية الأخرى لنظامك التشغيلي.
18. هذا هو المكان الوحيد الذي عليك أن تكون حذرا في اختيار لغتك البرمجية الأولى. فعليك بتعلم لغة ANSI C ، وليس لغة ++C ، ولا #C ، ولا Java ، ولا حتى لغة D.
19. التقيد بلغة C فقط لأن برمجة الأنظمة التشغيلية لأن ذلك يتطلب فهم كل من المفاهيم التالية: o تجميع كامل وحقيقي من الشفرة المصدرية.
o التعامل مع ملفات اخراج كائنية منخفضة المستوى.
o الربط بين الملفات الثنائية.
o برمجة لغة التجميع/لغة الألة من اللغات المنخفضة المستوى. بحيث تعتبر لغة C لغة تنكرية/سهلة للتعلم مقارنة مع لغة التجميع (Assembly). كما يمكنك اضافة شفرات من لغة اﻷلة ضمن الشفرة المصدرية متى رغبت بذلك ، و تعتبر لغة اجرائية شأنها في ذلك شأن لغة التجميع.
علماء البرمجة
علماء البرمجة عبارة عن مبرمجين متمرسين ذو خبرة ، حيث عكفوا على تطوير تقنيات الحاسوب مثل التشفير ، لغات البرمجة وخوارزميات البحث في البيانات بدل العمل على تطوير التطبيقات. ونادرا ما يتم الوصول لهذا المستوى دون تفان ودراسة أكاديمية.1. الحصول على خبرة معرفية علمية توازي درجة الباكلوريوس/الدبوم في علوم الحاسب الآلي. ويمكن أن يتم ذلك عن طريق سلوك أحد المنحيين التاليين: o الحصول على درجة أكاديمية فعلية ( وهذا ما يتم عادة).
o الحصول على خطة دراسية لدرجة أكاديمية مماثلة من احدى الجامعات الحديثة ، وتقوم بعد ذلك بدراسة هذه المواد بنفسك أو كمواد دراسية منفصلة. نظريا يمكن تحقيق ذلك ، ولكن يفضل سلوك المنحى الأول.
2. تحديد مجال التخصص. وكلما كنت أكثر تحديدا في اختيارك كلما كان أفضل لك. يعتمد الاختيار حسب ميولك ، ولكن ، هذه قائمة ببعض المواضيع الرئيسية في علوم برامج الحاسوب: o تصميم الخوارزميات مثل (البحث ، الفهرسة ، التشفير ، فك التشفير ، واكتشاف الأخطاء في الاتصالات).
o تحسين/تصميم المترجمات/لغات برمجية.
o مجالات الذكاء الاصطناعي (التعرف على الأنماط ، التعرف على الكلام ، معالجة اللغات الطبيعية والشبكات العصبية).
o علوم الروبوتات
o البرمجة العلمية.
o أجهزة الحاسب الفائقة السرعة.
o التصميم/النمذجة بمساعدة الحاسوب.
o الواقع الافتراضي.
o علوم رسوميات الحاسوب. عادة ما يخلط بين هذا المجال ومجال التصميم الرسومي أو تصميم واجهة المستخدم الرسومية. مجال رسوميات الحاسوب عبارة عن العلم المختص بكيفية تمثيل الرسوميات في أنظمة الحاسوب.
3. حاول الحصول على درجة علمية عليا مثل الماجستير أو حتى الدكتوراة 4. تعرف على اللغات البرمجية والتقنيات المستخدمة ضمن التخصص الذي قمت باختياره.
ترجمة للمقال:How to Become a Programmer بواسطة: زاهر النوتكي
الترخيص : Creative Commons
disqus