‏إظهار الرسائل ذات التسميات مقالات_تقنية. إظهار كافة الرسائل
‏إظهار الرسائل ذات التسميات مقالات_تقنية. إظهار كافة الرسائل

2015/08/01

الحوسبة الكمومية

مقدمة : فى قديم الزمان كانت الحواسيب تعمل بالصمامات المفرغة وكلنا يعلم ان الصمامات المفرغة تكنلوجيا عقيمة نوعا ما الا انها كانت فى عصرها وبدايتها تطورا علميا هائلا وبالطبع فان التطور النسبي للعلوم والحضارة امر اساسي فكان تركيب الصمام المفرغ البسيط الذي كان يستخدم احيانا هو زجاجة من الهواء تكون مفرغة ولها طول وقطر معين ويعتمد الصمام فى فكرته الالكترونية نفس مبدأ حركة الالكترونات الموجية وبعدها بالطبع وصلنا الي استخدام الترانزستور والدوائر الالكترونية وما احدثه من تطور هائل حتي ان البعض يحسبه من أهم الامور التي أثرت على صناعة الالكترونيات حتي الان فى عصرنا الحديث (بالطبع لا اقصد قرننا هذا ) وبعد ذلك أتت تكنلوجيا الدوائر المتكاملة لتقدم لنا مفهوما أدق واكثر تطورا لصناعة الالكترونيات وكانت سببا فى تطورا العديد من الصناعات الالكترونية وتطور تقنيات التغليف والتصغير بشكل كبير ومرورا بأن الان هناك تقنية التخزين الحجري التي يمكن من خلالها وضع ترانزستور في مساحة ربع ميكرون أي رياضيا = 00.00000025 من المتر الواحد ويمكن قياسها بأنها 1 علي تقريبا 420 من قطر شعرة انسان عادية وطبعا هذه النسبة تقريبية وليست دقيقة تماما واستمرار هذا الامر مستقبلا قد يجعلنا نري امورا عجيبة كنا نراها من المستحيلات اذ لا اتفاجئ بتحقيق حلم أخي محمود فايد (PWCT Maker) حيث كتب عن حواسيب بدون عتاد حيث يمكن مثلا ان يصل الحاسب الي حجم جزئ من المادة وبالفعل هناك صناعة لبوابات المنطقية في الذرات وهي صنعت بالفعل حيث انه بهذا الشكل اذا انتشر واصبح معروفا سنجد ان الحاسب لن يري بعين مجردة ( خيال ايضا )


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

  • يرمز للكيوبت فى الحالة 0 ب |0>
  • وفى الحالة 1 يرمز له ب |1>
  • ويرمز للحالة الفائقة a|0> + b|1>
الفكرة كبيرة وشاسعة خلف الحالة الفائقة اذ أنها تقوم على فكرة الاحتمالات حيث ان فى الحالة الفائقة يكون هناك احتمال لتحقق a او لتحقق b وذلك باحتمال معين

والحوسبة الكمومية عموما تقوم علي 3 ركائز فى عملياتها

1- إعطاء قيم ابتدائية للكيوبتات المستخدمة كدخل.
2- إجراء العمليات الحسابية (بشكل كمومي طبعاً) على هذه الكيوبتات.
3- قياس الكيوبتات لتحديد نتيجة العملية.

كيف يمكن أن يعمل الكمبيوتر الكمي ؟ والذي يطلق عليه (Quantum computer)
نفترض ان لدينا مسجلا (register ) مكون من ثلاثة بت يحتوي في لحظة معينة على رقم من ثمانية أرقام يمكن ان يحتويها لكن ال Quantum register المكون من ثلاثة كيوبت يمكن ان يحتوي في لحظة معينة على الأرقام الثمانية كلهم في الحالة الفائقة (الفرق شاسع هنا واعتقد انكم لاحظتم ذلك ايضا )
لنجهز مسجلا (register ) للحالة الفائقة بأرقام مختلفة وسيكون وقتها عندنا المقدرة على اجراء عمليات حسابية عليها فى نفس الوقت حيث ان من مميزات الكمبيوتر الكمي هو اجراء العمليات بشكل متوازي فاذا كان هناك مثلا من x كيوبت فانه يمكنه اجراء 2x عملية فى ان واحد ,2x ..... الخ وهكذا وهذا هو الفرق الرئيسي بينه وبين الحاسب الكلاسيكي (أحب تسميته كذلك لكن ليست تسمية دقيقة أو علمية )

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

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

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

  • Shor's خوارزمية
  • Grover's خوارزمية

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

تحياتي للجميع

والله ولي التوفيق

مراجع
http://www.doc.ic.ac...rnal/vol4/spb3/
http://www.qubit.org/

الرابط الأصلي

8 مستويات من المبرمجين أيهم أنت؟

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

هل قابلك هذا السؤال في المقابلة الشخصية "Where you see yourself in five years" ، عندما يسألنى أحدهم هذا السؤال استرجع في مخيلتي مشهد من فيلم a certain Twisted Sister و الذى يسأل يقول فيه المدرس للطالب : what do you wanna do with your life .


أكيد الإجابة : عايز تعيش حياتك (I wanna rock)، طبيعي جدا . ومن نوعيه هذا السؤال سؤال "what's your greatest weakness" .
على الرغم من ذلك أعتقد أنها من الأسئلة الجدية التى يجب أن تعيرها اهتمامك ، ليس من أجل المقابلة الشخصية ، و لكن لمصلحتك الشخصية .
فسؤال "Where you see yourself in five years" هو من نوعيه الأسئلة التى تطلق عنان لسان المتقدم للوظيفة ، و معظم الناس يحضر مجموعة ردود جاهزة لهذا السؤال .و لكن هناك جوانب أعمق لهذا السؤال : ما هو مسارك المستقبلى في مجال البرمجة ؟
طبعا ، نحن في هذا المجال لأننا نحبه ، و لكن هل ستوك جالسا أمام الكمبيوتر و عمرك 50 عام؟ و اذا وصلت 60 ؟ ما هو أفضل دخل ممكن للمبرمج الذى يطمح أن يكون … مبرمج ؟
ماذا لو أخبرتك أن هناك ثمان مستويات من المبرمجين .

8-Dead Programmer – المبرمج الميت
و هو أعلى المراتب ،فقد نجت أكوادك بعد موتك . و أنت الآن جزء من التاريخ الدائم للبرمجة .و بقية المبرمجين يعكفون على دراسة اعمالك و كتاباتك . قد تكون حصلت على بعض الجوائز , أو كتبت بعض الأوراق المؤثرة ، أو اخترعت واحدة أو أكثر من التقنيات التى غيرت مسار البرمجة الذى نعرفه .و بالبطبع ليس لديك صفحة واحدة عنك في ويكيبيديا ، و لكن العديد من المواقع التى تدرس حياتك و أعمالك .
القليل جدا من المبرمجين استطاعوا تحقيق هذا خلال حياتهم .
أمثلة : Dijkstra, Knuth, Kay
7- Successful Programmer – المبرمج الناجح
هم المبرمجين الذين استطاعوا تحقيق الشهرة وادارة أعمال تجارية ضخمة قائمة على أكوادهم . و هم الذين أعطوا انفسهم الحرية ، حرية أن يقرروا لأنفسهم ماذا يريدون أن يحققوا في هذة الحياة.
هذا المستوي من المبرمجين يجب ان يطمح اليه أى مبرمج ، و الوصول الى هذا المستوي يعتمد أكثر على المهارات العمل و المهارات التجارية أكثر من مهارات البرمجة .
أمثلة : Gates, Carmack, DHH
6- Famous Programmer – المبرمج المشهور
على الأرجح تعمل في تقنية كبيرة و عالمية و سمع بك المبرمجون الآخرون . و هذا مكان جيد لك كمبرمج ، بشرط أن يكون لك وظيفة ثابتة .
و لكن الشهرة لا تعني أنك يمكنك تحقيق مكاسب مادية منها ، فالشهرة جيدة لكن النجاح (Successful Programmer) أفضل .
5- Working Programmer – المبرمج العامل
لديك وظيفة ناجحة كمطور برامج (software developer)، مهاراتك دائما مطلوبة ، و لا تحتاج للبحث طويلا أو تجد مشقة عندما تبحث عن عمل ، كما تحظى باحترام زملائك من المبرمجين ، و تركت بصمتك في كل شركة عملت بها .
لكن أين ستنطلق من هذة النقطة ؟
4- Average Programmer – المبرمج المتوسط
في هذا المستوي أنت جيد كفاية و لكن تدرك أنك لست مبرمج عظيم ،و احتمال كبير أن تبقى كذلك. فالموهبة غالبا عليها عامل صغير في النجاح ، و يمكن أن تكون ناجحا جدا إذا امتلك مهارات العمل و التواصل مع الناس.
إذا كنت مكن هذا النوع من المبرمجين ، و كنت تخطط لكسب عيشك ، فيجب عليك تنمية موهبتك ، قد تكون موهبتك خارج مجال كتابة الأكواد . فقط أكتشف مجال موهبتك و دوووووووووس .
3-Amateur Programmer - المبرمج الهاوي
المبرمج الهاوي يحب كتابة الأكواد، و قد يكون طالب واعد أو مترب أو حتى مشارك في مشروع برامج مفتوحة ، أو يقوم بعمل تطبيقات للمتعة فقط في اوقات فراغه .
من الجيد أن تكون مبرمج هاوي ، و من هذا المستوي ممكن أن تنطلق الى المبرمج العامل .
2- Unknown Programmer - المبرمج المجهول
على الأرجح تعمل في أي شركة كبري ، و تعمل على المكونات الداخلية ، انها مجرد وظيفة و ليست حياة متكاملة.
1- Bad Programmer - المبرمج السيئ
هم اؤلئك الذين دخلوا مجال البرمجمة بشكل او باخر بدون المهارات الكافبة .و كل ما لمسوه تحول الى ألم و معاناة كبير للذين تتبعوا برامجهم .
هؤلاء ليس لهم علاقة بكتابة الكود بأي حال من الأحوال ، على الرغم من أنهم يكتبوه !!

هذه المستويات ليست جادة تماما ، فليس كل المبرمجين يطمحون لنفس الأشياء في حياتهم المهنية . لكنها تسلط الضوء على ما الذى يمكن أن يحققه المبرمج في عشر سنين او حتى عشرين او ثلاثين سنة و ربما طوال حياته .
فأي المبرمجين تطمح أن تكون ، باختصار what do you wanna do with your life
** هذه المقالة مترجمة عن مدونة Coding Horror ، و أتفق مع كاتبها في العديد من النقاط



من مدونه السراج
الرابط الأصلي 

الطريقة الصحيحة لدراسة البرمجة وعلوم الحاسب

ما الامور التي ينبغي عليك الاهتمام بها لدراسة البرمجة وعلوم الحاسب بطريقة جيدة وما هي الطريقة ؟
اولا عليك دراسة أنماط البرمجة Programming paradigms :


هناك أساليب كثيرة جداً للبرمجة. الأساليب الأكثر شهرة و تأثيراً في البرمجيات هي Structured و Procedural و Abstract Data Types و OOP و Functional و Generic-Programming و Meta-Programming و هناك العديد أيضاً كالـ Constrained و Logic و Event-Based و هناك Paradigms تتعلق بالـ Concurrent Programming و أساليب يصعب حصرها في مكان واحد. أولاً و أخيراً, كل واحد من هذه الأساليب لايوجد تعريف جامع مانع يفصله عن الآخر. و إنما هناك مفاهيم شائعة تتبع كل أسلوب. و كل أسلوب له عدة flavors و كل flavor يتوفر بأشكال متعددة في لغات برمجة مختلفة أو في لغة برمجة واحدة. و ليس هذا فحسب, فمعظم لغات البرمجة تخلط بين الأساليب, فلايوجد لغة برمجة نقية إلا ما ندر و هذا يعني أن بعض لغات البرمجة تخلط بين الـ Structured و الـ Procedural و تضع فوقهم ADT و فوقها OOP على طريقة Simula كما هو الحال في JAVA. و لغات أخرى كـ #C أضافت الـ Functional إلى ماوجد في JAVA مثلاً.



الخوارزميات وهيكلة البيانات ( Algorithms and data structures ) :
دراسة بناء وتصميم الخوارزميات , نظرية Complexity . التحسين (optimizations) searching, sorting, cryptography, الجرافيكس (graphics ,VGA) مرورا بالامور العميقة فى العتاد نفسه مثل التعليمات (instruction sets) ودراسة Compilers (المترجمات) و Opreating System (نظم التشغيل) , دراسة caches و architectures (المعماريات)

بناء خلفية ودراسة جيدة عن Abstract :
دراسة النظريات بشكل مبسط (لا يشترط التعمق) , دراسة الاساس الرياضي للنظرية
دراسة العديد من المفاهيم المرتبطة مثل Turing machines و Type Theory و lambda calculus

الجانب البشري والاداري :
لا ينبغي اهمال هذا الجزء فينبغي المعرفة الجيدة والدراسة المتعمقة لادارة المشاريع (project management) و مفاهيم design patterns ودراسة تصميم الواجهات حسب المستخدم وحسب العوامل المختلفة (GUI Design)* وpsychology
انت عليك التعامل مع الناس والعملاء والمستخدمين والذي كلا منهم يفكر تفكير مختلف عنك فاهتمامهم بأشياء معينة قد لا تروقك انت شخصيا لكن فى النهاية You Must Deal

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

الابداع (Creativity ) : لا تنسي ان تقوم بأشياء اخري ولا تنسي تشغيل عقلك باستمرار عمل الامور بنفس الطريقة لا يجدي دائما وكذلك ليس جيدا فان دماغك به جزئين وليس الجزء الخاص بالمنطق فقط هناك العديد من الامور التي تؤخذ بالممارسة والتعلم

الجامعة : الجامعة المتخصصة فى تعليمك علوم الحاسب والبرمجة (باختلافها) هي شئ جيد ولكنها ليست كل شئ لكنها مفيدة للغاية لكن الكل ظروفه لا تسمح له احيانا بالاستفادة منها ناهيك عن دخولها او التخرج منها فكل شخص وله ظروفه

وفي النهاية أتمني للجميع التوفيق

محمد ابراهيم
رابط المقال الأصلي

لغةُ البرمجة أم بيئةُ التطوير

السلام عليكم ورحمة الله وبركاته
تعرفت منذ فترة على لغة جافا ... لفتت نظري لجمالها وسرعة كتابة البرامج فيها ... وأيضاً ألوانها  وسهولة انشاء الصفوف واضافة التوابع وتضمين المناهج المتجاوزة override تلقائياً !
عن ماذا أتحدث ؟ .. ليس هناك شيء من هذا في جافا !!
قبل ذلك بست سنوات كانت أول تجربة لي في البرمجة وكانت أيضاً مع جافا !
ولكنها كانت جافا التي تكتبها بالمفكرة ثم تضرب رأسك بالحائط حتى تتعلم كيف تقوم بترجمة البرنامج .. ثم تضرب رأسك بالكرسي لتعرف كيف تشغله !
هل تتخيل أنني تعلمت جافا في ذلك الوقت بتلك الطريقة .؟
لا أقصد طريقة ضرب الرأس بأثاث المنزل .. بل تنفيذ كل شيء يدوياً .. الكتابة والترجمة والتنفيذ .. 
ما هو العامل الحاسم في تجربة مماثلة ؟
إنها بيئة التطوير المتكاملة ...
بصراحة رغم أنني في المرة الأولى ضربت رأسي بالحائط حتى أحمل Java Borland  إلا أنني عجزت في استخدامه ..
كانت تلك أول (بالفعل أول)مرة أتعرف فيها على شيء اسمه برمجة .. وبدافع شخصي ..وبحماس كبير 
ولكن كل ذلك انتهى عندما صرت أقرأ في الكتب التي اشتريتها دون أن أكون قادرا على تنفيذ برنامج واحد ..
إنها eclipse التي جعلتني أتمنى لو ان كل لغات البرمجة مثل جافا !
أعني أن كل لغات البرمجة لها بيئة تطوير متكاملة مثل eclipse
لقد ارتبطت بيئة التطوير باللغة بحيث يصعب أن أفصلهما في ذهني
كما يصعب أن أفصل جافا التي تعلمتها قبل ست سنوات عن الأسى الذي رافق محاولتي الفاشلة 100%
تخيل كم توفّر عليك بيئة التطوير من الوقت والجهد ... والمراجع حتى ...
إنها بيئة تعليمية بالدرجة الأولى .. إنها أستاذك الأول في طريقك للبرمجة ..عندما تنبهك إلى أخطائك وتقترح عليك حلها ...
من كل ذلك توصلت إلى نتيجة ..
إذا كنت مبتدئا وتريد دراسة أي لغة برمجة ... فاسأل أولاً عن بيئة برمجة جيدة وممتعة وسهلة كي تستخدمها .. قبل أن تعرف أي شيء عن البرمجة
ثم ابحث عن بعض مقاطع الفيديو تتحدث عن "كيف تكتب برنامجا" ضمن هذه البيئة ..حتى تتعلم أساسيات استخدامها (طبعا ستتعلم كيف تكتب كوداً بالمعيّة )
ثم انطلق كما تشاء في رحلتك للتعلم
أما إن كنت متمرسا ...(طبعاً لا بد أن الكلام التالي معروف عندك ) فعليك معرفة أن الوقت الذي ستقضيه في البحث عن اسم التابع أو المتحول أو الثابت الذي يتوقف عليه برنامجك ..
وهذا ما يحدث عشرات المرات أثناء كتابة الكود ... بالتالي بضع ساعات تقضيها في البحث .. والدقائق المتبقية من الدوام .. تحاول تجنب أخطاء تمرير الوسطاء :)
أشك في وجود محترف يكتب الكود الممل بيده من الصفر .. فهذه مضيعة للوقت .. أي عمل روتيني متكرر ابحث عن بيئة تقوم عنك به .. أو برنامج ... وإن لم يوجد .. فاكتبه بنفسك .. واجعله يدك الثالثة أو الرابعة .. 
ببساطة المبرمج يجب أن يكون أخطبوطاً متطوراً بكثير من الأيدي .. وحتى الكثير من العقول .. التي تنقح وتعالج وتحرر وتنبهك إلى الأخطاء .. وتستدرك النقص قبل أن يظهر ..
على رأي Larry Wall مخترع perl فإن أفضل ثلاث ميزات للبرمجة هي الكسل .. وعدم الصبر .. والتعالي.. (مع التحفظ على الأخيرة ) ..
خلاصة الكلام : كن كسولاً .. فأنت مبرمج !
استخدم كل الأدوات المتاحة ... لا تستهلك وقتك في الروتين .. بل في الأفكار .. ولا تقل أريد أن أبدأ من الصفر إلا إذا كان هدفك الابتكار ...
أخيراً .. أحمد الله أني تعرفت على eclipse وتعلمت جافا .. كان ذلك ممتعا ومفيدا كثيراً ... وسهلاً والحمد لله ..
وعندما سأكتب أي برنامج لي في المستقبل ..أتمنى ألا أنسى كتابة : وشكرا لـEclipse
الرابط الأصلي