كيف أكون مبرمجا؟ لـ روب والينج

فواز العتلمنذ 5 سنوات

بسم الله و الصلاة و السلام على أشرف الأنبياء نبينا محمد و على آله و صحبه أجمعين.

 

إليكم ترجمة لكتاب روب والينج “كيف أكون مبرمجا؟” و هو حقا رائع و مفيد. الكتاب يحتاج فقط للتحديث ففيه روابط معطوبة و معلومات تغيرت و قد بينت ذلك.

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

أخيرا أسأل الله أن يوفق الجميع.

 

تحميل الكتاب بصيغة PDF

 

المحتويات:

مقدمة

ما هو المقصود ببرمجة الحاسوب؟

 لماذا ينبغي علي ان اكون مبرمجا؟

ما هي بعض الاسباب التي تمنعك من أن تصبح مبرمجا؟

ما هي عوالم البرمجة المختلفة؟

أي لغات البرمجة يجب علي تعلمها؟

من اين ابدأ؟

بنيت مشروعا و اكتشفت اني احب البرمجة فما هي الخطوة التالية؟

لقد تخرجت لتوي من الجامعة فكيف أحصل على الخبرة؟

كيف يمكنني ان اصبح مبرمجا دون ان ارتاد جامعة؟

ماذا عن الوظائف عن بعد؟ هل سأجد وظيفة بعد خمس سنوات؟

هل يجب علي ان اجيد الرياضيات لاصبح مبرمجا؟

كم من المال يمكن ان اجنيه كمبرمج؟

كيف أصبح مبرمجا بارعا؟

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

مصادر متقدمة

الاسئلة الشائعة

كيف يمكنني ان اكون مبرمج Net.؟

ما هو أفضل طريق للبرمجة اذا كان حاسوبي ماك (OS X)؟

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

ما هي أسهل لغة برمجة للبدء بها عند تعلم كيف تبرمج؟ 

ما هي اللغة الواجب علي تعلمها لاصبح مبرمج أنظمة؟ 

اذا احسست بأني لست ميالا لان اكون مبرمجا رائعا لكن لدي الرغبة بذلك. فهل أستمر بذلك؟ 

اذا كنت أريد ان اتخصص في مجال برمجة تطبيقات الند للند فما الذي تنصحني به؟ 

ما المقصود بالتطوير باستخدام أجايل | Agile Development؟ 

هل ينبغي علي اولا التخطيط على الورق قبل البدء بالمشروع؟

كيف أبني لعبة للحاسوب؟ 

ما هي أعظم جائزة سأحصل عليها جراء تعلمي البرمجة؟ 

كيف يمكنني ايجاد شركة برمجيات لتقوم بتدريبي؟ 

إلى اي حد يصعب على شخص يعرف الحواسيب لكنه ليس مهووسا بها ان يصبح مبرمجا؟ 

هل علوم الحاسب مثل البرمجة؟ 

 

 

مقدمة

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

 

الدافع

سؤال قد تسأله نفسك "لما قد يكتب مبرمج كتابا حول كيف تصبح مبرمجا؟" مثل كل سؤال جيد اجابة هذا السؤال طويلة لدرجة إنك لن تهتم لسماعه لكن تفضل:

يصلني عدد ضخم من الرسائل الالكترونية تسأل وبصيغ مختلفة "كيف يمكنني أن أصبح مبرمجا؟"

في بداية 2007 وضعت وبشكل مختصر شيئا من أفكاري حول هذا الموضوع في تدوينه بعنوان Advice on How to Become a Programmer لكن ومع استمرار الاسئلة الجديدة التي تردني وهي بالمناسبة تم اجابتها في هذا الكتاب كان واضحا ان هذا الموضوع يستحق طرحا أعمق بكثير مما يمكن أن يطرح في مدونة.

 

كل ما في هذا الكتاب مبني على خبرة 10 سنوات كمحترف تطوير برمجيات. عملت كمطور براتب وكمطور مستقل وكمستشار ومدير تطوير وكمالك لشركة استشارات وكمالك لشركة برمجيات صغيرة تعرف باسم MicroISV وككاتب تقني. كتبت برمجيات لم ترى النور نهائيا وكتبت برمجيات تقوم بملايين العمليات يوميا.

 

مدونتي يزورها 20 ألف زائر شهريا ويشكل مطوري البرمجيات 80% من هؤلاء الزوار.

 

التحديثات والاسئلة

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

 

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

 

إذا كان لديك سؤال لم اتطرق لإجابته في هذا الكتاب فلا تتردد بإرساله لي على بريدي الالكتروني [email protected]

لا أستطيع أن اعد بإجابة جميع الاسئلة لكن على الأرجح سوف يأتيك رد مني مالم يكن الرد "لقد أجبت على سؤالك في الاصدار الاخير من الكتاب الالكتروني. ألق نظرة"

 

ما هو المقصود ببرمجة الحاسوب؟

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

 

لكن حقيقة هي ليست بذلك التعقيد فالمقصود ببرمجة الحاسوب او ما تعرف ايضا بالبرمجة أو التكويد أو تطوير البرمجيات (هناك اختلافات تفرق بين كل مصطلح) المقصود بها كتابة أوامر يمكن للحاسوب تنفيذها.

 

كمثال: ان سبق لك كتابة ماكرو | Macro لبرنامج الاكسيل | MS Excel فيمكنك القول بأنك برمجت حاسوبا.

 

إذا سبق لك وان انشأت صفحة انترنت مستخدما HTML فيمكنك القول بأنك مارست التكويد (قد يختلف البعض معي هنا لكن ذلك يتماشى مع التعريف).

 

وإذا سبق لك التكويد مستخدما احدى لغات البرمجة الاساسية مثل Pascal | Java | JavaScript | PHP | C | Basic فأنت بالفعل قد دشنت دخولك رسميا لعالم البرمجة الحاسوبية.

 

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

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

 

البرنامج الحاسوبي أو ما يعرف بالتطبيق عبارة عن مجموعة من الأوامر | الأكواد تكتب بواسطة مبرمج واحد أو أكثر ليتم تنفيذها على الحواسيب.

 

الأكواد يمكن أن تكتب باستخدام واحدة من لغات الحواسيب والتي تعرف بلغات البرمجة مثل C | C++ | Java | Visual Basic | Perl او غيره من اللغات. هناك فعليا مئات من اللغات البرمجية وكل لغة لها حيزها الخاص. لكن قلة قليلة من هذه اللغات تعتبر شائعة الاستخدام في كل الأوقات فبعض اللغات تميل للاستمرار لسنوات ثم ببطء تنسحب لصالح لغات جديدة تحل محلها. على أية حال هناك لغات صمدت لعقود و C | C++ | COBOL أمثلة على لغات مديدة العمر.

 

الحواسيب التي تدار بالبرمجيات يمكن أن تكون حواسيب مكتبية محلية لشركة | حواسيب خارجية لزبون | خوادم انترنت او حتى حواسيب متخصصة غير معروفة تعمل في السيارات | المصاعد | المايكرويف الخاص بك.

 

مايكروسوفت وورد | MS Word وحزمة أوفيس | Office كاملة ما هي الا برمجيات تعمل على عدد من حواسيبنا المكتبية او المحمولة.

 

موقع أمازون الالكتروني هو برمجية ضخمة جدا مخصصة يطلق عليها "Obidos" تعمل على الاف من خوادم أمازون حول العالم. عندما تفتح انترنت اكسبلورر | IE او فايرفوكس | Firefox فان طلبا يرسل الى هذه الخوادم ثم يأتيك الرد محملا بالمعلومات التي طلبتها عن طريق مثيل "Obidos".

 

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

يتم وصف البرمجة اساسا بأنها ممارسة التكويد | Coding أو بشكل أسهل يتم وصفها بانها كتابة أوامر في محرر ما. لكن كونك مبرمج هذا لا يجعلك تقف عند كتابة الأكواد فقط.

 

تطوير البرمجيات | Software Development مصطلح غالبا ما تكون قد سمعته ويتم استخدامه كبديل لبرمجة الحواسيب | Programming هو مصطلح اشبه بالمظلة فهو يشمل العملية التي ننتقل بموجبها من الفكرة او المفهوم الى ايجاد منتج نهائي. بينما البرمجة هي مجرد كتابة اوامر فإن تطوير البرمجيات تعني مجموع العمليات التي تتم من اجل بناء برنامج متكامل وتشمل:

 

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

 

يعد التكويد الجزء الأكثر متعة بالنسبة للمبرمجين لكن اعلم ان هناك خطوات متعددة مطلوبة تسبق التكويد وتلي جلوسك على الحاسوب واخراجك لألف الاسطر من الأكواد.


 

لماذا ينبغي علي ان اكون مبرمجا؟

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

 

الوظائف

حسب مكتب العمل الامريكي, 8 من أصل 10 من المهن المتنامية بسرعة بين عامي 2000 و 2010 هي مهن تتعلق بالحاسب الالي. أجد في كل استفتاء وظيفي في المجلات أن المهن المتعلقة بمجال الحاسب الالي تأتي في المراكز العشر الاولى. وطبعا هناك نقص دائم يتحدث عنه الجميع منذ التسعينات الميلادية فيما يخص الكفاءات البرمجية.

 

والنتيجة؟ هناك عدد كبير من الوظائف في مجال البرمجة.

 

مجرد بحث بسيط على Dice.com سيكشف لك ان هناك الاف الوظائف المتوفرة للمبرمجين (وقت كتابة هذا الكتاب يوجد على الصعيد المحلي 20 ألف وظيفة تحت مسمى مطور).

 

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

 

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

 

المهارات الصعبة

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

 

المهارات الصعبة هي مهارات كالبرمجة والهندسة والمحاسبة بينما المهارات البسيطة هي مهارات كالمبيعات والتسويق وغيره. كلا النوعين لهما قيمة لكن نظرا لسهولة رصد المهارات الصعبة في السير الذاتية واختبارها وتقديرها فان عملية اقتناص الفرصة الوظيفية أسرع لمبرمج منه لمدير منتج.

 

أضمن لك أن وضعت سيرتك الذاتية على أحد منصات التوظيف تحت مسمى مطور متقدم Java | PHP | .NET في عنوان السيرة مع وجود خبرة تدعمها فأنك ستحصل على اول اتصال خلال ساعات قليلة.

 

الدخل المرتفع

في رأيي لا يجب ان تقبل بوظيفة من أجل راتبها. لكن ان كنت تستمع بالبرمجة او تعتقد أنك ستستمتع بها لا حقا وهناك من سيدفع لك راتبا مرتفعا فافعل ذلك.

 

خذ دقيقة وتصفح موقع Salary.com واستخدم معالج البحث عن الراتب وادخل "مبرمج 1" ورمز المدينة والق نظرة على النتائج. على الرغم من ان "مبرمج 1" تسمية غير شائعة الا انها تستخدم لتمثيل الخبرة وإنها 0-3 سنوات. اما "مبرمج 2" والى "مبرمج 5" فتمثل خبرة أكثر للمطور.

 

 

المرونة

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

 

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

 

كل ما تحتاج اليه هو هاتف واتصال سريع بالإنترنت. كتبت الاف الاسطر من الأكواد في المقاهي وفوق الجبال وحتى على الشاطئ.

 

التحديات

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

 

إذا كنت تعرف مبرمجا أسأله عن ذلك وستكون من احدى الاجابات هي الاجابة التالية:

"انها مليئة بالتحديات وانا اتعلم باستمرار اشياء جديدة"

 

التحدي هنا يكمن في ايجاد الحلول للمشكلات. بعض المشكلات بسيطة كبساطة "كيف اضيف زر طباعة للعميل ليتمكن من الطباعة من الصفحة مباشرة؟"

 

وبعضها معقد وصعب كـ " لدينا نتاج عمل 3 سنوات من الأكواد مكتوبة بـ VB.Net ونرغب بتحويلها الى #C. فماذا نفعل؟"

 

في النهاية، كل شخص أعرفه يحب البرمجة هو ايضا يحب ايجاد الحلول للمشكلات. البرمجة في حقيقتها عبارة عن ايجاد حلول في كل يوم.

 

الشعور بالإنجاز

أعذرني قليلا فأنا سأمارس الفلسفة عليك. بعض الناس لن يهتم بهذا السبب لكن بالنسبة لي هو أحد أهم الاسباب التي تدفعني للبرمجة.

 

هناك الكثير من النقاش حول ما إذا البرمجة تعد فنا أو علما. أنا أعتقد بأنها خليط من الاثنين لكن هذا لا يهم.

 

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

 

أن تنجز شيئا من لا شيء يمنحك شعورا عظيما.

 

البرمجة رائعة أحيانا

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

 

ثم في أحايين أخرى تجد نفسك تبني موقعا لمهرجان صن دانس للأفلام (عملت ذلك في 2003) أو تعمل لدى ماي سبايس | Myspace او يوتيوب على خاصية مثيرة للاهتمام (مثل أصدقائي لديهم). أو موقعا تعمل عليه يقوم ببيع منتجات تصل قيمتها سنويا 17 مليون دولار (والذي حدث لي ولبعض الاصدقاء).

 

خلال هذه الاوقات تكون البرمجة فيها ممتعة وربما من الرائع أن تكون مبرمجا.


 

ما هي بعض الاسباب التي تمنعك من أن تصبح مبرمجا؟

 

إذا كنت لا تحب البرمجة

إذا كنت مطورا مميزا فهذا يعني أنك ستعيش بين الأكواد أكثر من 40 ساعة اسبوعيا (وربما تفكر فيها خلال عطل الاسبوع). إذا كنت لا تحب البرمجة فهذه الوظيفة ليست لك.

 

لا ترغب في تطوير مهاراتك باستمرار

لغات البرمجة والتقنيات تتغير كل 2-3 سنوات. إذا لم تكن متعطش للتعلم باستمرار فالبرمجة إذا ليست لك. المطور المميز يستمر بالتعلم ويقرأ الكتب باستمرار.

 

الادارة

من الصعب ايجاد مدراء ممتازين في أي قسم من أقسام الشركة، لكن يبدو أن الوضع أكثر صعوبة في مجال تقنية المعلومات. العديد من مدراء تقنية المعلومات كانوا أنفسهم تقنيين لذا هم ميالين نحو التقنية أكثر من الاشخاص (المترجم: يبدو انه يقصد انهم يهملون موظفيهم). لم أر في أي مكان فرقا تدار بسوء بالغ كما في أقسام تقنية المعلومات.

 

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

 

ساعات العمل الاضافية

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

 

ما هي عوالم البرمجة المختلفة؟

هناك أشخاص مختلفين لديهم آرائهم الشخصية حول عوالم البرامج المختلفة. جول سبول سكاي صاحب مدونة Joel on Software المعروفة يعرف هذه العوالم بشكل مختلف عني لكننا نتفق على النقاط العامة. اليكم تعريفي للعوالم الستة للبرامج:

 

المنتجات | Products

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

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

 

التطوير للشركات | Corporate Development

عادة يقصد به العمل لدى بنك أو شركة تأمين أو أي شركة كبيرة بغرض تطوير برامج لصالح قسم المحاسبة او مركز الاتصال او قسم الشحن وغيره.

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

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

 

البرامج الضمنية | Embedded Software

البرامج الضمنية يتم تحميلها على شرائح الكترونية مخصصة وتشمل البرامج المخصصة للعمل على السيارات والمصاعد وأجهزة نظام الملاحة العالمي.

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

 

تطوير الالعاب | Games Development

إذا كنت من هواة الالعاب فان تطويرها سيصبح دمارا شامل. تطوير الالعاب يعني كمية ضخمة من العمل.

 

القصص التي اسمعها من مطوري الالعاب تشير الى محبتهم لهذا النوع من العمل لكن في نفس الوقت يكرهون ساعات العمل الطويلة. الرواتب المدفوعة لمطوري الالعاب تنخفض قليلا عن هؤلاء الذين يطورون للشركات وهو منطقي. لو كنت تعمل على برنامج فوترة لشركة فهل ستقبل بخفض دخلك للعمل على لعبة هالو3؟

 

تطوير الالعاب يستلزم عقلا يجيد الرياضيات وهو المجال الوحيد الذي يمكنني ان اقول عنه انه يستلزم فهما لرياضيات المرحلة الجامعية.

 

الاستشارات

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

 

رواتب المستشارين يمكن ان تقارن بمطوري الشركات وربما تتجاوزها. هذا المجال الذي اخترته لنفسي بعد ان عملت كمطور للشركات وقبل ان انشئ شركتي الخاصة للاستشارات.

 

الموظف المستقل | Freelance

بمجرد ان تصبح لديك خبرة كافية وعلاقات ربما ستبدأ بالعمل على مشاريع جانبية ثم اخيرا تتحول لتصبح موظفا مستقلا. الأموال التي تحصل عليها من عملك كموظف مستقل ممتازة لكن الجزء الصعب هنا هو كيفية حفاظك على تدفق الاعمال والمشاريع.

 

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

 

لكن ذلك هدف جذاب وسهل المنال للعديد من المطورين اصحاب العقول الريادية وأنا منهم.

 

أي لغات البرمجة يجب علي تعلمها؟

هذا سؤال شخصي لأكون منصفا فهو أشبه بـ "هل يجب علي تعلم الفرنسية، الاسبانية او الالمانية لأجل أن أصبح مترجما؟" من الصعب الاجابة على هذا السؤال بدون معرفة الكيفية التي تريد بها أن تصبح حياتك العملية عندما تصبح مبرمجا.

 

نظرا لأنك تقرأ هذا الكتاب الالكتروني وأنت تملك الحد الادنى من المعرفة بلغات البرمجة لن أرميك ب 25 احتمالا من لغات البرمجة التي يجب تعلمها.

 

هناك مجموعة من اللغات مبنية على العوالم المختلفة للتطوير التي ذكرتها سابقا.

عموما (ملاحظة: أنا قمت بعملية مسح شاملة لما هو عام واخترت أكثر اللغات شيوعا لأجل ازالة الالتباس):

 

  • برامج سطح المكتب تكتب عادة بـ  C++ | C# | VB.Net | Java
  • تطبيقات الويب تكتب عادة بـ ASP.Net | PHP | Ruby on Rails | Java
  • التطوير لشركات يستخدم فيها عادة برامج سطح المكتب او تطبيقات الويب او كلاهما
  • البرامج الضمنية تكتب عادة بنسخ مخصصة من C++ | C
  • تطوير الالعاب يستخدم فيها لغة C ومؤخراً #C
  • الاستشارات والوظائف المستقلة يستخدم فيها لغات برامج سطح المكتب وتطبيقات الويب

 

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

 

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

 

ASP.Net

ASP.Net هي خياري من المنصات (#C  و VB تحديدا). ASP.Net تعمل على ويندوز و خوادم IIS للويب (مضمن مع ويندوز). عادة تستخدم فيجوال ستوديو| Visual Studio للتطوير وخادم اس كيو ال | SQL لقواعد البيانات (متوفر نسخ مجانية من هذه الادوات).

 

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

 

PHP

هي لغة مفتوحة المصدر وهي من اللغات التي يجب ان تهتم لها. ممتازة جدا لبناء مواقع على الانترنت مستخدما ادوات مجانية. تعمل على خادم ويب Apache وعادة ما تستخدم MySQL كقاعدة بيانات وكلاهما مفتوح المصدر.

 

هناك العديد من الوظائف لمطوري PHP لكن ليست بأعلى من مطوري Net. من ناحية الرواتب. تعليق جانبي: الشركات غالبا يستخدمون Net. او Java بينما الشركات المبتدئة تميل لاستخدام Ruby on Rails أو PHP.
 

Ruby on Rails

Ruby on Rails بنية عمل ويب 2 رائعة و جديدة. Ruby هي لغة البرمجة و on Rails هي بنية العمل التي تتيح لك بناء تطبيقات ويب بسرعة عالية. لم تؤخذ بجدية حتى الان من قبل الشركات الضخمة لكن تطورها السريع دعا الشركات الناشئة لاستخدامها يمنة ويسرة.

 

Java

لغة مفتوحة المصدر مملوكة لشركة Sun (المترجم: استحوذت أوراكل على الشركة لذا يمكن القول ان جافا مملوكة لها الان). يمكنك استخدامها في بناء برامج سطح المكتب وتطبيقات ويب لكنها الان بدأت تخسر امام Ruby on Rails و PHP عند الشركات الناشئة و بدأت تخسر امام Net. عند الشركات الضخمة.

 

ColdFusion

لغة مملوكة لماكرو ميديا (أدوبي | Adobe الان) وهي مستخدمة من قبل المصممين وهي لغة سهلة وتندمج جيدا مع جافا. لن أتعب نفسي في محاولة تعلمها فهي في طريقها للخروج من المنافسة.

 

Perl

لغة تحليل نصوص | Parsing مفتوحة المصدر | Open Source وقديمة بعض الشيء. ما زالت مستخدمة هنا وهناك. لكنها أقرب لان تكون لغة مخصصة لصيانة الواجهات الخلفية |Back-end. ستكون مجنونا لو قمت هذه الايام ببناء مواقع الكترونية مستخدما اياها.

 

ان كنت تهدف لان تكون موظفا باجر فان عملك كمطور ويب (في رأيي كمطور) هو أفضل نهج تنتهجه. لو كنت سأبدأ العمل لقمت ببناء مشروع مجنون مستخدماC# | ASP.net | Ruby on Rails  ثم استخدمه لزيادة فرصي في الحصول على اول وظيفة برمجية. الق نظرة على Dice وابحث في منطقتك لتكتشف اي لغات البرمجة الطلب عليها عالي واي نوع من الشركات ترغب بالعمل لديها.

 

إذا كنت متأكداً من أنك ستعمل على تطوير الالعاب فتعلم مايكروسوفت XNA وهي عبارة عن بنية عمل ابتدائية لتطوير العاب تعمل على ويندوز و اكس بوكس 360. سينتهي بك الامر كمطور العاب الى تعلم ++C لكن شخصيا لن احاول تعلمها كأول لغة لي.


 

من اين ابدأ؟

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

 

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

 

بأخذ ذلك في الحسبان لو كنت سأبدأ اليوم لاتبعت الخطوات التالية:

  • اشتري Beginning ASP.NET 3.5: In C# and VB واقرأه من الغلاف للغلاف وقم بحل جميع التمارين التي يحتويها. عندما تنتهي ستكون قادرا على بناء تطبيق ويب اساسي باستخدام ASP.Net
  • اختر مشروعا صغيرا وابدأ العمل عليه بنفسك. الامثلة على ذلك تشمل: بديل لقرص يواس بي على الشبكة، مدير اتصال على الويب او تطبيق لتتبع الوقت. لا تهتم بكيف يبدو مشروعك بل بكيف يعمل. قم بتكويده ثم اختبره.
  • بمجرد ان تنتهي منه برمجيا عد اليه وأعمل على الكيفية التي سيبدو عليها.
  • قم برفعه على استضافه وأجعله متاح لكل من هو على الانترنت. بذلك يكون لديك خبره برمجية في Net. وتطبيق متاح على الانترنت ونموذج يمكنك عرضه على أصحاب العمل.

 

هذا طريق من الاف الطرق التي يمكنك اتباعها من اجل الحصول على خبره برمجية. اختار Net.  لان هناك طلب عالي على مطوريها اما إذا كنت تفضل العمل باستخدام PHP فاشتري كتابا للمبتدئين مثل Beginning PHP and MySQL: From Novice to Professional وأتبع نفس الخطوات السابقة.

 

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

 

الخطوات المذكورة بالأعلى تحقق لك عدة نقاط:

  1. انها تجعلك تمارس التكويد. لا شيء عديم القيمة أكثر من القراءة عن التكويد لست أشهر. يجب أن تبدأ بالتكويد في أسرع وقت ممكن.
  2. إنك ستتعلم لغة صالحة لسوق العمل. التطبيقات الحقيقية هي التي تبنى بـ ASP.NET او PHP. ستتعلم لغة ستكون على الأرجح السبب في حصولك على وظيفة.
  3. ستنشئ حقيبة من أعمالك. ربما لن تكون هذه الحقيبة الاكثر اثارة لكنها ستسمح لك بعرض تطبيقاتك لأصحاب العمل المحتملين وايضا ستسمح لهم بمشاهدة الأكواد التي كتبتها.
  4. بمجرد انتهائك من الخطوة الثانية ستعرف ما إذا كنت تحب البرمجة ام لا. معظم المبرمجين الذين أعرفهم لم يتمكنوا من وضع الكتاب أسفل ويفكرون ليلا ونهاراً في مشروعهم حتى يكتمل. ان اكتشفت أنك تشعر بالرهبة من الجلوس على حاسوبك وقضاء الوقت المتطلب لإنهاء مشروعك فلربما لست من أهل البرمجة. طبعا حاول التفريق بين الاجهاد من العمل وافتقارك للوقت كعوامل محبطة.

 

بنيت مشروعا واكتشفت أنى أحب البرمجة فما هي الخطوة التالية؟

هناك عدد من الخيارات التي يمكنها ان تزيد من امكانياتك في البرمجة:

 

التعلم بالممارسة

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

 

الكتب

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

 

الانترنت

الانترنت مصدر ممتاز لإيجاد اجوبة لأسئلتك حول البرمجة لكن وجدت انه في حال أردت تعلم مفاهيم جديدة من الصفر فأني أكون في حاجة لمصدر أستطيع قراءته وفهمه جيدا (يقصد الكتب). ان كنت تجد في الانترنت ما تريد فهذا رائع. مواقع مثل http://www.php.net | http://www.asp.net | http://java.sun.com هي نقطة البداية التي تبدأ معها تعلم لغة برمجة.

 

التدريب

إذا لم تكن قد قرأت مقالي Software Apprenticeships فأنا أنصح بأن تفعل. أفضل طريقة (يمكنني أن اجادل في أنها أسرع طريقة) لتصبح مبرمجا جيدا هي أن تكون تحت جناح مطور خبير والذي لن يعلمك الاساسيات فقط بل سيعطيك المعرفة العميقة والتي تتطلب سنين لتحصل عليها. أعتبر هذا الخيار هو الخيار المتفوق والذي يتجاوز كافة الخيارات الاخرى. ما الحيلة؟ ايجاد تدريب مناسب صعب.

 

الجامعة

بما أني أخذت هذا المسار بنفسي فأنا أدرك جيدا القيود المفروضة على نظام الجامعات والتي تتعلق بتهيئة الطلاب ليصبحوا مبرمجين. تهيئتهم لوظيفة يقومون فيها بتحديد رمز O الكبير | big-O notation ورمز o الصغير | little-o notation بكل تأكيد لكن تعليمهم التكويد؟ لا.

 

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

 

المعاهد التقنية

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


 

لقد تخرجت لتوي من الجامعة فكيف أحصل على الخبرة؟

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

 

بناء مشاريع بنفسك

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

 

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

 

الحصول على وظيفة بدون خبرة برمجية وظيفية ليس صعبا كما تعتقد. لكن الحصول على وظيفة بدون خبرة برمجية اطلاقا هو الصعب.

 

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

 

"وظفهم" اول ما تبادر الى ذهني.

 

المشاريع المفتوحة المصدر | Open source

حسب ويكيبيديا:

 

Open source software (OSS) began as a marketing campaign for free software. OSS can

be defined as computer software for which the human-readable source code is made

available under a copyright license (or arrangement such as the public domain) that

meets the Open Source Definition. This permits users to use, change, and improve the

software, and to redistribute it in modified or unmodified form. It is very often

developed in a public, collaborative manner.

(المترجم: النص المقتبس لم يعد متوفرا. مقالات ويكيبيديا تتعرض للتعديل من فترة الى اخرى)

 

ترجمة النص المقتبس:

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

 

هذا يعني ان كل مبرمج حتى وإن كان مبتدئا يمكنه ان يساهم في تكويد مشروع مفتوح المصدر. ربما قد سمعت عن Linux | WordPress | PHP | Apache هي جميعها مشاريع مفتوحة المصدر.

 

اذهب الى http://sourceforge.net أو http://www.codeplex.com وألق نظرة عن قرب. ربما يكون ذلك شاقا في البداية لكن ستجد كما كبيرا من البرامج التي تحتاج مساهمتك. اختر مشروعا تجده مثيرا لانتباهك ثم اقرأ عن كيفية المساهمة في تطويره. ربما تحتاج في مشروع ما الى التقدم بطلب للعمل عليه وربما تجد كل شيء متاح امامك.

 

في كلتا الحالتين اضافة "مساهم في مشروع مفتوح المصدر" في سيرتك الذاتية يعد ميزة ضخمة.

 

المترجم:

ربما الموقعين الذين ذكرهما الكاتب فقدا بريقهما نوعا ما لذا أحب ان اضيف الى المواقع التي ذكرها موقع https://github.com فهو يحتوي على الكثير من المشاريع المفتوحة المصدر بلغات برمجة متعددة ويمكن تصفح هذه المشاريع وتنزيلها مباشرة على جهازك غالبا بلا قيود.


 

كيف يمكنني ان أصبح مبرمجا دون ان ارتاد جامعة؟

قرابة 60% من مطوري تطبيقات الانترنت لديهم شهادات جامعية من 4 سنوات دراسية. وحسب مكتب العمل الامريكي 68% من المبرمجين عموما (شاملا مطوري تطبيقات الويب) لديهم شهادات جامعية من 4 سنوات.

(المترجم: المؤلف وضع روابط لمصدر الاحصائيات لكن تم ازالتها من المصدر)

 

إذا هل يمكنك ان تصبح مبرمجا دون شهادة جامعية؟ بالطبع

 

3 من كل 10 مبرمجين و 4 من كل 10 مطورين ويب لا يملكون شهادة جامعية من اربع سنوات. لذا أن كانت الاحتمالات ليست مواتية لتخرج وتحصل على واحدة وإذا لم يكن لديك بالفعل شهادة فهي لا تستحق كل هذا العناء فقط لتعرف ما إذا كنت ترغب في البرمجة.

 

ما ابحث عنه من معايير عندما أرغب بتوظيف شخص ليعمل لدي كمطور هو التالي (مرتبة تقريبا حسب الاهمية):

  1. الخبرة العملية
  2. الشهادات المهنية
  3. الشهادة الجامعية
  4. مساهمات في مشروع مفتوح المصدر
  5. مقالات/اوراق علمية، تقديم محاضرات، مدونة معروفة
  6. مشاريع عملت كهواية

 

ملاحظة، هناك ما هو اسوأ من مطور بشهادات مهنية وبدون خبرة عملية.

 

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

 

حسب حجم وطبيعة مشروعك الشخصي فإن مشروعك هذا ربما يؤهلك للحصول على المقعد رقم 1 عند المنافسة للحصول على وظيفة كمبتدئ مع العلم ان منافسيك ربما لن يحققوا أياً من المعايير 1-5 الا في حصولهم على شهادة جامعية.

 

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

 

ماذا عن الوظائف عن بعد؟ هل سأجد وظيفة بعد خمس سنوات؟

قرأت كتاب توماس فريدمان The World Is Flat: A Brief History of the Twenty-first Century  جميعكم تعلمون الضجيج الذي يدور حول التوظيف عن بعد و أن وظائف البرمجة و مراكز الاتصالات الموحدة ستنتقل للخارج, هذا ليس صحيح كليا.

 

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

 

إذا تتبعت محاولة ديل للحواسيب في جعل مراكز الاتصالات الموحدة خارج البلاد فلربما سمعت انهم

 

"...أعادوا مراكز الاتصال الموحد الى الولايات المتحدة بعد ورود شكاوى من الزبائن حول كل شيء من اللهجات الاجنبية الى جودة الدعم."

 

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

 

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

 

معدل البطالة لمهن الحاسب والرياضيات كانت 37% أقل من معدل البطالة العام في الولايات المتحدة لعام 2007 و 43% أقل من في اكتوبر 2008 على الرغم من تعرضنا للازمة المالية. ايضا شاهد هذا الرسم البياني والذي يعرض بيانات للفترة بين 2000 و 2004 و سترى ان الاتجاه لمعدل البطالة لمهن الحوسبة يقبع و بصورة ملحوظة تحت المعدل العام للبطالة في الولايات المتحدة.

(المترجم: المؤلف وضع روابط لمصدر الاحصائية وللرسم البياني لكنها أصبحت معطوبة)

 

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

 

هل التوظيف عن بعد حقيقي؟ نعم. لكن حتى نتقن الانتقال الاني سيكون هناك وظائف للمطورين المهرة.


 

هل يجب علي ان اجيد الرياضيات لأصبح مبرمجا؟

ليس من الضروري ان تعرف الرياضيات لتصبح مبرمجا

 

لكن كما قلت في الاعلى، ان كنت تطور الالعاب فان الرياضيات والفيزياء تلعب دورا كبيرا هنا ورياضيات المستوى الجامعي ستكون متطلب. لكن بناء برنامج فوترة لن يتطلب منك مستوى أكبر من الجمع والطرح.

 

بما أنى قلت ذلك فان العديد من مفاهيم البرمجة تنبع من التفكير الجبري | Algebraic thinking.

 

ومن خبرتي الشخصية، الاشخاص الذين يتعلمون الرياضيات بسهولة ويعشقون حل المشاكل المنطقية (سوآءاً كانت جبرا ام الغازا من How to move Mount Fuji) يميلون لتعلم التكويد بشكل أسرع ويستمتعون به أكثر مع مرور الوقت.

 

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

 

كم من المال يمكن ان اجنيه كمبرمج؟

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

 

غالب المطورين المبتدئين الذين عملت معهم يجنون ما بين 50 و 55 الف دولار. اما اصحاب الخبرة المتوسطة فيجنون ما بين 65 و 90 الف و اما المطورين المتقدمين فيحصلون على اجر بين 85 و 105 الاف (و أكثر ايضا في حال كانوا متخصصين أكثر في مجال ما).

 

إذا أصبحت موظف مستقل فيمكنك ان تجني 50-60 دولار للساعة إذا كانت لديك خبرة. يمكنك الحصول على 60-80 دولار للساعة إذا كنت مطور متقدم و 80-150 دولار اذا كنت خبيرا في مجالك (مثلا لديك مدونة محترمة، تنشر مقالات او كنت متخصص في مجالات أدق).

 

هذه حدود الرواتب حسب خبرتي وحسب رواتب مطوري الشركات في أكبر المراكز التقنية في (بوسطن | نيويورك | سان فرانسيسكو | لوس انجلوس | سياتل). لحدود رواتب المطورين في منطقتك قم بزيارة Salary.com وادخل "مبرمج" ورمز المنطقة في مستكشف الرواتب او ابحث في Dice مستخدما رمز منطقتك وألق نظرة على الوظائف المطروحة.

 

كيف أصبح مبرمجا بارعا؟

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

 

اليك العناصر التي في رأيي انها حاسمة:

 

تعلم ثم تعلم ثم تعلم

يجب أن يكون لديك شهية ونهم للتعلم. هذا يعني ان تقرأ في البدايات كتاب برمجة واحد كل عدة أسابيع ثم تنتقل الى كتب حول المفاهيم مثل Pragmatic Programmer | Code Complete | Facts and Fallacies بعد 6-12 شهر من البرمجة المكثفة. لا أستطيع التشديد أكثر على قيمة القراءة ولا على قيمة الانغماس في التكويد خلال البدايات.

 

التحول نحو المفاهيم

معرفة الكيفية التي تصبح بها مبرمجا ممتازا تبدأ من تعلم المفاهيم والمنطق وتراكيب اللغة | Syntax فهي أسهل للفهم عندما تتعلمها سويا. لكن المطورين المميزين يرغبون وبسرعة في المعرفة التي تفوق تراكيب اللغة. Perl | Java | ColdFusion| PHP | ASP كلها استخدمتها خلال اول 18 شهر من عملي كمطور محترف. لم تكن معرفتي بكل اللغات ما جعلني مبرمجا جيدا بل رغبتي في تعلم مفاهيم مثل DRY (المترجم: يقصد Don't Repeat Yourself)، نظرية النافذة المكسورة (المترجم: النظرية تختص بجودة البرمجيات) و اعادة استخدام الأكواد (جميع ما ذكر استقيته من أحد أفضل الكتب التي تجعلك مطورا رائعا - Pragmatic Programmer).

 

صاحب مبرمجين أفضل منك

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

 

الان و بوجود المزايا الجديدة على الانترنت لست مضطرا للتواجد بجسدك لتكون جزءا من مجتمع ما: اقرأ مدونات البرمجة الخاصة بالفطاحلة (Scott Guthrie, Rocky Lhotka, Dino Esposito, Scott Mitchell و غيرهم), تابع منتديات البرمجة و اطلع على أكواد الاخرين.

 

قراءة الكود المصدري قد يكون مزعجا لكن كلما قرأت المزيد كلما كنت قادرا أكثر على تمييز الأكواد السهلة الفهم من الأكواد التي تتطلب شهادة دكتوراه لتعرف فقط كيف تطبع “Hello World" على الشاشة.

 

واخيرا

من الذاكرة القريبة هذا أحد أفضل التعليقات في مدونتي

 

I would tell someone wants to be a programmer that the world has enough

“programmers”. What we need, and what you want to be, is an “engineer.” I run into

lots of “programmers”, folks who have read “Learn C# (or whatever) in 21 Days” and

think they can program on 100k LOC systems. If I were guiding a young person looking

to get into software, I would teach programming, yes, but only as a facet of software

engineering:

  • Learn how to gather requirements.
  • Learn how to design a system based on the requirements, and look for design

patterns, such as n-tier, MVC, etc...

  • Write your code so that it is testable and maintainable.
  • Learn to WRITE TESTS!!
  • Learn to refactor.

 

Honestly, programming should be about half of what an engineer does.

 

الترجمة:

سأقول لأي شخص يرغب بأن يكون مبرمجا أن العالم لديه ما يكفي من المبرمجين. ما نريد وما تريد أن تكون هو "مهندس". مررت بالعديد من الناس "المبرمجين" الذين قرأوا "تعلم #C (او أياً كان) في 21 يوما" ويظنون انهم قادرين على المشاركة في برمجة نظم من 100 ألف سطر. ان كنت سأرشد شابا يرغب في دخول عالم البرمجيات فسأعلمه البرمجة، نعم ولكن كجزء صغير من هندسة البرمجيات:

  • تعلم كيف تجمع المتطلبات.
  • تعلم كيف تصمم نظاما بناءاً على المتطلبات والبحث عن أنماط التصميم البرمجي مثل n-tier | MVC وغيره.
  • أكتب أكوادك بحيث يمكن اختبارها ومعالجة اخطائها.
  • تعلم كيف تكتب أكواد اختبارات.
  • تعلم كيف تعيد بناء الأكواد بدون التأثير على طريقة عملها.

 

بأمانة البرمجة ينبغي ان تكون نصف ما يفعله المهندس.


 

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

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

 

في العموم، كتب البرمجة من Wrox | OReilly | Apress تعتبر ذات جودة عالية.

 

الكتب التالية تدور حول تعلم تراكيب اللغة | Syntax والاساسيات من مفاهيم البرمجة. اختر الكتب للغة البرمجة التي ترغب في تعلمها واتقانها وذلك حسب ما نوقش في "أي لغات البرمجة يجب علي تعلمها؟"

 

لتطوير الالعاب انظر الى السؤال "كيف ابني لعبة للحاسوب؟" في قسم الاسئلة الشائعة.

 

ASP.NET

Beginning ASP.NET 3.5

Beginning ASP.NET 3.5 in C# 2008

 

Ruby on Rails

Beginning Ruby on Rails (الرابط معطوب)

Beginning Ruby on Rails E-Commerce

 

PHP

PHP 6 and MySQL 5 for Dynamic Web Sites: Visual QuickPro Guide

PHP and MySQL Web Development

 

Java

Head First Java

Beginning Programming with Java For Dummies



 

مصادر متقدمة

الكتب المذكورة ادناه تغطي مفاهيم أعقد من تراكيب اللغة | Syntax وهي للقراءة بعد احكام قبضتك على الشق التقني من البرمجة وذلك خلال 6-12 شهر.

 

The Pragmatic Programmer: From Journeyman to Master

 

Code Complete: A Practical Handbook of Software Construction

 

Refactoring: Improving the Design of Existing Code

 

Rapid Development: Taming Wild Software Schedules

 

Peopleware: Productive Projects and Teams

 

Software Requirements

 

Software Estimation: Demystifying the Black Art



 

الاسئلة الشائعة

 

كيف يمكنني ان اكون مبرمج Net.؟

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

 

ما هو أفضل طريق للبرمجة إذا كان حاسوبي ماك (OS X)؟

بما ان ماك مبني على يونكس | Unix فهو يدعم اي لغة متوافقة مع يونكس. اللغات التي ناقشتها في هذا الكتاب جميعها متوافقة مع Unix وتشمل PHP | Java | Perl | Ruby.

 

شخصيا سأود تعلم PHP او Ruby. وإذا كنت تود تطوير الالعاب فعليك بـ ++C (لكن يجب ان تعي انها لغة صعبة لتبدأ بها). كتاب جيد لتبدأ به هو Sam’s Teach Yourself C++ in 21 Days

 

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

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

 

ربما تود اظهار شيئا من عضلاتك التقنية وذلك بالعمل على نماذج معقدة مرتبطة بالعمل من اكسيل واكسس بما ان هذين البرنامجين يتقاطعون مع مفاهيم البرمجة وقواعد البيانات.

 

ما هي أسهل لغة برمجة للبدء بها عند تعلم كيف تبرمج؟

Visual Basic (الان VB.Net) تعتبر لغة سهلة التعلم و في نفس الوقت لغة قوية. بإمكانك العودة للوراء وتعلم لغات قديمة كـ Pascal او Basic لكن هذه اللغات غير مستخدمة حاليا في التطوير لذا قضاء وقت في تعلم تراكيب هذه اللغات لن يساعدك في الحصول على وظيفة.

 

VB.Net تستخدم عند البرمجة بـ ASP.Net لذا ان اشتريت Beginning ASP.NET 3.5 ستتعلم بناء المواقع باستخدام #C وVB.Net كلاهما.

 

ما هي اللغة الواجب علي تعلمها لأصبح مبرمج أنظمة؟

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

 

كل مبرمجي النظم الذين أعرفهم متمكنين من لغتي C و ++C.

 

إذا احسست بأني لست ميالا لان اكون مبرمجا رائعا لكن لدي الرغبة بذلك. فهل أستمر بذلك؟

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

 

إذا كنت أريد ان اتخصص في مجال برمجة تطبيقات الند للند فما الذي تنصحني به؟

برامج الند للند | Peer-to-Peer هي البرامج التي لا تستخدم خادم مركزي بل يتم التخاطب مباشرة من برنامج سطح مكتب الى اخر مثل نابستر او برامج المحادثة الفورية.

 

Net. او Java ستناسبك أكثر عند برمجة تطبيقات الند للند. نماذج ويندوز والتي يمكنك انشاؤها باستخدام #C اوVB.Net ستعمل على اي جهاز ويندوز. Java من الصعب تعلمها عند البدء لكنها تعمل على جميع أنظمة التشغيل المتاحة مثل ويندوز - لينكس - ماك و غيرهم.

 

ما المقصود بالتطوير باستخدام أجايل | Agile Development؟

ربما سمعت بهذا يتردد حواليك. أفضل تعريف وجدته هو من ويكيبيديا:

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

 

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

 

هل ينبغي علي اولا التخطيط على الورق قبل البدء بالمشروع؟

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

 

كيف أبني لعبة للحاسوب؟

هناك طريقين أعرفهما لمن يرغب ببرمجة الالعاب. الطريق الفعال والمنطقي هو بتعلم ++C (صعبة جدا كلغة أولى). والطريق الابتدائي هو بتعلم منصة XNA من مايكروسوفت والتي تسنح لك برمجة الالعاب للويندوز و اكس بوكس باستخدام #C.

 

شخصيا، لو كنت في بداياتي لتعلمت XNA ثم ابني لعبة ثم احاول ايجاد وظيفة في شركة العاب حيث يمكنني تعلم ++C بمقابل بما ان الوقت الذي سأستثمره في التعلم كبير جدا.

 

مصادر لكلا الطريقين بالأسفل:

 

XNA

XNA Game Studio Express: Developing Games for Windows and the Xbox 360

Beginning XNA 2.0 Game Programming

XNA 2.0 Game Programming Recipes: A Problem-Solution Approach

 

C++

Beginning C ++ Through Game Programming

Introduction to Game Programming with C++

 

ما هي أعظم جائزة سأحصل عليها جراء تعلمي البرمجة؟

أعظم جائزة لي كانت القدرة على العيش في أي مدينة، الحصول على أسلوب حياة رائع، العمل لنفسي والانجاز من الصفر.

 

كيف يمكنني ايجاد شركة برمجيات لتقوم بتدريبي؟

هذا الوضع مطلوب. كتبت تدوينه حول هذا الموضوع قبل فترة قصيرة Does Anyone Know of a Real

Software Apprenticeship و وصلني القليل من الردود.

 

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

 

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

 

إلى اي حد يصعب على شخص يعرف الحواسيب لكنه ليس مهووسا بها ان يصبح مبرمجا؟

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

 

ربما اعتبر مهووسا بالحاسب الان لذا كن حذرا فلربما تمتص الى عوالم الحاسوب السوداء.

 

هل علوم الحاسب مثل البرمجة؟

هناك تعليق على موضوع  Advice on How to Become a Programmer في مدونتي يقول:

 

“...Computer Science is NOT programming. That is like saying materials science is

construction. Unfortunately, most students aren’t aware of this difference until halfway

through their degree. If you like fairly abstract math theory, or want to deal with

advanced models, do computer science. If you just want to write code, maybe take

programming course, but then practice!”

 

الترجمة:

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

 

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

 

كلمات دليلية: برمجة تطوير
1
إعجاب
4152
مشاهدات
0
مشاركة
1
متابع

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !