2.1 কোডিং মান ও শৈলী
পরিচিতি ও প্রেরণা
কোডিং মান হলো সেই ভাগ করা রীতি, যা বহু মানুষকে এমনভাবে কোড লিখতে দেয় যেন একজন সতর্ক রচয়িতা লিখেছেন। এগুলো আচ্ছাদন করে নামকরণ, ফরম্যাটিং, ফাইলের বিন্যাস, বাগধারা, ত্রুটি সামলানো এবং দল যে প্যারাডাইম পছন্দ করে। ছোট দলে ব্যক্তিগত রুচিই দিন জেতাতে পারে। বড় দলে (শত শত বা হাজারো ইঞ্জিনিয়ার, বহু ঠিকাদার, উচ্চ কর্মী বদল) অসঙ্গতি এমন কর হয়ে ওঠে, যা আপনি প্রতিটি পাঠ, প্রতিটি রিভিউ ও প্রতিটি অনবোর্ডিংয়ে দেন। মান অসংখ্য ছোট শৈলীগত তর্ককে এককালীন সিদ্ধান্তে পরিণত করে, যা একটি যন্ত্র তারপর আপনার জন্য প্রয়োগ করে।
বড় প্রতিষ্ঠানের জন্য ঝুঁকি সুনির্দিষ্ট। কোড লেখার চেয়ে অনেক বেশি পড়া হয়। এন্টারপ্রাইজ ও সরকারি পরিবেশে কোডের একটি লাইন রচয়িতা চলে যাওয়ার বছর পরও নিরীক্ষক, নিরাপত্তা পর্যালোচক ও রক্ষণাবেক্ষকরা পড়তে পারেন। সামঞ্জস্যপূর্ণ শৈলী সেই পড়ার মানসিক খরচ কমায়, ত্রুটির ক্ষেত্র ছোট করে এবং লিন্টার (সম্ভাব্য ত্রুটি ও শৈলীর লঙ্ঘন স্বয়ংক্রিয়ভাবে চিহ্নিত করা টুল), নিরাপত্তা স্ক্যানার এবং রিফ্যাক্টরিং টুল জুড়ে স্বয়ংক্রিয় বিশ্লেষণকে নির্ভরযোগ্য করে। যেখানে নিয়ন্ত্রণ প্রযোজ্য, যেমন আর্থিক সেবা, স্বাস্থ্যসেবা, প্রতিরক্ষা ও সরকারি খাতের সিস্টেমে, মানগুলো একটি কোডবেস রক্ষণাবেক্ষণযোগ্য ও নিয়ন্ত্রিত তার প্রমাণেরও অংশ।
আধুনিক পদ্ধতি হলো শৈলীকে চলমান মানুষের বিচারবুদ্ধির বিষয়ের বদলে সমাধান-হওয়া, স্বয়ংক্রিয় উদ্বেগ হিসেবে দেখা। ফরম্যাটার ও লিন্টার চলে এডিটরে, প্রি-কমিট হুকে এবং কন্টিনিউয়াস ইন্টিগ্রেশনে (CI), প্রতিটি পরিবর্তনে চলা স্বয়ংক্রিয় বিল্ড-ও-টেস্ট প্রক্রিয়ায়। যন্ত্র শৈলী প্রয়োগ করে, যাতে আপনি রিভিউয়ের মনোযোগ নকশা ও সঠিকতায় ব্যয় করতে পারেন। লক্ষ্য নিজের জন্য অভিন্নতা নয়। এটি ঘর্ষণ দূর করা: মৌলিক বিষয় আবার না শিখে আপনি সার্ভিস ও দলগুলোর মধ্যে সরতে পারবেন।
মূল নীতিসমূহ
- ব্যক্তিগত পছন্দের চেয়ে সামঞ্জস্য ভালো; সর্বত্র প্রযুক্ত একটি সম্মত শৈলী, অসমভাবে প্রযুক্ত “সেরা” শৈলীর চেয়ে বেশি মূল্যবান।
- প্রয়োগ স্বয়ংক্রিয় করুন। ফরম্যাটার ও লিন্টারই সত্যের উৎস, স্পেসিং নিয়ে কোড-রিভিউ মন্তব্য নয়।
- মূল রচয়িতার নয়, পাঠক ও রক্ষণাবেক্ষকের জন্য অপ্টিমাইজ করুন।
- নিজস্ব ঘরোয়া নিয়মের চেয়ে বৃহত্তর ভাষা-সম্প্রদায় ইতিমধ্যে যে রীতি ব্যবহার করে তা পছন্দ করুন।
- মান গ্রহণ সহজ করুন: কেউ না পড়া PDF-এর বদলে ভাগ করা কনফিগ, টেমপ্লেট ও টুলিং দিন।
- শৈলীর নিয়ম হওয়া উচিত অল্প, সমর্থনযোগ্য ও দ্ব্যর্থহীন; প্রতিটি নিয়মের একটি প্রয়োগ-কৌশল আছে, নইলে তা কেবল পরামর্শ।
- নামকরণ সবচেয়ে উচ্চ-লিভারেজ পাঠযোগ্যতার সিদ্ধান্ত এবং সুস্পষ্ট নির্দেশনার যোগ্য।
সুপারিশ
প্রতি ভাষায় একটি প্রামাণ্য শৈলী নির্দেশিকা গ্রহণ করুন
আপনি যে ভাষাই ব্যবহার করুন, একটি ব্যাপকভাবে স্বীকৃত শৈলী নির্দেশিকা ভিত্তিরেখা হিসেবে গ্রহণ করুন (যেমন, সেই ভাষার সম্প্রদায় বা বিক্রেতার নির্দেশিকা) এবং আপনার প্রতিষ্ঠানের প্রয়োজনীয় কেবল বিচ্যুতিগুলো নথিবদ্ধ করুন। শূন্য থেকে ঘরোয়া শৈলী উদ্ভাবন করবেন না। আপনার বাছাই একটি কেন্দ্রীয়, খুঁজে-পাওয়া-যায় জায়গায় প্রকাশ করুন এবং কোডের মতো ভার্সন করুন।
ফরম্যাটারকে অনমনীয় ডিফল্ট করুন
যে ভাষায় আছে তার জন্য একটি মতামতপ্রবণ স্বয়ংক্রিয় ফরম্যাটার ব্যবহার করুন, রিপজিটরিতে চেক-ইন করা একটি একক ভাগ করা কনফিগারেশনসহ। ফরম্যাটিং কখনো রিভিউয়ে আসা উচিত নয়, কারণ তা সেভ করার সময় স্বয়ংক্রিয়ভাবে প্রযুক্ত হয় এবং CI-তে যাচাই করা হয়। যে ভাষায় শক্তিশালী ফরম্যাটার নেই, সেখানে একটি লিন্টার কনফিগারেশন বেছে নিন এবং একই ভাবে দেখুন।
লিন্টারকে পরামর্শ নয়, বলবৎ গেট হিসেবে চালান
একটি সম্মত নিয়ম-সেটসহ লিন্টার কনফিগার করুন, লঙ্ঘনে বিল্ড ব্যর্থ করুন, এবং নিয়ম-সেট ভার্সন কন্ট্রোলে রাখুন, যাতে পরিবর্তন রিভিউয়ের মধ্য দিয়ে যায়। স্বয়ংক্রিয়ভাবে-সারানো-যায় নিয়ম (স্বয়ংক্রিয়ভাবে প্রয়োগ করুন) এবং মানুষের বিচার দরকার এমন নিয়ম (চিহ্নিত ও বাধা দিন) আলাদা করুন। নতুন নিয়ম “সতর্কতা” মোডে চালু করুন, জমে থাকা কাজ পরিষ্কার করুন, তারপর “ত্রুটি”-তে উন্নীত করুন।
একাধিক স্তরে প্রয়োগ করুন
তাৎক্ষণিক ফিডব্যাকের জন্য এডিটর ইন্টিগ্রেশন, স্থানীয় প্রয়োগের জন্য প্রি-কমিট হুক এবং প্রামাণ্য গেট হিসেবে CI পরীক্ষা দিন। লঙ্ঘন যত আগে ধরবেন, তত সস্তা। CI-কে চূড়ান্ত অবলম্বন হতে হবে, কারণ স্থানীয় হুক এড়ানো যেতে পারে।
নামকরণকে সুস্পষ্ট নিয়ম দিন
প্রতি ভাষায় কেসিং রীতি প্রমিত করুন, অভিপ্রায়-প্রকাশক নাম আবশ্যক করুন, বিভ্রান্তিকর সংক্ষিপ্ত রূপ নিষিদ্ধ করুন, এবং বুলিয়ান, সংগ্রহ, একক ও অ্যাসিনক্রোনাস অপারেশনের জন্য রীতি সংজ্ঞায়িত করুন। আপনার ডোমেইন শব্দভাণ্ডার একটি ভাগ করা শব্দকোষে লিখে রাখুন, যাতে একই ধারণার সর্বত্র একই নাম থাকে।
বহুভাষিক সামঞ্জস্য সুচিন্তিতভাবে পরিচালনা করুন
কয়েকটি ভাষা জুড়ে বিস্তৃত কোডবেসে সিনট্যাক্স ভিন্ন হলেও ধারণায় সামঞ্জস্য লক্ষ্য করুন (ত্রুটি সামলানোর প্যাটার্ন, লগিং কাঠামো, প্রকল্পের বিন্যাস)। একটি কেন্দ্রীয় রিপজিটরি থেকে প্রতি ভাষার কনফিগ দিন, যাতে একটি নতুন সার্ভিস টেমপ্লেট বা স্ক্যাফোল্ডিংয়ের মাধ্যমে স্বয়ংক্রিয়ভাবে মান উত্তরাধিকার পায়।
বাগধারা ও প্যারাডাইম বিধিবদ্ধ করুন
ফরম্যাটিংয়ের বাইরে যান। আপনার পছন্দের বাগধারা লিখে রাখুন, যেমন ত্রুটি কীভাবে সামলাবেন, মডিউল কীভাবে কাঠামো করবেন, এবং কখন এক্সেপশন বনাম রেজাল্ট টাইপ ব্যবহার করবেন, সঙ্গে আপনার দলের পছন্দের প্যারাডাইম। এখানেই প্রকৃত পাঠযোগ্যতা ও রক্ষণাবেক্ষণযোগ্যতা বাস করে।
ট্রেড-অফ: সুবিধা ও অসুবিধা
| পদ্ধতি | সুবিধা | অসুবিধা |
|---|---|---|
| কঠোর স্বয়ংক্রিয়-ফরম্যাটার, শূন্য কনফিগ | সব ফরম্যাটিং বিতর্ক শেষ করে; তাৎক্ষণিক সামঞ্জস্য; অনবোর্ডিং তুচ্ছ | কিছু অপছন্দের পছন্দ অনমনীয়; প্রথম প্রয়োগে বড় ডিফ |
| ঘরোয়া নিয়মসহ কনফিগারযোগ্য লিন্টার | প্রতিষ্ঠানের প্রয়োজনে সাজানো; প্রকৃত ত্রুটি-প্রতিরোধের নিয়ম এনকোড করতে পারে | কনফিগের বিচ্যুতি; নিয়ম নিয়ে তুচ্ছ তর্ক; রক্ষণাবেক্ষণের বোঝা |
| সম্প্রদায়ের মান পুরোপুরি গ্রহণ | নতুন নিয়োগের কাছে পরিচিত; শক্তিশালী টুলিং ইকোসিস্টেম; কম রক্ষণাবেক্ষণ | বিশেষ প্রাতিষ্ঠানিক সীমাবদ্ধতায় খাপ নাও খেতে পারে; মাঝেমধ্যে আনাড়ি নিয়ম |
| কাস্টম অভ্যন্তরীণ মান | প্রতিষ্ঠানে ঠিক খাপ খায় | লেখা ও রক্ষণাবেক্ষণে ব্যয়বহুল; নিয়োগের কাছে অপরিচিত; দুর্বল টুলিং |
| প্রতি-দলের স্বায়ত্তশাসন | উচ্চ স্থানীয় মনোবল; প্রেক্ষাপট-নির্দিষ্ট | বিচ্ছিন্নতা; যন্ত্রণাদায়ক আন্তঃদল গতিশীলতা; অসঙ্গত টুলিং |
বলবৎ ডিফল্ট কিছু ব্যক্তিগত স্বায়ত্তশাসন বিনিময় করে বড় যৌথ লাভ কেনে: কম রিভিউ ঘর্ষণ, দ্রুততর অনবোর্ডিং এবং নির্ভরযোগ্য স্বয়ংক্রিয়করণ। প্রধান ঝুঁকি হলো মানকে শত শত নিয়মে অতি-প্রকৌশলী করা, যা প্রকৃত ত্রুটি ঠেকানো ছাড়াই সবাইকে ধীর করে। নিয়ম-সেট ছোট ও প্রমাণভিত্তিক রাখুন, এবং রক্ষণাবেক্ষণ সস্তা রাখতে বিদ্যমান মান গ্রহণের দিকে ঝুঁকুন।
আপনার দলের সঙ্গে আলোচনার প্রশ্ন
কোন লিন্টার নিয়মে বিল্ড ব্যর্থ হওয়া উচিত, এবং সবাইকে না থামিয়ে একটি নিয়মকে সতর্কতা থেকে ত্রুটিতে কীভাবে উন্নীত করবেন? এই অধ্যায় যুক্তি দেয় প্রতিটি নিয়মের একটি প্রয়োগ-কৌশল দরকার, এবং নতুন নিয়ম সতর্কতা মোডে নামবে, জমে থাকা কাজ পরিষ্কার হবে, তারপর ত্রুটিতে উল্টে যাবে। বড় দলে অপরিষ্কার কোডবেসের বিপরীতে কোনো নিয়মকে ত্রুটিতে উল্টে দেওয়া রাতারাতি শত শত অসম্পর্কিত পরিবর্তন আটকে দেয়। সভায় কঠিন প্রমাণ আনুন: প্রতিটি সম্ভাব্য নিয়মের বর্তমান লঙ্ঘনের সংখ্যা, এবং তা স্বয়ংক্রিয়ভাবে-সারানো-যায় নাকি মানুষের বিচার দরকার। এন্টারপ্রাইজ ও সরকারি পরিবেশে উত্তীর্ণ/ব্যর্থ রেখা অডিট গেটকেও জোগান দেয়, তাই অস্পষ্ট নিয়ম-সেট আপনার বিধি-মান্যতার গল্পকে দুর্বল করে। ধাপে ধাপে রোলআউট ঠিক করুন: যা পারেন স্বয়ংক্রিয়ভাবে সারান, পরিষ্কারের বাজেট করুন, তারপর গেট করুন।
আপনার পুরোনো কোডে প্রথমবার ফরম্যাটার প্রয়োগ করার সময় সেই রিফরম্যাট git blame নষ্ট করা ও রিভিউ ডুবিয়ে দেওয়া থেকে কীভাবে ঠেকাবেন? ট্রেড-অফ তালিকা বড় প্রাথমিক ডিফের কথা সতর্ক করে, আর অ্যান্টি-প্যাটার্ন অংশ রিফরম্যাট কমিটকে যুক্তির পরিবর্তনের সঙ্গে মেশানোকে চিহ্নিত করে। একটিমাত্র ব্যাপক রিফরম্যাট হাজার হাজার লাইন নতুন করে লেখে এবং blame-কে আসল রচয়িতার বদলে রিফরম্যাটের দিকে নির্দেশ করায়, যা বছর পরে ডিবাগ করা যে কাউকে আঘাত করে। রিফরম্যাটকে একটি বিচ্ছিন্ন, স্পষ্ট লেবেলযুক্ত কমিট হিসেবে করুন এবং একটি blame-ignore ফাইলে নিবন্ধন করুন, যাতে ইতিহাস কার্যকর থাকে। কে কী বদলেছে তা অনুসরণকারী নিরীক্ষকদের জন্য সেই বিচ্ছিন্নতা পরিচ্ছন্ন প্রমাণ ও গোলমালের পার্থক্য। কোডে হাত দেওয়ার আগে, পরে নয়, ক্রম নিয়ে একমত হন।
আপনার নামকরণ শব্দকোষ ও ডোমেইন শব্দভাণ্ডারের মালিক কে, এবং একটি নতুন শব্দ কীভাবে যোগ হয়? এই অধ্যায় নামকরণকে সবচেয়ে উচ্চ-লিভারেজ পাঠযোগ্যতার সিদ্ধান্ত বলে এবং ডোমেইন শব্দভাণ্ডার একটি ভাগ করা শব্দকোষে লিখতে বলে। নামধারী মালিক ছাড়া একই ধারণা দলগুলোতে তিনটি ভিন্ন নাম পায়, এবং স্ট্যাটিক-বিশ্লেষণ ও অনুসন্ধান টুল নির্ভরযোগ্যতা হারায়। কংক্রিট সংকেত হিসেবে আপনার কোডবেসে ইতিমধ্যে বিরোধী নামধারী ধারণার উদাহরণ আনুন। একজন মালিক এবং একটি হালকা প্রস্তাব-পথ নিযুক্ত করুন, যাতে একটি শব্দ যোগ বা পুনঃনামকরণ প্রতিটি পুল রিকোয়েস্টে তর্কের বদলে একটি ছোট, পর্যালোচিত পরিবর্তন হয়। উত্তর অনবোর্ডিং বদলে দেয়: একজন নতুন নিয়োগ অসঙ্গত কোড থেকে অভিপ্রায় রিভার্স-ইঞ্জিনিয়ারিংয়ের বদলে একটি শব্দকোষ পড়েন।
প্রতিটি ভাষার জন্য আপনি কি একটি স্বীকৃত সম্প্রদায় বা বিক্রেতার শৈলী নির্দেশিকা পুরোপুরি গ্রহণ করেন, এবং ঘরোয়া বিচ্যুতি আসলে কোথায় যুক্তিসঙ্গত? এই অধ্যায় যুক্তি দেয় আপনার একটি বিদ্যমান মান ভিত্তিরেখা হিসেবে নেওয়া উচিত এবং প্রতিষ্ঠানের প্রয়োজনীয় কেবল বিচ্যুতিগুলো নথিবদ্ধ করা, কারণ কাস্টম মান লেখা ব্যয়বহুল ও নতুন নিয়োগের কাছে অপরিচিত। বিপরীত টান প্রকৃত: কোনো অভ্যন্তরীণ সীমাবদ্ধতা (নিরাপত্তার নিয়ম, পুরোনো ফ্রেমওয়ার্ক, অভিগম্যতার আদেশ) কখনো কখনো সত্যিই সম্প্রদায়ের ডিফল্টের সঙ্গে সংঘাতে আসে, এবং আপনার রাখা প্রতিটি বিচ্যুতি এমন নিয়ম যার মালিক এখন আপনি, চিরকাল রক্ষণাবেক্ষণ করতে হবে। সভায় প্রস্তাবিত বিচ্যুতির তালিকা আনুন, প্রতিটির সঙ্গে সেই সুনির্দিষ্ট সীমাবদ্ধতা যা তাকে প্রণোদিত করে, এবং কেবল রুচির বিচ্যুতি কাটতে প্রস্তুত থাকুন। এন্টারপ্রাইজ ও সরকারি পরিবেশে বৃহত্তর ভাষা-সম্প্রদায়ের সঙ্গে মেলে এমন ভিত্তিরেখা মানে ঠিকাদার ও নতুন বিক্রেতারা ইতিমধ্যে সাবলীল অবস্থায় আসে, যা অনবোর্ডিং ছোট করে এবং নিরীক্ষকদের খোঁজা রক্ষণাবেক্ষণযোগ্যতার প্রমাণ শক্তিশালী করে।
একটি বহুভাষিক কোডবেসে কোন রীতিগুলো সত্যিই সার্বজনীন আর কোনগুলো ভাষা-স্থানীয় থাকে, এবং প্রতি-রিপো কনফিগকে বিচ্যুত হওয়া থেকে কীভাবে ঠেকাবেন? অধ্যায়টি সিনট্যাক্স ভিন্ন হলেও ভাষা জুড়ে ধারণায় সামঞ্জস্য (ত্রুটি সামলানো, লগিং কাঠামো, প্রকল্পের বিন্যাস) চায়, এবং কেন্দ্রীয় রিপজিটরি থেকে দেওয়া প্রতি-ভাষা কনফিগ চায়, যাতে নতুন সার্ভিস স্বয়ংক্রিয়ভাবে মান উত্তরাধিকার পায়। টানাপোড়েন হলো এক ভাষার বাগধারা অন্য ভাষায় চাপালে আনাড়ি, অ-বাগধারামূলক কোড তৈরি হয়, আর প্রতিটি দলকে নিজের কনফিগ ফর্ক করতে ছেড়ে দিলে “মান” কিছুই বোঝায় না। কংক্রিট সংকেত হিসেবে আপনার বর্তমান প্রতি-রিপো লিন্টার ও ফরম্যাটার কনফিগের তালিকা এবং সেগুলো ইতিমধ্যে কতটা আলাদা হয়ে গেছে তা দেখানো একটি ডিফ আনুন। ডজন ডজন সার্ভিস চালানো বড় প্রতিষ্ঠানের জন্য বিতরণ কৌশল ঠিক করুন (টেমপ্লেট, স্ক্যাফোল্ডিং, ভাগ করা কনফিগ প্যাকেজ), যাতে একটি নিয়ম-পরিবর্তন প্রতিটি রিপোতে হাতে কপি না হয়ে একবারই ছড়ায়।
কখন একটি নিয়ম নিষ্ক্রিয় করা বৈধ, দমনটি কে পর্যালোচনা করে, এবং ব্যাপক নিষ্ক্রিয়করণ মানকে ফাঁপা করা থেকে কীভাবে ঠেকাবেন? অ্যান্টি-প্যাটার্ন অংশ ব্যাপক ইনলাইন দমনকে এমন সংকেত বলে চিহ্নিত করে যে নিয়মটি ভুল বা দল হাল ছেড়ে দিয়েছে, তবু কঠোর কোনো-ব্যতিক্রম-নয় নীতি মানুষকে লিন্টার তুষ্ট করতে খারাপ কোড লিখতে ঠেলে। একটি হালকা পথে একমত হন: দমনে একটি কারণ থাকতে হবে, সম্ভাব্য সংকীর্ণতম পরিসরে বসতে হবে, এবং বৈশ্বিক উপেক্ষা-ফাইলে চাপা না পড়ে রিভিউয়ে দৃশ্যমান হতে হবে। প্রতি নিয়ম ও প্রতি রিপজিটরিতে বর্তমান দমনের সংখ্যা আনুন, কারণ শত শত বার দমন করা নিয়ম আপনাকে কোড নয়, নিয়মটি সম্পর্কে কিছু বলছে। নিয়ন্ত্রিত ও সরকারি খাতের কাজে ব্যাখ্যাহীন ব্যাপক দমন সরাসরি অডিটের গল্প দুর্বল করে, কারণ পাইপলাইন আর দেখাতে পারে না যে মার্জ হওয়া কোড সত্যিই সম্মত গেট উত্তীর্ণ হয়েছে।
খাতভেদে দৃষ্টিভঙ্গি
স্টার্টআপ। গতিই জেতে, তাই প্রথম দিনেই আপনার একটিমাত্র ভাষার জন্য সম্প্রদায়ের ফরম্যাটার ও লিন্টারের ডিফল্ট গ্রহণ করুন এবং দ্বিতীয় ইঞ্জিনিয়ার আসার আগে সেগুলো প্রি-কমিট হুক ও CI-তে জুড়ে দিন। রক্ষণাবেক্ষণের সময় নেই এমন ঘরোয়া শৈলী লিখবেন না: রিপোতে পাঠানো কনফিগারেশনই পুরো মান। দ্বিতীয় ভাষা যোগ করলে শূন্য থেকে রীতি উদ্ভাবনের বদলে সেই ভাষার প্রামাণ্য নির্দেশিকা গ্রহণ করুন।
ছোট ব্যবসা। কোনো নিবেদিত টুলিং বিশেষজ্ঞ নেই আর বাজেট কম, তাই আপনার ভাষার সঙ্গে বা পাশে আসা বিনামূল্যের মতামতপ্রবণ ফরম্যাটারের ওপর পুরোপুরি ভরসা করুন এবং সুর বাঁধার বদলে তার ডিফল্ট গ্রহণ করুন। এটি স্পষ্ট কেনা-বানানোর-চেয়ে ঘটনা: কাস্টম নিয়ম-সেট রক্ষণাবেক্ষণে আপনার নেই এমন সময় লাগে, আর তৈরি ফরম্যাটারে কোনো খরচ নেই এবং তা তাৎক্ষণিক শৈলী-বিতর্ক শেষ করে। কনফিগ রিপজিটরিতে রাখুন, যাতে পরের বছর আপনি যে ঠিকাদার নিয়োগ করবেন তিনি কোনো আলাপ ছাড়াই তা উত্তরাধিকার পান।
এন্টারপ্রাইজ। বড় পরিসরে কাজ হলো বহু দল জুড়ে গভর্নেন্স: প্রতি ভাষার ভাগ করা ফরম্যাটার ও লিন্টার কনফিগ ধারণকারী একটি কেন্দ্রীয় প্রকৌশল-মান রিপজিটরি, সেই কনফিগ টেনে আনা টেমপ্লেট থেকে তৈরি নতুন সার্ভিস, এবং অমান্য মার্জ আটকানো CI গেট। নিয়ম-সেট কোডের মতো ভার্সন করুন এবং পরিবর্তন পর্যায়ক্রমিক পর্যালোচনার মধ্য দিয়ে পাঠান, যাতে মান ভেসে না গিয়ে সুচিন্তিতভাবে বিবর্তিত হয়। প্রতিদান হলো ইঞ্জিনিয়াররা পরিচিত কোডে সরেন, এবং স্বয়ংক্রিয় টুলিং নির্ভরযোগ্য সংকেত দেয় কারণ প্রতিটি রিপজিটরি সামঞ্জস্যপূর্ণ।
সরকার। ক্রয় ও জবাবদিহি পছন্দকে আকার দেয়: অপারেট করার কর্তৃত্বের শর্তের অংশ হিসেবে একটি নির্দিষ্ট শৈলী ও নিরাপত্তা নিয়ম-সেট বাধ্যতামূলক করুন, এবং পাইপলাইনকে অডিট প্রমাণ হিসেবে একটি প্রতিবেদন তৈরি করতে বলুন, যা দেখায় প্রতিটি মার্জ পরিবর্তন সম্মত গেট উত্তীর্ণ হয়েছে। ফরম্যাটার স্বয়ংক্রিয়ভাবে প্রযুক্ত হয় বলে একাধিক বিক্রেতা ও ঠিকাদারের কোড সামঞ্জস্যপূর্ণ দেখায়, যা চুক্তি শেষ হওয়ার অনেক পরেও জনগণের রক্ষণাবেক্ষণ রক্ষা করে। মান স্বচ্ছ এবং ভবিষ্যতের যেকোনো সরবরাহকারী মালিকানাধীন লক-ইন ছাড়া তা গ্রহণ করতে পারে, তাই ঘরোয়া নিয়মের চেয়ে স্বীকৃত সম্প্রদায়ের ভিত্তিরেখাকে অগ্রাধিকার দিন।
উদাহরণ
স্টার্টআপ। চারজনের একটি স্টার্টআপ তার একটিমাত্র ভাষার জন্য প্রথম দিনেই সম্প্রদায়ের ফরম্যাটার ও লিন্টারের ডিফল্ট গ্রহণ করে, সেগুলো প্রি-কমিট হুক ও CI-তে জুড়ে, যাতে রিভিউয়ে স্পেসিং নিয়ে কেউ তর্ক না করে। কনফিগ রিপোর ভেতরে আসে বলে পঞ্চম ও ষষ্ঠ নিয়োগ স্বয়ংক্রিয়ভাবে তা উত্তরাধিকার পান এবং কখনো ফরম্যাটিং মন্তব্য দেখেন না। দল পরে দ্বিতীয় ভাষা যোগ করলে, রক্ষণাবেক্ষণের সময় নেই এমন ঘরোয়া শৈলী উদ্ভাবনের বদলে সেই ভাষার প্রমিত নির্দেশিকা গ্রহণ করে।
এন্টারপ্রাইজ। একটি বড় ব্যাংক ডজন ডজন দল জুড়ে Java, Python ও TypeScript-এ সার্ভিস চালায়। এটি একটি কেন্দ্রীয় “প্রকৌশল মান” রিপজিটরি প্রকাশ করে, যাতে প্রতিটি ভাষার ভাগ করা ফরম্যাটার ও লিন্টার কনফিগ আছে। নতুন সার্ভিস তৈরি হয় সেই কনফিগ টেনে আনা টেমপ্লেট থেকে, তাই প্রতিটি রিপজিটরি শুরুতেই মান্য। CI যেকোনো লঙ্ঘনে মার্জ আটকায়, এবং ত্রৈমাসিক পর্যালোচনা নিয়ম-পরিবর্তন নিয়ন্ত্রণ করে। দলগুলোর মধ্যে সরা ইঞ্জিনিয়ারদের অনবোর্ডিং সময় লক্ষণীয়ভাবে কমে, কারণ প্রতিটি রিপজিটরি পরিচিত দেখায়।
সরকার। একটি পুরোনো সিস্টেম আধুনিকায়ন করা সরকারি সংস্থা অপারেট করার কর্তৃত্বের (ATO) প্রয়োজনীয়তার অংশ হিসেবে, প্রোডাকশনে সিস্টেম চালানোর আনুষ্ঠানিক অনুমোদন, একটি অভিগম্যতা ও নিরাপত্তা লিন্টিং নিয়ম-সেট বাধ্যতামূলক করে। শৈলীর মান্যতা অডিট প্রমাণের অংশ হয়: পাইপলাইন একটি প্রতিবেদন তৈরি করে যা দেখায় সব মার্জ হওয়া কোড সম্মত স্ট্যাটিক-বিশ্লেষণ গেট উত্তীর্ণ হয়েছে। ফরম্যাটার স্বয়ংক্রিয়ভাবে প্রযুক্ত হয় বলে বিভিন্ন বিক্রেতার ঠিকাদাররা দৃশ্যত সামঞ্জস্যপূর্ণ কোড তৈরি করে, যা চুক্তি শেষ হওয়ার পর সরকারের দীর্ঘমেয়াদি রক্ষণাবেক্ষণ সহজ করে।
ব্যবসায়িক যুক্তি: প্রেরণা, ROI ও TCO
মান গ্রহণের খরচ মূলত এককালীন: নির্দেশিকা বাছাই, টুলিং জোড়া লাগানো, এবং একটি বড় প্রাথমিক রিফরম্যাটিং কমিট প্রয়োগ। পুনরাবৃত্ত খরচ কম, কারণ প্রয়োগ স্বয়ংক্রিয়। মান গ্রহণ না করার খরচ পুনরাবৃত্ত ও চক্রবৃদ্ধি: প্রতিটি রিভিউ শৈলীতে কয়েক মিনিট ব্যয় করে, প্রতিটি অনবোর্ডিং ধীর, স্ট্যাটিক-বিশ্লেষণ টুল গোলমাল তৈরি করে, এবং অসঙ্গত কোড ত্রুটি লুকায়। বড় প্রতিষ্ঠান জুড়ে সেই মিনিটগুলো যোগ হয়ে পূর্ণ-সময়-সমতুল্য ক্ষতিতে দাঁড়ায়।
প্রতিদান দেখা দেয় রিভিউয়ের কম বিলম্বে, কম শৈলী-সম্পর্কিত রিভিউ মন্তব্যে, দ্রুততর অনবোর্ডিংয়ে এবং স্বয়ংক্রিয় টুলিং থেকে উচ্চতর সংকেতে। নিয়ন্ত্রিত পরিবেশে অডিট-প্রস্তুতিতেও প্রতিদান আছে: প্রমাণযোগ্য, বলবৎ নিয়ন্ত্রণ বিধি-মান্যতা পর্যালোচনার পরিশ্রম ও ঝুঁকি কমায়। নেতৃত্বের কাছে যুক্তি দিতে মানকে ডেভেলপার উৎপাদনশীলতা ও অডিট অবস্থানের ওপর কম-খরচের, উচ্চ-লিভারেজ হাতিয়ার হিসেবে উপস্থাপন করুন, এবং রিভিউ-মন্তব্য বিশ্লেষণ ও অনবোর্ডিং জরিপের তথ্য ব্যবহার করে অসঙ্গতির বর্তমান খরচের একটি সংখ্যা দিন।
অ্যান্টি-প্যাটার্ন ও ফাঁদ
- কোড রিভিউয়ে শৈলী নিয়ে বিতর্ক: প্রয়োগ স্বয়ংক্রিয় নয় তার লক্ষণ; নিয়মটি টুলিংয়ে নিয়ে যান।
- অপঠিত মান-নথি: প্রয়োগহীন উইকি পাতা সাজসজ্জা; প্রতিটি নিয়মের একটি কৌশল দরকার।
- নিয়মের ছড়াছড়ি: শত শত তুচ্ছ নিয়ম, যা ত্রুটি না ঠেকিয়ে কাজ ধীর করে।
- কনফিগের বিচ্যুতি: প্রতিটি রিপজিটরি নিজের লিন্টার কনফিগ ফর্ক করতে থাকে, যতক্ষণ না “মান” কিছুই বোঝায় না।
- ফিচারের কাজের মাঝখানে পুরো রিপো ফরম্যাট: রিফরম্যাট কমিটকে যুক্তির পরিবর্তনের সঙ্গে মেশালে রিভিউ ও blame নষ্ট হয়; বড় রিফরম্যাট বিচ্ছিন্ন, স্পষ্ট লেবেলযুক্ত কমিটে করুন।
- ব্যাপক দমনে লিন্টার উপেক্ষা: ব্যাপক ইনলাইন নিষ্ক্রিয়করণ ইঙ্গিত দেয় নিয়ম ভুল বা দল হাল ছেড়েছে।
- মালিকানা ছাড়া মান: স্পষ্ট মালিক না থাকলে নিয়ম কখনো বিবর্তিত হয় না এবং পচে।
পরিপক্বতা মডেল
- স্তর ১, সূচনা: শৈলী প্রতি-রচয়িতা ও প্রতিক্রিয়াশীল; কোনো ভাগ করা কনফিগ নেই; ফরম্যাটিং রিভিউয়ে তর্ক হয় এবং সেদিন যে সবচেয়ে বেশি যত্ন নেয় সে নিষ্পত্তি করে।
- স্তর ২, বিকাশ: পৃথক দলগুলো ফরম্যাটার ও লিন্টার গ্রহণ করে, কিন্তু কনফিগ ও নিয়ম-সেট দল থেকে দল এবং রিপো থেকে রিপোতে ভিন্ন, তাই প্রতিটি দলের সীমানায় সামঞ্জস্য থেমে যায়।
- স্তর ৩, মানসম্মতকরণ: প্রতি ভাষার কেন্দ্রীয় ভাগ করা কনফিগ নথিবদ্ধ এবং প্রতিষ্ঠানজুড়ে বলবৎ; CI অমান্য মার্জ আটকায়; নতুন রিপজিটরি টেমপ্লেট বা স্ক্যাফোল্ডিংয়ের মাধ্যমে স্বয়ংক্রিয়ভাবে মান উত্তরাধিকার পায়।
- স্তর ৪, ব্যবস্থাপনা: মান তথ্য দিয়ে মাপা ও নিয়ন্ত্রিত: লঙ্ঘনের হার, দমনের সংখ্যা, শৈলী-সম্পর্কিত রিভিউ মন্তব্য এবং অনবোর্ডিং সময় ভিত্তিরেখার বিপরীতে অনুসরণ করা হয়, এবং নিয়ম উন্নীত বা অবসান হয় মতামতের বদলে সেই প্রমাণে।
- স্তর ৫, সমন্বয়: মান নিরন্তর উন্নত এবং প্রতিষ্ঠান জুড়ে একীভূত; বহুভাষিক বাগধারা ও ডোমেইন শব্দভাণ্ডার নথিবদ্ধ ও বলবৎ, প্রয়োগ প্রায়-ঘর্ষণহীন, এবং ভাষা, টুলিং ও প্রতিষ্ঠানের প্রয়োজন বদলালে নিয়ম-সেট খাপ খাইয়ে নেয়।
আলোচনার ভাবনা
- বলবৎ নিয়ম আর ইঞ্জিনিয়ারের বিচারে ভরসা করা নথিবদ্ধ নির্দেশিকার মধ্যে রেখা কোথায়?
- একটি প্রিয় সম্প্রদায়ের নিয়ম যখন প্রকৃত অভ্যন্তরীণ সীমাবদ্ধতার সঙ্গে সংঘাতে আসে, প্রতিষ্ঠান কীভাবে তা সামলাবে?
- মানের মালিক কে, এবং বিঘ্ন ছাড়া নিয়ম-পরিবর্তন কীভাবে প্রস্তাবিত, বিতর্কিত ও চালু হয়?
- একটি বহুভাষিক কোডবেসে কোন রীতিগুলো সত্যিই সার্বজনীন হওয়া উচিত আর কোনগুলো ভাষা-স্থানীয় থাকা উচিত?
- বিঘ্নকারী বড় রিফরম্যাট ছাড়া একটি বড় পুরোনো কোডবেসে কীভাবে মান জুড়বেন?
- যান্ত্রিক ফরম্যাটিংয়ের বাইরে বাগধারা সুপারিশ বা প্রয়োগে AI-সহায়ক টুলিংয়ের কী ভূমিকা থাকা উচিত?
প্রধান শিক্ষা
- শৈলীকে স্বয়ংক্রিয়, সমাধান-হওয়া সমস্যা হিসেবে দেখুন, যাতে মানুষ নকশা ও সঠিকতা পর্যালোচনা করে।
- বিদ্যমান সম্প্রদায়ের মান গ্রহণ করুন এবং কেবল বিচ্যুতিগুলো নথিবদ্ধ করুন।
- এডিটর, প্রি-কমিট ও CI স্তরে প্রয়োগ করুন, CI-কে প্রামাণ্য গেট রেখে।
- নিয়ম-সেট ছোট, সমর্থনযোগ্য ও কেন্দ্রীয়ভাবে নিয়ন্ত্রিত রাখুন।
- নামকরণ ও বাগধারাতেই, স্পেসিংয়ে নয়, পাঠযোগ্যতা সত্যিই জেতা হয়।
তথ্যসূত্র ও আরও পড়ার জন্য
- Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship
- Andrew Hunt ও David Thomas, The Pragmatic Programmer
- Steve McConnell, Code Complete
- Dustin Boswell ও Trevor Foucher, The Art of Readable Code
- Kevlin Henney (সম্পা.), 97 Things Every Programmer Should Know
- Google, Google Engineering Practices এবং ভাষার শৈলী নির্দেশিকা (দৃষ্টান্তমূলক উদাহরণ হিসেবে)