2.0 حصہ 2 کا تعارف: سافٹ ویئر پروگرامنگ
حصہ 2 ایسا سافٹ ویئر لکھنے کے روزمرہ فن کے بارے میں ہے جسے بہت سے لوگ پڑھ سکیں، بدل سکیں اور طویل عمر تک اس پر بھروسہ کر سکیں۔ حصہ 1 نے ٹیموں کے منظم ہونے اور فیصلے کرنے کی بنیادیں رکھیں۔ یہ حصہ خود کوڈ کی طرف مڑتا ہے: وہ اصول جن کی آپ پیروی کرتے ہیں، ڈیزائن اور انٹرفیس کو شکل دینے کا طریقہ، اپنے کام کی جانچ اور جائزہ، سورس کی تاریخ کا انتظام، اور چیزیں لکھنے کا انداز۔ یہی وہ عمل ہیں جو اس کوڈ بیس کو جو ترسیل تیز کرے اس سے الگ کرتے ہیں جو ہر تبدیلی سے لڑتا ہے۔
بڑی ٹیم میں فن ذاتی پسند کا معاملہ نہیں۔ یہ ہم آہنگی کا طریقہ ہے۔ جب سینکڑوں یا ہزاروں انجینئر، ٹھیکیدار اور جانشین ایک ہی نظام کو چھوتے ہیں تو مشترک اصول اور واضح معاہدے ہی ہر ایک کو مسلسل ٹکراؤ کے بغیر متوازی کام کرنے دیتے ہیں۔ یاد رکھیں کہ کوڈ لکھے جانے سے کہیں زیادہ بار پڑھا جاتا ہے، اور اس پڑھنے کا بڑا حصہ برسوں بعد ان لوگوں کے ہاتھوں ہوتا ہے جن سے آپ کبھی نہیں ملیں گے۔
انٹرپرائز اور سرکاری ماحول میں داؤ اور بڑھ جاتے ہیں۔ نظام معمول کے طور پر اپنے مصنفین سے دہائی یا اس سے زیادہ جیتے ہیں۔ ضابطہ اور آڈٹ کنٹرول کے دستاویزی شواہد مانگتے ہیں۔ علم کو عملے کی تبدیلی اور معاہدے کی حدود کے پار منتقل ہونا پڑتا ہے۔ اس لیے یہاں کے ابواب معیار کو ہیرو پرستی نہیں بلکہ اس بات کی انجینئر شدہ، بڑی حد تک خودکار خاصیت سمجھتے ہیں کہ پوری ٹیم کیسے کام کرتی ہے۔
اس حصے کے ابواب
2.1 کوڈنگ معیارات اور اسلوب: نام رکھنے، فارمیٹنگ اور محاوروں کے مشترک، خودکار طور پر نافذ اصول جو بہت سے مصنفین کو یوں لکھنے دیتے ہیں گویا ایک محتاط مصنف نے لکھا ہو، تاکہ ریویو کرنے والے اپنی توجہ اسلوب کے بجائے ڈیزائن پر لگائیں۔
2.2 سافٹ ویئر ڈیزائن کے اصول: SOLID (پانچ اشیا پر مبنی ڈیزائن اصول)، DRY (خود کو نہ دہرائیں)، جوڑ اور ہم آہنگی، اور ڈومین پر مبنی ڈیزائن (سافٹ ویئر کو کاروباری شعبے کی زبان میں ماڈل کرنا) جیسے رہنما اصول، جنہیں تعمیل کے قوانین کے بجائے ایسے آلات سمجھا جائے جن کا اطلاق کا دائرہ اور معلوم ناکامی کے انداز ہیں۔
2.3 APIs اور انٹرفیس ڈیزائن: وہ معاہدے ڈیزائن کرنا جن کے ذریعے نظام اور ٹیمیں ملتی ہیں، تاکہ آزاد ٹیمیں صارفین کو توڑے یا ہم قدم تعیناتی پر مجبور کیے بغیر اپنا اندرونی حصہ بدل سکیں۔
2.4 ٹیسٹنگ حکمت عملی: اس بارے میں سوچے سمجھے انتخابات کہ کیا جانچنا ہے، کس سطح پر، اور کس اعتماد تک، تیز اور قابل بھروسہ حفاظتی جال بنانا جو بڑے ادارے کو بار بار اور محفوظ طریقے سے تعینات کرنے دے۔
2.5 کوڈ ریویو اور تعاون: انضمام سے پہلے تبدیلیوں کی جانچ تاکہ نقائص پکڑے جائیں، علم پھیلے، معیارات نافذ ہوں، اور تعمیل کے کنٹرولز پورے ہوں، جبکہ ریویو کو رسمی بنانے کے بجائے تیز اور تعمیری رکھا جائے۔
2.6 ورژن کنٹرول اور سورس مینجمنٹ: ہر تبدیلی کا ریکارڈ کا نظام، اور برانچنگ، ریپوزٹری اور کمٹ کا نظم و ضبط جو مرکزی لائن کو ریلیز کے قابل، تاریخ کو پڑھنے کے قابل، اور آڈٹ سلسلے کو سلامت رکھتا ہے۔
2.7 دستاویزات: تحریری علم، شروع کرنے کی گائیڈز سے لے کر رن بکس (قدم بہ قدم آپریشنل طریقہ کار) اور فیصلہ لاگ تک، جو کلیدی شخص کے خطرے سے بچاتا ہے، آغاز کار تیز کرتا ہے، اور فہم کو برسوں اور معاہدے کی حدود کے پار منتقل کرتا ہے۔
2.8 سافٹ ویئر تقاضے: یہ جاننا، بیان کرنا، توثیق کرنا اور سنبھالنا کہ سافٹ ویئر کو کیا کرنا ہے اور کتنی اچھی طرح، اس سراغ پذیری کے ساتھ جو ضابطے کے پابند اور سرکاری کام مانگتے ہیں۔
2.9 سافٹ ویئر تعمیر: کام کرتا سافٹ ویئر بنانے کا فن: پیچیدگی کم کرنا، توثیق اور تبدیلی کے لیے تعمیر، دفاعی پروگرامنگ، اور نظم و ضبط والا دوبارہ استعمال۔
2.10 سافٹ ویئر کنفیگریشن مینجمنٹ: ہر کنفیگریشن آئٹم (کوئی بھی چیز جس کے ورژن ٹریک اور کنٹرول کرنے ہوں) اور تبدیلی کی شناخت، کنٹرول اور آڈٹ، تاکہ ریلیز دوبارہ بنانے کے قابل ہوں اور آڈٹ سلسلہ سلامت رہے۔
2.11 سافٹ ویئر معیار: معیار کو ٹیسٹنگ سے وسیع منظم خاصیت کے طور پر: معیار کے ماڈل، یقین دہانی بمقابلہ کنٹرول، پیمائش، نقائص کا انتظام، اور معیار کی لاگت۔
2.12 سافٹ ویئر ماڈلز اور طریقے: کب اور کیسے ماڈل کرنا ہے، ساختی اور رویے کے ماڈلز، رسمی طریقے (ریاضیاتی بنیاد پر وضاحت اور توثیق)، پروٹو ٹائپنگ، اور ایجائل طریقے کا احاطہ کرتے ہوئے، اور یہ کہ ماڈلنگ کب ضیاع ہے۔
2.13 کمپیوٹنگ، ریاضیاتی اور انجینئرنگ بنیادیں: عمل کے نیچے پائیدار بنیادیں: الگورتھم اور ڈیٹا اسٹرکچرز، منطق اور احتمال، اور تجرباتی انجینئرنگ کا طریقہ۔
2.14 پراجیکٹ اور ریپوزٹری کی ساخت: حل اور اس کی ریپوزٹری کو منظم کرنے کے مستقل اصول، بشمول معیاری فولڈرز، README کا داخلی نکتہ، اور مشترک کنفیگریشن، تاکہ کوئی بھی انجینئر کسی بھی کوڈ بیس میں راستہ پا سکے۔
2.15 ڈی بگنگ اور خرابی کی تشخیص: نقائص ڈھونڈنا اور ٹھیک کرنا بطور نظم و ضبط والا، سکھانے کے قابل عمل: دوبارہ پیدا کرنا، بائنری تلاش سے الگ کرنا، مفروضے بنانا اور جانچنا، اور ہر اصلاح کو ریگریشن ٹیسٹ کے طور پر گرفت میں لینا، اندازوں اور بے ترتیب تبدیلیوں کے بجائے۔
2.16 کارکردگی کی انجینئرنگ: سافٹ ویئر کو جان بوجھ کر کافی تیز بنانا، کارکردگی کے بجٹ طے کر کے، بہتر کرنے سے پہلے ناپ کر اور پروفائل کر کے، الگورتھمی لاگت اور ٹیل لیٹنسی سمجھ کر، اور ریگریشنز سے بچاؤ کر کے، سب کوڈ اور جزو کی سطح پر۔
2.17 ہم زمانیت اور متوازیت: درست ہم زمان کوڈ لکھنا، ناقابل تغیر اور پیغام رسانی کو ڈیفالٹ بنا کر، ریسز، ڈیڈ لاکس اور میموری کی مرئیت کو سمجھ کر، درست ہم آہنگی اور اعلیٰ سطحی ماڈل چن کر، اور غیر متعین رویے کو جان بوجھ کر ٹیسٹ کر کے۔
2.18 انحصارات اور سپلائی چین کا انتظام: تیسرے فریق کا وہ کوڈ سنبھالنا جو جدید نظام کا بڑا حصہ ہے، ورژن کے نظم و ضبط اور لاک فائلز، مستحکم اپ ڈیٹ کی تال، کم سے کم اور جانچے ہوئے انحصار کے نقش، اور قابل اعتماد سپلائی چین کے لیے ماخذ اور سافٹ ویئر بل آف میٹریلز کے ذریعے۔
2.19 ری فیکٹرنگ اور تکنیکی قرض: کام کرتے کوڈ کا اندرونی ڈیزائن قابل بھروسہ ٹیسٹ سوٹ کے پیچھے بہتر کرنا، کوڈ کی بو پہچاننا اور چھوٹی نام زد ری فیکٹرنگز لاگو کرنا، بڑی تبدیلی کے لیے اسٹرینگلر فِگ استعمال کرنا، اور تکنیکی قرض کو اخلاقی ناکامی کے بجائے نظر آنے والا، فنڈ شدہ پورٹ فولیو سمجھنا۔
2.20 خرابی سے نمٹنا اور لچک کے نمونے: سوچ سمجھ کر طے کرنا کہ کوڈ کیسے ناکام اور بحال ہوتا ہے، واضح خرابی کے معاہدوں، فوری ناکامی بمقابلہ محفوظ ناکامی کے انتخابات، بیک آف اور ایڈمپوٹنس کے ساتھ دوبارہ کوششوں، سرکٹ بریکرز اور شائستہ تنزلی کے ذریعے، اور کبھی خرابی کو خاموشی سے نگلنا نہیں۔
2.21 ٹائپ سسٹمز اور اسٹیٹک تجزیہ: کوڈ چلنے سے پہلے نقائص کے پورے زمرے پکڑنا، اسٹیٹک اور بتدریج ٹائپنگ کے ذریعے جو ناجائز حالتوں کو ناقابل اظہار بناتی ہے، اور لنٹرز، ٹائپ چیکرز اور تجزیہ کار جو ایڈیٹر اور پائپ لائن میں جڑے ہوں۔
یہ ابواب باہم کیسے جڑے ہیں
حصہ 2 کا مرکزی دھاگہ بڑے پیمانے پر تبدیلی کی اہلیت ہے۔ یہاں ہر عمل اس لیے ہے کہ بہت سے لوگ مشترک، طویل العمر نظام کو اعتماد سے بدل سکیں۔ کوڈنگ معیارات (2.1) اور ڈیزائن کے اصول (2.2) کوڈ کو شکل دیتے ہیں تاکہ آپ اسے سمجھ اور بدل سکیں۔ انٹرفیس ڈیزائن (2.3) وہ حدود کھینچتا ہے جو ٹیموں کو آزادانہ طور پر اپنا اندرونی حصہ بدلنے دیتی ہیں۔ ٹیسٹنگ (2.4) وہ حفاظتی جال دیتی ہے جو تبدیلی کو محفوظ بناتا ہے۔ کوڈ ریویو (2.5) وہ جگہ ہے جہاں انفرادی کام اجتماعی ملکیت سے ملتا ہے، اور جہاں معیارات دراصل نافذ ہوتے ہیں۔ ورژن کنٹرول (2.6) وہ بنیاد ہے جس پر ریویو، انضمام اور آڈٹ سب ٹکے ہیں۔ اور دستاویزات (2.7) ان سب کے پیچھے ارادے کو بعد میں آنے والوں کے لیے محفوظ رکھتی ہیں۔
یہ ابواب گائیڈ بک کے باقی حصے کو بھی کھلاتے ہیں۔ یہاں کے انٹرفیس اور ڈیزائن کے اصول حصہ 3 کے نظاموں کی تعمیراتی اکائیاں بنتے ہیں، خاص طور پر فن تعمیر کی بنیادیں (باب 3.1)۔ ٹیسٹنگ حکمت عملی (2.4) اور ورژن کنٹرول (2.6) باب 8.1 کی خودکار ترسیلی پائپ لائنوں کا خام مال ہیں۔ دستاویزی عمل (2.7) آپریشنز کی رن بکس اور مشاہدہ پذیری سے براہ راست جڑتے ہیں، جیسے باب 9.2۔ اور پورا حصہ حصہ 1 میں رکھی گئی اقدار اور فیصلہ سازی کی بنیادوں پر بنتا ہے، مشترک اصولوں کو ٹھوس روزمرہ فن میں بدلتا ہوا۔