The Shore of Programming - Ep 01

(الف) تمہید 

پروگرامنگ کے ساحل پر میں ہوں عمار ابنِ ضیا۔اس سلسلے کے تحت ہم مل کر کمپیوٹر پروگرامنگ کی بنیاد سے واقفیت حاصل کریں گے اور اس موضوع پر بنیاد مضبوط کرتے ہوئے اگلے مرحلے پر کسی پروگرامنگ لینگویج  سیکھنے کی جانب بڑھیں گے۔ اس سلسلے کا نام ’پروگرامنگ کے ساحل پر‘ رکھنے کی وجہ یہ ہے کہ کمپیوٹر پروگرامنگ کی وسعت کسی سمندر ہی کی مانند ہے۔ اگر آپ کوئی پروگرامنگ زبان منتخب کرکے اچانک اس سمندر میں چھلانگ لگادیتے ہیں اور اس سے پہلے آپ کا اس میدان میں کوئی تجربہ نہیں تو زیادہ خطرہ یہی ہے کہ آپ ڈوبنے لگیں گے اور بڑی مشکل سے سنبھل کر جب باہر نکلیں گے تو دوبارہ غوطہ خوری سے توبہ کرلیں گے۔ اس لیے بہتر یہ ہے کہ فوراً اس سمندر میں چھلانگ لگانے کی بجائے پہلے ساحل پر چہل قدمی کریں، ٹخنوں اور پھر گھٹنوں تک خود کو گیلا کریں، تھوڑا ہاتھ پاؤں مارنا سیکھیں اور پھر کوئی مخصوص زبان منتخب کرکے اس سمندر میں غوطہ زن ہوجائیں۔
’پروگرامنگ کے ساحل پر‘ ہم کمپیوٹر پروگرامنگ کی بنیادی تعریف، وسعت، ضرورت و اہمیت، اقسام اور دیگر اصطلاحوں کے بارے میں جانیں گے۔ اگر
  • آپ کمپیوٹر پروگرامنگ کی الف بے سے بھی واقف نہیں؛
  • آپ نہیں جانتے کہ پروگرامنگ زبان کیا ہوتی ہے؛
  • آپ کے پاس پروگرامنگ کے لیے کوئی خاص ایپلی کیشن یا بنیاد موجود نہیں؛
  • آپ تذبذب میں مبتلا ہیں کہ نجانے آپ کا کمپیوٹر اس قابل ہے بھی یا نہیں؛
  • اور اگر آپ پروگرامنگ سیکھنا چاہتے ہیں تو میں آپ کو ’پروگرامنگ کے ساحل پر‘ باقاعدہ خوش آمدید کہتا ہوں۔
اُمید ہے کہ ہم مل جل کر بہت کچھ دلچسپ اور مفید سیکھیں گے۔

(ب) کمپیوٹر پروگرامنگ کا تعارف

اگر ایک کمپیوٹر پروگرام کی تعریف تلاش کی جائے تو سب سے بنیادی تعریف یہی ملتی ہے کہ
a computer program is a set of instructions
کمپیوٹر پروگرام بہت سی ہدایت کا مجموعہ ہوتا ہے۔
لیکن اس تعریف کو پیشِ نظر رکھتے ہوئے جب ہم پروفیشنل پروگراموں کی طرف نظر ڈالتے ہیں جو تصاویر پر کام کر رہے ہیں، اینی میشن کا کام انجام دے رہے ہیں، ہمیں آڈیو یا ویڈیو دکھا رہے ہیں تو بعض اوقات اس تعریف کا اطلاق مشکل لگتا ہے۔ تاہم، ایک کمپیوٹر پروگرام کی حقیقی، سب سے سادہ اور جامع تعریف یہی ہے۔ ایک کمپیوٹر پروگرام ہر مرحلے پر کچھ نہ کچھ ہدایات ہماری کمپیوٹر مشین کو فراہم کر رہا ہوتا ہے۔یہ ہدایات ہم جیسے انسانوں ہی نے ترتیب دی ہوتی ہیں۔کمپیوٹر پروگرام استعمال کرنے والا (صارف) ان ہدایات کو چلاتا ہے اور کمپیوٹر اُن پر عمل کرتا ہے۔ یہ ہدایات کچھ بھی ہوسکتی ہیں؛ مثلاً:
  • دو اور چار کو جمع کردو؛
  • آنے والے جواب کو تین پر تقسیم کردو؛
  • اسکرین پر تصویر تبدیل کردو؛
  • ایک فولڈر تخلیق کردو؛
  • ایک فائل کو حذف کردو؛
  • یہ آڈیو فائل چلادو؛
  • یہ اطلاقیہ بند کردو؛
وغیرہ وغیرہ۔

یہ ہدایات بہت سادہ بھی ہوسکتی ہیں اور انتہائی پیچیدہ بھی۔ آپ کا کمپیوٹر ان جیسی کئی ہدایات کو پلک جھپکتے ایک سیکنڈ کے ہزارویں حصے میں انجام دے سکتا ہے۔

(ج) پروگرامنگ زبان کے بارے میں

پروگرامنگ زبان یا پروگرامنگ لینگویج کیا کرتی ہے؟ مشین بنیادی طور پر ہندسے سمجھتی ہے۔ ہندسوں کی زبان ہی مشین کی زبان ہے اور  مشین تمام تر کام اسی زبان میں انجام دے رہی ہوتی ہے۔ لیکن ہم اپنی ہدایات کمپیوٹر تک کس طرح پہنچا سکتے ہیں؟ کمپیوٹر تخلیق کیے جانے کے بعد سے کمپیوٹر ماہرین نے سخت محنت کے بعد ایسی کمپیوٹر زبانیں تخلیق کی ہیں جو مشین اور انسان کے درمیان رابطے کا کام سرانجام دیتی ہیں۔ یہ انسانی زبان کی قابلِ فہم ہدایات کو مشین کے لیے قابلِ فہم بناتی ہیں۔ کمپیوٹر کے ایجاد ہونے سے اب تک سیکڑوں پروگرامنگ زبانیں وجود میں آچکی ہیں؛ جیسے:
  • اے پلس
  • اے بی سی
  • سی
  • سی پلس پلس
  • پاسکل
  • فورٹران
  • بیسک
  • جاوا
  • پائتھن
  • پرل
  • روبی
لیکن ہر دور میں گنتی کی چند ہی (کوئی درجن بھر) زبانیں ہی زیادہ مقبول اور اہمیت کی حامل رہی ہیں۔ تو کسی کے ذہن میں یہ سوال بھی اُٹھ سکتا ہے کہ اگر تمام پروگرامنگ زبانوں کا ایک ہی مقصد ہے تو پھر یہ ڈھیروں زبانیں کیوں؟ کوئی ایک ہی زبان کیوں نہیں؟
مختلف ادوار میں مختلف کمپیوٹر ماہرین نے پروگرامنگ زبان کو انسانوں کے لیے آسان تر اور مشین کے لیے طاقت ور بنانے کی کوشش کی اور یہ کوشش تاحال جاری ہے۔ بہت سی پروگرامنگ زبانیں دیگر کسی پروگرامنگ زبان کی بہتر یا تبدیل شدہ شکل ہی ہیں؛ جیسے کہ، 1970ء کی دہائی میں تخلیق ہونے والی ’سی لینگویج‘ کے بطن سے درجنوں زبانوں نے جنم لیا جن میں سی پلس پلس، جاوا، گو، پرل، پی ایچ پی، جاوااسکرپٹ وغیرہ شامل ہیں۔ کمپیوٹر پروگرامر اپنی مرضی، پسند، سہولت اور کسی زبان کے مثبت اور منفی پہلوؤں کو پیشِ نظر رکھتے ہوئے کسی کمپیوٹر پروگرامنگ زبان کا انتخاب کرتے ہیں۔ تو کیا ہم براہِ راست کمپیوٹر مشین کو اُسی کی زبان میں ہدایات نہیں دے سکتے؟
مشین کوڈ میں طویل اور پیچیدہ ہدایات دینا ناممکن نہ سہی، مگر ناممکن کے قریب تر ضرور ہے۔ ہندسوں پر مشتمل طویل اور پیچیدہ کوڈ لکھنا اور پھر اُنھیں سمجھنا صرف دردِ سر ہی نہیں، اچھا خاصا مشکل بھی ہے۔ یہ ایسا ہی کہ میں آپ سے ہندسوں کی زبان میں بات کرنا شروع کردوں (05، 33، 54، 88، 38، 95، 64، 62)۔ پھر جس طرح ایک انسانی زبان (مثلاً انگریزی) ہر علاقے میں کچھ تبدیلی کے ساتھ بولی جاتی ہے، اسی طرح ہر کمپیوٹر مشین بھی مشین کوڈ کو ذرا مختلف انداز سے سمجھتی ہے۔ لہٰذا اگر آپ ایک مشین کے لیے مشین کوڈ میں ہدایات لکھیں گے تو ضروری نہیں کہ وہ ہدایات دوسری مشین بھی سمجھ سکے۔ یوں، عام استعمال میں مشین کوڈ ناقابلِ استعمال ہوکر رہ جاتا ہے۔ ہم پروگرامنگ کرتے ہوئے اگر یہ کہتے ہیں کہ ہم کمپیوٹر لینگویج لکھ رہے ہیں یا مشین کوڈ لکھ رہے ہیں تو بظاہر ایسا لگ تو سکتا ہے لیکن درحقیت ایسا نہیں ہوتا۔ ہم جس زبان میں کوڈ لکھتے ہیں، مشین وہ زبان نہیں سمجھتی۔ ہماری منتخب کردہ پروگرامنگ لینگویج ہمارے کوڈ کو مشین کوڈ میں ڈھالتی ہے؛ گویا مشین کو ترجمہ کرکے بتاتی ہے
پروگرامنگ زبان کو دو بنیادی حصوں میں تقسیم کیا جاتا ہے:
  1. لو-لیول لینگویج Low-Level Language
  2. ہائی-لیول لینگویج High-Leve Language
لو-لیول لینگویج مشین کوڈ کے قریب ترزبان ہوتی ہے، اسی لیے زیادہ مشکل بھی ہوتی ہے۔ اسے اسمبلی لینگویج بھی کہتے ہیں۔ پھر جیسے جیسے ہم بلندی (یعنی ہائی-لیول لینگویج) کی طرف بڑھتے چلے جاتے ہیں، کوڈ انسانی زبان کے قریب اور مشینی زبان سے دور ہوتا چلا جاتا ہے۔

(ج) بلاگ پن

’بلاگ پن‘ ممکنہ طور پر ہر قسط کا اختتامیہ ہوگا۔ تمام تحریر موضوع پر مرتکز ہوگی مگر ’بلاگ پن‘ میں، میں کچھ اپنی باتیں کروں گا اور تحریر یا موضوع سے متعلق اپنے تجربات یا خیالات بیان کروں گا۔ یہ کورس خود میرے لیے بھی سیکھنے کے مراحل میں سے ایک ہے۔ میں ایک عرصے سے چاہتا تھا کہ کوئی پروگرامنگ لینگویج سیکھوں۔ اب باقاعدہ پروگرامنگ کے ساحل پر آگیا ہوں۔ فی الحال میرا ہاتھ پکڑ کر مجھے سکھانے والا کوئی نہیں لیکن اس عمر میں آپ اپنے مشاہدے اور سابقہ تجربے کو استعمال میں لاتے ہوئے بھی بہت کچھ سیکھ سکتے ہیں۔ تو میں ایسے ہی چند ماہرین کو دیکھتے ہوئے پروگرامنگ کے سمندر میں غوطہ زنی کے بنیادی اُصول سیکھ رہا ہوں اور اُنھیں آپ کے ساتھ بانٹنا چاہ رہا ہوں۔ تاکہ اُردو دان طبقے میں مجھ جیسے افراد کو دوبارہ وہی سب محنت اور مغز ماری نہ کرنی پڑے جو میں کر رہا ہوں۔ میری کوشش ہوگی کہ ہر ہفتے ایک قسط لکھوں۔ اس سے زیادہ کا وعدہ نہیں کرسکتا۔

Comments

  1. بہت زبردست اور دلچسپ انداز میں آپ نے اس سلسلے کو شروع کیا ہے۔ یقیناً بہت کچھ سیکھنے کو ملے گا۔

    ReplyDelete
  2. آپ سبھی احباب کا بہت شکریہ۔ میں منتظر تھا کہ شاید یہاں مزید کسی کی بھی آمد ہو لیکن۔۔۔۔ :) دیکھتے ہیں کہ ہم کتنے ماہر تیراک بن پاتے ہیں۔

    ReplyDelete
  3. بہت عمدہ کاوش، مجھے بے انتہا خوشی ہوئی آپ کے عملی قدم کی۔

    ReplyDelete

Post a Comment