الاثنين، 5 ديسمبر 2011

تطوير التطبيقات بلغة الجافا(Application development with java language)


الجافا هي لغة برمجية  تشبه لغة الــ ++C طورت من قبل شركة سن مايكرو سيستم والان هي اللغة المهيمنة على اغلب تطبيقات الانترنت. طورت هذه اللغة بصورة تمكنها من تصميم تطبيقات الويب بكفاءة عالية جدا. وتتسم بالعديد من الصفات التي ميزتها عن اللغات الاخرى مثل لغة السي. تقنيا الكود المكتوب بلغة الجافا (.java files) في البداية يترجم الى ملف من نوع بايت بامتداد(.class) وليس الى ملف تنفيذي كما هو الحال في اللغات الاخرى. يتميز هـذا الملف الوسيطbytecode))  بانه لا يعتمد في تكوينه على المعالج الخاص بالجهازcpu  ولا على نظام التشغيل الحالي OS , ولكنه عبارة عن مجموعة اكواد قياسية بلغة الجافا يمكن تنفيذها على اي نظام. هذا الملف (bytecode)  بدورة ينفذ بواسطة الـــ(java interpreter). مفسر الجافا وبيئة التنفيذ تسمى(java virtual machine) وهي موجودة على اغلب انظمة التشغيل مثل(Windows OS,UNIX and Macintosh). واكثر ما ميز هذه الغه هو انها تأخذ تلقائيا ً البيئة التي تعمل ضمنها وتدعى هذه التقنية تقنية سوينغ أي انك عندما تقوم بتطوير تطبيق بلغة الجافا فان هذه التطبيقات عندما تعمل ضمن ويندوز فان عناصرها المختلفة تأخذ شكل ويندوز وعندما تعمل ضمن بيئة الماكنتوش فأنها تأخذ تلقائيا ً شكل واجهات الماكنتوش وهذه ناحيه هامه جدا ً للمستخدم وللمبرمج. ومن المزايا الاخرى للغة الجافا:-

  • قابلية النقل: اكثر الاسباب التي ادت بالمبرمجين الى ترك اللغات الاخرى واللجوء الى لغة الجافا هي المنصة المستقلة عن بيئة العمل. ما يعني امكانية كتابة التطبيقات  على كمبيوتر معين ونظام تشغيل معين وتنفيذه  على كل الحواسيب الاخرى المختلفة في بيئة العمل والهاردوير بوجود ألـ (JVM) الخاصة بها. وهي لغة  مدعومة ضمنيا في كل انظمة التشغيل ومتصفحات الانترنت الشائعة مما يجعلها حاضره افتراضيا في كل اتصالات الانترنت على الشبكة العنكبوتية. حتى الاجهزة الإلكترونية الاخرى مثل اجهزة الموبايل واجهزة الاي باد تدعم الجافا ضمنيا وبدون اي اضافات واغلب التطبيقات لهـذه الاجهزة مكتوبة بلغة الجافا.
  • كفاءة البرمجة وسهولة الاستخدام: لا توجد لغة برمجة سهلة ولكن لغة الجافه بصورة عامة اسهل من بقية اللغات الاخرى وخاصة لغات البرمجة الكائنية وهـذه اللغة استبدلت التعقيدات الموجودة في الوراثة المتعددة بلغة ألـــ ++C بتراكيب بسيطة تسمى الواجهات (interfaces) وصممت بطريقة تجعل ظهور الاخطاء البرمجية اثناء كتابة التطبيقات اقل ما يمكن وتحتوي على مجموعة كبيرة من دوال ألــــ (API) التي سهلت العمل على المبرمجين في كتابة برامج خالية من الاخطاء وبالتالي اختصار للوقت والكلفة في تطوير التطبيقات.
  • الخصائص الديناميكية للبرامج: لغة الجافا هي لغة كائنية التوجه(object oriented) والكود المكتوب فيها ينظم في وحدات صغيرة تسمى اصناف او فئات(classes) .البرنامج المكتوب بلغة الجافا ذاتيا يقوم باستدعاء وتحميل هـذه الكلاسات الى الذاكرة عند تنفيد البرنامج . تتسم لغة الجافا بالديناميكية اي انها تنتج برامج قابلة للتغيير وقت التنفيذ بخلاف لغات البرمجة الاخرى التي تنتج برامج ثابتة المحتوى ولا تتأثر اثناء عملية التنفيذ. فلغة الجافا تجمع كمية كبيرة من المعلومات المتعلقة بالبرنامج وقت تنفيذه run-time information والتي تستخدم للتحقق من الكائنات التي تولد في هـذا الوقت والتعامل معها وعلى هـذا فان الملف الوسطي الـ(bytecodes)  يكون قابل للتعديل وقت التنفيـذ.
  • الامنية العالية: لغة الجافا هي واحدة من اولى اللغات البرمجية التي اخـذت الامنية بعين الاعتبار كجزء من تصميمها. لغة الجافة ومترجمتها والمفسر التابع لها وبيئة التنفيـذ جميعها صممت في درجة عالية من الامنية وعلى عدة مستويات لتقليل الخطر الناتج من فقدان البيانات وتكامل البرنامج اثناء التنفيذ او التلف في النظام. والاخذ بالحسبان المشاكل الامنية  المحتملة في تنفيذ الكودات الغير موثوقة بطريقة امينة  وعلى اكثر من مرحلة خلال التنفيذ. واي خرق امني فيها يجلب عليها  الانظار بسبب الثقة العالية و الوعود الامنية التي قطعتها الشركة المصممة لزبائنها. فالمترجم يقوم بعمليات تدقيق لتحديد عدم التوافق والتناسق في انواع البيانات. بيئة التنفيذ للغة الجافا بدورها تقوم بتكرار بعض الخطوات التي قام بها المترجم اضافة الى اختبارات اخرى تقوم بها للتأكد ان البرنامج المنفذ قابل للتنفيذ كبرنامج مكتوب بلغة الجافا.
وتتميز الجافا بالعديد من الخصائص الاخرى  مثل خاصية الـ  (multi  threading)وهـذه الخاصية غير موجودة في لغة السي  ومعالجة الاستثناءات واستخدام طريقة الـ (garbage collection) ذاتيةالاستدعاء. ولكن على الرغم من الكفاءة والامكانيات الكبيرة التي توفرها لغة الجافا الا انها لا تخلو من العيوب والمشاكل كأي لغة برمجية اخرى فلغة الجافا لغة تستخدم المفسر وبالتالي فان الطريقة التي تقوم فيها بتوليد الملفات الوسطية في الحقيقة هي طريقة غير كفؤة. فحالما يقوم المترجم بتوليد الـ (bytecodes) فانه يقوم باستدعاء (JVM)  الخاصة بالكمبيوتر المنفذ عليه البرنامج وهـذا يؤدي الى  بطئ في تنفيد البرامج المكتوبة بلغة الجافا على عكس المترجمات الاخرى مثل السي  فالكود الناتج عنها هو سلسلة من الايعازات القابلة للتنفيذ مباشرة على المعالج وبالتالي تنفد بشكل اسرع ولكن هـذه المشكلة يمكن التغلب عليها باستخدام معالجات عالية السرعة.

الأحد، 4 ديسمبر 2011

فوائد استخدام طريقة التطوير المرنة (Agile development method,5 advantages)

طريقة التطوير المرنة(agile) هي احدى استراتيجيات تطوير البرمجيات. مراحل هـذه العملية تحدث دائما في دورات تكراريه, والتي تشمل مرحلة جمع المتطلبات ومرحلة التصميم والتنفيذ ومرحلة الاختبار واخيرا مرحلة التقرير ثم التسليم. ألمستفيدين(stakeholders) والمصممين(designers) يلتقون بعد كل دورة لمناقشة ما حدث في الدورة السابقة واعادة التقييم المتطلبات وتحديد الاولويات. هـذه الخطوة تعطي شفافية اكبر بين العملاء والمبرمجين وخلالها يكون للزبون تأثير اكبر حول التصميم وضمان مواكبة المنتج للمواصفات المطلوبة. في طريقة الشلالات التقليدية (waterfall) المستفيدين(stakeholders) يشاركون فقط في بداية مرحلة جمع المتطلبات وبعدها تقوم المنظمة او الشركة المنفذة للمشروع  بتولي الامر والشروع في مرحلة التصميم. (stakeholder) او الزبون(client) فقط يرى المنتج بعد اكماله والـذي قد يتوافق او لا يتوافق مع ما يريده الزبون بالضبط. ان الاسلوب التقليدي لـهـذه الطريقة (waterfall)  وغيرها من الطرق الكلاسيكية الاخرى جعل طريقة (agile) تتفوق عليها بعدة خصائص اهمها:- في بعض الاحيان الزبون لا يعرف ما الـذي يريده بالضبط من البرنامج, ولكن في هذه الطريقة لا يجب عليهم الانتظار للبدء بالعمل الى ذلك الوقت بل يمكنهم البدء بفكره اساسية  وبما ان الزبون مشارك باستمرار في عملية التطوير  فيمكنه اضافة المتطلبات باستمرار وما يريده بالاعتماد على النموذج المطور من الدورة السابقة وامكانية تغيير الاسبقيات باستمرار وبالتالي الحصول على منتج قابل للاستخدام بفترة قصيرة نسبيا. 
  1. التقليل من خطر عدم موافقة الزبون على البرنامج:-طالما ان المستفيد من المشروع (stakeholder)  مشارك على طول الوقت وعلى علم في كل ما يدور وما يحدث خلال عملية  التطوير لـذا فان هـذه العملية(agile) تقلل من احتمالية عدم رضا الزبون على المنتج النهائي. على العكس عندما يشارك المستفيد فقط في بداية مرحلة جمع المتطلبات  فان هذا قد يؤدي بعملية التصميم الى اشياء قد لا تمت بصلة الى ما يريده الزبون بالضبط.. لـذا فان العمل معا وباستمرار يقلل من احتمالية عدم موافقة المنتج للمتطلبات  وبالتالي يكون المنتج اكثر قبولا من ناحية الزبون.
  2.  القدرة على التغيير والتكييف:-في هذه الطريقة (Agile development method), عناصر المشروع الكبيرة والتي لا يمكن الرجوع فيها  تؤجل الى المرحلة الاخيرة , حتى يتسنى اجراء العديد من التغييرات الممكنة للتأكد من السير في المشروع بشكل صحيح. التغييرات في المتطلبات يمكن اجراءها بعد نهاية كل دورة(increment cycle). المصمم لا يلتزم بنموذج واحد فقط ولكن في  كل مرحله يمكنه تغيير النموذج  السابق.(agile)سهلة التكيف مع العديد من التغيرات  كالتغييرات في متطلبات المستخدم التغييرات التي يجريها المطورين والتغيرات التي تحددها التقنية المستخدمة. أن القابلية  على تغير المتطلبات  باستمرار في هذه الطريقة  يجعل من السهل دمج التطورات السريعة والهائلة في مجال صناعة البرمجيات  في المشروع المنفذ بدلا من جعل التصميم قديم وقت دخوله للسوق. فعلى سبيل المثال عند القيام بتطوير برنامج كبير قد يستغرق تنفيذه سنين خلال عملية (waterfall)الـ  من المعروف ان هـذه العملية  تفرض تحديد المتطلبات عند الشروع بالعمل ولا تسمح اجراء اي تغييرات خلال عملية التطوير فحالما يأتي وقت تسليم البرنامج اـلـذي قد استغرق تطويره سنوات عديدة ففي تلك الاثناء لا نستبعد احتمال وجوود العديد من التقنيات  التي تجعل من البرنامج الــذي طورناه قديم نوعا ما وهـذا يؤدي بالمشروع الى الفشل.
  3. امكانية الشروع بالعمل قبل تحديد المتطلبات:-في بعض الاحيان الزبون لا يعرف ما الـذي يريده بالضبط من البرنامج, ولكن في هذه الطريقة لا يجب عليهم الانتظار للبدء بالعمل الى ذلك الوقت بل يمكنهم البدء بفكره اساسية  وبما ان الزبون مشارك باستمرار في عملية التطوير  فيمكنه اضافة المتطلبات باستمرار وما يريده بالاعتماد على النموذج المطور من الدورة السابقة وامكانية تغيير الاسبقيات باستمرار وبالتالي الحصول على منتج قابل للاستخدام بفترة قصيرة نسبيا.

  4. زيادة احتمالية وصول المشروع الى مرحلة التسويق:-كمية كبيرة من تطوير المشاريع لا تؤدي الى الوصول الى هذه المرحلة لا سباب عديدة منها عدم توافقها مع متطلبات المستخدم آو انها اصبحت قديمة او غير مفيدة. باستخدام طريقة التطوير المرنة (agile) فان امكانية وصول المنتج الى مرحلة التسويق تكون اعلى لان احتمالية نيل استحسان الزبون للمنتج اكبر لان الزبون جزء من فريق تطوير المشروع. وكـذلك  قدرة المطور على تطوير التصميمات المهمة في البداية يسمح بإمكانية استخدام النموذج المطور في الحال بالرغم من عدم وصول المشروع الى الشكل النهائي.
  5.  
    حفظ للوقت والاموال:-بما ان الزبون يشارك في عملية التطوير لـذا فان امكانية  حدوث سوء تواصل او عدم التوافقية تكون اصغر نسبيا, وبالتالي حدوث اخطاء اقل وهـذا بدورة يؤدي الى في اختصار الوقت واختصار في الاموال لان المنتج ينتهي بوقت اسرع. الزبون يمكنه رؤية النتائج بسرعة حالما ينتهي من تحديد المتطلبات. ويرى النتائج بعد كل دورة من عملية التطوير ويحدد فيما اـذا كان السوفت وير ينجز ما يريده منه بالضبط ام لا.

الفرق بين مبرمج الحاسبات ومطور البرمجيات(Difference between computer programer and Software developer)


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

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