সরাসরি পর্বে যান
পর্ব ৬৪ · ৭০-এর মধ্যে · মডিউল ১০

পেশাগত নৈতিকতা — ACM/IEEE code, privacy, accessibility আর AI-সহায়তায় দায়িত্ব

Professional Ethics — the ACM/IEEE-CS Code, Privacy by Design, Accessibility, Fairness and Responsibility in AI-Assisted Development

Taught in Bangla, this lesson covers professional ethics for software engineers: the eight principles of the ACM/IEEE-CS Software Engineering Code, a six-step framework for ethical dilemmas, escalation and whistleblowing, privacy by design and GDPR principles, security and accessibility as duties, dark patterns, measuring algorithmic bias, intellectual property basics, and responsibility when coding with AI assistance.

এই পর্বে যা শিখবেন

  • Software engineering-এ নৈতিকতা কেন আইন মানার চেয়ে বড়, আর SE Code-এর আটটি নীতি দৈনন্দিন কাজে কী চায়
  • নৈতিক দ্বিধায় ছয় ধাপের সিদ্ধান্ত-কাঠামো, escalation-এর পথ আর whistleblowing কখন শেষ উপায়
  • Privacy by design, data minimisation, purpose limitation, সম্মতি আর GDPR-এর মূলনীতি — নিজের feature-এ প্রয়োগ
  • Dark pattern চেনা, disparate impact মাপা, আর accessibility ও নিরাপত্তাকে নৈতিক দায়িত্ব হিসেবে দেখা
  • Copyright, patent, trade secret-এর মৌলিক ধারণা, আর AI-সহায়তায় কোড লেখার সময় নিজের দায়িত্ব

১ · কেন software engineering-এ নৈতিকতা — কোডের সিদ্ধান্ত মানুষের জীবনে

এই কোর্সের প্রায় সব পর্ব “কীভাবে” প্রশ্নের উত্তর দিয়েছে: কীভাবে requirement লিখবেন, কীভাবে নকশা করবেন, কীভাবে test আর release করবেন। এই পর্বের প্রশ্ন আলাদা: করা উচিত কি না, আর কার জন্য। পেশাগত নৈতিকতা (professional ethics) মানে একটি পেশার মানুষ কাজের সময় কোন আচরণকে ঠিক আর কোনটিকে ভুল ধরবেন, তার নীতি।

বাড়ি বানানোর নকশা আর রাজমিস্ত্রির কথা ভাবুন। মালিক খরচ কমাতে রড একটু কম দিতে বললেন — কেউ বুঝবে না। বাড়ি বছরের পর বছর ঠিকঠাক থাকবে, যতদিন না একটি ভূমিকম্প আসে; তখন ক্ষতি হবে ভাড়াটে, পাশের বাড়ি আর রাস্তার মানুষেরও। ভালো রাজমিস্ত্রি জানেন, তাঁর দায় শুধু টাকা দেওয়া মানুষের কাছে নয়, যাঁরা ওই বাড়ির ভেতরে আর আশেপাশে থাকবেন তাঁদের কাছেও। Software engineer-ও একই অবস্থানে: গ্রাহক টাকা দেন, কিন্তু ফল ভোগ করেন অসংখ্য অচেনা মানুষ।

Software আজ চারটি বড় জায়গায় মানুষের জীবনে সরাসরি হাত দেয়:

🛡️ নিরাপত্তা (safety)

চিকিৎসা-যন্ত্র, গাড়ি, বিমান, রেলের signal, ওষুধের ডোজ হিসাব। পর্ব ২-এ (Software crisis আর software engineering-এর ইতিহাস) Therac-25 আর Ariane 5-এর বিশ্লেষণ দেখেছেন — এখানে সেগুলো আবার বলব না, শুধু শিক্ষাটি মনে রাখুন: software একমাত্র পাহারাদার হলে তার প্রতিটি ভুল সরাসরি মানুষের ক্ষতি।

💳 টাকা

Mobile banking, বেতন, বিল, শেয়ারবাজার। পর্ব ২-এর Knight Capital-এর ঘটনা দেখায় একটি ভুল deployment কত দ্রুত বিপুল ক্ষতি করতে পারে।

🔒 Privacy

ফোন নম্বর, NID, অবস্থান, স্বাস্থ্য, লেনদেন — personal data ফাঁস হলে মানুষ প্রতারণা, হয়রানি বা বৈষম্যের শিকার হতে পারেন। একবার ফাঁস হলে ফেরত আনা যায় না।

⚖️ ন্যায্যতা (fairness)

চাকরির CV বাছাই, ঋণের অনুমোদন, ভর্তির তালিকা। নিয়ম সবার জন্য একই হলেও ফল কোনো গোষ্ঠীর বিরুদ্ধে হেলে থাকতে পারে — আর software সেটি লাখো মানুষের ওপর একসাথে চাপায়।

আইন মানা আর নৈতিক হওয়া এক জিনিস নয়

আইন সাধারণত সমাজের ন্যূনতম শর্ত, আর প্রযুক্তির চেয়ে ধীরে চলে। Subscription এক ক্লিকে নেওয়া আর বাতিল করতে সাত পাতা ঘোরানো অনেক জায়গায় আইনসিদ্ধ, কিন্তু নৈতিকভাবে প্রশ্নবিদ্ধ; আবার নতুন ধরনের AI feature-এর জন্য অনেক দেশে এখনো নির্দিষ্ট আইনই নেই — তখন সিদ্ধান্ত নিতে হয় পেশাগত নীতি দিয়ে।

এই পর্বের সীমা: এখানে আইনের কথা এসেছে ধারণা বোঝাতে, আইনি পরামর্শ হিসেবে নয়। আইন দেশভেদে আলাদা আর সময়ের সাথে বদলায়; বাস্তব সিদ্ধান্তে প্রতিষ্ঠানের আইন বিভাগ বা যোগ্য আইনজীবীর পরামর্শ নিন। এই পর্বের সব case, প্রতিষ্ঠান, নাম, email, ফোন নম্বর আর NID কাল্পনিক।

২ · ACM/IEEE-CS Software Engineering Code — আটটি নীতি, কেন্দ্রে জনস্বার্থ

১৯৯০-এর দশকে ACM আর IEEE Computer Society একটি যৌথ task force গঠন করে। তাদের লেখা Software Engineering Code of Ethics and Professional Practice-এর সংস্করণ ৫.২ ১৯৯৯ সালে দুই সংগঠনই গ্রহণ করে। এর দুটি রূপ আছে: একটি সংক্ষিপ্ত রূপ, যেখানে আটটি নীতির প্রতিটি এক বাক্যে; আর একটি পূর্ণ রূপ, যেখানে প্রতিটি নীতির নিচে অনেকগুলো নির্দিষ্ট ধারা (clause). ভূমিকায় বলা আছে, এটি কোনো যান্ত্রিক নিয়মের বই নয় — বিচারবুদ্ধি দিয়ে প্রয়োগের নির্দেশিকা, আর সব নীতির মধ্যে জনস্বার্থ (public interest) সবচেয়ে গুরুত্বপূর্ণ।

আটটি নীতি, কেন্দ্রে জনস্বার্থ

The eight principles of the ACM/IEEE-CS Software Engineering Code (1999), all weighed against the public interest

ACM/IEEE-CS Software Engineering Code-এর আটটি নীতি, কেন্দ্রে জনস্বার্থ জনস্বার্থ Public interest সবার ভারকেন্দ্র ১ · Public জনগণ ২ · Client ও Employer ৩ · Product পণ্যের মান ৪ · Judgment স্বাধীন বিচার ৫ · Management নৈতিক ব্যবস্থাপনা ৬ · Profession পেশার সুনাম ৭ · Colleagues সহকর্মী ৮ · Self নিজের শেখা
ছবি ৬৪.১ — আটটি নীতি আলাদা মানুষ বা বিষয়ের প্রতি দায়িত্ব; সংঘাত হলে প্রতিটিকে কেন্দ্রের জনস্বার্থের সাথে মিলিয়ে দেখতে হয়।

নিচের তালিকায় প্রতিটি নীতির সংক্ষিপ্ত রূপ নিজের ভাষায় (হুবহু অনুবাদ নয়), আর দৈনন্দিন কাজে তা কী চায়। মূল ইংরেজি লেখা ACM-এর ওয়েবসাইটে বিনামূল্যে পড়া যায় — পরীক্ষা বা উদ্ধৃতির আগে সেখান থেকে মিলিয়ে নিন।

নীতিমূল কথা (ভাবানুবাদ)দৈনন্দিন কাজে
১ · Publicজনস্বার্থের সাথে সংগতি রেখে কাজ করা।নিরাপত্তা, privacy আর পরিবেশের ঝুঁকি জানলে চুপ না থাকা; জনগণের ক্ষতি করে এমন software অনুমোদন না করা।
২ · Client and Employerজনস্বার্থের সাথে সংগতি রেখে গ্রাহক ও নিয়োগকর্তার সর্বোত্তম স্বার্থে কাজ করা।গোপন তথ্য রক্ষা, প্রতিষ্ঠানের সম্পদ অনুমতি ছাড়া ব্যবহার না করা, project ব্যর্থ হওয়ার সম্ভাবনা দেখলে জানানো।
৩ · ProductProduct আর তার পরিবর্তন যেন সম্ভাব্য সর্বোচ্চ পেশাদার মান ছোঁয়।বাস্তবসম্মত estimate, যথেষ্ট test, জানা ত্রুটি লিখে রাখা — পর্ব ৪৫–৫১-এর সব অভ্যাস।
৪ · Judgmentপেশাগত বিচারে সততা আর স্বাধীনতা বজায় রাখা।চাপের মুখে ভুল report-এ সই না করা, ঘুষ বা স্বার্থের সংঘাত এড়ানো বা প্রকাশ করা।
৫ · ManagementManager ও নেতারা নৈতিক উপায়ে development আর maintenance পরিচালনা করবেন।অসম্ভব deadline চাপিয়ে না দেওয়া, ঝুঁকির কথা বলা মানুষকে শাস্তি না দেওয়া, ন্যায্য মূল্যায়ন।
৬ · Professionজনস্বার্থের সাথে সংগতি রেখে পেশার সততা আর সুনাম এগিয়ে নেওয়া।নিজের যোগ্যতার বাইরে দাবি না করা, ভালো চর্চা ছড়ানো, Code-বিরোধী কাজের প্রতিবাদ।
৭ · Colleaguesসহকর্মীদের প্রতি ন্যায্য ও সহায়ক থাকা।অন্যের কাজের কৃতিত্ব না নেওয়া, সম্মানজনক code review (পর্ব ৪৪), নতুনদের শেখানো।
৮ · Selfআজীবন শেখা আর নিজের পেশাচর্চায় নৈতিক দৃষ্টিভঙ্গি ধরে রাখা।নতুন tool, মানদণ্ড আর আইনের খবর রাখা; নিজের ভুল থেকে শেখা।
মূল ধারণা

পূর্ণ রূপের দুটি পরিচিত ধারা (নম্বর আমাদের জানামতে; মূল লেখায় মিলিয়ে নিন): ১.০৩ — software অনুমোদন শুধু তখনই, যখন সুপ্রতিষ্ঠিত বিশ্বাস আছে যে এটি নিরাপদ, spec মানে, উপযুক্ত test পাস করে, আর জীবনের মান, privacy বা পরিবেশের ক্ষতি করে না; ১.০৪ — software-এর সাথে যুক্ত বাস্তব বা সম্ভাব্য বিপদের কথা উপযুক্ত মানুষ বা কর্তৃপক্ষকে জানানো। অর্থাৎ “আমি শুধু কোড লিখেছি, ship করার সিদ্ধান্ত অন্যের” — এই যুক্তি Code মানে না।

ACM Code of Ethics (২০১৮) — সব computing পেশাজীবীর জন্য

SE Code শুধু software engineering-এর জন্য। এর পাশাপাশি ACM-এর সাধারণ Code of Ethics and Professional Conduct আছে, যার আগের রূপ ছিল ১৯৯২ সালের, আর বড় হালনাগাদ ২০১৮ সালে। এর প্রথম অংশে আছে মানুষের কল্যাণে অবদান, ক্ষতি এড়ানো, সততা, ন্যায্যতা ও বৈষম্য না করা, নতুন ধারণার পেছনের শ্রমকে সম্মান, privacy আর গোপনীয়তা রক্ষা; পরের অংশে system-কে শক্তভাবে এবং ব্যবহারযোগ্যভাবে নিরাপদ করার দায়িত্ব। IEEE আর বিভিন্ন দেশের পেশাজীবী সংগঠনেরও (যেমন যুক্তরাজ্যের BCS) নিজস্ব আচরণবিধি আছে।

এই code-গুলো আইন নয়, তবে এদের আসল শক্তি হলো: চাপের মুহূর্তে আপনি একটি স্বীকৃত, লিখিত মানদণ্ড দেখিয়ে বলতে পারেন, “এটা শুধু আমার ব্যক্তিগত মত নয়।”

আরও গভীরে: SE Code-এর পটভূমি আর ব্যাখ্যা নিয়ে Don Gotterbarn, Keith Miller ও Simon Rogerson ১৯৯৯ সালে Communications of the ACM-এ লিখেছিলেন। ACM ২০১৮-র Code-এর সাথে বাস্তব case-এর বিশ্লেষণও প্রকাশ করেছে। কম্পিউটার নৈতিকতার ক্লাসিক বইয়ের মধ্যে আছে Deborah Johnson-এর Computer Ethics (প্রথম সংস্করণ ১৯৮৫); আর privacy-র তাত্ত্বিক ভিত্তির জন্য Helen Nissenbaum-এর “contextual integrity” ধারণা (তাঁর ২০০৯ সালের বই Privacy in Context) পড়ে দেখতে পারেন।

৩ · নৈতিক দ্বিধায় সিদ্ধান্ত — ছয় ধাপের কাঠামো

বাস্তবের কঠিন প্রশ্নগুলো প্রায় কখনো “ভালো বনাম খারাপ” নয়; বেশিরভাগই নৈতিক দ্বিধা (ethical dilemma) — দুটি ভালো জিনিসের মধ্যে টানাপোড়েন: সময়মতো ডেলিভারি বনাম নিরাপত্তা, গ্রাহকের গোপনীয়তা বনাম সহকর্মীর প্রতি আনুগত্য, চাকরি রক্ষা বনাম জনগণের ক্ষতি ঠেকানো। আবেগের মুহূর্তে ভালো সিদ্ধান্ত নিতে একটি লিখিত কাঠামো সাহায্য করে। নৈতিকতার বিভিন্ন বইয়ে নানা রকম কাঠামো আছে; নিচেরটি তাদের সাধারণ সারাংশ:

ছয়টি ধাপ: তথ্য (কোনটা জানা, কোনটা অনুমান) → stakeholder (কারা প্রভাবিত, বিশেষ করে যাঁরা আলোচনায় নেই) → বিকল্প (অন্তত তিনটি, শুধু হ্যাঁ-না নয়) → পরিণতি (কার কী ক্ষতি, ফেরানো যায় কি না) → নীতি মেলানো (SE Code, আইন, প্রতিষ্ঠানের নিয়ম) → সিদ্ধান্ত, কাজ আর লিখে রাখা (issue, email বা ADR-এর মতো নথি — পর্ব ৩৮)। নীতি মেলানোর সময় দুটি সহজ পরীক্ষা কাজে দেয়: প্রকাশ্যতার পরীক্ষা — কাল খবরের কাগজে ছাপা হলে কি সিদ্ধান্তটির পক্ষে দাঁড়াতে পারবেন? উল্টো আসনের পরীক্ষা — আপনি ক্ষতিগ্রস্ত মানুষটি হলে কী চাইতেন? নিচের stepper-এ একটি কাল্পনিক ঘটনায় কাঠামোটি প্রয়োগ করা হয়েছে।

ধাপ ১ · তথ্যকাল্পনিক “ডোজসাথী” app
Feature : শিশুর ওজন দিয়ে ওষুধের ডোজ হিসাব (হাসপাতালের নার্সদের জন্য)
Bug     : ওজন 10 kg-এর কম হলে দশমিক ভুলভাবে round হয়
          যেমন 7.5 kg → হিসাব হয় 8 kg ধরে (প্রায় 7% বেশি ডোজ)
Test    : 3টি ব্যর্থ test, issue #212-এ লেখা
চাপ     : বৃহস্পতিবার release, গ্রাহক হাসপাতালের সাথে চুক্তি
ধাপ ২ · stakeholderকে প্রভাবিত
শিশু রোগী ও পরিবার → সবচেয়ে বেশি ঝুঁকি, কণ্ঠ নেই
নার্স ও ডাক্তার     → app-এর ওপর ভরসা করবেন
হাসপাতাল (গ্রাহক)   → সময় চান, ক্ষতিতে দায় তাঁদেরও
প্রতিষ্ঠান, দল, আপনি → চুক্তি, সুনাম, পেশাগত দায়
ধাপ ৩ · বিকল্পঅন্তত তিনটি
A. যেমন আছে ship, পরে patch
B. ship, কিন্তু 10 kg-এর কম ওজনে হিসাব বন্ধ (feature flag)
   + স্পষ্ট বার্তা: "এই ওজনে হাতে হিসাব করুন"
C. release এক সপ্তাহ পিছানো, bug ঠিক করে পুরো test
D. চুপচাপ ship, issue বন্ধ করে দেওয়া   ← বিকল্পই নয়
ধাপ ৪ · পরিণতিঝুঁকি আর ফেরানো যায় কি না
A: অতিরিক্ত ডোজ → শিশুর ক্ষতি; ফেরানো যায় না
B: সময়মতো release; বার্তা স্পষ্ট হলে ঝুঁকি প্রায় শূন্য
C: সবচেয়ে নিরাপদ; দেরি, টাকা ও সুনামের খরচ
D: A-র সব ঝুঁকি + লুকানো
ধাপ ৫ · নীতিSE Code
১ Public   : নিরাপদ বিশ্বাস না হলে অনুমোদন নয় → A, D বাদ
২ Client   : ঝুঁকি জানানোই গ্রাহকের আসল স্বার্থ
৪ Judgment : চাপে পড়ে "সব ঠিক" সই নয়
ধাপ ৬ · সিদ্ধান্ত ও নথিissue #212-এ মন্তব্য
প্রস্তাব : B এখনই, C-র কাজ পরের সপ্তাহে
কারণ    : A-তে অপূরণীয় ক্ষতির ঝুঁকি (SE Code ১.০৩, ১.০৪)
জানানো  : team lead, product manager, হাসপাতাল
যাচাই   : <10 kg ইনপুটে হিসাব বন্ধ থাকার test যোগ
যদি B প্রত্যাখ্যাত হয় → লিখিতভাবে পরের স্তরে (অংশ ৪)
  1. তথ্য আগে। ত্রুটিটি শুধু একটি সীমার নিচে দেখা দেয় (পর্ব ৪৭-এর boundary value). ব্যর্থ test আর issue থাকায় এটি প্রমাণিত তথ্য, অনুমান নয়।
  2. Stakeholder. সবচেয়ে ঝুঁকিতে থাকা শিশু রোগী আলোচনার টেবিলে নেই — এমন কণ্ঠহীন মানুষকে দৃশ্যমান করাই বিশ্লেষণের বড় কাজ।
  3. বিকল্প। হ্যাঁ-না-র বাইরে তৃতীয় পথ B: বিপজ্জনক অংশটুকু বন্ধ, বাকিটা চালু। D মনে করিয়ে দেয় যে লুকানো কোনো বিকল্প নয়।
  4. পরিণতি। দেরি আর টাকার ক্ষতি পূরণ করা যায়, শিশুর শারীরিক ক্ষতি যায় না — A বাদ পড়ে ক্ষতির ধরনের কারণে।
  5. নীতি মেলানো। Public নীতি সীমা টানে (A ও D বাদ); বাকি নীতি B আর C-র মধ্যে বাছাইয়ে সাহায্য করে। গ্রাহককে ঝুঁকি জানানো Client নীতির পক্ষেই।
  6. সিদ্ধান্ত লিখে রাখা। প্রস্তাব, কারণ আর কাকে জানানো হলো — সব issue-তে। প্রস্তাব প্রত্যাখ্যাত হলে পরের ধাপ আগে থেকেই ঠিক।

৪ · কথা বলা, escalation আর whistleblowing — পেশা আর লাইসেন্স

সমস্যা দেখলে কথা বলার ধাপে ধাপে পথকে বলে escalation:

ধাপকোথায়কীভাবে
১নিজের দলে: pull request, issue, stand-upতথ্যসহ, শান্তভাবে
২Team lead বা সরাসরি managerলিখিতভাবে, প্রমাণ ও সুপারিশসহ
৩Quality, নিরাপত্তা, privacy বা আইন বিভাগবিশেষজ্ঞের মত নেওয়া
৪ঊর্ধ্বতন ব্যবস্থাপনা, ethics বা compliance hotlineপ্রতিষ্ঠানের অভিযোগ-ব্যবস্থা
৫বাইরের নিয়ন্ত্রক বা উপযুক্ত কর্তৃপক্ষভেতরের পথ ব্যর্থ আর ক্ষতি গুরুতর হলে, আইনি পরামর্শসহ

শেষ ধাপটিকে বলে whistleblowing. SE Code-এর পূর্ণ রূপে (Profession নীতির নিচে) বলা আছে, যাঁরা জড়িত তাঁদের সাথে আলোচনা অসম্ভব, অকার্যকর বা বিপজ্জনক হলে গুরুতর লঙ্ঘনের কথা উপযুক্ত কর্তৃপক্ষকে জানাতে হবে। কয়েকটি পরামর্শ:

  • তথ্যে থাকুন, ব্যক্তিতে নয়: “এই তারিখে এই test ব্যর্থ, এই সিদ্ধান্ত হয়েছে।”
  • প্রমাণ রাখুন, data নয়: নিজের পাঠানো email-এর তারিখ লিখে রাখুন, কিন্তু অনুমতি ছাড়া গ্রাহকের personal data বা গোপন কোড বাইরে নেবেন না — তাতে নতুন অন্যায় আর নিজের আইনি ঝুঁকি তৈরি হয়।
  • আইনি সুরক্ষা দেশভেদে আলাদা: পদক্ষেপের আগে পরামর্শ নিন।
  • দলের দায়ও আছে: যে দলে প্রশ্ন তোলা নিরাপদ (psychological safety) আর ভুলের পরে দোষারোপ নয়, ব্যবস্থার উন্নতি হয় (blameless culture, পর্ব ৪৪), সেখানে খুব কম সমস্যাই শেষ ধাপে পৌঁছায়।

আরেকটি উপেক্ষিত বিষয় স্বার্থের সংঘাত: vendor বাছাইয়ে একটি প্রার্থী প্রতিষ্ঠান আপনার আত্মীয়ের হলে আগেই লিখিতভাবে প্রকাশ করুন, প্রয়োজনে সিদ্ধান্ত থেকে সরে দাঁড়ান।

পেশা আর লাইসেন্স — দেশভেদে খুব আলাদা

সিভিল engineering-এ অনেক দেশে পেশাগত লাইসেন্স লাগে; software-এ চিত্র মিশ্র। নিয়ম বদলায় — সর্বশেষ অবস্থা যাচাই করুন।

দেশ বা অঞ্চলসাধারণ চিত্র (আমাদের জানামতে)
যুক্তরাষ্ট্রPE লাইসেন্স অঙ্গরাজ্যভিত্তিক; Texas ১৯৯৮ সালে software engineering-কে আওতায় আনে; NCEES-এর software PE পরীক্ষা ২০১৩–২০১৯। বেশিরভাগ কাজে লাগে না।
কানাডা“Engineer” পদবি প্রদেশভিত্তিক নিয়ন্ত্রণে।
যুক্তরাজ্যবাধ্যতামূলক নয়; CEng বা BCS-এর স্বীকৃতি ঐচ্ছিক।
বাংলাদেশআলাদা বাধ্যতামূলক লাইসেন্স আমাদের জানামতে নেই — সর্বশেষ অবস্থা যাচাই করুন।
নিয়ন্ত্রিত খাত (সব দেশে)চিকিৎসা-যন্ত্র, বিমান, রেল বা ব্যাংকিং software-এ খাতভিত্তিক মানদণ্ড ও অনুমোদন (যেমন IEC 62304)

লাইসেন্স নিয়ে বিতর্কের ইতিহাস ভাবনার প্রশ্ন ০২-এ।

৫ · Privacy — পরে জোড়া নয়, নকশা থেকেই

Privacy প্রায়ই release-এর আগের দিন মনে পড়ে, যখন অপ্রয়োজনীয় data আর log-এ ফোন নম্বর আগেই জমে গেছে। Privacy by design ধারণাটি এর উল্টো: privacy-কে শুরু থেকেই requirement আর নকশার অংশ ধরা। ধারণাটি পরিচিত Ann Cavoukian-এর নামে — কানাডার Ontario প্রদেশের Information and Privacy Commissioner হিসেবে তিনি ১৯৯০-এর দশক থেকে এটি প্রচার করেন, পরে সাতটি মূলনীতিতে সাজান (নিচে নিজের ভাষায়):

নীতিমানেSoftware-এ উদাহরণ
১ · Proactive, not reactiveঘটনার পরে প্রতিকার নয়, আগে প্রতিরোধনকশার সময়েই privacy ঝুঁকির তালিকা
২ · Privacy as the defaultব্যবহারকারী কিছু না করলেও সবচেয়ে সুরক্ষিত অবস্থাঅবস্থান শেয়ার, বিজ্ঞাপনী email — default বন্ধ
৩ · Embedded into designআলাদা add-on নয়, architecture-এর অংশPersonal data আলাদা service-এ, কড়া প্রবেশাধিকার
৪ · Full functionality (positive-sum)Privacy বনাম feature — দুটোই সম্ভব, শূন্য-যোগ খেলা নয়নিখুঁত GPS-এর বদলে এলাকা-স্তরের অবস্থানেও feature চলে
৫ · End-to-end securityসংগ্রহ থেকে মোছা পর্যন্ত পুরো জীবনচক্রে সুরক্ষাEncryption, মেয়াদ শেষে নিশ্চিতভাবে মোছা
৬ · Visibility and transparencyযা করা হয়, তা খোলাখুলি আর যাচাইযোগ্যসহজ ভাষায় “কী data, কেন, কতদিন” পাতা
৭ · Respect for user privacyব্যবহারকারী-কেন্দ্রিক: পছন্দ, নিয়ন্ত্রণ, সহজ বিকল্পSettings-এ এক জায়গায় সব অনুমতি, account মোছার সহজ পথ

GDPR — বহুল-উল্লেখিত একটি আদর্শ

ইউরোপীয় ইউনিয়নের GDPR (General Data Protection Regulation) ২০১৬ সালে গৃহীত হয়, প্রযোজ্য হয় ২০১৮ সালের ২৫ মে থেকে। কিছু ক্ষেত্রে এটি ইউরোপের বাইরের প্রতিষ্ঠানেও প্রযোজ্য। এর Article 5-এর মূলনীতিগুলো privacy-র একটি ভালো চেকলিস্ট:

  • বৈধতা, ন্যায্যতা ও স্বচ্ছতা — বৈধ ভিত্তি থাকা, ব্যবহারকারীকে ঠকানো নয়, খোলাখুলি জানানো।
  • Purpose limitation — নির্দিষ্ট, ঘোষিত উদ্দেশ্যে সংগ্রহ; পরে বেমানান কাজে ব্যবহার নয়।
  • Data minimisation — উদ্দেশ্যের জন্য যতটুকু দরকার, শুধু ততটুকু।
  • নির্ভুলতা, সংরক্ষণের সীমা (দরকারের বেশি দিন নয়), অখণ্ডতা ও গোপনীয়তা (নিরাপত্তা), আর জবাবদিহি — নিয়ম মানছেন, তা দেখাতে পারা।

Article 25 সরাসরি “data protection by design and by default” দাবি করে। সম্মতি (consent) GDPR-এ processing-এর ছয়টি বৈধ ভিত্তির মাত্র একটি (অন্যগুলো চুক্তি, আইনি বাধ্যবাধকতা, জীবন রক্ষা, জনস্বার্থের কাজ আর বৈধ স্বার্থ)। সম্মতি নিলে তা হতে হবে স্বাধীন, নির্দিষ্ট, জেনে-বুঝে আর সক্রিয় পদক্ষেপে — আগে থেকে টিক দেওয়া বাক্স বা নীরবতা সম্মতি নয়, আর প্রত্যাহার দেওয়ার মতোই সহজ। ঝুঁকিপূর্ণ processing-এর আগে কিছু ক্ষেত্রে লিখিত মূল্যায়ন — DPIA — বাধ্যতামূলক।

বাংলাদেশে: ব্যক্তিগত তথ্য সুরক্ষা নিয়ে আলাদা আইনের খসড়া কয়েক বছর ধরে আলোচনায় আছে, আর তার অবস্থা ও রূপ একাধিকবার বদলেছে। কোন আইন বা অধ্যাদেশ এখন কার্যকর, কোন শর্ত প্রযোজ্য — তা নিজে সর্বশেষ সরকারি উৎস থেকে যাচাই করুন; এখানে নির্দিষ্ট ধারা বলছি না। আইন যা-ই বলুক, ওপরের মূলনীতিগুলো ভালো প্রকৌশল-চর্চা হিসেবে সবখানেই কাজে লাগে।

Data minimisation — একটি form-এর নিরীক্ষা

একটি কাল্পনিক বাসের টিকিট কাটার form-এ দশটি field আছে। নিচের প্রোগ্রাম প্রতিটি field-কে ঘোষিত উদ্দেশ্যের সাথে মেলায়: কোনো উদ্দেশ্যে না লাগলে “সরান”, শুধু ঐচ্ছিক উদ্দেশ্যে লাগলে “ঐচ্ছিক, সম্মতি নিয়ে”।

// Data-minimisation audit for a FICTIONAL bus-ticket booking form.
const fields = ["name", "phone", "email", "nid", "date_of_birth",
  "father_name", "religion", "seat_pref", "home_address", "referral_code"];

// Each declared purpose lists the fields it truly needs.
const purposes = [
  { id: "ticket",   needs: ["name", "phone", "seat_pref"], optional: false },
  { id: "sms",      needs: ["phone"],                      optional: false },
  { id: "receipt",  needs: ["email"],                      optional: true },
  { id: "referral", needs: ["referral_code", "phone"],     optional: true },
];

function audit(fields, purposes) {
  const rows = [];
  for (const f of fields) {
    const users = purposes.filter(p => p.needs.includes(f));
    let verdict;
    if (users.length === 0) verdict = "REMOVE (no purpose)";
    else if (users.every(p => p.optional)) verdict = "optional + ask consent";
    else verdict = "keep";
    rows.push([f, users.map(p => p.id).join(",") || "-", verdict]);
  }
  return rows;
}

const rows = audit(fields, purposes);
for (const [f, used, v] of rows)
  console.log(f.padEnd(14), used.padEnd(20), v);
const removed = rows.filter(r => r[2].startsWith("REMOVE")).length;
console.log(`collect ${fields.length - removed} of ${fields.length} fields`);

আউটপুট:

name           ticket               keep
phone          ticket,sms,referral  keep
email          receipt              optional + ask consent
nid            -                    REMOVE (no purpose)
date_of_birth  -                    REMOVE (no purpose)
father_name    -                    REMOVE (no purpose)
religion       -                    REMOVE (no purpose)
seat_pref      ticket               keep
home_address   -                    REMOVE (no purpose)
referral_code  referral             optional + ask consent
collect 5 of 10 fields

পাঁচটি field-এর কোনো ঘোষিত উদ্দেশ্য নেই — NID, জন্মতারিখ, বাবার নাম, ধর্ম, বাড়ির ঠিকানা। “হয়তো কাজে লাগবে” ভেবে নেওয়া এই data-ই ফাঁস হলে সবচেয়ে বেশি ক্ষতি করে। Email আর referral code শুধু ঐচ্ছিক উদ্দেশ্যে লাগে, তাই আলাদা, টিক না দেওয়া বাক্সে সম্মতি নিয়ে। টিকিটের জন্য নেওয়া phone পরে বিজ্ঞাপনী SMS-এ ব্যবহার করলে purpose limitation ভাঙে। খেলনার সীমা: প্রোগ্রাম শুধু ঘোষণা মেলায়; কোনো উদ্দেশ্যে সত্যিই কোন field লাগে (যেমন আইনিভাবে পরিচয়পত্র লাগে কি না), সেই সিদ্ধান্ত মানুষের review-তে।

এবার একটি নতুন feature-এ privacy by design ধাপে ধাপে প্রয়োগ করুন।

ধাপ ১ · প্রথম খসড়াকাল্পনিক রক্তদাতা app
সংগ্রহ  : নাম, ফোন, রক্তের গ্রুপ, সবসময় GPS,
          শেষ রক্তদানের তারিখ, রোগের ইতিহাস
দেখানো  : সব কাছের দাতার নাম, ফোন, দূরত্ব
রাখা    : চিরকাল; অবস্থান শেয়ার default চালু
ধাপ ২ · উদ্দেশ্য লেখাpurpose
P1: জরুরি অবস্থায় কাছের উপযুক্ত দাতাকে অনুরোধ
P2: দাতা আবার রক্ত দিতে পারবেন কি না দেখা
"রোগের ইতিহাস" → কোনো উদ্দেশ্যে লাগে না
ধাপ ৩ · কম dataminimisation
সবসময় GPS  → দাতার নিজের বাছাই করা এলাকা (থানা/ওয়ার্ড)
রোগের ইতিহাস → সংগ্রহ বন্ধ
শেষ রক্তদান  → তারিখ নয়, "আবার দিতে পারবেন: হ্যাঁ/না"
ফোন নম্বর    → রোগীর পরিবারকে সরাসরি দেখানো নয়
ধাপ ৪ · default আর সম্মতিprivacy as default
নতুন account : "দাতা হিসেবে দৃশ্যমান" = বন্ধ
অনুরোধ      : দাতাকে notification; "রাজি" চাপলে তবেই যোগাযোগ
বিরতি       : এক চাপে "৩০ দিন দেখাবেন না"
ধাপ ৫ · সুরক্ষা আর মেয়াদend-to-end
ফোন নম্বর  : encrypted; শুধু notification service পড়তে পারে
log        : ফোন বা নাম নয়, শুধু ছদ্ম-ID
অনুরোধের ইতিহাস : ৯০ দিন পরে মোছা (কাল্পনিক নিয়ম)
Account মুছলে : সব personal data মোছা, backup-এ মেয়াদসহ
ধাপ ৬ · স্বচ্ছতা আর নিয়ন্ত্রণuser-centric
"আপনার data" পাতা: কী, কেন, কতদিন — সহজ বাংলায়
Settings-এ এক জায়গায় সব; "সব data মুছুন" বোতাম
ফল: feature একই, ঝুঁকি অনেক কম (positive-sum)
  1. প্রথম খসড়া। যত বেশি data, তত “ভালো” — অথচ সবসময়ের GPS আর রোগের ইতিহাস অত্যন্ত সংবেদনশীল, আর খোলা নাম-ফোনে দাতারা হয়রানির শিকার হতে পারেন।
  2. উদ্দেশ্য আগে। প্রতিটি data-র পাশে উদ্দেশ্য লিখলেই অপ্রয়োজনীয়গুলো ধরা পড়ে — purpose limitation আর Cavoukian-এর প্রথম নীতি, আগে থেকে প্রতিরোধ।
  3. কম data, একই কাজ। কাছের দাতা খুঁজতে এলাকাই যথেষ্ট; তারিখের বদলে হ্যাঁ/না। যা সংগ্রহই হয় না, তা ফাঁসও হয় না।
  4. Default আর সম্মতি। দৃশ্যমানতা শুরুতে বন্ধ (privacy as the default); যোগাযোগ শুধু দাতার সক্রিয় “রাজি”-তে।
  5. সুরক্ষা আর মেয়াদ। Encryption, least privilege (শুধু যে service-এর দরকার), log-এ ছদ্ম-ID, আর মেয়াদ শেষে মোছা — সংগ্রহ থেকে মোছা পর্যন্ত পুরো জীবনচক্র।
  6. স্বচ্ছতা আর নিয়ন্ত্রণ। সহজ ভাষার ব্যাখ্যা আর এক জায়গায় সব নিয়ন্ত্রণ। শেষ লাইনটিই মূল কথা: privacy আর feature একে অপরের শত্রু নয়।

৬ · নিরাপত্তা আর accessibility — দুটিই নৈতিক দায়িত্ব

নিরাপত্তা: অবহেলাও এক ধরনের ক্ষতি

Data breach-এ সবচেয়ে বেশি ক্ষতিগ্রস্ত হন নির্দোষ ব্যবহারকারীরা; তাই ACM-এর ২০১৮-র Code নিরাপত্তাকে পেশাগত দায়িত্ব বলে:

  • জানা ঝুঁকি উপেক্ষা না করা: পুরোনো dependency বা খোলা admin পাতা জানা থাকলে লিখে রাখা আর ঠিক করার পরিকল্পনা।
  • Secret কোডে নয়: পর্ব ৫৭-এ (Git-এ নিরাপত্তা) ফাঁস হওয়া secret সামলানো দেখেছেন; নকশার দিক System Design কোর্সের নকশায় নিরাপত্তা পর্বে।
  • Log-এ personal data নয়: পুরো request log করলে OTP বা NID-ও চলে যায়।
  • দায়িত্বশীল প্রকাশ: অন্যের system-এ দুর্বলতা চোখে পড়লে মালিককে গোপনে জানানো আর ঠিক করার সময় দেওয়া (coordinated vulnerability disclosure). অনুমতি ছাড়া অন্যের system পরীক্ষা করা বহু দেশে অপরাধ — নিজের বা অনুমতি পাওয়া system-এই security testing.

Accessibility: কাউকে বাদ না দেওয়া

পর্ব ৩-এ (Software quality) accessibility-কে quality-র অংশ হিসেবে দেখেছেন, আর ওয়েবের মানদণ্ড WCAG-এর কথা — লেখার সময়ে সর্বশেষ সংস্করণ WCAG 2.2, ২০২৩ সালে W3C-র recommendation (সর্বশেষ অবস্থা W3C-তে দেখুন)। নৈতিক দিকটি সরল: যে app একজন দৃষ্টিপ্রতিবন্ধী মানুষ screen reader দিয়ে চালাতে পারেন না, সেটি তাঁর জন্য একটি বন্ধ দরজা।

বাংলাদেশের প্রেক্ষাপটে “সবার জন্য” মানে কম দামের ফোন আর ধীর network-এও চলা, বাংলা screen reader-এ ঠিকমতো পড়া, বয়স্কদের জন্য সহজ ভাষা আর বড় বোতাম. বাস্তব HTML-এর জন্য HTML & CSS কোর্সের অ্যাক্সেসিবিলিটি পর্বে আছে। Accessibility-কে acceptance criteria আর CI-তে রাখুন।

৭ · Dark pattern — ঠকানো নকশা চেনা

২০১০ সালে UX বিশেষজ্ঞ Harry Brignull এমন UI নকশার জন্য “dark pattern” শব্দটি চালু করেন, যা ব্যবহারকারীকে ঠকিয়ে বা চাপ দিয়ে তাঁর নিজের ইচ্ছার বিরুদ্ধে কিছু করায়। পরে তিনি “deceptive design” নামটি বেশি ব্যবহার করেন (আমাদের জানামতে)। নিয়ন্ত্রকেরাও এ নিয়ে কাজ করছেন — যেমন যুক্তরাষ্ট্রের FTC-র ২০২২ সালের প্রতিবেদন, ইউরোপীয় ইউনিয়নের Digital Services Act-এর কিছু নিষেধাজ্ঞা; খুঁটিনাটি দেশভেদে আলাদা।

ঈদের আগে বাসের টিকিটের ভিড়ের কথা ভাবুন। কাউন্টারে শুনলেন “৯৫০ টাকা”, টাকা দেওয়ার মুহূর্তে যোগ হলো “সার্ভিস চার্জ” — মোট ১০৯০। পেছনে শত মানুষ, তাই রাজি হলেন। সিদ্ধান্তটি ঠকিয়ে নেওয়া হলো; অনলাইনে একই কৌশলের নাম “hidden costs”.

ধরনকেমন দেখায় (কাল্পনিক)সৎ বিকল্প
আগে থেকে টিক দেওয়া সম্মতি (preselection)“☑ বিজ্ঞাপনী SMS পেতে চাই” আগেই টিক দেওয়াখালি বাক্স, ব্যবহারকারী নিজে টিক দেবেন
Confirmshamingনা-বোতাম: “না, আমি টাকা বাঁচাতে চাই না”নিরপেক্ষ: “না, ধন্যবাদ”
লুকানো খরচ (hidden costs)শেষ ধাপে নতুন fee যোগপ্রথম পাতাতেই মোট মূল্য
বাতিল করা কঠিন (roach motel)Subscription এক ক্লিকে, বাতিল সাত ধাপে বা শুধু ফোনেযে পথে ঢোকা, সেই পথেই সমান সহজে বের হওয়া
মিথ্যা তাড়া (false urgency)প্রতিবার “আর মাত্র ২টি বাকি!”শুধু সত্যিকার মজুত দেখানো

Dark pattern প্রায়ই শুরু হয় একটি metric থেকে — “sign-up rate বাড়ানো” — আর A/B test-এ হার বাড়লে সেটাই রয়ে যায়। Engineer হিসেবে কাজ: ticket-এ এমন কিছু এলে প্রশ্ন তোলা, আর review-তে একটি চেকলিস্ট রাখা। নিচে একটি খেলনা চেকলিস্ট-scorer:

// Toy dark-pattern checklist scorer. All three UI flows are FICTIONAL.
const flows = [
  { name: "shopA-checkout", newsletterPreChecked: true,
    declineText: "No thanks, I don't like saving money",
    shownPrice: 950, finalPrice: 1090, feesShownEarly: false,
    signupSteps: 2, cancelSteps: 7 },
  { name: "shopB-checkout", newsletterPreChecked: false,
    declineText: "No thanks", shownPrice: 950, finalPrice: 1000,
    feesShownEarly: true, signupSteps: 2, cancelSteps: 2 },
  { name: "appC-trial", newsletterPreChecked: false,
    declineText: "Maybe later", shownPrice: 0, finalPrice: 0,
    feesShownEarly: true, signupSteps: 1, cancelSteps: 5 },
];
const SHAME = /(don't|do not) (like|want|care)|i prefer paying more|i'm not smart/i;

const checks = [
  ["pre-checked consent", f => f.newsletterPreChecked],
  ["confirmshaming",      f => SHAME.test(f.declineText)],
  ["hidden costs",        f => f.finalPrice > f.shownPrice && !f.feesShownEarly],
  ["hard to cancel",      f => f.cancelSteps > 2 * f.signupSteps],
];

for (const f of flows) {
  const hits = checks.filter(([, test]) => test(f)).map(([label]) => label);
  const level = hits.length === 0 ? "clean" : hits.length === 1 ? "review" : "redesign";
  const why = hits.length ? " : " + hits.join("; ") : "";
  console.log(`${f.name.padEnd(15)} ${hits.length}/${checks.length} ${level}${why}`);
}

আউটপুট:

shopA-checkout  4/4 redesign : pre-checked consent; confirmshaming; hidden costs; hard to cancel
shopB-checkout  0/4 clean
appC-trial      1/4 review : hard to cancel

shopA চারটি পরীক্ষাতেই ধরা: টিক দেওয়া newsletter, লজ্জা-দেওয়া না-বোতাম, ৯৫০ থেকে ১০৯০ অথচ fee আগে দেখানো হয়নি, আর বাতিলে ৭ ধাপ (২ × ২ = ৪-এর বেশি)। shopB-তে দামও বেড়েছে (৯৫০ → ১০০০), কিন্তু fee আগেই দেখানো — তাই লুকানো খরচ নয়। appC-তে sign-up ১ ধাপ, বাতিল ৫ ধাপ: ৫ > ২, তাই “review”. খেলনার সীমা: regex শুধু কয়েকটি ইংরেজি বাক্যাংশ চেনে — বাংলায় বা একটু ভিন্ন ভাষায় লেখা confirmshaming ফসকে যাবে (false negative), আর “২ গুণের বেশি ধাপ” একটি মনগড়া সীমা। আসল কাজে এমন checker একটি সহায়ক, শেষ সিদ্ধান্ত মানুষের review-তে।

৮ · Algorithmic bias আর ন্যায্যতা — ফল মেপে দেখা

Algorithmic bias মানে software-এর সিদ্ধান্ত নিয়মিতভাবে কোনো গোষ্ঠীর প্রতি অন্যায্য ফল দেওয়া। এর জন্য machine learning লাগে না; সাধারণ নিয়মভিত্তিক কোডেও হয়। কয়েকটি সাধারণ উৎস:

  • পুরোনো data-র পক্ষপাত: অতীতের সিদ্ধান্ত পক্ষপাতদুষ্ট হলে তা থেকে বানানো নিয়মও তা-ই করে।
  • প্রতিনিধি নয় এমন data: শুধু শহরের ব্যবহারকারীদের নিয়ে পরীক্ষা (sampling bias).
  • Proxy: ঠিকানা বা স্কুলের নাম লিঙ্গ, ধর্ম বা শ্রেণির প্রতিনিধি হয়ে যেতে পারে।
  • ভুল লক্ষ্য: “app-এ কত সময়” মাপলে আসলে আসক্তির জন্য optimize করা হয়।

নিয়ম সবার জন্য একই হলেও ফল যদি কোনো গোষ্ঠীর ওপর অসমানুপাতিক খারাপ পড়ে, তাকে বলে disparate impact. এটি মাপার সবচেয়ে সহজ উপায় প্রতিটি গোষ্ঠীর selection rate তুলনা করা:

selection rate = বাছাই ÷ মোট আবেদন  ·  impact ratio = গোষ্ঠীর হার ÷ সবচেয়ে বেশি হার

যুক্তরাষ্ট্রের ১৯৭৮ সালের Uniform Guidelines on Employee Selection Procedures-এ একটি মোটা দাগের নিয়ম আছে — four-fifths rule: কোনো গোষ্ঠীর হার সবচেয়ে বেশি হারের ৪/৫ (৮০%)-এর কম হলে সাধারণত তাকে বিরূপ প্রভাবের প্রমাণ হিসেবে দেখা হয়। মনে রাখুন, এটি একটি দেশের নিয়োগ-প্রেক্ষাপট থেকে আসা heuristic — প্রমাণ নয়, সব দেশের আইন নয়; ছোট সংখ্যায় পরিসংখ্যানগত তাৎপর্যও আলাদা করে দেখতে হয়। নিচে একটি কাল্পনিক CV-বাছাই tool-এর ফল:

from fractions import Fraction
# FICTIONAL applicants screened by a CV-ranking tool.
# One letter per applicant: Y = shortlisted, N = rejected.
APPLICANTS = {
    "city":          "YNYYNYNNYN" "YNNYYNNYNY" "YNYNYYNNYN" "NYNYNNYYNY",
    "district_town": "NYNNYNYNNY" "NNYNYNYYNN" "YNNYNNYNNY",
    "rural":         "NNYNNNYNNN" "YNNNNYNNNY" "NYNYNNNYNY",
}

def selection_rates(table):
    rates = {}
    for group, marks in table.items():
        chosen = marks.count("Y")
        rates[group] = (chosen, len(marks), Fraction(chosen, len(marks)))
    return rates

def four_fifths(rates, threshold=Fraction(4, 5)):
    best = max(r for _, _, r in rates.values())
    report = []
    for group, (chosen, total, r) in rates.items():
        ratio = r / best
        flag = "CHECK" if ratio < threshold else "ok"
        report.append((group, chosen, total, float(r), float(ratio), flag))
    return report

print(f"{'group':14} sel/total  rate  ratio  4/5-rule")
for g, c, t, r, ratio, flag in four_fifths(selection_rates(APPLICANTS)):
    print(f"{g:14} {c:3}/{t:<5} {r:5.2f}  {ratio:5.2f}  {flag}")
print("ratio < 0.80 is only a warning sign, not proof of bias")

আউটপুট:

group          sel/total  rate  ratio  4/5-rule
city            20/40     0.50   1.00  ok
district_town   12/30     0.40   0.80  ok
rural            9/30     0.30   0.60  CHECK
ratio < 0.80 is only a warning sign, not proof of bias

শহরের হার সবচেয়ে বেশি, ২০/৪০ = ০.৫০, তাই সেটি তুলনার ভিত্তি (ratio ১.০০)। জেলা শহর: ১২/৩০ = ০.৪০, ratio ০.৪০ ÷ ০.৫০ = ঠিক ০.৮০ — নিয়ম “৪/৫-এর কম” বলে, তাই সীমার ওপরে, “ok”. গ্রাম: ৯/৩০ = ০.৩০, ratio ০.৬০ < ০.৮০ — “CHECK”. হিসাব Fraction দিয়ে, যাতে ঠিক সীমার মান দশমিকের গোলমালে ভুল দিকে না পড়ে। “CHECK” মানে tool অন্যায্য প্রমাণিত নয়; মানে কারণ খুঁজতে হবে — কোন বৈশিষ্ট্য বেশি ওজন পাচ্ছে, সেটি কাজের সাথে যুক্ত কি না, নাকি proxy. ৩০ জনের গোষ্ঠীতে কয়েকজনেই ratio অনেক নড়ে, তাই পরিসংখ্যানগত পরীক্ষাও লাগে।

ন্যায্যতার একাধিক গাণিতিক সংজ্ঞা আছে — একই হারে বাছাই, একই ভুলের হার, একই নির্ভুলতা — আর গবেষণায় দেখানো হয়েছে, গোষ্ঠীভেদে মূল হার আলাদা হলে সবগুলো একসাথে পূরণ করা সাধারণত সম্ভব নয় (ভাবনার প্রশ্ন ০৩)। তাই সংজ্ঞা বাছাই নিজেই একটি নৈতিক সিদ্ধান্ত, যা লিখে রাখা দরকার। Machine learning-এর গভীর পদ্ধতি এই কোর্সের বাইরে।

পরিবেশের ওপর software-এর প্রভাব — সংক্ষেপে

Data center, network আর কোটি ফোন বিদ্যুৎ খরচ করে। Green software-এর চর্চা: অপ্রয়োজনীয় কাজ না করা, ছবি ও video ছোট রাখা, পুরোনো ফোনেও চলে এমন app. Green Software Foundation (২০২১)-এর মতো সংগঠন মাপার পদ্ধতি প্রস্তাব করছে; অনুমান পদ্ধতিভেদে আলাদা বলে এখানে সংখ্যা নেই।

৯ · Intellectual property — কার কোড, কোন শর্তে

Intellectual property (মেধাস্বত্ব) মানে সৃষ্টি আর উদ্ভাবনের ওপর আইনি অধিকার; আইন দেশভেদে আলাদা (বাংলাদেশের কপিরাইট আইনের সর্বশেষ রূপ যাচাই করুন)।

CopyrightPatentTrade secret
কী রক্ষা করেপ্রকাশরূপ: source code, নথি, UI-র ছবিনতুন উদ্ভাবন বা পদ্ধতিগোপন ব্যবসায়িক তথ্য
কীভাবে মেলেঅধিকাংশ দেশে সৃষ্টির সাথে সাথেই (Berne Convention-এর নীতি)আবেদন, পরীক্ষা, অনুমোদনগোপন রাখার যুক্তিসংগত ব্যবস্থা নিলে
Software-একোড কপি নয়, ধারণা নিজে লেখা যায়দেশভেদে খুব আলাদাগোপন algorithm, গ্রাহক-তালিকা, ভেতরের tool
  • আগের চাকরির কোড: আগের প্রতিষ্ঠানের কোড বা গ্রাহক-তালিকা নতুন জায়গায় নেওয়া যায় না — সাধারণত চুক্তি আর trade secret দুইয়েরই লঙ্ঘন; নেওয়া যায় শুধু অভিজ্ঞতা আর দক্ষতা।
  • Internet থেকে কোড: প্রতিটি open source কোড একটি software license-এর শর্তে আসে; licence-এর ধরন পর্ব ৬৩-এ (দলগত কাজ আর open source). নৈতিক মূল কথা: শর্ত মানা আর কৃতিত্ব দেওয়া।

১০ · AI-এর যুগে — AI-সহায়তায় কোড লেখার দায়িত্ব

AI assistant এখন কোড, test আর commit বার্তা লেখে, কিন্তু SE Code-এর কোনো নীতিই দায় tool-এর ঘাড়ে দেয় না। ছয়টি দায়িত্ব:

  1. যা commit করেন, তার মালিক আপনি: Commit-এ আপনার নাম (পর্ব ৮), review-তে আপনার সম্মতি।
  2. সঠিকতা যাচাই: AI আত্মবিশ্বাসের সাথে না-থাকা function বা বানানো flag দিতে পারে (hallucination). নিজের edge case-সহ test চালান; AI-র test আসলে কিছু যাচাই করে কি না দেখতে পর্ব ৫০-এর mutation testing.
  3. Prompt-এ secret আর personal data নয়: Prompt অন্য প্রতিষ্ঠানের server-এ যায়, আর সেখানে কীভাবে রাখা হয় তা tool ও চুক্তিভেদে আলাদা।
  4. Licence আর copyright-এর অনিশ্চয়তা: AI-র কোড কখনো licence-ওয়ালা কোডের প্রায় হুবহু কপি হতে পারে; আর AI-তৈরি অংশের copyright কার বা আদৌ আছে কি না, তা নিয়ে দেশভেদে আইনি অবস্থান এখনো গড়ে উঠছে (যেমন যুক্তরাষ্ট্রের Copyright Office মানব-লেখকত্বের ওপর জোর দিয়ে নির্দেশনা দিয়েছে)। প্রতিষ্ঠানের নীতি মানুন।
  5. দলের নিয়ম মেনে প্রকাশ: কোথাও PR-এ জানাতে হয়, কোথাও commit trailer-এ, কোথাও কিছু অবদানে AI নিষেধ। নিয়ম না থাকলে জিজ্ঞেস করুন।
  6. অতিনির্ভরতা: সব কাজ AI-কে দিলে নিজের বোঝাপড়া দুর্বল হয়। Self নীতি আজীবন শেখার কথা বলে — AI সহকারী, বিকল্প মস্তিষ্ক নয়।

Prompt পাঠানোর আগে — একটি খেলনা PII redactor

একটি bug report AI-কে দেখাতে চান, কিন্তু তাতে গ্রাহকের তথ্য আছে। নিচের প্রোগ্রাম email, বাংলাদেশি ধাঁচের mobile নম্বর আর NID-কে চিহ্ন দিয়ে বদলায় (redaction). সব মান বানানো।

import re
# Toy PII redactor run BEFORE text is pasted into an AI tool.
# Every email, phone and NID below is FAKE, made up for this lesson.
PROMPT = """Bug: payment fails for customer Karim (karim.fake@example.com),
phone 01700-000001, NID 1234567890123. Retry from +8801800000002 also fails.
Order id 2026103012345 and error code 500 look normal.
Admin contact: support@example.org"""

RULES = [
    ("EMAIL", re.compile(r"\b[\w.+-]+@[\w-]+\.[\w.]+\b")),
    ("PHONE", re.compile(r"(?:\+?88)?01[3-9]\d{2}-?\d{6}\b")),
    ("NID",   re.compile(r"(?<=NID )\d{10}(?:\d{3}|\d{7})?\b")),
]

def redact(text):
    found = []
    for label, rx in RULES:
        def sub(m, label=label):
            found.append((label, m.group()))
            return f"[{label}]"
        text = rx.sub(sub, text)
    return text, found

clean, found = redact(PROMPT)
print(clean)
print("---")
for label, value in found:
    print(f"{label:5} removed ({len(value)} chars)")
print("names like 'Karim' are NOT caught: review by hand")

আউটপুট:

Bug: payment fails for customer Karim ([EMAIL]),
phone [PHONE], NID [NID]. Retry from [PHONE] also fails.
Order id 2026103012345 and error code 500 look normal.
Admin contact: [EMAIL]
---
EMAIL removed (22 chars)
EMAIL removed (19 chars)
PHONE removed (12 chars)
PHONE removed (14 chars)
NID   removed (13 chars)
names like 'Karim' are NOT caught: review by hand

দুটি email, দুটি ফোন (একটিতে হাইফেন, একটিতে +88) আর NID সরেছে; শেষের সারাংশে শুধু দৈর্ঘ্য ছাপা হয়, আসল মান নয় — redaction-এর log-এও data ফাঁস করা চলে না। লক্ষ্য করুন, ১৩ অঙ্কের order id সরেনি: NID-নিয়মটি শুধু “NID ” শব্দের পরের সংখ্যা ধরে ((?<=NID )), কারণ বাংলাদেশের NID ১০, ১৩ বা ১৭ অঙ্কের হতে পারে, আর সব ১৩ অঙ্কের সংখ্যা মুছলে order id-র মতো দরকারি তথ্যও হারাত (false positive). উল্টো দিকে, “NID” লেখা না থাকলে আসল NID ফসকে যাবে, আর “Karim” নামটি ধরা পড়েনি। শিক্ষা: redaction প্রথম ছাঁকনি মাত্র; পাঠানোর আগে নিজে পড়ে দেখা, বা আরও ভালো, বানানো উদাহরণ দিয়ে সমস্যা বোঝানো।

AI-র লেখা কোড commit করার আগে — ধাপে ধাপে

ধাপ ১ · বুঝে পড়াgit diff --staged
+ def discount(total, code):
+     if code == "EID50":
+         return total * 0.5
+     return total
প্রশ্ন: total ঋণাত্মক হলে? code ছোট হাতে "eid50" হলে?
নিয়ম: প্রতিটি লাইন নিজে ব্যাখ্যা করতে না পারলে commit নয়
ধাপ ২ · testনিজের ভাবা edge case
AI-র test   : assert discount(100, "EID50") == 50
যোগ করা test: 0, ঋণাত্মক, অজানা ও ছোট হাতের code, rounding
ফল          : rounding test ব্যর্থ → কোড ঠিক করা
ধাপ ৩ · নিরাপত্তা ও datasecret, PII, input
☐ কোডে hard-coded key বা password নেই   (পর্ব ৫৭)
☐ log-এ গ্রাহকের ফোন বা NID ছাপা হয় না
☐ বাইরের input যাচাই হয়
☐ নতুন dependency? → নাম সত্যিই আছে কি না, licence, রক্ষণাবেক্ষণ
ধাপ ৪ · উৎস আর licenceprovenance
বড়, অস্বাভাবিক নিখুঁত অংশ? → হুবহু কপি কি না খোঁজা
কপি মিললে → licence মানা যায়? না হলে নিজে লেখা
প্রতিষ্ঠানের AI-নীতি মেনে tool বাছাই
ধাপ ৫ · প্রকাশদলের নিয়ম অনুযায়ী
commit বার্তার উদাহরণ (trailer-এর নাম দলভেদে আলাদা):

fix(cart): round Eid discount to whole taka

Handle lowercase codes and non-positive totals.
Assisted-by: AI code assistant (reviewed and tested)
ধাপ ৬ · দায় নেওয়াauthor = আপনি
commit-এ author: আপনার নাম
পরে bug এলে: "আমি merge করেছি, আমি দেখছি"
"AI লিখেছিল" কোনো ব্যাখ্যা নয়
  1. বুঝে পড়া। কোডটি কাজ করে মনে হচ্ছে, কিন্তু দুটি প্রশ্নের উত্তর নেই। যে লাইন নিজে ব্যাখ্যা করতে পারেন না, তা commit করবেন না।
  2. Test. AI-র test শুধু সুখের পথ দেখে। নিজের edge case যোগ করতেই একটি rounding ভুল ধরা পড়ল (টাকার হিসাবে float-এর বিপদ)।
  3. নিরাপত্তা ও data. চারটি দ্রুত প্রশ্ন। AI কখনো না-থাকা package-এর নাম দেয়, আর কেউ পরে সেই নামে ক্ষতিকর package বানাতে পারে — নাম, উৎস আর licence যাচাই করুন।
  4. উৎস আর licence. বড়, হুবহু মনে হওয়া অংশে উৎস খোঁজা দায়িত্বশীল অভ্যাস; কোন tool কোথায় চলবে, তা প্রতিষ্ঠানের নীতির বিষয়।
  5. প্রকাশ। Assisted-by: একটি উদাহরণ trailer, সর্বজনীন মানদণ্ড নয়; দল অন্য নাম বা PR-এর বর্ণনা চাইতে পারে। মূল কথা: reviewer যেন জানেন।
  6. দায় নেওয়া। Author হিসেবে আপনার নাম (পর্ব ৮), দায়ও আপনার — হিসাবরক্ষক calculator-এর ভুলের দায় calculator-কে দিতে পারেন না।

নৈতিকতার প্রশ্নে AI-র চেনা ভুল

AI-এর ভুলকীভাবে ধরবেন
Code বা আইনের বানানো ধারা-নম্বর (“ACM Code ৩.১৪ বলে…”) বা না-থাকা মামলা উদ্ধৃত করেমূল লেখা নিজে খুলে মিলিয়ে নিন। ২০২৩ সালে যুক্তরাষ্ট্রে একটি মামলায় আইনজীবীরা AI-র বানানো মামলার উদ্ধৃতি জমা দিয়ে আদালতের শাস্তি পেয়েছিলেন বলে ব্যাপকভাবে প্রকাশিত হয়েছে।
GDPR বা বাংলাদেশের আইন নিয়ে নিশ্চিত ভঙ্গিতে পুরোনো বা ভুল তথ্যসরকারি উৎস আর তারিখ; আইনি সিদ্ধান্তে আইনজীবী
Conversion বাড়াতে dark pattern বা “আরও data নিন” পরামর্শঅংশ ৫-এর নিরীক্ষা আর অংশ ৭-এর চেকলিস্ট
সতর্কতা ছাড়া git push --force বা reset --hard দিয়ে “প্রমাণ মুছে ফেলার” পথ দেখায়ভুল লুকানো নয়, প্রকাশ আর সংশোধন; history বদলাতে হলে আগে throwaway clone আর দলকে জানানো

নৈতিক দ্বিধায় AI-কে সিদ্ধান্তদাতা নয়, চিন্তার সঙ্গী হিসেবে ব্যবহার করুন। নিচের prompt-এ কোনো আসল নাম বা data নেই, আর উৎস-যাচাই চাওয়া হয়েছে:

আমি একজন software engineer. একটি কাল্পনিক পরিস্থিতিতে নৈতিক দ্বিধা নিয়ে ভাবতে সাহায্য চাই। কোনো আসল নাম, প্রতিষ্ঠান বা ব্যক্তিগত তথ্য দিচ্ছি না। পরিস্থিতি: [সংক্ষেপে লেখো — কী feature, কী সমস্যা, কে চাপ দিচ্ছেন] আমার জানা তথ্য: [test-এর ফল, issue, সংখ্যা] আমার অনুমান: [আলাদা করে লেখো] ১. সব stakeholder-এর তালিকা দাও, বিশেষ করে যাঁরা আলোচনায় নেই। ২. অন্তত তিনটি বিকল্প দাও, প্রতিটির পরিণতি আর ক্ষতি ফেরানো যায় কি না। ৩. ACM/IEEE-CS Software Engineering Code-এর কোন নীতি প্রাসঙ্গিক বলো। কোনো ধারা-নম্বর বললে লিখে দাও যে মূল লেখায় মিলিয়ে নিতে হবে; নিশ্চিত না হলে ধারা-নম্বর বানাবে না। ৪. কোন অংশে আইনি পরামর্শ দরকার, তা আলাদা করে বলো — আইনি সিদ্ধান্ত দেবে না।

AI ব্যবহারের আগে-পরে — চেকলিস্ট

পরীক্ষা ও ইন্টারভিউতে:

  • SE Code-এর আটটি নীতি কী কী? Public, Client and Employer, Product, Judgment, Management, Profession, Colleagues, Self — জনস্বার্থ সবার আগে।
  • Data minimisation আর purpose limitation-এর পার্থক্য? প্রথমটি কতটুকু data নেবেন, দ্বিতীয়টি নেওয়া data কোন কাজে ব্যবহার করবেন।
  • গোষ্ঠী A-র হার ০.৬০, B-র ০.৪৫ — four-fifths rule কী বলে? ০.৪৫ ÷ ০.৬০ = ০.৭৫ < ০.৮০, সতর্কসংকেত; আরও বিশ্লেষণ দরকার।
  • Manager জানা bug-সহ ship করতে বললে কী করবেন? তথ্য লিখিতভাবে জানানো, নিরাপদ বিকল্প প্রস্তাব, সিদ্ধান্ত নথিভুক্ত, প্রয়োজনে escalation — আচরণগত প্রশ্নে বাস্তব উদাহরণসহ বলুন।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন।

প্র ০১“আমি শুধু নির্দেশ মেনেছি” — একজন engineer-এর কাছে কি এই যুক্তি গ্রহণযোগ্য? Volkswagen-এর emission কেলেঙ্কারি আর Challenger দুর্ঘটনা কী শেখায়?

২০১৫ সালে যুক্তরাষ্ট্রের পরিবেশ সংস্থা EPA জানায়, Volkswagen-এর কিছু diesel গাড়ির software বুঝতে পারত গাড়িটি পরীক্ষাগারে emission test-এ আছে কি না, আর শুধু তখনই দূষণ-নিয়ন্ত্রণ পুরোপুরি চালু করত — রাস্তায় দূষণ অনেক বেশি হতো। প্রতিষ্ঠানটি পরে দোষ স্বীকার করে, আর বিপুল জরিমানা ও ক্ষতিপূরণ দেয়। প্রকাশিত আদালতের নথি অনুযায়ী একজন engineer দোষ স্বীকার করেন এবং ২০১৭ সালে কারাদণ্ড পান। Software ঠিক যা লেখা হয়েছিল তা-ই করেছে; সমস্যা ছিল উদ্দেশ্যে।

১৯৮৬ সালে Space Shuttle Challenger উৎক্ষেপণের আগের রাতে Morton Thiokol-এর engineer Roger Boisjoly ও সহকর্মীরা ঠান্ডা আবহাওয়ায় booster-এর O-ring নিয়ে উদ্বেগ জানিয়ে উৎক্ষেপণ পিছানোর পরামর্শ দেন। ব্যবস্থাপনার চাপে সেই সুপারিশ উল্টে যায়, উৎক্ষেপণ হয়, আর সাতজন নভোচারী মারা যান। পরে Rogers Commission-এর তদন্তে সিদ্ধান্ত-প্রক্রিয়ার দুর্বলতা স্পষ্টভাবে উঠে আসে। Boisjoly তদন্তে সাক্ষ্য দেন; প্রকাশিত বিবরণ অনুযায়ী এর জন্য তাঁকে পেশাগত মূল্য দিতে হয়েছিল।

দুই ঘটনা দুই দিক দেখায়। প্রথমটিতে “নির্দেশ মানা” মানুষ নিজেই আইনি দায়ে পড়েছেন — নির্দেশ দায় মোছে না। দ্বিতীয়টিতে engineer-রা সঠিক কথা বলেছিলেন, কিন্তু সিদ্ধান্ত-ব্যবস্থা তাঁদের কণ্ঠ চাপা দিয়েছিল। SE Code দুই দিকই ধরে: Judgment নীতি বলে চাপের মুখে বিচারের স্বাধীনতা রাখতে, আর Management নীতি বলে manager-দের এমন পরিবেশ বানাতে যেখানে উদ্বেগ শোনা হয়। একজন junior developer একা প্রতিষ্ঠান বদলাতে পারেন না, কিন্তু লিখিত উদ্বেগ, অনৈতিক কোড লিখতে অস্বীকার আর escalation তাঁর হাতে থাকে।

মূল উপলব্ধি: নির্দেশ দায় হস্তান্তর করে না; আর ভালো প্রতিষ্ঠান এমন ব্যবস্থা বানায় যাতে সঠিক কথা বলা মানুষকে একা লড়তে না হয়।

প্র ০২Software engineer-দের কি বাধ্যতামূলক লাইসেন্স থাকা উচিত, যেমন সিভিল engineer বা ডাক্তারের? পক্ষে-বিপক্ষে যুক্তি কী, আর ইতিহাস কী বলে?

পক্ষের যুক্তি সরল: ভবন বা সেতুর নকশায় সই করতে লাইসেন্স লাগে, কারণ ভুলে মানুষ মরতে পারে। আজ software চিকিৎসা-যন্ত্র, গাড়ি আর বিদ্যুৎ-ব্যবস্থা চালায় — তাহলে সেখানে একই মান কেন নয়? লাইসেন্সধারী engineer চাপের মুখে বলতে পারেন, “এটায় সই করলে আমার লাইসেন্স যাবে।”

ইতিহাস কিন্তু জটিল। ১৯৯৮ সালে Texas software engineering-কে লাইসেন্সের আওতায় আনে। প্রায় একই সময়ে ACM-এর একটি task force বিষয়টি বিবেচনা করে লাইসেন্সের বিপক্ষে অবস্থান নেয় — আমাদের জানামতে তাদের যুক্তি ছিল যে software engineering-এর জ্ঞানের ভিত্তি তখনো লাইসেন্সের পরীক্ষার মতো স্থির হয়নি, আর লাইসেন্স নিরাপত্তার মিথ্যা আশ্বাস দিতে পারে। IEEE Computer Society অন্য পথে হেঁটে SWEBOK (Software Engineering Body of Knowledge) তৈরিতে নেতৃত্ব দেয়, যা পেশার জ্ঞান-কাঠামো সাজানোর চেষ্টা। পরে NCEES ২০১৩ সালে software engineering-এর PE পরীক্ষা চালু করে, কিন্তু খুব কম মানুষ অংশ নেওয়ায় ২০১৯ সালে তা বন্ধ হয়।

বিপক্ষের যুক্তিগুলো হলো: software-এর পরিসর বিশাল — একটি খেলার app আর একটি pacemaker-এর firmware-কে একই লাইসেন্সে বাঁধা অর্থহীন; প্রযুক্তি দ্রুত বদলায়; আর বিশ্বজোড়া open source সহযোগিতায় দেশভিত্তিক লাইসেন্স খাপ খায় না। বাস্তবে যে সমাধান বেশি প্রচলিত, তা হলো খাতভিত্তিক নিয়ন্ত্রণ: চিকিৎসা-যন্ত্র, বিমান, রেল বা গাড়ির software-এর জন্য মানদণ্ড আর নিয়ন্ত্রকের অনুমোদন, ব্যক্তির লাইসেন্স নয় — প্রক্রিয়া আর product-এর সনদ।

মূল উপলব্ধি: লাইসেন্স থাকুক বা না থাকুক, পেশার দায় আসে কাজের ঝুঁকি থেকে। যেখানে ঝুঁকি বেশি, সেখানে প্রক্রিয়া, মানদণ্ড আর স্বাধীন যাচাই বেশি — আর নৈতিক code সেই দায়ের সাধারণ ভাষা।

প্র ০৩একটি algorithm কি একসাথে “সব অর্থে” ন্যায্য হতে পারে? ২০১৬ সালের COMPAS বিতর্ক আর পরের গবেষণা কী দেখিয়েছিল?

যুক্তরাষ্ট্রের কিছু আদালতে COMPAS নামের একটি বাণিজ্যিক tool আসামির ভবিষ্যতে আবার অপরাধ করার ঝুঁকি-score দিত। ২০১৬ সালে সাংবাদিকতা প্রতিষ্ঠান ProPublica একটি কাউন্টির data বিশ্লেষণ করে জানায়, যাঁরা পরে আর অপরাধ করেননি তাঁদের মধ্যে কৃষ্ণাঙ্গ আসামিদের “উচ্চ ঝুঁকি” বলে ভুল চিহ্নিত হওয়ার হার শ্বেতাঙ্গদের চেয়ে প্রায় দ্বিগুণ। Tool-এর নির্মাতা প্রতিষ্ঠান পাল্টা যুক্তি দেয়: একই score-এ দুই গোষ্ঠীর আসল পুনরায় অপরাধের হার প্রায় সমান — অর্থাৎ score দুই গোষ্ঠীর জন্যই সমানভাবে “calibrated”.

পরে অনেক বিশ্লেষক মনে করেন, দুই পক্ষের হিসাবই নিজের সংজ্ঞায় মোটামুটি ঠিক ছিল। ২০১৬–২০১৭ সালে Jon Kleinberg, Sendhil Mullainathan ও Manish Raghavan, আর আলাদাভাবে Alexandra Chouldechova গাণিতিকভাবে দেখান: দুই গোষ্ঠীর মূল হার (base rate) আলাদা হলে, নিখুঁত ভবিষ্যদ্বাণী ছাড়া calibration আর “ভুলের হার সমান” — এই ধরনের শর্ত একসাথে পূরণ করা সাধারণত অসম্ভব। অর্থাৎ ন্যায্যতা একটি সংখ্যা নয়; কোন ধরনের ভুলকে বেশি গুরুতর ধরবেন, সেটি একটি মূল্যবোধের সিদ্ধান্ত।

Software engineer-এর জন্য শিক্ষা তিনটি। প্রথমত, গোষ্ঠীভেদে মাপুন — না মাপলে কখনো জানবেন না। দ্বিতীয়ত, কোন সংজ্ঞা বেছে নিলেন আর কেন, তা লিখে রাখুন আর stakeholder-দের সাথে আলোচনা করুন — এটি শুধু data scientist-এর একার সিদ্ধান্ত নয়। তৃতীয়ত, প্রশ্ন করুন tool-টি আদৌ এই কাজে ব্যবহার হওয়া উচিত কি না, আর মানুষ চূড়ান্ত সিদ্ধান্তে আছেন কি না, ভুল হলে আপিলের পথ আছে কি না। ২০১৮ সালে Joy Buolamwini ও Timnit Gebru-র “Gender Shades” গবেষণা কয়েকটি বাণিজ্যিক মুখ-বিশ্লেষণ system-এ গাঢ় ত্বকের নারীদের ক্ষেত্রে অনেক বেশি ভুলের হার দেখিয়েছিল।

মূল উপলব্ধি: ন্যায্যতার একাধিক সংজ্ঞা পরস্পরবিরোধী হতে পারে; তাই কাজ হলো গোষ্ঠীভেদে মাপা, বেছে নেওয়া সংজ্ঞা প্রকাশ্যে যুক্তিসহ লেখা, আর মানুষের তত্ত্বাবধান ও আপিলের পথ রাখা।

প্র ০৪Cookie banner-এ “সব গ্রহণ করুন” চাপতে চাপতে মানুষ ক্লান্ত। “সম্মতি” কি আসলেই privacy রক্ষা করে? Privacy by design এখানে কী বদলায়?

দীর্ঘদিন privacy-র প্রধান কৌশল ছিল “notice and consent”: একটি লম্বা policy দেখানো, আর ব্যবহারকারী রাজি হলে যা খুশি করা। গবেষকেরা বহুবার দেখিয়েছেন এটি কাজ করে না — একজন সাধারণ মানুষ যত ওয়েবসাইট ব্যবহার করেন, সব policy পড়তে বছরে বিপুল সময় লাগত (Aleecia McDonald ও Lorrie Cranor-এর ২০০৮ সালের একটি পরিচিত গবেষণা এমন হিসাব দিয়েছিল)। ফলে মানুষ না পড়েই রাজি হন, আর “সম্মতি” একটি আনুষ্ঠানিকতায় পরিণত হয়।

GDPR এই সমস্যার কিছুটা স্বীকার করে। ইউরোপের সর্বোচ্চ আদালত ২০১৯ সালের Planet49 মামলায় বলে, আগে থেকে টিক দেওয়া বাক্স বৈধ সম্মতি নয়। আবার সম্মতিকে একমাত্র ভিত্তিও রাখেনি: চুক্তি পূরণ বা আইনি বাধ্যবাধকতার মতো অন্য ভিত্তি আছে, আর ভিত্তি যা-ই হোক, data minimisation আর purpose limitation মানতেই হয়। অর্থাৎ “ব্যবহারকারী রাজি হয়েছেন” বললেই অপ্রয়োজনীয় data নেওয়া বৈধ হয়ে যায় না। তবু cookie banner-এ বড় রঙিন “সব গ্রহণ” আর ছোট ধূসর “সেটিংস”-এর মতো dark pattern বহু জায়গায় রয়ে গেছে।

Privacy by design প্রশ্নটিকে ব্যবহারকারীর কাঁধ থেকে নকশাকারীর কাঁধে সরায়। Cavoukian-এর ধারণা অনুযায়ী privacy হওয়া উচিত default — মানুষ কিছু না করলেও সুরক্ষিত। ২০১০ সালে বিভিন্ন দেশের data সুরক্ষা কমিশনারদের একটি আন্তর্জাতিক সম্মেলন privacy by design-কে স্বীকৃতি দিয়ে প্রস্তাব গ্রহণ করে বলে জানা যায়, আর GDPR-এর Article 25 একে আইনি দায়িত্বে পরিণত করে। Engineer হিসেবে এর মানে: সম্মতির বাক্স যোগ করার আগে প্রশ্ন করা, “এই data আদৌ লাগবে কি?” যা সংগ্রহই হয় না, তার জন্য সম্মতিও লাগে না, ফাঁসের ঝুঁকিও থাকে না।

মূল উপলব্ধি: সম্মতি দরকারি কিন্তু যথেষ্ট নয়; সবচেয়ে কার্যকর privacy-সুরক্ষা হলো কম data আর সুরক্ষিত default — যা নকশাকারীর সিদ্ধান্ত, ব্যবহারকারীর নয়।

প্র ০৫AI assistant দিয়ে লেখা কোড কি কম নিরাপদ? গবেষণা কী বলে, আর দায়িত্বশীল ব্যবহারের অভ্যাস কেমন হওয়া উচিত?

২০২১ সালে Hammond Pearce ও সহকর্মীরা (“Asleep at the Keyboard?”, পরে IEEE Symposium on Security and Privacy-তে প্রকাশিত) একটি জনপ্রিয় AI code assistant-কে নিরাপত্তা-সংবেদনশীল বেশ কিছু পরিস্থিতিতে কোড লিখতে দেন। তাঁদের পরীক্ষার পরিস্থিতিতে প্রস্তাবিত প্রোগ্রামগুলোর প্রায় ৪০% পরিচিত ধরনের দুর্বলতা (যেমন SQL injection) ধারণ করেছিল। ২০২২–২৩ সালে Neil Perry ও সহকর্মীদের একটি user study-তে দেখা যায়, AI-সহায়তা পাওয়া অংশগ্রহণকারীরা কিছু কাজে কম নিরাপদ কোড লিখেছিলেন, অথচ নিজেদের কোডকে বেশি নিরাপদ ভেবেছিলেন। দুটিই নির্দিষ্ট সময়ের নির্দিষ্ট tool-এর ওপর; আজকের সব tool-এ সংখ্যাগুলো প্রযোজ্য ধরা ঠিক নয়।

তবে মূল শিক্ষাটি টিকে থাকে: বিপদ শুধু ভুল কোডে নয়, ভুল আত্মবিশ্বাসে। সাজানো পুরো function একবারে এলে পড়ে দেখার প্রবণতা কমে। নতুন ঝুঁকিও আছে: না-থাকা package-এর নাম, prompt-এ আসল data, আর licence-যুক্ত কোডের প্রায় হুবহু কপি আসতে পারে, যার আইনি অবস্থা নিয়ে কয়েকটি দেশে মামলা ও বিতর্ক চলছে।

দায়িত্বশীল অভ্যাস তাই পুরোনো প্রকৌশল-শৃঙ্খলারই সম্প্রসারণ: code review-তে AI-র কোডকে নতুন সহকর্মীর কোডের মতো সমান কড়াভাবে দেখা; নিরাপত্তা-সংবেদনশীল অংশে static analysis আর security test; নতুন dependency যাচাই; prompt-এ বানানো data; আর দলের লিখিত নীতি — কোন tool, কোন repository-তে, কীভাবে প্রকাশ। শেখার পর্যায়ে আরেকটি অভ্যাস কাজে দেয়: আগে নিজে সমাধানের চেষ্টা, তারপর AI-র সমাধানের সাথে তুলনা — তাতে ভুল ধরার চোখও তৈরি হয়।

মূল উপলব্ধি: AI কোড লেখার খরচ কমায়, যাচাইয়ের দায় কমায় না; বরং দ্রুত বেশি কোড আসায় যাচাইয়ের শৃঙ্খলা আরও জরুরি।

অনুশীলন

প্রথমে নিজে উত্তর লিখুন, তারপর মিলিয়ে নিন। সব ঘটনা আর সংখ্যা কাল্পনিক।

  1. হিসাব করুন: একটি কাল্পনিক নিয়োগ-tool-এ ১০০ জন পুরুষ আবেদনকারীর ৪৫ জন আর ৬০ জন নারী আবেদনকারীর ১৮ জন পরের ধাপে গেছেন। (ক) দুই গোষ্ঠীর selection rate কত? (খ) Impact ratio কত, four-fifths rule অনুযায়ী সতর্কসংকেত আছে কি? (গ) পুরুষদের সংখ্যা একই রেখে অন্তত কতজন নারী বাছাই হলে ratio ০.৮০-র কম থাকত না? (ঘ) কেন এই হিসাব একাই “tool পক্ষপাতদুষ্ট” প্রমাণ করে না?

    (ক) পুরুষ: ৪৫ ÷ ১০০ = ০.৪৫; নারী: ১৮ ÷ ৬০ = ০.৩০.

    (খ) সবচেয়ে বেশি হার ০.৪৫, তাই ratio = ০.৩০ ÷ ০.৪৫ = ২/৩ ≈ ০.৬৭ < ০.৮০ — সতর্কসংকেত আছে।

    (গ) দরকার নারীদের হার ≥ ০.৮০ × ০.৪৫ = ০.৩৬. ০.৩৬ × ৬০ = ২১.৬, মানুষ ভগ্নাংশে হয় না, তাই অন্তত ২২ জন। যাচাই: ২২ ÷ ৬০ ≈ ০.৩৬৭, ratio ≈ ০.৮১৫ ≥ ০.৮০. ২১ জনে ২১ ÷ ৬০ = ০.৩৫, ratio ≈ ০.৭৭৮ — তখনো কম।

    (ঘ) Four-fifths rule একটি heuristic: কারণ খুঁজতে বলে, রায় দেয় না। যোগ্যতার বণ্টন, কোন বৈশিষ্ট্য ওজন পাচ্ছে, proxy আছে কি না, আর পরিসংখ্যানগত তাৎপর্য আলাদা করে দেখতে হবে; আবার ratio ০.৮০-র ওপরে থাকলেও অন্যায্যতা থাকতে পারে।

  2. Case বিশ্লেষণ (SE Code দিয়ে): একটি কাল্পনিক স্বাস্থ্য-পরামর্শ app-এর product manager চান, ব্যবহারকারীদের লক্ষণ-অনুসন্ধানের data (কোন রোগের লক্ষণ খুঁজেছেন, এলাকা, বয়স) একটি ওষুধ-বিজ্ঞাপন প্রতিষ্ঠানকে দেওয়া হোক — “নাম তো দিচ্ছি না।” Sign-up-এর সময় privacy policy-তে লেখা ছিল, data “সেবা উন্নত করতে” ব্যবহার হবে। আপনি backend developer. ছয় ধাপের কাঠামো আর SE Code-এর নীতি দিয়ে বিশ্লেষণ করুন, আর আপনার পদক্ষেপ লিখুন।
    • তথ্য: স্বাস্থ্য-data অত্যন্ত সংবেদনশীল; নাম না থাকলেও এলাকা + বয়স + লক্ষণ মিলিয়ে অনেককে চেনা সম্ভব হতে পারে, তাই এটি সম্ভবত এখনো personal data. ঘোষিত উদ্দেশ্য বিজ্ঞাপন নয়।
    • Stakeholder: ব্যবহারকারী (সবচেয়ে ঝুঁকিতে), প্রতিষ্ঠান, বিজ্ঞাপনদাতা, আপনি ও দল।
    • বিকল্প: (A) যেমন চাওয়া হয়েছে দেওয়া; (B) শুধু বড় এলাকা-স্তরের সমষ্টিগত পরিসংখ্যান, যেখানে কাউকে চেনা যায় না, আর আইন বিভাগের অনুমোদন; (C) নতুন উদ্দেশ্যের জন্য ব্যবহারকারীর কাছে আলাদা, স্পষ্ট, ঐচ্ছিক সম্মতি — default বন্ধ; (D) প্রস্তাব প্রত্যাখ্যান।
    • নীতি: Public (privacy কমানো), Client and Employer (প্রতিষ্ঠানের আসল স্বার্থ আইনি ঝুঁকি এড়ানো), Judgment (“নাম নেই তাই ঠিক” যুক্তিতে সায় না দেওয়া); purpose limitation আর data minimisation দুটোই লঙ্ঘিত।
    • পদক্ষেপ: A-তে কাজ না করা; লিখিতভাবে ঝুঁকি জানানো (পুনরায় চেনার সম্ভাবনা, ঘোষিত উদ্দেশ্যের বাইরে ব্যবহার); B বা C প্রস্তাব, privacy বা আইন বিভাগের মত নিয়ে, প্রয়োজনে DPIA. Manager তবু A চাইলে অংশ ৪-এর পথে পরের স্তরে। সব কথা issue বা email-এ নথিভুক্ত।
  3. আউটপুট অনুমান করুন: Dark-pattern scorer-এর চারটি নিয়ম: (১) newsletter আগে থেকে টিক দেওয়া; (২) না-বোতামের লেখায় “don't/do not” + “like/want/care” (ছোট-বড় হাতের পার্থক্য ছাড়া), বা “i prefer paying more”, বা “i'm not smart”; (৩) শেষ দাম দেখানো দামের বেশি এবং fee আগে দেখানো হয়নি; (৪) বাতিলের ধাপ sign-up-এর ধাপের দ্বিগুণের বেশি। মাত্রা: ০ = clean, ১ = review, ২+ = redesign; আউটপুট name n/4 level : কারণ; কারণ. দুটি flow: shopD-checkout — টিক নেই, না-বোতাম “No, I do not want free delivery”, দেখানো ৫০০, শেষে ৫৬০, fee আগে দেখানো হয়েছে, sign-up ৩ ধাপ, বাতিল ৬ ধাপ। shopE — newsletter টিক দেওয়া, না-বোতাম “Skip”, দেখানো ৩০০, শেষে ৩৪০, fee আগে দেখানো হয়নি, sign-up ১ ধাপ, বাতিল ২ ধাপ। দুই লাইনের আউটপুট লিখুন।

    আসল প্রোগ্রামে এই দুটি flow যোগ করে চালানো ফল:

    shopD-checkout  1/4 review : confirmshaming
    shopE           2/4 redesign : pre-checked consent; hidden costs

    shopD: “do not want” নিয়ম ২-এ মেলে → confirmshaming. দাম বেড়েছে, কিন্তু fee আগে দেখানো, তাই নিয়ম ৩ নয়। বাতিল ৬, দ্বিগুণ ৩ × ২ = ৬; “বেশি” নয়, সমান — তাই নিয়ম ৪-ও নয়। এই সীমার ফাঁদটিই প্রশ্নের মূল। shopE: টিক দেওয়া (নিয়ম ১), ৩০০ → ৩৪০ আর fee আগে দেখানো হয়নি (নিয়ম ৩); বাতিল ২ > ১ × ২ = ২? না, সমান — তাই নিয়ম ৪ নয়। দুটি মিলিয়ে “redesign”.

  4. সমালোচনা করুন: একটি কাল্পনিক startup-এর “AI ও data নীতি”: (১) “যেকোনো AI chatbot-এ production log পেস্ট করে bug খোঁজা যাবে, দ্রুততা আগে।” (২) “AI-র লেখা কোড review লাগবে না, কারণ AI ভুল করে না।” (৩) “Sign-up form-এ যত বেশি তথ্য নেওয়া যায় — ভবিষ্যতে কাজে লাগতে পারে।” (৪) “Marketing email-এর বাক্স default টিক দেওয়া থাকবে; কেউ না চাইলে তুলে দেবে।” (৫) “Accessibility পরে, আগে launch.” (৬) “কেউ নৈতিক সমস্যা তুললে সরাসরি CEO-কে লিখবেন, দলকে জানানোর দরকার নেই।” প্রতিটির সমস্যা আর ভালো বিকল্প লিখুন।
    • (১) Production log-এ গ্রাহকের personal data, token আর ভেতরের তথ্য থাকে; অনুমোদনহীন tool-এ পাঠানো মানে নিয়ন্ত্রণের বাইরে data পাঠানো। ভালো: শুধু প্রতিষ্ঠানের অনুমোদিত tool, পাঠানোর আগে redaction আর চোখে দেখা, সম্ভব হলে বানানো উদাহরণ।
    • (২) AI hallucinate করে, দুর্বল test লেখে, না-থাকা package দিতে পারে। ভালো: AI-র কোড অন্য যেকোনো কোডের মতোই review, test আর security check; commit-কারী দায় নেন।
    • (৩) Data minimisation-এর সরাসরি উল্টো; অপ্রয়োজনীয় data-ই ফাঁসে সবচেয়ে বেশি ক্ষতি করে। ভালো: প্রতিটি field-এর পাশে উদ্দেশ্য, উদ্দেশ্য না থাকলে বাদ; ঐচ্ছিক উদ্দেশ্যে আলাদা সম্মতি।
    • (৪) আগে থেকে টিক দেওয়া বাক্স একটি dark pattern, আর GDPR-এর মতো আইনে বৈধ সম্মতি নয়। ভালো: খালি বাক্স, ব্যবহারকারী নিজে বেছে নেবেন, প্রত্যাহার এক ক্লিকে।
    • (৫) পরে যোগ করা অনেক বেশি খরচের, আর এর মধ্যে কিছু মানুষ সেবা থেকে বাদ পড়েন। ভালো: WCAG-ভিত্তিক মূল শর্ত (keyboard, label, contrast) শুরু থেকেই acceptance criteria আর CI-তে।
    • (৬) প্রথম ধাপেই সর্বোচ্চ স্তর প্রায়ই অকার্যকর, আর দলের আস্থা নষ্ট করে। ভালো: স্পষ্ট escalation-এর ধাপ, একটি গোপন অভিযোগের পথ, আর প্রতিশোধ না নেওয়ার লিখিত নিশ্চয়তা।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমএকটি নৈতিক দ্বিধায় সিদ্ধান্ত নেওয়ার ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. জানা তথ্য আর অনুমান আলাদা করা
  2. প্রভাবিত সব stakeholder চিহ্নিত করা
  3. অন্তত তিনটি বিকল্প খোঁজা
  4. প্রতিটি বিকল্পের পরিণতি আর ক্ষতি ফেরানো যায় কি না দেখা
  5. SE Code-এর নীতি, আইন আর প্রতিষ্ঠানের নিয়মের সাথে মেলানো
  6. সিদ্ধান্ত নিয়ে কারণসহ লিখে রাখা ও কাজ করা

ACM/IEEE-CS Software Engineering Code of Ethics and Professional Practice (১৯৯৯) অনুযায়ী স্বার্থে সংঘাত হলে কোন বিবেচনা সবচেয়ে গুরুত্বপূর্ণ?

  • নিয়োগকর্তার ব্যবসায়িক স্বার্থ
  • জনস্বার্থ (public interest)
  • Product-এর সর্বোচ্চ মান
  • নিজের ক্যারিয়ারের উন্নতি

একটি checkout পাতায় “আমাকে বিজ্ঞাপনী email পাঠান” বাক্সটি আগে থেকেই টিক দেওয়া। GDPR-এর সম্মতির শর্ত আর deceptive design-এর দৃষ্টিতে এটি কী?

  • বৈধ সম্মতি, কারণ ব্যবহারকারী চাইলে টিক তুলে দিতে পারেন
  • বৈধ, যদি privacy policy-তে উল্লেখ থাকে
  • বৈধ সম্মতি নয়; এটি preselection ধরনের dark pattern
  • এটি confirmshaming

একটি ঋণ-অনুমোদন system-এ গোষ্ঠী X-এর selection rate ০.৬০ আর গোষ্ঠী Y-এর ০.৪৫ (X-এর হার সবচেয়ে বেশি)। Four-fifths rule অনুযায়ী কোন সিদ্ধান্তটি সঠিক?

  • Ratio ০.৭৫, যা ০.৮০-র কম — disparate impact-এর সতর্কসংকেত, আরও বিশ্লেষণ দরকার
  • পার্থক্য মাত্র ০.১৫, তাই কোনো সমস্যা নেই
  • Ratio ০.৭৫ — system-টি নিশ্চিতভাবে বৈষম্যমূলক প্রমাণিত
  • Ratio ১.৩৩, তাই সীমার ওপরে

একজন developer AI assistant-এর প্রস্তাবিত একটি function না পড়েই commit করেন; পরে production-এ ভুল হিসাব ধরা পড়ে। পেশাগত দায়ের দিক থেকে কোন বক্তব্যটি সঠিক?

  • দায় AI tool-এর নির্মাতার, কারণ কোডটি তাঁদের model লিখেছে
  • দায় শুধু reviewer-এর, কারণ তিনি ধরতে পারেননি
  • Commit বার্তায় “AI-generated” লিখলে দায় থাকে না
  • Commit-কারী দায়ী; AI-র কোড বুঝে, test করে commit করাই তাঁর দায়িত্ব ছিল

একটি app-এ “বন্ধুদের সাথে অবস্থান শেয়ার” feature নতুন account-এ default বন্ধ, ব্যবহারকারী নিজে চালু করলে তবেই চালু হয়। এটি privacy by design-এর কোন নীতির সবচেয়ে সরাসরি উদাহরণ?

  • End-to-end security
  • Privacy as the default
  • Visibility and transparency
  • Full functionality (positive-sum)

একটি টিকিট-বুকিং form-এ নাম, ফোন আর আসন পছন্দ নেওয়া হয় টিকিট দিতে; সাথে ধর্ম আর বাবার নামও চাওয়া হয়, যা কোনো ঘোষিত উদ্দেশ্যে লাগে না। কোন নীতি সবচেয়ে সরাসরি লঙ্ঘিত হচ্ছে?

  • Purpose limitation
  • Accuracy (নির্ভুলতা)
  • Data minimisation
  • Storage limitation

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. কেন্দ্রে জনস্বার্থ: SE Code (১৯৯৯)-এর আট নীতি — Public, Client and Employer, Product, Judgment, Management, Profession, Colleagues, Self. নির্দেশ দায় হস্তান্তর করে না।
  2. দ্বিধায় কাঠামো: তথ্য → stakeholder → বিকল্প → পরিণতি → নীতি → সিদ্ধান্ত ও নথি। কথা বলার পথ ধাপে ধাপে; whistleblowing শেষ উপায়, আইনি পরামর্শসহ।
  3. Privacy নকশায়: privacy as default, কম data, ঘোষিত উদ্দেশ্যের বাইরে নয়, সক্রিয় সম্মতি (টিক দেওয়া বাক্স নয়)। GDPR ২০১৬/২০১৮ একটি আদর্শ; বাংলাদেশের আইনের সর্বশেষ অবস্থা যাচাই করুন।
  4. নিরাপত্তা, accessibility, ন্যায্যতা: secret ও log-এ সতর্কতা, WCAG 2.2, dark pattern এড়ানো, গোষ্ঠীভেদে selection rate মেপে four-fifths ratio — সতর্কসংকেত, প্রমাণ নয়।
  5. AI-র কোড আপনার কোড: বুঝুন, test করুন, prompt-এ secret ও personal data নয়, licence ও উৎস ভাবুন, দলের নিয়মে প্রকাশ করুন, অতিনির্ভরতা এড়ান।

পরের পর্বে: মডিউল ১০-এর সব কিছু একসাথে। পর্ব ৬৫-এর ক্যাপস্টোনে requirement থেকে release পর্যন্ত একটি পূর্ণ project, Git workflow-সহ — যেখানে privacy, accessibility আর নিরাপত্তার শর্তও requirement-এর অংশ।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান