لماذا هناك لغات مختلفة للبرمجة؟ وماذا تحتاج لتبدأ؟
عندما يحاول شخص ما التعرف على عالم البرمجة الواسع فهو يجد لغات متنوعة وكثيرة ولا يعرف من أين يبدأ. وبعد البحث وسؤال الناس يتوه أكثر في هذا العالم الواسع قد يقول له شخص ابدأ باللغة كذا فهي سهلة ويقول أخر ابدأ بكذا فهي متعددة الاستخدامات أو ابدأ بكذا لأن به الكثير من الخيارات. ويبقى الإنسان تائهًا بين العديد من اللغات المختلفة الذي لا يعرف اختلافهم عن بعض وبعد أن ينهي لغة منهم يظن أنه يحتاج ليبدأ الأخرى من البداية وهي أشياء خاطئة نصلحها في هذا الموضوع.
أولًا لنتحدث عن ماهية البرمجة بشكل عام. ما هي؟ ببساطة هي كتابة أوامر للحاسوب لينفذها كما هي وبها يصمم أو يعالج مشكلة.
بالحديث عن التصميم فهناك لغات يمكن استخدامها لتصميم صفحة ويب مثل HTML مثلًا فأنت تكتب للحاسوب: من فضلك ضع عنوانًا هنا وزرًا هناك. لكن لا يمكن استخدامها في حل المشكلات أو المساعدة في أي تطبيق هي فقط تصنع الصورة كخطوة أولى.
هناك العديد من الأسماء التي نسمعها طوال الوقت مثل بايثون وجافا وC وجافا سكريبت وغيرها الكثير. إن كنت مبتدئًا فبما ستبدأ؟
اللغة غير مهمة بل الأساسيات:
هناك بعض الأساسيات التي يمكن تعلمها من أي لغة مثل وضع المتغيرات أو القوانين الشرطية أو الحلقات loops إلخ. وبعد تعلمهم بلغة معينة فأنت يمكنك تطبيقهم في جميع اللغات باختلافات بسيطة في الكتابة بين كل لغة وأخرى. فاللغة هنا هي وسيلة لتطبيق هذه الأساسيات. تذكر هذا جيدًا.
لغات البرمجة تموت وكذلك تخلق:
هذه نقطة أخرى مهمة عليك معرفتها فكما أن هناك لغات متواجدة منذ القدم فهناك لغات ظهرت لفترة منذ انتهت. واللغة التي تكتب بها الآن قد تصبح ميتة بعد عشر سنوات في مجال يتغير باستمرار. لذلك فاللغة التي تتعلمها الآن ليست نهاية العالم وإن تعلمت الأساسيات بشكل صحيح يمكنك تعلم أي لغة في المستقبل بكل سهولة.
تخصص في التخصصات وليس في اللغات:
يوجد متخصص في تطبيقات الحاسوب مثلًا وأخر في تطبيقات الويب وكلاهما يستعملان لغات مختلفة لكن لا يمكن أن تقول أنك متخصص في لغة C أو لغة بايثون فحسب لأنهما متشابهتان في الأصل وإن استطعت تعلم الأولى لتعلمت الثانية وكلها مجرد طرق ولكنك تأخذ الطريق الأسهل والأقرب لمجالك المخطط وهذا ينقلنا للنقطة الأهم.
ماذا اختار إذن؟
إن بدأت تعلم البرمجيات فعليك تحديد هدفك وليكن مثلًا تعلم تطبيقات الحاسوب وحينها تنظر للغات التي يمكن أداء تلك المهمة بها. وستجد مجموعة متنوعة ولكن بعد البحث ستجد أن هناك لغة بها مميزات تمكنك من المهمة بشكل أسهل. وهذا مربط الفرس
لا تبحث عن اللغة السهلة فهي قد تكون سهلة في الكتابة ولكنها لا تقوم بمهمتك بالشكل الأمثل. بل ابحث عن أفضل لغة تؤهلك للمجال الذي تريده. فمثلًا لغة بايثون أفضل لغة إن كنت تريد تعلم تحليل البيانات أما لغة C فيه ممتازة عند الحديث عن الإلكترونيات وبرمجة الآلات وهكذا.
اللغة نفسها وسيلة قد تتغير بتغير الزمن المهم هو كيف تخدمك هذه الوسيلة في طريقك.
إن كنت قد اخترت اللغة التي تود فمن أين تبدأ؟
هناك العديد من المواقع التي تقدم مساقات للبداية مثل اليوتيوب وأكاديمية حسوب وموسوعة حسوب
ونصيحة أخيرة يمكنك البحث بكلمة Roadmap متبوعة بالتخصص الذي تريده وستجد طريق الوصول لهذا التخصص بالكامل وما هي اللغات التي ستحتاجها في الطريق وكذلك الخبرات المطلوبة.
هذا رأيي بالطبع وقد تختلفون معي.
لذلك شاركوني أراءكم عن الموضوع وتجاربكم حول تعلم لغات البرمجة. كيف عرفتم اللغة الأفضل لكن؟ وإن لم تكن لديك خبرة في البرمجة، هل تفكر في الانخراط بها قريبا؟
التعليقات
نقطة غاية في الأهمية يا أمنية فمعرفتنا الجيدة لأساسيات البرمجة عامل في غاية القوة؛ فالمعرفة القوية باساسيات البرمجة تمكننا من تعلم اي لغة مهما كانت، وتنوع لغات البرمجة اراه نقطة قوة وليس ضعف او تشتت؟ في البداية نتفق ان لغات البرمجة متقاربة في كثير من طرق الكتابة الا ان المفهوم واحد وهذا هو المهم في الحقيقة "المفهوم واحد" فعلي سبيل المثال انا احب التكويد من خلال سي شارب ومع إتباعي لمنهجيتها من الاقواس والنقاط وما الي هذه الامور، هل معني هذا انني لا اصلح لتعلم لغه اخري مثل الجافا او دولفي او سي بلاص بالعكس معرفتي لغتي جيدا عامل اساسي لتخطي اي لغة اخري اريد تعلمها!! وهذه نقطة في غاية القوة حيث اصبحت هذه اللغة عامل مساعد.
فالمعرفة القوية باساسيات البرمجة تمكننا من تعلم اي لغة مهما كانت، وتنوع لغات البرمجة اراه نقطة قوة وليس ضعف او تشتت؟
هي نقطة قوة فعلًا لمن بدأ في التعلم ولكنها قد تكون مصدر تشتت لمن يبدأ ويعتقد أن كل لغة مختلفة تمامًا عن الأخرى والحقيقة هي ما تقوله في أن اللغات قريبة جدًا من بعضهم البعض.
هذه نقطة في غاية القوة حيث اصبحت هذه اللغة عامل مساعد.
هذا ما وجدته أيضًا في رحلتي فكل لغة بها نقاط يمكنها أن تساعدك في تعلم اللغات الأخرى في وقت أقصر. بالنسبة لك هل تفضل أن يركز الشخص على تعلم تخصص واحد فقط أم هناك مساحة للتشعب عند إمتلاكه الأساسيات؟
أريد تعلم برمجة المواقع وتطبيقات الموبايل، هل تعلمي لبايثون سيساعدني في المهمة؟ فأنا أرى ان تعلم HTML وJS صعب.
بالنسبة لمقارنتك بين لغتي بايثون وجافا سكريبت. فرغم أن لغة بايثون أسهل إلا أنه عند الحديث عن برمجة المواقع فجافا سكريبت تقوم بالأمر بطريقة أفضل وأسهل.
فهي لغة أصعب عند تعلمها لكن عند القيام بالمهمات ستجدها أسهل من لغة سهلة لكن تطبيقها في هذا المجال صعب. لذلك أنصحك بالمحاولة معهم من مختلفة المصادر قبل الاستسلام. وهناك أيضًا لغة php التي من الممكن أن تعمل كبداية في هذا المجال لأنها مستخدمة في الكثير من المواقع منهم فيسبوك.
بالنسبة لتطبيقات الهاتف فهناك لغات أخرى تقوم بهذه المهمة لكن أشهرها جافا عند الحديث عن الأندرويد مثلًا. لذلك أنصحك أيضًا بالتركيز على مجال منهما عند بدء التعلم.
رغم عدم عِلمي بأساسيات البرمجة ولغاتها يا أمنية، إلّا أننّي أجدها جزءًا لا يتجزأ من عالمنا اليوم ..
لديّ الرغبة في التعلّم أو الانخراط في عالم البرمجة خصوصًا أنّ البعض من أقاربي في هذا المجال ويشجعوني على التعلّم، لكنّي دائمًا ما أشعر أن تعلم أساسيات كهذه تتطلب التركيز والتفرغ بعض الشيء وتحديد شيئًا بعينه للتعلم.
بماذا تنصحيني كـ بداية للتعلم أمنية ؟ وهل التجربة تستحق ؟
بالنسبة لاستحقاق التجربة فالأمر يعتمد على هدفك منها. إن كان هدفك التعرف على هذا العالم وتجربته واستخدام معرفتك في مهمات مفيدة لك أو تغيير طريقة تفكيرك فهي تستحق تمامًا.
أما إن كان هدفك دخول المجال أو العمل فيه فالأمر سيتطلب بعض التفرغ والتضحية بكثير من الوقت لكن النتيجة أنت من تحددين استحقاقيتها حسب ما ترغبينه في حياتك.
بالنسبة للبداية بشكل عام فقد أنصحك بمعرفة البرمجة كمفاهيم في البداية عن طريق أولى محاضرات كورس CS50 المقدم من جامعة هارفارد والمتواجد على يوتيوب. ستأخذين فكرة عن البرمجة ومجالاتها وطرقها وإن أكملت الكورس ستجدين الشروحات بلغة C
لكن إن لفتت انتباهك لغة أخرى خلال الشرح فيمكنك ترك الكورس وتعلمها من مصدر خارجي. المصادر بالعربية مثل أكاديمية حسوب مثلًا وهناك مصادر أجنبية أيضًا حسب تفضيلك. أتمنى لك الاستمتاع بالرحلة.
لقد أصبحتُ في الآونة الأخيرة أفكر بشكلٍ عملي أكثر، وشعرتُ كما لو أنني كنتُ غائبًا، الأمر أشبه بصحوة، وأعلم جيدًا أن مجال البرمجة يجني الكثير، ولدي اهتمام شديد للانخراط فيه، لكنني لا أعرف كيف أبدأ، بماذا تنصحيني يا أمنية؟
أنصحك أولًا بأن تعرف أكثر عن البرمجة بشكل عام. من خلال أولى محاضرات كورس CS50 المقدم على يوتيوب من جامعة هارفارد.
هذه المحاضرة تشرح ماهي البرمجة أساسًا وكيف بدأت. ومنها تحدد طريقك أو تتعلم المفاهيم بلغة معينة.
لن أنصحك بلغة تبدأ بها لأن هذا يتنافى مع الرأي الذي قدمته في المساهمة لكن رؤيتك للصورة الكبيرة ستسمح لك بمعرفة الطريق الذي ستتخذه للوصول لها وتحدده بنفسك. ولكن ثق أن البداية واحدة على الأغلب.
لذلك شاركوني أراءكم عن الموضوع وتجاربكم حول تعلم لغات البرمجة. كيف عرفتم اللغة الأفضل لكن؟ وإن لم تكن لديك خبرة في البرمجة، هل تفكر في الانخراط بها قريبا؟
في الحقيقة يا أمنية حاولت من أكثر من خمس سنوات تقريباً وكنت أعتمد في ذلك على قنوات يوتيوب أجنبية وعربية ( نظرا لقلة وعدم غناء المحتوى العربي) ولكن حالت الظروف و المهمات الملقاة على عاتقنا دون التعلم. كنت قد أنزلت كم كبير من الفيديوهات ولكن ما راعني وقتها سرعة تطور اللغات البرمجية وإضافة الجديد كل يوم! عزمت على تعلمها رغم ذلك ولكن عملية تعلم البرمجة وجدتها تأخذ وقتاً طويلاً جدا. يعني أنا لو أردت أن أتقن لغات تطوير الويب لكي أصبح Full stack developer) وجدت أن ذلك سيتغرق فوق العام. كما أن أشد ما زهدني في تعلمها أني لابد أن أجهد نفسي كثيرا عند حل للمشاكل البرمجية التي أواجهها إلى غير ذلك من أنها تفقدني عواطفي وأحاسيسي فأحسست أني مثل الروبوت الذي يعطي أوامر و يكتب أكواد؛ فالبرمجة ليس فيها لمسة إنسانية فهي تجعلنا نفكر تفكيراً منطقيا في كل شيئ ولكن ألا ترين أن ذلك ليس مطلوبا طوال الوقت؟ ألا ترين أن التعمق جدا في عالم البرمجة يفقدنا جانب التعاطف الإنساني وعالم الخيال؟
سرعة تطور اللغات البرمجية وإضافة الجديد كل يوم
بالنسبة لنقطة المحتوى العربي فأعتقد انه قد تطور كثيرًا منذ بحثك أخر مرة فهناك قنوات يوتيوب عربية كثيرة وهناك أكاديمية حسوب وموسوعة حسوب بالطبع. أما نقطة التطور فهي حقيقي جدًا لذلك فالواجب عند تعلم البرمجة تعلم الأساسيات أولًا والتي يمكنها أن تنطبق على أي لغة جديدة يتم استحداثها.
ألا ترين أن التعمق جدا في عالم البرمجة يفقدنا جانب التعاطف الإنساني وعالم الخيال؟
بالنسبة لهذه النقطة فهي نقطة مهمة جدًا فعلًا يا خالد وقد فكرت فيها كثيرًا نظرًا لأن دراسة هندسة الحاسوب(والبرمجة جزء منها) هو مجالي الأساسي بينما هوايتي(وعملي الآن) هي الكتابة الإبداعية.
لكن من خلال تجربتي وجدت أنه رغم المنطقية الشديدة والتحليلية إلا أن العقل المعتاد على الإبداع والخيال سيبقى يبحث عن طريقة للخروج وكذلك الخيال يمكن أن ينميه المنطق والتحليل بحيث يساعد ذلك في بناء قصص أشد ترابطًا مثلًا!
لم أعاني بعد من مشكلة في الجمع بين هذين العالمين المختلفين تمامًا لكن هذه تجربتي الشخصية وقد تختلف عند الآخرين بالطبع.
لا شك أن البرمجة مجال ثقيل جداً من حيث المادة العلمية أو إذا تحدثنا عن إمكانية تعلمها وإتقان بعض لغاتها، وربما أنخرط فيها مستقبلاً ولكن الأمر صعب بعض الشئ نظراً لأنها من نوعية المجالات "الأنانية" بحيث تحتاج دائماً لحضور كامل من الشخص، وتواجد ذهني دائم ومتابعة دورية لكل ما في المجال من مستجدات، وكذلك تحتاج لعمل دءوب وشاق للتمرس، لذا أقول من الصعب استخدامها كمجال أتعلمه بجانب مجال آخر أعمل به أو أتعلمه ولكن الأمر ممكن على كل حال، ولكني أميل إلى التفرغ لمجال واحد والإبداع فيه لذا قد تتأخر تلك الخطوة بعض الشئ.
وإن بدأت في تعلم اللغة سأتوجه ليوتيوب بلا شك، فالكورسات مجانية ومتنوعة وسيكون هدفي تحصيل العلم فقط وليس اخذ شهادة.
بخصوص لغة HTML أمنية ..
لقد سمعت بودكاست لأسامة الزيرو مع أحمد أبو زيد وقد تم التلميح من خلال الحديث إلى أن هذه اللغة لا تعتبر لغة برمجة، بل هي مجرد تمهيد للغات البرمجة.
ما رأيك في هذا الأمر؟
فعلًا عبدالرحمن فالبرمجة من المجالات العلمية الدسمة رغم سهولة بدايتها فالتعمق فيها يحتاج للمجهود والصبر الكبيرين. لفت انتباهي وصفك للمجالات الأنانية. هل تعتقد أن هناك مجالات غير أنانية؟ أعني أنك لا تحتاج توفير أغلب وقتك لها للاحتراف.
لقد سمعت بودكاست لأسامة الزيرو مع أحمد أبو زيد وقد تم التلميح من خلال الحديث إلى أن هذه اللغة لا تعتبر لغة برمجة، بل هي مجرد تمهيد للغات البرمجة.
لا أراها تمهيدًا بصراحة فهي قائمة بحد ذاتها ولكنها ليست لغة برمجة بمعناه الشائع أيضًا. لتسمية الأمر بلغة فأنت تحتاج إلى وجود متغيرات وتصنيفات وقدرة كبيرة على حل المشكلات. لذلك لا نسمع عن HTML وحدها في العادة بل يوجد معها CSS و JavaScript
الأخيرة هي الوحيدة التي يمكن أن نقول عنها أنها لغة برمجة وحل مشكلة وتنطبق عليها الأساسيات الأخرى في أغلب لغات البرمجة ولكن لتبدأ العمل بها فأنت تحتاج لصفحة ويب لتبدأ العمل والتحكم بها فمن أين تأتي تلك الصفحة؟
HTML هي من تصنع الأساسيات. سيكون هناك جملة هنا وعنوان هناك و زر هنا وهكذا.
CSS تبدأ بإضافة المؤثرات الأخرى من الألوان والأشكال حتى تخرج الصفحة بشكلها المميز.
فهم يعتبرون تمهيدًا لاستخدام جافا سكريبت ولكنهما قائمان بذاتهما كذلك.
"هل تعتقد أن هناك مجالات غير أنانية؟ أعني أنك لا تحتاج توفير أغلب وقتك لها للاحتراف."
معظم المجالات قد نتعلم شئ بجانبها، فالكتابة أتعلم بجانبها مجالات أخرى كالتسويق الإلكتروني والتصميم، وكذلك التسويق مرتبط بمجالات أخرى ككتابة المحتوى والتصميم، لذا فقد نجد في كل مجال ثغرة تتيح لنا النفاذ منها إلى مجال آخر دون أن نتجاهل المجال الذي نتعلمه، إلاّ في بعض المجالات ومنها البرمجة والتي تحتاج لشبه تفرغ لها لكي يتمكن المتعلم من الإبداع والتفوق فيها.
لقد سمعت بودكاست لأسامة الزيرو مع أحمد أبو زيد وقد تم التلميح من خلال الحديث إلى أن هذه اللغة لا تعتبر لغة برمجة، بل هي مجرد تمهيد للغات البرمجة.
هي لغة برمجية سهلة التعلم تستخدم لوصف صفحات الويب بل علي العكس لا نستطيع بناء صفحات ويب بدونها يا عبدالرحمن، ربما كان القصد انه مع سهولة هذه اللغة تصلح لاي مبتدئ في البرمجة البدء بها نظرا لسهولة تعلمها وكثرة مصادرة.