السبت، يناير 09، 2010

أي لغة برمجة أتعلم؟ What Programming Language Should I Learn?

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
كنت أعتقد من قبل أن تعلم لغة برمجة واحدة أُطوّر بها كل ما أريد من برمجيات مساوٍ لتعلم عدة لغات كل واحدة منها لها ميزة عن أختها تجعلها هي الخيار الأمثل عندما تكون تلك الميزة متحققة في البرنامج الذي أطوره.
و في بداية مشواري الوظيفي, عملت في شركة تطور تطبيقات ويندوز Windows Desktop Applications باستخدام السي بلس بلس C++ و الفيجوال بيزك دوت نت VB.NET, ثم تركتها و التحقت بشركة أخرى و صرت الآن أبرمج بالسي شارب C# فقط, و معظم التطبيقات التي نطورها هي للويندوز أيضا ( و إن بدأنا مؤخرا الاتجاه نحو الويب).
و بالرغم من الأداء المتميز الذي حققته لي السي شارب C#, إلا أنني من حين لآخر تراودني الرغبة في العودة إلى السي بلس بلس C++ من جديد, و أشعر أنني فقدت ميزة قوية كنت أتمتع بها - خاصة و أني كنت شاطراماهرا في البرمجة باستخدامها.
و بدأت أشعر أني انقاد - طواعية - لما تقوله مايكروسوفت Microsoft عن أدواتها و أُهمل أداوت أخرى قد تكون أفضل منها. باختصار: بدأت أشعر أني انقدت للاتجاه الأول الذي ذكرته (تعلم لغة واحدة) و أهملت الاتجاه الثاني ( تعلم عدة لغات) الذي بدا يغلب على ظني أنه الخيار الأقرب للصواب, فأي لغة برمجة أتعلم؟

الإجابة على هذا السؤال ليست بسيطة لكن يمكن الاستعانة بالمؤشرات الآتية:

1- احتياجات السوق:
- فنظرة على موقع إعلانات وظائف شهير في مصر تجعلك تخلص إلى الترتيب الآتي لاحتياجات السوق المصري من لغات البرمجة:
1- دوت نت .NET و أكثر الوظائف تحت هذا البند هي للسي شارب C# و لتطبيقات الويب, يعني إيه إس بي دوت نت ASP.NET
2- جافا Java
3- بي اتش بي PHP
4- سي بلس بلس C++
- أما الشركات العالمية الرائدة في صناعة البرمجيات (اعتمدت هنا على إعلانات لغوغل Google و مايكروسوفت Microsoft و أبل Apple و فيس بوك Facebook) فنجدها تطلب اللغات الآتية في إعلاناتها(1):
1- سي C/ سي بلس بلس C++/ جافا Java
2- إتش تي إم إل HTML / سي إس إس CSS / جافا سكريبت JavaScript
3- غوغل Google تطلب أيضا بايثون Python, و مايكروسوفت Microsoft تطلب سي شارب C# و أبل Apple تطلب أوبجكتف-سي Objective-C

2- اتجاهات السوق:
- ذكرت في مقالة سابقة اتجاهات صناعة البرمجيات للعام 2010, و ذكرت فيها مثلا أن صناعة تطبيقات الويب في ازدهار مستمر, و هذا يعني أن تعلم البي اتس بي PHP, و الإيه إس بي ASP.NET, و الروبي مع الريلز Ruby on Rails قد يكون مناسبا الآن.
- ذكرت أيضا من قبل مؤشر لغات البرمجة تيوب TIOBE Index, و في شهر يناير 2010 كان ترتيب لغات البرمجة الشائعة كالآتي:
1- جافا Java
2- سي C
3- بي إتش بي PHP
4- سي بلس بلس C++
5- فيجوال بيزيك (Visual) Basic
6- سي شارب C#
7- بايثون Python
8- بيرل Perl
9- جافا سكريبت JavaScript
10- روبي Ruby
11- دلفي Delphi
12- أوبجكتف-سي Objective-C
13- غو Go
14- ساس SAS
15- بي إل إس كيو إل PL/SQL
16- أباب ABAP
17- باسكال Pascal
18- لسيب / سكيم Lisp/Scheme
19- أكشن اسكريبت ActionScript
20- ماتلاب MATLAB

- و منح القائمون على هذا المؤشر لغة البرمجة الحديثة جدا(آٌصدرت في نوفمبر 2009) من غوغل المسماة غو Google Go جائزة لغة العام 2009, حيث نالت اهتماما كبيرا من المبرمجين (لاحظ أنها جاءت في الترتيب الثالث عشر على الرغم من أنها أول مرة توضع في الحسبان هذا الشهر) على الرغم من حداثتها, و يليها مباشرة في الأهمية لغة أوبجكتف -سي Objective-C التي أتت بعدها بفارق طفيف جدا, ثم البي اتش بي PHP بفارق طفيف أيضا.
- و لاحَظ أيضا القائمون على المؤشر أن لغتا البرمجة سي شارب C# من مايكروسوفت Microsoft و أكشن سكريبت ActionScript من أدوبي Adobe كانتا في تقدم مستمر خلال العام 2009. أما الجافا Java التي احتفظت بموقع الصدارة فقد لوحظ أنها في انحدار مستمر ( و إن كان الانحدار بطيئا), إلا أن لغات جديدة من سلالة الجافا بدأت تنافس, أهمها سكريبت جافا إف إكس JavaFX Script (رقم 27), و لغتا جي روبي JRuby و جيثون Jython. و من اللغات التي قاربت العشربن الأولى أيضا - و هي مندفعة بقوة إليها- لغة إرلانج Erlang (رقم 24) و لغة اسكراتش Scratch (رقم 26).

3- احتياجات البرنامج
- كما ذكرت في صدر المقالة, هناك لغات برمجة لها ميزات فريدة تحسّن أداء المبرمج عند استخدامها في أداء مهام معينة.
و من الأمثلة على ذلك: استخدام إحدى اللغات المصنفة كلغة اسكريبت Scripting Language في معالجة بيانات في ملف مثلا, أو استخدام لغة الروبي تحت إطار الريلز Ruby on Rails في تطوير تطبيقات الويب المعتمدة على قواعد بيانات.

4- احتياجات نظام التشغيل:
- إذا قصدت تطوير برمجيات تعمل على الويندوز Windows فقط, فإن السي شارب C# هي الخيار الأمثل, و إذا أردت أن تطور برمجيات تعمل على الماك Mac OS و الآي فون iPhone فإن الأوبجكنف-سي Objective-C هي الخيار الأفضل. فإذا أردت برامجك أن تعمل على الويندوز و اللينكس Linux فعليك بالسي بلس بلس C++. أما الجافا Java فتتيح لك العمل على مختلف نظم التشغيل Operating systems مهما كبرت برامجك.

و يظل السؤال قائما: أي لغة من كل هذا اللغات أتعلم و كل هذه العوامل التي ذكرتها تتغير من عام لآخر؟
- الدرس الأساسي الذي يمكن تعلمه من تاريخ لغات البرمجة هو أن أساسيات البرمجة واحدة لكن بناء لغات البرمجة مختلف, و بعض اللغات متشابهة في بنائها(كالسي C و السي بلس بلس C++ و السي شارب C# و الجافا Java و البي إتش بي PHP و الجافا سكريبت JavaScript ... إلخ), و بناء على ذلك فيمكننا القول: تَعَلَّمْ أساسيات البرمجة جيدا ( هياكل البيانات Data Structures و الخوارزمات Algorithms و البرمجة بالكائنات Object Oriented Programming ... إلخ), أما التقنيات الحديثة فتعلمها عندما تحتاج إليها و استعن بلغات البرمجة المتشابهة فإنها أسهل في التعلم و كلها لغات شائعة و مطلوبة أيضا في السوق. ولكن لكي تعرف ماذا تحتاج و ماذا يوفي احتياجاتك فينبغي أن تُعمل المثل القديم: اعرف كل شيء عن شيء و شيئا عن كل شيء. أي تعلم لغة برمجة واحدة و اعرف عنها كل شيء, و اعرف لغات البرمجة و التقنيات الأخرى و اعرف مميزاتها و عيوبها و كن مستعدا للتنازل عن لغتك المفضلة و استخدام اللغة الأخرى التي تتميز عليها. و بهذا نكون قد جمعنا بين الطريقتين المذكورتين في صدر المقال.

و أختم بتذكير نفسي و إخواني المسلمين ألا يغفلوا السي C و السي بلس بلس C++ فإن جل التقنيات مبنية عليها, و ليس أدلّ على ذلك من اهتمام الشركات العالمية الكبرى بتوظيف من يتقنها... و السلام.
---------------------------------
(1) وجدت هذه الإعلانات في هذه المقالة - التي استفدت منها أيضا في مقالتي هذه

هناك 11 تعليقًا:

غير معرف يقول...

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

غير معرف يقول...

أنا أعرف لغات برمجة: سي بلس بلس و سي شارب و اخرى, لكن تقديري في الكلية مقبول, و لا أعرف كيف أكد الوظيفة التي تلائم امكاناتي و ليس تقدير البكالوريوس

رائد يقول...

و عليكم السلام و رحمة الله و بركاته...
و إن كان الاعتماد على لغة برمجة واحدة غير منطقي, إلا أنه متاح بل و مطبق بالفعل. خذ مثلا على ذلك: تستطيع أن تطور تطبيق يعمل على سطح المكتب أو على الويب أو على الهاتف باستخدام لغة مثل السي شارب, فقط ستحتاج إلى تعلم الإس كيو إل SQL للتعامل مع قواعد البيانات - و إن كنت تسطيع أن تكتب أكواد تي إس كيو إل بالسي شارب إيضا الآن!.
بل على العكس, لغة واحدة تعني تعلما أسرع, و هذا بالطبع يعني إنتاجية أفضل. النقطة الوحيدة - من وجهة نظري -ألا تفعل ذلك لكي لا تضع رقبتك في قبضة مايكروسوفت.

رائد يقول...

أخي الفاضل السائل عن اللغة التي تلائم إمكاناته. ألحظ من كلامك أنك لم تحصل على وظيفة بعد (أو على الأقل لم تحصل على الوظيفة المناسبة بعد), فإن كان ما فهمته صحيحا فأنصحك بعدة نصائح:
1- لا تظنن أن تقدير الكلية عائق عن الوظيفة, فأكثر الوظائف التي تقدمت لها لا تشترط تقدير الكلية - و إن اشترطت بعض الشركات الكبرى ذلك- إنما تهتم الشركات فعلا بمن لدية الإمكانات المناسبة لاحتياجاتها.
2- لا تربط نفسك بوظيفة في البرمجة, فكثير من زملائي في الدراسة عملوا بعد تخرجهم في مجال الشبكات.
3- إن كنت مصريا, فاستعن بمنح وزارة الاتصالات, و أنا أعلم أناسا اشتركوا فيها ثم تخرجوا منها و عملوا في شركات كبرى,خاصة من تخرج من منحة الجافا Java و الـ embedded systems.
4- لم لا تبدأ مشروعك الخاص, و استعن بهذه المدونةhttp://www.shabayek.com/blog/ تجد ما يسرك إن شاء الله تعالى.
5- لا تقعد فارغا, تعلم دائما و اعمل مشروعات لنفسك إلى أن تجد الوظيفة المناسبة, و إن لم تجد وظيفة مناسبة, ستجد أخرى أقل مناسبة منها لكنها تقيم الأود, فعليك بها إلى أن يوسع الله عليك من فضله, و استعن بالله و لا تعجز, و أحسن الظن بربك فإنه جواد كريم.
6- ابتغ الرزق في أرض الله الواسعة.
ثم أخبرنا عما وصلت إليه.

amr_mt يقول...

الى غير المعرف الثاني
البرمجة مهارة لا علاقة لها بتقدير الكلية اذا وجدت نفسك فيها تستطيع العطاء فيها فورا وسيكون دور الدراسة فقط اصقال المهارات الاساسية وتأصيلها

لا اتفق مع نصيحة الاتجاه لمجال اخر كالشبكات ان استطعت اثبات كفاءة في البرمجيات بتطوير نماذج تطبيقات مختلفة دون عناء او نفور من طبيعة البرمجة

غير معرف يقول...

الى أخوي رائد و عمرو, جزاكم الله خيرا على الرد,
- بالفعل هناك برامج أنفذها بنفسي لتكون مشروعي الخاص, و بالفعل البرمجة مهارة و ليست تقدير, لكني يا أخ عمرو أحلم بالعمل في شركة برمجيات كبيرة لاكتساب الخبرة في جزئية تقسيم العمل ( في برنامج كبير) على فريق العمل في ال
Software Develpment Life Cycle
و أنا بالفعل أعمل بالشبكات حاليا و لكني لست راضيا عن نوعية العمل فهو في مجال بعيد كل البعد عن المجال الذي أنوي الاستمرار فيه.
بعثت CV لشركات كثيرة لا تأخد بالتقدير, دون جدوى, هل يجب أن أذهب بنفسي و أحاول مقابلة المسؤول عن الhuman resource
و أطلب انترفيو بشكل مباشر ؟
أم انه يكفي البحث عن طريق ارسال الCV؟ و ان أي اسلوب آخر هو غير لائق؟
أيا كان, شكرا مرة أخرى على النصائح الغالية, سأعمل بها ان شاء الله
السلام عليكم و رحمة الله و بركاته

رائد يقول...

و عليكم السلام و رحمة الله و بركاته
إلى أخي عمرو... جزاك الله خيرا على الملاحظة
إلى أخي الثاني..
1- لا تبتئس, ستنفعك خبرتك التي تكتسبها الآن في الشبكات عندما تبرمج برامج كبيرة. دعني أخبرك أن كثيرا جدا من البرامج التي أطورها في عملي الآن تعتمد بصورة مباشرة أو غير مباشرة على فهم طريقة عمل الشبكات. ثم اعلم أن شركات كبرى مثل غوغل google تطلب مبرمجين يفهمون طريقة عمل الشبكات جيدا.
2- الأسلوب الأمثل للوصول إلى الشركات هو عبر الأصدقاء و المعارف, و ليس عبر إرسال السير الذاتية فقط.
3- لا تحسبن أن العمل في الشركات الكبرى هو الأفضل دائما, بل هذا ينطلي على كثير من السلبيات, و لعلي أتحدث عن هذا بتفصيل أكثر لاحقا إن شاء الله تعالى, لكن ابحث عن شركة متوسطة الحجم, وانتقل منها لشركة صغيرة, ثم منها إلى شركة كبيرة, أو اكبر مع الشركة الصغيرة. و أحسب أن هذا أنفع لك الآن.
أسأل الله أن يوفقك للخير, و السلام.

غير معرف يقول...

your projects and sample applications are your real cv and bridge to job oppurtunities that prove your qualifications better than connections and personal recommendations

رائد يقول...

هل تقدمت لوظيفة من قبل بسيرتك الذاتية فقط ثم لم يتصلوا عليك, ثم لما مرّرّت لهم "نفس السيرة الذاتية" عبر أحد أصدقائك العاملين في "نفس الشركة" اتصلوا عليك؟
أمّا أنا فقد مر هذا الموقف عليّ مرارا.
أؤيدك أخي تماما في ما قلتَه عن أهمية أن يكون الشخص كفءً بالفعل, لكن كم من خبير لا يحسن كتابة سيرته الذاتية؟ ما ذكرتُه إنما قصدت به أن تحصل على مقابلة للعمل Interview, أما أن تُقبل في الشركة التي تقدمت لها, فما ذكرتَه أنت هو الأصح بلا شك, ولكنه يأتي دائما بعد الحصول على المقابلة.

أبو عمار يقول...

بارك الله فيك يا أستاذ "رائد" وجعلك رائدا للخير إن شاء الله.

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

فأظن أن كلمة "شاطر" تدل على الذم كلما اقتربنا من الفصحى، وإنما تدل على المدح كلما اقتربنا من العامية، أليس كذلك؟

بصراحة أعجبني تصميمك و مثابرتك في الكتابة بالفصحى فأردت أن تكتمل الصورة الجميلة.

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

رائد يقول...

أخي أبو عمار...
1- جزاك الله خيرا على النصيحة الجميلة و لا تحرمنا من مثلها ثانية إن شاء الله تعالى, و أكرم بها من نصيحة إن كانت في نقد أو تأييد محتوى المقالة أيضا.
2- راجعت المعجم الوجيز في معنى كلمة "شاطر" فوجدت لها معنيين: الشاطر هو الخبيث الفاجر و الشاطر هو الفَهِمُ المتصرف.
فهي من الفصحى إن شاء الله تعالى, و مع ذلك منعا للالتباس, فقد استبدلتها بكلمة أخرى ليس فيها مثل ذلك اللبس, و هي "الماهر".
3- بالنسبة للتعليقات: فملاحظتك سديدة, و اقتراحك و جيه, ولكن للأسف ليس لي تحكم في صفحة إضافة التعليقات, و لكني سألتزم بما اقترحت في تعليقاتي الآتية إن شاء الله تعالى.
4- أحسب أن مشكلة ازدواج اللغة تظهر في التعليقات فقط, فهل تقابلك مثل هذه المشكلة في المقالات أيضا؟