أنا لا أريد تعلم البرمجة بل أريد إحترافها بل أريد اللعب بها كيف السبيل إلى ذلك ؟
-طلبت شيئا عظيما و لكن معك حق يجب أن تمشي بمقولة كن مبرمجا أو لا تكن نعم هذه هي المقولة الصحيحة لأنه كونك مبرمج و لا تستطيع حل مشكل واجهك أو لا تستطيع إكمال مشروع بدأت فيه فأنت لست بمبرمج حقيقي لماذا ؟ ينقسم المبرمجون إلى قسمين أساسيين: القسم الأول هم المبرمجون العاديين يكتبون برامج و أكواد بسيطة أو حتى معقدة و لكن يبقى ينقصهم شيئ يسمى الإبداع و الأفكار الجديدة فتجد برامجهم كلاسيكية و لا تخلو من الأخطاء و الثغرات البرمجية هذا القسم من الأشخاص بصراحة لن يذهب بعيدا بالبرمجة. القسم الثاني هم المطورون أو المحترفون لماذا يسمون كذلك لأنهم لا يقومون بكتابة البرامج فقط بل يطورونها و في غالب الأحيان يقوم المطورون بتعديل و تطوير برامج القسم الأول , يتقنون عدة مهارات و أساليب حازوا بها هذا الاسم عن جدارة .
لقد شوقتنا أريد فعلا أن أصبح مطور كيف السبيل إلى ذلك؟
جميل تريد أن تصبح محترف , يجب أن تعرف أولا من هم المطورون . يبدأ طريق الإحتراف من النية فاجعل نيتك ل لله و دع عنك كل الزيف والمظاهر والتباهي لأن المظاهر تشتت الفكر وكل ما يحتاج إليه المحترف هو قوة التركيز ،فلتكن نيتك العمل لصالح الإسلام و المسلمين و لو علم الله أنك صادق سيفتح لك أبواب العلوم و المعارف و ستحصل العلم والثواب معا وﺫلك هو الفوز المبين. يقوم المحترفون بحل المشاكل و صنع الأشياء . و يؤمنون بالحرية و بالعمل التطوعي. لكي تعرف كمحترف يجب أن تتصرف بهذا المنطق, يجب أن تكون حر الفكر واسع الخيال, و لكي تتصرف بهذا المنطق يجب أن تؤمن بهذا المنطق. و لكن إذا ادعيت الإيمان بهذه المبادئ لكي تكتسب القبول في هذا المجتمع فسوف تفقد الهدف الأساسي وهو حرية الفكر و العمل التطوعي لأن فكرك صار مربوط بمن حولك. لكن لماذا العمل التطوعي بالذات ؟ لأن العمل التطوعي يكسبك الكثير من الأفكار الجديدة لا أعرف كيف يحدث هذا الشئ و لكن اعلم أنه مهم جدا و أقل شيئ ستكسب الثواب من الله. إيمانك بهذه المبادئ مهم بالنسبة إليك فسوف يساعدك و يدفعك إلى التعلم سيزيد في الحافز التعليمي لديك . مثل كل الفنون الإبداعية أفضل الطرق لتصبح محترف هو أن تفكر بعقل محترف ليس فقط فكريا و إنما عاطفيا أيضاً يجب أن تقنع نفسك أنك محترف.
راقب المحترف , تتبع المحترف, فكر بعقل المحترف, كن محترف.
كونك محترف سيصبح مصدر رضي لك و لكنه رضي يحتاج لمجهود شاق. هذا المجهود يحتاج إلى دافع و حافز قوي، يحصل الرياضيون على الدافع من نوع السعادة عند جعل أجسادهم في حالة أفضل و عند النظر إليها في المرآة، فهي تخطت حدود طاقتهم الجسدية. بالمثل، لتصبح محترف يجب أن تحصل على السعادة من حل المشاكل و عمل البرامج الخارقة التي عجز عنها الكثير ، يجب عليك تطوير مهاراتك، و استعمال ذكائك حتى يتخطى الحدود ولا يوجد حدود للعقل ،مهمتك كمحترف برمجة هي حل المشاكل مهما كانت ويجب أن تكون لديك دائما الحلول الجديدة و بمصادر مفتوحة فلو أن المسلمين تبادلوا المشاريع المفتوحة المصدر بينهم و تشاركوا في تطويرها يدا بيد ل استفاد الكل و هذا يسمح للمبتدئين بتطوير أسلوبهم بالاعتماد على هته المشاريع أما أن يطور كل واحد برنامج يجعله مفلوق المصدر فلن يستفيد أحد بل ستنتج طبقية فكرية في المجتمع يا إخواني موضوع المصدر المفتوح موضوع مهم جدا وهو أحد ركائز الاحتراف أضرب مثال بالجامعات الأمريكية فهي تطور كل شهر برامج مفتوحة المصدر وتشارك معها كل الجامعات الأخرى ويستطيع كل الطلاب تعديل هته البرامج و متابعة تطورها مجانا فما كانت النتيجة طالب(لينوس تورفالدس) استطاع أن يضع حجر الأساس لليونيكس أعظم نظام في العلم. وهو في سن العشرين. عالم المعلوماتية عالم معقد و سريع لكي تقتحم هدا العالم يجب أن تكون لديك القدرة على سرعة التأقلم وتكون لديك القدرة على رؤية الأشياء على حقيقتها ،فإذا طرحت في السوق تقنية جديدة تستطيع تحليلها وفهم طريقة عملها والأهم المشاكل و الثغرات التي تحتويها ،هنا يبدأ عملك يا محترف طرح الحلول و سد الثغرات وهدا هو التميز بعينه لأننا قلنا أن المبرمجين ينقسمون إلى قسمين فالأول يكتفي بكتابة البرامج أما الثاني فيقوم بتطويرها و حل المشاكل التي تواجهها .ولا يخفى عليكم أن عالم البرمجة هو عالم المشاكل بحد ذاته فلإنجاز مشروع صغير ستواجه العشرات من المشاكل لدى هيئ نفسك لما ينتظرك وإن واجهتك مشكلة أدرس أسبابها أولا ثم عالج الأسباب واحدا تل و الآخر وحاول تجديد أفكارك لكي لا تقع في فخ التكرار إذا لم تصل إلى الحل لا تعيد نفس الفكرة بل غيرها تماما حاول تغيير الإستراتيجيات التي تواجه بها المشكل مع كل مرة و حاول إدخال بعض الأمور الجديدة على أسلوبك مع كل مرة حتى تبقى دائم التطور و التجدد.
اللغات التي يستعملها المحترف
طريقة تفكير المحترف مطلوبة و لكنها لا تغني عن المهارات الأساسية التي يجب أن تتوفر لديه قبل أن يستطيع أي شخص أن يلقبه بلقب المحترف .
يملك المحترف عدة لغات برمجة معينة تساعده على حل المشاكل و عمل برامج و مشاريع متميزة , إذا كنت أخي القارئ لا تعرف أي من لغات البرمجة فاتبع المنهج التالي الذي سيقودك للاحتراف بسهولة لغات البرمجة كثيرة ومتنوعة منها السهلة ومنها الصعبة منها القوية ومنها الضعيفة منها مايفيد و منها ما يضر .
إﺫا كنت لا تعرف أيا من لغات البرمجة أنصحك بالبدء بتعلم لغة البايثون python فهي لغة رائعة و حديثة و سهلة على المبتدئين .أنشأت هذه اللغة خصيصا لمستعملي لغة السي حتى يستعينوا بها لعمل مشاريع في وقت قصير .
كتبت هذه اللغة بلغة السي و هي تعمل كل ما تعمله لغة السي طبعا لن تعطيك الحرية كحرية السي و لكن من حيث الفعالية لا يوجد فرق بينهما و لا تغرك سهولة هذه اللغة و تضن أنها ضعيفة فقد كتب بواسطة هذه اللغة كل أدوات توزيعة الردهات redhatو لمن لا يعرف الردهات هي توزيعة لينيكس المستعملة من طرف أغلب الخوادم server و يغيضني في قلبي عندما أرى المسلمين يجهلون عن هذه اللغة الرائعة بل إن البعض يشكك في فعاليتها و هذه أخي القارء بعض المشاريع التي استعملت لغة البايثون فيها .
Google, NASA, YouTube, Industrial Light & Magic, One Laptop Per Child, Opie sur pocket PC,
كما نرى لغة البايثون قوية و واسعة الإستعمال فبالرغم من كونها لغة جيده للبدأ بها فهي ليست لعبة بل انها لغة قوية و مناسبة للمشاريع الكبيرة إنها لغة لن تجد صعوبة كبيرة في تعلمها و ستكسبك الثقة في النفس وستتعلم معها أساسيات البرمجة في ظرف زماني قصير لأنها لغة سلسة و غير معقدة.
لغة البيرل perl أو الجافا java تعتبر أحسن إختيار ثاني لك أنا أفضل أن تتعلم البيرل أولا فهي اللغة التي تستعمل في إدارة أنظمة الشبكات و التحكم في الخوادم عن بعد كما تستعمل في برامج التواصل عن بعد إذا تعلمت لغة البايثون لن تجد صعوبة في تعلم لغة البيرل لأنهما متشابهتان نوعا ما .
لغة الجافا أصعب قليلا و لكنها تنتج أكواد أسرع من لغة البايثون و البيرل كما أنها أصبحت واسعة الإستعمال حتى الروبوتيك صار يبرمج بهذه اللغة و هي لغة شابة سريعة التطور وهي أحسن لغة تتعلم بها مبادء البرمجة الكينوية لأنها لغة موجهة صارمة للغاية و تمهدك جيدا لدخول إلى عالم السي ++.
عند وصولك لهذه المرحلة يجب عليك إدخال تقنيات جديدة على برامجك كالتعامل مع تقنيات CGI أو البرمجة بواسطة مكاتب SQL و برمجة تطبيقات تستخدم فيها مكتب الشبكات RTp,H.323,SIP.. لكن احذر، لن تصل إلى مستوى المحترف أو حتى إلى مستوى المبرمج العادي إذا تعرفت على لغة برمجة واحده أو اتنتين. يجب أن تتعلم كيفية التفكير في المشاكل البرمجية بشكل عام. مستقلا عن أية لغة برمجة لا تربط نفسك بلغة معينة.
لكي تصبح محترف يجب أن تصل إلى مستوي حيث يمكنك تعلم لغة برمجة في أيام عن طريق ربط ما هو موجود في كتيب هذه اللغه بما تعرفه انت مسبقا. و هذا يعني تعلمك للعديد من لغات البرمجة , يجب أن يكون لديك أسلوبك الخاص لا تربط نفسك بأسلوب لغة معينة لأنك إذا غيرت اللغة ستضطر إلا تغير أسلوبك بالكامل.
اذا بدأت في التعمق في برمجة بجدية فسوف يجب عليك تعلم لغة السي، لغة العصر , قلب نظام التشغيل يونكس. لغة السي++ قريبه جدا من لغة السي ولكنها أوسع منها ، إذا تعلمت واحده فسوف يصبح من السهل عليك تعلم الأخرى . ليست أي منهما الاختيار الصحيح لكي تبدأ به.
في الحقيقة كلما استطعت الابتعاد عن البرمجة بالسي كلما أصبحت أكثر انتاجية. السي لغة قوية و موفرة لمصادر جهازك ولكن لكي توفر السي هذه الميزة يتوجب عليك عمل العديد من الوظائف بنفسك للتحكم في المصادر ( كالذاكرة مثلا) و لقد انشأة هذه اللغة لتحل محل لغة fortran التي كانت معتمدة سابقا فهي قريبة نوعا ما إلى تشكيلة النظام مما يتطلب منك كتابة شفراة كثيرة لإنجاز برامجك كل هذه الشيفرة البرمجية تزيد من احتمالات الخطأ و سوف تتطلب منك وقت أطول في تتبع الأخطاء بالبرنامج. هذه الميزة ليست في غاية الأهمية هذه الأيام مع وجود أجهزة قوية كالموجودة حاليا. يفضل استخدام لغة برمجة تقوم بإهدار مصادر الجهاز و لكنها ستقوم بتوفير وقتك مثل البايثون. إﺫ أنك تستطيع حل مشكل بواسطة البايثون في 15سطر ولو حاولت حل هذا المشكل بلغة السي سيكون الكود 60 سطر و خلاصة القول إتجه إلى السي إٍِلآْ إﺫا احتجت إليها حتى توفر وقتك و جهدك.
بعض الناس يعتبروني أهاجم لغة السي بهذا الكلام و هذا خطأ لأني مهوس بهذه اللغة و لكن الحق حق , و كما قلت لك لا تربط نفسك بلغة معينة . اجعل السي دائما آخر الحلول , تجد المبتدئيين دائما يتجهون إلى هذه اللغة ظنا منهم أن تعلمها سيختصر عليهم الطريق و هذا خطأ كبير جدا لن تستطيع أخي القارء إتقان هذه اللغة حتى تكتسب خبرة جيدة جدا في البرمجة أنا لا أتكلم عن 5 أشهر أو عام بل أتكلم عن خبرة برمجة بثلاث لغاة على الأقل و لا تغرك المواضيع المطروحة في المنتديات عن هذه اللغة و التي يزينها أصحابها بعنواين زائفة "إحترف لغة السي من الصفر ..." لغة السي لا تستخدم لطباعة الأرقام على الشاشة و حل معادلة من الدرجة الثانية و لكن تستخدم لـ التحكم في عمل المعالج أو برمجة التعريفات drivers أو التحكم في أعمال الجهاز gestion des processus كما أنها تستخدم في برمجة أنظمة الأمان العالية الحساسية .. و المبتدأ لن يستطيع إستيعاب هذه الأمور حتى يتمرس في مجال البرمجة جيدا , إذا أخي القارئ انس هذه اللغة الآن تماما و ستأتي بها الأيام إن شاء لله اختر لغة سهلة و سلسلة تكسبك الثقة بالنفس و تمكنك من فهم مبادئ البرمجة بسهولة.
تستحق لغة ليسب lisp لفت الانتباه لها لسبب مختلف، بسبب التجربة الرائعة التي سوف تحظى بها عندما تصل إلى فهم هذه اللغه المخصصة ل برمجة الذكاء الإصطناعي و ستكسبك خبرة تحسد عليها في التعامل مع بنوك المعلومات و أمانها . هذه الخبرة سوف تجعلك مبرمج أفضل لباقية حياتك حتى لو لم تستخدم هذه اللغه كثيرا.
لغة PHP أيضا صارت من تعتبر من أهم اللغات لأن جل الصفحات الديناميكية أو صفحات الويب صارت تكتب بها لدى يجب عليك تعلمها أو على الأقل فهم الأكواد المكتوبة بها كما أنك تستطيع إدماجها مع لغة السي ( على الينيكس) و تستفيد من ميزاتها كما قلت من قبل لحفظ الوقت و المجهود.
يجب عليك أيضا فهم الأكواد المكتوبة بالـ HTML التي يعتبرها الكثير لغة برمجة مع أنها لاتمس للبرمجة بصلة لكن يجب عليك فهمها جيدا لأنك ستصادفها كثيرا هي و XML
ْ
أفضل اختيار بالطبع أن تتعلم الخمس لغات. البايثون، السي، السي++، الجافا، البيرل, بي إتش بي ، و الليسب. إلى جانب أنهم أهم اللغات المحترفين فهم يمثلون تعريف بأكثر من تقنية برمجية و كل منهم سوف يعلمك شئ ذو قيمة عاليه و ستكتسب من كل لغة أفضل ما فيها و تأخذ منها ما يفيدك فقط..
إقرا الكثير من الأكواد
لا تكن إنعزاليا فتقضي على نفسك بل شارك المجتمع و قم دائما بتتبع إخبار المبرمجين يوجد العديد من المواقع التي يطرح فيها المبرمجون آخر مشاريعهم قم بتحميل هذه المشاريع و اقرأ الكود المصدري و دون ملاحظاتك حول المشروع ثم قم بإضافة أشياء جديدة على المشروع (قم بتطويره) بهذه الطريق ستبقى دائما مواكب لـ التقدم (تبقى في المستوى) و ستطور قدراتك و تستفيد من تجارب الغير عند قرءتك للكثير من الأكواد ستتمكن من إكتشاف الثغرات و الأخطاء بسهولة كما أن أسلوبك في البرمجة سيتحسن كثيرا بإعتمادك على نقاط قوة الآخرين و لكن إحذر أخي الكريم لا تحفظ الأكواد فإن البرمجة أبعد ما تكون عن الحفظ لأنك إذا حفظت الكود أو الطريقة ستنساها سريعا و لن تفيدك في شيئ و أنا لا أعني بقراءة الأكواد التقليد فهذا ايضا لن يفيدك في شيئ بل خذ أفكار الآخرين و طورها حسب فكرك أنت .
الإستقلالية و التنوع
معنى الإستقلالية أن تكون مستقلا فكريا عن لغة أو تقنية أن لا تربط نفسك بلغة معينة فتبقى تتحكم فيك إلى الابد بل كن دائما أنت المتحكم في اللغات لأن كل لغات البرمجة تحتوي على نقاط قوة ونقاط ضعف فمعنى الإستقلالية أن تأخذ من اللغة ما تريد أنت فقط أي أن تأخذ من كل لغة نقاط قوتها فقط و تغطي نقاط ضعفها بلغة أخرى و هذاسيجعلك تبرمج أشياء في منتهى القمة فمثلا لو أردت أن تبرمج مشروع ضخم يقوم بالتحكم في قاعدة بيانات لشبكة كبيرة
تقوم بالبدأ بلغة البايثون لأنها سريعة جدا فتنجز بها قاعدة المشروع ثم تضيف إليها السي أو السي ++ ل التعامل مع موارد الجهاز و التعامل بالمؤشرات ثم تدخل لغة البيرل ل التحكم في السيرفر و الأجهزة عن بعد و ل التعامل مع السلاسل الحرفية ثم الجافا أو php لعمل واجهة محكمة
و إذا أردت تفاعل أحسن و أمن أكبر أدخل لغة اليسب.
و بهذا تكون قد أنجزت مشروع كامل يستطيع العمل لسنوات عديدة دون مشاكل
هذا ما تعنيه الإستقلالية في البرمجة أن تتحكم في البرمجة كما تريد و هذا هو معنى الإحتراف حقا .
و يبدئ الطريق إلى التنوع في مراحلك الأولى فيجب عليك إدخال أشياء جديدة على أسلوبك مثلا إستدعاء مكتبات النظام و التعامل مع موارده كتشفير الملفات و التحكم في نظام المدخلات E/S الإتصال بقاعدة بيانات و ركز على نقاط القوة أكثر و عند تعلمك للغة الثانية إعمل نفس الشيئ و حاول الجمع بين اللغتين في مشروع واحد معتمدا على نقاط قوتهما و هكذا مع كل لغة تتعلمها ...
إستغلال المشاكل لصالحك
المشاكل في البرمجة نعمة كبيرة و فائدة عظيمة ستتعلم من المشاكل أشياء لن تستطيع تعلمها في عدة سنوات ولكن مع شرط الإستفادة منها فعندما يواجهك مشكل لا تترك العمل أو تتخلى عن الفكرة بل إبحث عن حل لها إسأل الخبراء إبحث في الإنترنت عن حل لمشكلتك حاول تبديل الإسترتيجية لحل المشاكل لا تتعامل مع المشكل بفكرة وحيدة أو بطريقة كلاسيكية بل كن ديناميكيا تستطيع تغير إستراتيجياتك بسلاسل كبيرة دون أن تسبب في تغير المشروع ككل حاول البحث عن الحل في لغة أخرى فإذا لم تستطع إيجاد حل غير الفكرة تماما حتى لاتضيع الكثير من الوقت و لكن لا تنسى المشكل بل اجعله تحديا لك فإذا استطعت التغلب عليه ستشعر براحة نفسية كبيرة و تشعر بالرضى على نفسك وهذا ما سيعطيك الدافع ل الصمود امام المشاكل المستقبلية .
تعلم الشبكات :
أصبح مجال الشبكات مجال واسع جدا تعدى اتساعه مجال المعلوماتية بحد ذاتها و صارت له أهمية كبيرة في سوق العمل بحيث أن المختصين في هذا المجال مطلوبين في كل مكان و ستتعلم مع الشبكات أمور كثيرة تزيد بها في مهاراتك البرمجية لأنك عندما تنجز مشروع برنامج لكي يعمل على جهاز واحد ليس كإنجازك لمشروع يعمل على عدة أجهزة ستتعلم في هذه الحالة التحكم في الأجهزة عن بعد كما أنك ستتعلم تنظيم عملك و تتعلم أيضا كيفية إنجاز خطة(إستراتيجية العمل) لـ العمل و الكثير من الأمور الرائعة التي تكسبك الكثير من الخبرة و يوجد في النت الكثير من المكتبات المخصصة للبرمجة الشبكات أو التحكم في البروتوكولات قم بتحميلها و حاول التعامل معها بصنع برامج تستخدم هذه المكاتب .
تعلم العمل البرمجة على نظام لينيكس
سيسمح لك لينيكس بإكتشاف النظام على حقيقته فهو نظام مرن جدا أقصد بالمرونة أنه يعطيك الحرية بالتوغل في قلبه كيف ما شئت و شفافيته أذهلت الجميع بحيث أنك تستطيع رأية و تعديل اي ذرة في هذا النظام من النوات حتى البرامج , ستكتشف معه الكثير من الأمور التي لاتستطيع رأيتها مع أنظمة مايكروسوفت وهو ليس نظام صعب كما يظنه الكثير بالعكس سيتعامل معك هذا النظام كما تريد إدا أردت الإحتراف سيتعامل معك كنظام محترف و إذا أردت الواجهات الرسومية والجمال و البساطة فهو نظام جميل و سهل و هو نظام كامل لن تضطر إلى تحميل اي شيئ عند إستعمالك له كما أن لينيكس يسمح لك بالمزج بين لغات البرمجة بسهولة إذ تستطيع إنجاز مشروع بأربع لغات دون تحميل أي برنامج و هذا مكسب كبير لك كمبرمج.
دون كل ملاحظاتك
هذا الأمر سيساعدك كثيرا على تطوير قدراتك لدى قم دائما بتدوين ملاحظاتك و تدوين كل إستنتاجاتك و المشاكل التي واجهتك ثم قم بمناقشة هذه الملاحظات كما يفعل الأدبيين تماما كأنك تناقش في مقال جرب هذا الأمر ستجد أنه يسرع فى تطوير مهاراتك .