كيف أتعلم البرمجة بسهولة؟ الدليل الشامل لتعلم البرمجة

كيف أتعلم البرمجة بسهولة؟ الدليل الشامل لتعلم البرمجة

شارك هذا المقال:



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

ما هي البرمجة؟

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

لماذا تتعلم البرمجة ؟

"على كلِ من في هذا البلد تعلُم البرمجة، فهي تعلمك كيف تفكر" هذه كانت مقولة ستيف جوبس - Steve Jobs مؤسس شركة Apple. تحتاج البرمجة إلى تفكير منطقي ونمط محدد لحل المشكلات، أما لغة البرمجة في حد ذاتها ما هي إلا وسيلة لتحقيق هذا. تعتمد البرمجة على تحويل السؤال أو المشكلة التي نواجهها إلى قطع صغيرة ومن ثم استخدام المنطق والخوارزميات لحل كل قطعة من المشكلة على حدًا ثم تجميعهم سويًا في شكل برنامج ما. من خلال هذا تعلمك البرمجة التفكير التحليلي والمنطقي وحل المشكلات بشكل تطبيقي وتساعدك على ترتيب أفكارك ومع كل مشكلة جديدة يعمل عقلك على التفكير بنمط مختلف لإيجاد حل منطقي لهذه المشكلة. تعتبر البرمجة تدريب ذهني للعقل يساعده على حل الأزمات بشكل أفضل ليس فقط في عالم التكنولوجيا ولكن في العالم الواقعي أيضًا مما ينعكس على جودة الحياة التي نعيشها. تعتبر البرمجة شكل من أشكال الإبداع فهي ليست مجرد حسابات وأكواد ولكنها تحتاج إلى إبداع في التفكير للتوصل إلى الحل. المبرمج الماهر هو ذاك الذي يفكر في الحل المنطقي للمشكلة ويقوم ببناء خطوات الحل، ثم يختار اللغة المناسبة ويبدأ في التطبيق. لا تعلمك البرمجة كيف تفكر فقط، ولكنها توفر لك أيضًا وظيفة مرموقة وبدخل جذاب. يزداد الطلب كل يوم على المبرمجين في العالم بأكمله، فيمكنك العمل لصالح المؤسسات والشركات أو بشكل حر ومستقل لعملاء متنوعين من خلال مِنصات العمل الحر، أو حتى يمكنك إنشاء مشروع لأجل مصلحتك الخاصة. تعتبر وظيفة المبرمج اليوم من أعلى الوظائف في الدخل على مستوى العالم وذلك لانتشار التكنولوجيا بشكل واسع وكبير مما يتطلب التواصل مع الآلة من خلال إحدى لغات البرمجة، كما أن وظيفة المبرمج وظيفة تنافسية بشكل كبير حيث أنها لا تعتمد على تعلم لغات البرمجة فقط ولكنها تتطلب مهارات أساسية أخرى مثل التفكير الناقد والتحليلي وحل المشكلات كما ذكرنا من قبل. توفر وظيفة المبرمج لك أيضًا حرية العمل من أي مكان وحتى العمل عن بعد مع شركات كبرى خارج حدود الوطن، كما أنها تسمح لك بالعمل في أي وقت، أضف إلى أنها لا تتطلب أدوات غير الحاسوب سواء كان عادي أم نقال. يزداد غزو التكنولوجيا لعالمنا كل يوم حتى أصبحت حياتنا قائمة على التكنولوجيا ولا تطاق بدونها، ولتطوير هذه التكنولوجيا وحل مشكلاتها يجب أن تفهم النظام الذي يقوم عليه الجهاز أو الآلة التي تتعامل معها، ولن تتمكن من هذا إلا إذا تعلمت البرمجة. البرمجة هي الطريقة الوحيدة لحل المشكلات التي يواجهها أي نوع من التكنولوجيا التي نتعامل معها بشكل يومي. تمكنك البرمجة من تحليل البيانات الضخمة والتوصل إلى المعلومات من خلالها بسهولة ولهذا تستخدم في قطاعات عدة تعتمد على تحليل البيانات مثل القطاع الطبي والمالي والبحث العلمي والقطاع التسويقي. تمكنك البرمجة من تطوير الآلات لأداء مهماتها بشكل أسرع وأكثر كفاءة وتساعدك أيضًا على تطويع الآلات والأجهزة لأداء المهام المتكررة ونرى هذا واضحًا في قطاع الصناعة والإنشاءات والقطاع الزراعي حيث تُستخدم المعدات المُبرمجة في أداء المهمات. تتيح لك البرمجة أيضًا تدريب الأجهزة على حل المشكلات وأداء الحسابات المعقدة والمهمات التي قد يحتاج العقل البشري إلى وقت طويل وجهد كبير لحلها وقد يعجز أحيانًا عن التعامل معها وينعكس هذا في مجال تطوير التطبيقات والمواقع الإلكترونية وأنظمة التشغيل وغيرهم.

تحديات قد تواجه من يريد تعلم البرمجة وطرق التغلب عليها

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

تحديات تواجهك قبل التعلم

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

تحديات تواجهك في بداية وأثناء التعلم

أولًا: غياب الأساسيات يجب أن تتعلم أولًا مبادئ الحوسبة وأن تعرف ما هي الخوارزميات حتى تستطيع أن تكون صورة متكاملة عند بدء تعلم لغة البرمجة ذاتها. الإلمام بأساسيات علوم الحاسب سيمهد لك طريق تعلم البرمجة ويساعدك على تجنب أخطاء أثناء التعلم كما أنه سيساعدك على اختيار اللغة المناسبة لك. بخصوص هذا نُرشح لك دورة أساسيات علوم الحاسوب التي تقدمها أكاديمية حسوب. تقدم لك الدورة خلفية كبيرة في كل الأساسيات التي تحتاجها وتنقسم إلى 8 مسارات ستتعلم من خلالها المفاهيم الأساسية لعلوم الحاسوب مع التطبيق العملي وأساسيات البرمجة باستخدام لغة جافا سكريبت - JavaScript، وأنظمة التشغيل المختلفة مثل Linux - لينكس وقواعد البيانات ولغة SQL.كما أنك ستتعلم أساسيات عالم الويب و والشبكات والحماية، والبرمجة الكائنية - Object Oriented Programming من خلال لغة البايثون. وستساعدك الدورة أيضًا في بناء أساس قوي في الخوارزميات وتعلم بناء المعطيات وأنماط التصميم مع التطبيق العملي. وتعتبر خان أكاديمي من المصادر الإنجليزية التي تساعدك على فهم أساسيات الحوسبة، فهي تقدم محتوى رائع عن كل الأساسيات التي يحتاجها المبتدئ في مجال البرمجة، أيضًا تقدم قناة Crash Course على يوتيوب سلسلة مبسطة عن مفاهيم عدة في علوم الحاسوب والتقنيات بالإنجليزية مع ترجمة بالعربية ثانيًا: البدء بلغة صعبة يمكن استخدام عدة لغات لأداء نفس الغرض ولكن تختلف كل لغة عن الأخرى من حيث مدى تعقيد وصعوبة بناء الكود أو الجملة البرمجية وقد يختار بعض الناس لغة صعبة التعلم على مستوى المبتدئ. يساعدك الاطلاع على بعض الدروس التعليمية البسيطة عن كل لغة برمجة على تحديد اللغة الأبسط للتعلم والتي يمكنك البدء بها. إن اختيار اللغة الأبسط سيساعدك على فهم الأساسيات وعلى تعلم اللغات الأصعب ولكن في المراحل التالية. من أشهر اللغات البسيطة التي يمكن البدء بها في رحلة تعلم البرمجة هما Python و Ruby. ينصحك فيديو ما هي لغة البرمجة المناسبة لتعلمها المتاح على قناة أكاديمية حسوب على اليوتيوب بتعلم اللغة الأبسط دائمًا أيضًا ويساعدك على اختيارها، كما تقدم القناة ذاتها بعض الفيديوهات القصيرة كمقدمة تعريفية عن بعض اللغات مثل فيديو مقدمة إلى لغة بايثون وفيديو تعرف على لغة البرمجة Ruby. ثالثاً: التركيز على بناء الجمل البرمجية وليس حل المشكلة إن البرمجة تعتبر فن وعلم حيث تقوم بتطبيق تسلسل من الخطوات بطريقة منطقية أو ما يُعرف بالخوارزمية باستخدام أحد لغات البرمجة، ولكن قد ينسى البعض أن أساس البرمجة هو طريقة حل المشكلة وخطواتها وليس طريقة بناء الجملة البرمجية. أثناء تعلمك للبرمجة لا تنشغل بالتفكير في بناء الجملة البرمجية وتنسى التفكير في خطوات حل المشكلة ذاتها. رابعاً: غياب المساعدة اللحظية لتصحيح الأخطاء أثناء تعلم البرمجة من الطبيعي ارتكاب الأخطاء في تركيب الجمل البرمجية، وبالطبع من الصعب تلقى المساعدة اللحظية من أحدهم لتحديد الخطأ ولهذا يساعدك المحول البرمجي \ المترجم أو ما يُعرف بالـ compiler لتحديد الأخطاء أثناء كتابة الكود وبالتالي تتمكن أنت من إصلاحها بنفسك. ولكن قد يصعب عليك معرفة كيفية تصحيح الخطأ لهذا يجب عليك تعلم تقنيات الـ Debugging أو التنقيح وهي مهارة تساعد المُبرمج على تحديد الأخطاء وتصحيحها أيضًا. خامساً: قلة التطبيق العملي إن مفتاح تعلم وإتقان البرمجة هو التطبيق العملي، التعليم النظري واكتساب معرفة المبادئ واللغة وحدهما لا ينفعان بدون التطبيق. يضمن لك التطبيق العملي للبرمجة ترسيخ لما تعلمته ويساعد ذهنك على التهيؤ لحل المشكلات وتمرينهُ لمواجهة المشكلات الحقيقية وحلها منطقيًا فيما بعد سواء من خلال البرمجة أو في الحياة الحقيقية. ستجد في جزء المصادر مِنصات ومواقع متنوعة تناسب جميع مراحل التعلم للتدرب على حل المشكلات البرمجية والتطبيق العملي للبرمجة. افعل ما هو أكثر من مجرد قراءة الكود! سادساً: عدم الالتزام يكون الشغف دافعًا قويًا في بداية رحلة التعلم، ولكن يختفي الشغف تدريجيًا مع تدرج عملية التعلم ويظهر الشعور بالملل وقد يوقف هذا المتعلمين عن التعلم في منتصف بداية رحلة التعلم أو حتى آخرها. للتغلب على هذا والحفاظ على الاستمرارية في تعلم البرمجة، ننصحك بأن تتريث في التعلم، وأن لا تجلس لساعات طويلة أمام الحاسوب بهدف تعلم كل شئ في وقت واحد. إن أفضل طريقة لتعلم البرمجة هي أن تتعلم القليل في كل مرة ولا تُرهق ذهنك بالكم الكبير من التعلم في مرة واحدة. اعط لنفسك فترة من الراحة أثناء قضاء الوقت في التعلم حتى لا تشعر بالملل، تمنحك الراحة فرصة لتصفية ذهنك واستعادة تركيزك وتساعدك على حل المشكلات التي تواجهها أثناء التعلم. التخطيط الجيد للوقت والابتعاد عن ما يشتت ذهنك مثل الهاتف وغيره أثناء الوقت الخاص بتعلم البرمجة يساعدك أيضًا على الالتزام، كما أن تذكر الهدف الأساسي من التعلم يمنحك الحماس من جديد لمواصلة الرحلة. سابعاً: عدم التفاعل مع مجتمع المبرمجين إن تبادل الآراء والخبرات من سبقونا في المجال هو أمر هام وضروري يساعدنا على الإلمام بآخر التطورات ويسهل علينا الطريق أثناء التعلم. تنتشر مجتمعات المبرمجين الأونلاين التي يمكنك طلب المساعدة والرأي أو تقديمهم من خلالها في أي وقت مثل Stackoverflow و Reddit’s “learn programming” subreddit. أما إذا كنت تتعلم البرمجة من خلال مِنصة بعينها مثل أكاديمية حسوب وواجهتك عقبة ما أثناء التعلم، فستجد أن الأكاديمية توفر لك قسم خاص لطرح الأسئلة من خلاله يقدم لك الخبراء وكل المتعلمون الآراء وحل المشكلات٬ أيضًا توفر حسوب مِنصة خاصة تُسمى حسوب IO لتبادل الآراء والخبرات في أي مجال كان من بينهم مجال علوم الحاسوب. ثامناً: التخلي عن الطريقة التقليدية في التعلم قد يرى البعض إن استخدام الورقة والقلم في تعلم البرمجة هو أمر قديم وغير فعال، ولكن هذا غير صحيح لأن كتابة أمر ما بيدك يساعدك على الاحتفاظ بالمعلومة وبالتالي استعادتها سريعًا عند الحاجة. تعلم البرمجة بالكتابة باليد يساعدك على فهم أعمق للكود الذي تكتبه وعلى فهم الخوارزميات وبناء كل الجملة من التعليمات البرمجية بوضوح.

ماذا تحتاج قبل أن تتعلم البرمجة ؟

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

كيف تبدأ تعلم البرمجة ؟

مما سبق يمكننا رسم خارطة عامة لتعلم البرمجة تبدأ بالتعرف بشكل أعمق على مفهوم البرمجة ومكوناتها ومتطلباتها، ثم تحديد الهدف من تعلم البرمجة واختيار اللغة المناسبة، ثم تأتي بعد ذلك مرحلة التعلم الفعلية من خلال تعلم أساسيات علوم الحاسوب وقد قمنا بالإشارة إلى البدء بدورة أساسيات علوم الحاسوب التي تقدمها أكاديمية حسوب. بعد أن تُصبح على دراية بالأساسيات يأتي بعد ذلك تعلم لغة البرمجة المناسبة والتطبيق العملي عليها، وتوفر أكاديمية حسوب دورات متنوعة لمختلف لغات البرمجة مثل دورة تطوير التطبيقات باستخدام لغة JavaScript ودورة تطوير التطبيقات باستخدام لغة Python وأيضُا دورة تطوير تطبيقات الويب باستخدام لغة PHP ودورة تطوير تطبيقات الويب باستخدام لغة .Ruby نرشح لك أيضًا فيديو أريد تعلم البرمجة من أين أبدأ؟ الذي تقدمه قناة أكاديمية حسوب على اليوتيوب ليكون عونًا لك في رسم خطة التعلم الخاصة بك.\

نصائح للمبتدئين

إليك عزيزي المبتدئ في تعلم البرمجة بعض النصائح التي قد تساعدك كثيرًا في رحلتك التعليمية.

كن صبورًا

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

Google هو صديقك

تذكر دائمًا أنه لن يوجد من يساعدك في كل وقت وعليك البحث بنفسك عن حل لمشكلاتك، وهذا لن تجد أفضل من محرك البحث google للإجابة عن أسئلتك.

اتقن الأساسيات

تعلم الأساسيات بإتقان وخذ وقتك فيها، فهي القاعدة التي ستبني عليها تعلمك للبرمجة فيما بعد. كلما اجتهدت في بناء القاعدة كلما كانت أكثر متانة ورسوخًا وساعدتك على تخطي المشكلات أثناء تعلم البرمجة وبناء معرفتك بشكل أكثر سلاسة وسهولة. في فيديو ماذا بعد تعلم أساسيات البرمجة؟ على قناة أكاديمية حسوب، يقدم لك المقدم خطة عمل بسيطة لمرحلة ما بعد الأساسيات للتقدم في رحلتك لتعلم البرمجة. في الختام، يعتبر هذا المقال دليل لك في تعلم البرمجة، فاحرص على الرجوع إليه كلما أردت المشورة والنصح.



ما رأيك في هذا المقال؟

كيف تقييم نوعية المحتوى في نقرة؟

5 4 3 2 1