لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 11/19/16 في كل الموقع
-
في سلسلة المقالات هذه سنتعلم معًا أساسيات البرمجة بلغة Java، وأثناء ذلك سنتعلم أيضًا طرائق جديدة للتفكير، وتحليل المشكلات إلى أجزاء صغيرة، وكتابة خوارزميات وحلول منهجية لها. إن مهارة حل المشكلات هي أهم مهارة لأي طالب علوم حاسوب، وكما سنرى معًا، تعلم البرمجة سيفيد كثيرًا في تطوير هذه المهارة. ما هي البرمجة؟ البرنامج هو سلسلة من التعليمات التي تحدد كيفية تنفيذ عملية حسابية. قد تكون العملية الحسابية رياضية، مثل حل جملة معادلات أو إيجاد جذور كثير حدود. وقد تكون أيضًا معالجة رموز، مثل البحث عن نص واستبداله في مستند أو ترجمة برنامج آخر. تختلف التفاصيل بين لغة وأخرى، لكن بعض التعليمات الأساسية تظهر في جميع لغات البرمجة تقريبًا. الإدخال (input): تحصيل البيانات من لوحة المفاتيح، أو من ملف، أو من حساس، أو من جهاز آخر. الإخراج (output): عرض البيانات على الشاشة، أو إرسالها إلى ملف أو إلى جهاز آخر. الحساب (math): تنفيذ العمليات الحسابية الأساسية مثل الجمع والقسمة. اتخاذ القرارات (decisions): التحقق من شروط معينة وتنفيذ التعليمات المناسبة لكل حالة. التكرار (repetition): تنفيذ عمل ما بصورة متكررة، عادة مع وجود تغيير. صدق أو لا تصدق، هذا كل شيء تقريبًا. أيَّ برنامج استعملته من قبل، مهما كان معقدًا، بُنِيَ من تعليمات صغيرة تشبه هذه التعليمات. وهكذا يمكنك اعتبار البرمجةبأنها عملية تجزئة المهام الكبيرة والمعقدة إلى مهام جزئية أصغر وأصغر. وتستمر العملية حتى نصل إلى مهام جزئية بسيطة بما يكفي لتنفيذها بالتعليمات البسيطة التي يوفرها الحاسوب. ننصحك بالرجوع إلى مقال تعلم البرمجة لمزيد من التفاصيل حول البرمجة عمومًا وكيفية دخول المجال. ما هي علوم الحاسوب؟ أحد أهم نواحي كتابة البرامج هو تحديد طريقة حل مشكلة ما، خصوصًا إذا تعددت الحلول. مثلًا، هناك طرق عديدة لترتيب قائمة من الأرقام، ولكل طريقة مزاياها. حتى نحدد أي طريقة هي الأفضل في وضع معين، نحتاج لتقنيات لتوصيف وتحليل الحلول بشكل صيغ منتظمة. علوم الحاسوب هي علوم الخوارزميات، وتشمل تحليل الخوارزميات واكتشاف خوارزميات جديدة. الخوارزمية هي سلسلة خطوات تحدد طريقة حل مشكلة ما. بعض الخوارزميات أسرع من غيرها، وبعضها تستهلك مساحة أقل في ذاكرة الحاسوب. سوف تتعلم كيف تفكر كعالم حاسوب أثناء تعلمك كيفية تطوير خوارزميات لحل مشكلات لم تحلها من قبل. تصميم الخوارزميات وكتابة الشفرات البرمجية عمليتان صعبتان ومعرضتان للأخطاء. تدعى الأخطاء البرمجية bugs (عِلل برمجية)، وعملية تتبعها وتصحيحها تدعى debugging. ستطور مهارات جديدة في حل المشكلات أثناء تعلم تصحيح الأخطاء في البرامج التي تكتبها. عليك التفكير بإبداع عندما تواجهك أخطاء غير متوقعة. ورغم أن حل الأخطاء البرمجية قد يكون محبطًا، إلا أنه جزء مثير وفيه تحدٍ وذكاء. اكتشاف الأخطاء يشبه عمل التحري في بعض نواحيه. حيث تواجهك الأدلة، وعليك استنتاج العمليات والأحداث التي أدت إلى النتائج التي تراها. أحيانًا يقود التفكير بتصحيح البرامج وتحسين أدائها إلى اكتشاف خوارزميات جديدة. ننصح بقراءة مقال المدخل الشامل لتعلم علوم الحاسوب للمزيد من التفاصيل. لغات البرمجة إن لغة البرمجة التي ستتعلمها هي Java، وهي لغة عالية المستوى (High-level language). هناك لغات أخرى عالية المستوى لعلك سمعت بها مثل Python، أو C و C++، أو Ruby، أو Javascript. يجب ترجمة البرامج المكتوبة بلغات عالية المستوى إلى لغة منخفضة المستوى (low-level language) أو ما يدعى ”لغة الآلة“، قبل أن يستطيع الحاسوب تشغيلها. تحتاج هذه الترجمة وقتًا، لكن هذه سيئة بسيطة للغات عالية المستوى. في المقابل، للغات عالية المستوى حسنتين: كتابة البرامج بلغة عالية المستوى أسهل بكثير. كتابة البرامج تأخذ وقتًا أقل، وتكون البرامج أقصر وأسهل للقراءة، ومن المرجح أكثر أن تكون صحيحة. اللغات عالية المستوى محمولة (portable)، بمعنى أنه يمكن تنفيذ البرامج المكتوبة بها على أنواع مختلفة من الحواسيب دون أي تعديلات أو بعد عمل تعديلات قليلة. أما البرامج المكتوبة بلغة منخفضة المستوى فلا يمكنها العمل إلا على نوع واحد فقط من الحواسيب، ويجب إعادة كتابتها قبل أن نتمكن من تشغيلها على جهاز آخر. هناك نوعين من البرامج التي تترجم اللغات عالية المستوى إلى لغات منخفضة المستوى: المفسرات والمترجمات. يقرأ المفسر (interpreter) البرامج المكتوبة بلغات عالية المستوى وينفذها، أي أنه ينفذ التعليمات التي يمليها البرنامج. يعالج المفسر البرنامج في أجزاء صغيرة، حيث يقرأ بعض السطور ثم ينفذ التعليمات ويعود لقراءة سطور أخرى وهكذا. يبين الشكل 1.1 بنية المفسر. على صعيد آخر، يقرأ المترجم (compiler) البرنامج كله ويترجمه دفعة واحدة قبل بدء تنفيذ البرنامج. في هذه الحالة، يدعى البرنامج المكتوب بلغة عالية المستوىبالشفرة المصدرية (source code)، ويدعى البرنامج المترجم بالشفرة الهدف (object code) أو الملف التنفيذي (executable). بعد ترجمة البرنامج، يمكنك تنفيذه بشكل متكرر دون الحاجة لأي ترجمة أخرى. ونتيجة لذلك، تعمل البرامج المترجمة بصورة أسرع من البرامج المفسرة. لغة Java مجمّعة ومفسرة معًا. فبدلًا من ترجمة البرامج مباشرة إلى لغة الآلة، يولد مترجم Java بايت كود (byte code). شفرة بايت سهلة وسريعة التفسير مثل لغة الآلة، لكنها محمولة أيضًا، حيث يمكننا ترجمة برنامج Java على أحد الأجهزة، ثم ننقل شفرة بايت إلى جهاز آخر، ثم نشغل شفرة بايت على الجهاز الثاني. يدعى المفسر الذي ينفذ شفرة بايت "بآلة Java الافتراضية" (Java Virtual Machine أو اختصارًا JVM). يبين الشكل 1.2 مراحل هذه العملية. ورغم أن هذه العملية قد تبدو معقدة، إلا أن معظم بيئات البرمجة (أحيانًا تدعى بيئات التطوير)، تجري هذه الخطوات تلقائيًا بدلًا منك. سيكلفك الأمر عادة ضغطة زر واحدة أو طلب أمر واحد لترجمة برنامجك وتنفيذه. من جهة أخرى، من المهم أن تعرف الخطوات التي تجري وراء الستار، لكي تتمكن من معرفة سبب المشكلة في حال وقوع أي خطأ. ترجمة -وبتصرف- لجزء من الفصل الأول من كتاب Think Java: How to Think Like a Computer Scientist لكاتبيه Allen B. Downey و Chris Mayfield. اقرأ أيضًا تعلم البرمجة المدخل الشامل لتعلم علوم الحاسوب1 نقطة
-
لعلك لن ترى عبارة "مصمم مستقل" في حسابي على لينكدإن، لكن ذلك ﻻ ينفي حقيقة حملي لهذا المسمى الوظيفي بالفعل، بالتحديد منذ أن كنت في السابعة عشرة. ذلك أنه أتاني أول مشروع مدفوع لي حين كنت في الثانوية، عن تصميم ثلاثي الأبعاد، ثم أتت الفرصة كي أعمل على تصميم نماذج Models ﻵلة في مشروع لشركة ناشئة زراعية، كما نفَّذت أعمالًا ﻷصدقائي أيضًا، عائلتي، وجيراني. ودعني أقول لك بفخر أني ارتكبت كل خطأ يمكن ارتكابه، ويسعدني أن أشاركك بعض الدروس المهمة التي تعلمتها من عملي كمصمم مستقل لخمسة عشر عامًا. 1. قم باﻷمر مجانا أو اطلب أجرك كاملا "أريد منك خدمة صغيرة يا صديقي" "وكم تبلغ التكلفة إن كانت لصديقك؟" "ستكون مشهورًا، إن الأمر يستحق ذلك" "لن تأخذ منك أكثر من خمس دقائق" ربما تبدو لك تلك العبارات مألوفة إن كنت تعمل مع أشخاص تعرفهم، فإنهم يحاولون استنزاف أقصى طاقتك تحت ستار العلاقة بينكم، إنها إحدى الحقائق الصادمة عن العمل مع وجوه مألوفة، فهم يريدون أفضل ما يمكنهم الحصول عليه، لكن بأقل تكلفة ممكنة. والمفارقة أنك حين تخصم من أجرك ﻷجلهم، فإن ذلك لن يمنعهم الشّعور وكأنهم دفعوا أجرك كاملًا، وبالتالي يتوقعون منك أفضل جودة ممكنة. لكنك تشعر من الناحية الأخرى أنك قد ظُلِمت، فإن هذا الثمن البخس ﻻ يساوي مقدار العمل الذي ستقوم به. لذا إليك الآن ما عليك فعله: إما أن تنجز مشروعهم مجانًا ودون مقابل، وإما أن تطلب أجرك كاملًا. فإن صديقك سيعلم أنه في آخر أولوياتك إن نفّذت مشروعه مجانًا، ولن يستطيع أن يطالبك بالكثير، فأنت تستطيع أن تقول له في أي لحظة : “اسمع، علي إنهاء هذا أولًا، فورائي عمل حقيقي أدفع إيجاري من ربحه"، أو "ﻻ يمكنك طلب كل هذا من أجل خدمة أقوم بها مجانًا من أجلك”. أما في حالة طلبك ﻷجرك كاملًا منهم فقد يطلبون الكثير على الأرجح، لكنك على الأقل في تلك الحالة لن تخسر مالًا من أجرك، وستعاملهم بمهنية تمامًا مثلما تعامل أي عميل آخر لديك. وبالنسبة لي حاليًا فإني أحاول تفادي إنجاز مشاريع لأصدقائي أو لعائلتي، فلا أريد أن أخاطر بإفساد علاقتي معهم بسبب خلاف قد يطرأ لأي سبب. لكنك أحيانًا ﻻ تستطيع تفادي هذه المشاريع، ﻷنك تحب صديقك/قريبك هذا أو أنه في حاجة للمساعدة بالفعل، ففي تلك الحالة، ﻻ تخصم لهم من قيمة العمل، بل كما قلت لك، إما أن تقوم بالعمل مجانًا أو بكامل قيمته. 2. بادر بالتسويق لنفسك قبل أن تحتاج ذلك يظن الناس أن التسويق شيء تقوم به حين يكون معرض أعمالك جاهزًا و"كاملًا"، فعادة ما تسمع أشياء مثل "سأبدأ في التسويق لنفسي في غضون شهرين، حين يكون معرض أعمالي جاهزًا". والحق أن هذا خطأ كبير تعلمته بنفسي حين حاولت التسويق لتطبيق آيفون كنت قد بنيته، لكني لم أسوّق له إﻻ لما أصبح جاهزًا. وذلك ينطبق على أي تحدٍّ تسويقي: يجب أن تبدأ التسويق قبل أن يكون لديك شيء تبيعه. لتوضيح ذلك المبدأ، لنقل أنك موظف في شركة ما، لكنك تخطط للاستقالة والبدء بالعمل الحر في خلال ستة أشهر، فلا تنتظر حتى آخر يوم من وظيفتك لتكتب على فيس بوك "لقد استقلت من وظيفتي لأعمل بشكل مستقل، فلترسلوا إلي مشاريعكم!”، فستجد صعوبة كبيرة في دفع إيجارك في الشهر التالي إن كانت تلك خطتك. إنني أعلم أننا معاشر الشباب قد ﻻ نستطيع التخطيط لست أشهر مستقبلية، ناهيك عن عشر سنوات. إننا نريد أن يحدث كل شيء دفعة واحدة، غير أن ذلك ﻻ يحدث في الحقيقة. لقد بدأت بالتدوين منذ عامين لمجرد المتعة، وليس بهدف التسويق لنفسي. وها قد بدأت النتائج بالظهور بعد هذين العامين، فإني أتلقى عروض عمل بشكل أسبوعي تقريبًا دون أي جهد مني، بل إني ﻻ أملك حتى معرض أعمال على الإنترنت. ما أريد قوله أن تبدأ في التسويق لنفسك في أسرع وقت ممكن، ثم سترى النتائج في غضون بضعة أشهر. إن الأمر يستغرق وقتًا والتزامًا كي تبني اسمًا لنفسك، لكن اﻷمر يستحق كل ذلك العناء. 3. قل "ﻻ" لعملائك دائمًا ما أجيب بالموافقة على أي شيء، فأنا شخص طيب القلب على أي حال، وأحب بالتأكيد أن يدفع الناس لي لقاء أعمالي التي أنفذها لهم، رغم أني أكره مواجهة الناس. لديك مشروع لي؟ هل أنت مستعد لدفع المال من أجله؟ حسنًا إذًا، موافق. لم يعجبك تصميمي؟ تريد تصميمًا آخر؟ طيب، ﻻ بأس. وقد انتبهت أني أبالغ في تلطفي مع الناس على حساب مصلحتي الشخصية، فكما ترى فإني أكره مواجهة الناس في صدامات شخصية، وإنك إذا أكثرت علي في أمر ما فإني سأنهار. لكني تعلمت بالطريقة الصعبة على مدار السنين أن سياسية "متوافق مع كل الناس" ﻻ تؤتي أكلها دائمًا، على الأقل لا تنجح معي أنا. فقد أنجزت الكثير من المشاريع الحرة حتى حينما كنت أعمل بدوام كامل في استديو، ورغم أني لم أكن في حاجة للمال، لكني لم أستطع قول "لا" أمام أي عرض مصحوب بأجر مادي. ثم انتبهت بعد مدة إلى أن اﻷمر ﻻ يستحق العناء، فحين تعمل في كل ليلة وفي العطلات الأسبوعية، فإن الأمر يستبدل حياتك الشخصية شيئًا فشيئا. لذا فإن حياتك ستصير أفضل بدون هذا العمل الإضافي إن لم تكن في حاجة إلى مزيد من المال من أجل ديون أو فواتير عليك دفعها، ولتتوجه بدلًا من ذلك إلى توفير وقت فراغ لنفسك. وهل تعلم أن في تلك اللحظة التي تقول فيها "ﻻ" لعملائك، فإنهم يبدؤون في معاملتك بشكل مختلف؟ فقد توقفت عن التسوّل من أجل المشاريع، وسيقف من يريد العمل معك في صف انتظار لتحديد معاد يناسبك. بشكل عام، فإن ذلك الأسلوب الجديد سيغير من الطريقة التي يراك الناس بها ويتعاملون معك. هناك سبب آخر يدفعك إلى أن تقول "ﻻ" لعملائك، وهو حين ﻻ يثير المشروع اهتمامك، فلا تنس أن المشاريع التي تعمل عليها هي التي ستكون في معرض أعمالك، وتلك الأعمال ستأتي لك بعملاء على نفس شاكلتها، بمعنى آخر، فإن المشاريع السيئة تجذب عملاء أسوأ. وماذا عن قول "لا" في أعمال التصميم؟ لعلك تستسلم على الأرجح إن لم تكن تحب المواجهات مثلي، إن لم يُعجَب العميل بتصميمك، وتقول لنفسك "ﻻ يهم، إن كان هو نفسه يريد تصميمًا رديئًا". إﻻ أن تلك مشكلة كبيرة أخرى ﻻ يكاد ينتبه إليها أحد، فلا تنتج تصميمات أنت غير مؤمن بأنها رائعة، فإن هذا مرة أخرى هو معرض أعمالك أنت. وكما أن قولك "ﻻ" للأموال التي تأتي من نوعية المشاريع التي تحدثنا عنها في أول المقال، فإن رفضك للعملاء الذين يطلبون تصميمات رديئة سيجعلهم يعاملونك بشكل مختلف أيضًا، تمامًا كما في حالة المال. اقرأ أيضًا: لماذا تعد "لا" الكلمة الأقوى بين مفردات من يعملون لحسابهم الخاص؟ 4. حدد توقعات عملائك إن أغلب المشاكل التي تحدث بين المصممين والعملاء يمكن حلها بوضع توقعات مشتركة بينهم: فمثلًا، يمكنك جدولة كل شيء (من المعطيات التي يوفرها العميل، الاجتماعات، وحتى نهاية المشروع). المال (مقداره، ومتي سيتم دفعه). وسائل التواصل (متى وكيف ستتواصل مع عميلك، كيف ستطلبون التعديلات، وكيف ستطبقونها وتستعرضون نتائجها). صورة المخرجات النهائية (ما المطلوب فيها، بما في ذلك نوع الملفات التي يحتاجها المطور developer). التوابع والعواقب (ماذا سيحدث إذا وقعت مشاكل أو تعارضات، لن نعمل معًا مرة أخرى، .. إلخ) إذا قمت بتحديد تلك التوقعات بشكل سليم، بما في ذلك العقد المكتوب بينكما بشكل يضمن حقوق كل منكما (أنت وعميلك)، فستوفر الكثير من الوقت الذي تقضيه في معالجة تلك الأمور، فلن تقلق حينها إذا حدث شيء ما إذ أنك قد حددت مسبقًا ما عليك فعله. ضع في ذهنك أن العقد الذي تمت صياغته جيدًا سيضمن حقوق كلا الطرفين، وإن هدفك كمصمم مستقل أن تتعامل مع خوف العميل وتعطيه انطباعًا أن كل شيء سيسير على ما يرام. بالمناسبة فإن هذه النقطة الأخيرة ليست للمصممين المستقلين فحسب، بل للمصممين الذين يعملون في شركات ولديهم مدراء يرأسونهم أيضًا. 5. ﻻ تنس أخذ نسخة احتياطية من عملك رغم أن الأمر واضح كالشمس إﻻ أننا ننسى أحيانًا فعل ذلك، لذلك أنا أذكّرك الآن أن تأخذ نسخة احتياطية من عملك. هل تذكر ذلك المشروع الذي عملتُ عليه حين كنت في السابعة عشرة، لقد أصيب حاسوبي بعدها بأربعة أشهر بفيروس عاث فيه فسادًا (نعم، إنها أيام ويندوز السعيدة!). واضطررت إلى البدء في العمل من الصفر مرة أخرى، لكن دون أن يدفعوا لي مقابل تلك الساعات الإضافية بالطبع. أسد لنفسك معروفًا وتأكد أن لديك نسخة احتياطية من كل شيء مهم، وقد صار الأمر سهلًا هذه الأيام بوجود خدمات النسخ الاحتياطي المنتشرة. ترجمة -بتصرف- للمقال Things I've Learned as a freelance Designer لصاحبه Ran Segall.1 نقطة