Skip to content

Tutorial 2 How the Code Works bn

James Morris edited this page Jul 29, 2026 · 1 revision

টিউটোরিয়াল ২ · কোড কীভাবে কাজ করে

লক্ষ্য: যে গুটিকয় ডিজাইন সিদ্ধান্ত এই প্রকল্পটিকে একটি AI এজেন্ট দিয়ে বদলানো সহজ — এবং নিরাপদ — করে, সেগুলো বোঝা। কোড মুখস্থ করার দরকার নেই; আপনার দরকার মানসিক মডেল, যাতে আপনি এজেন্টকে নিখুঁতভাবে নির্দেশ দিতে পারেন।

← পূর্ববর্তী: টিউটোরিয়াল ১ পরিচিতি · পরবর্তী: টিউটোরিয়াল ৩ আপনার প্রথম এজেন্ট টাস্ক


মানচিত্র

lockedin-cli/
├── bin/lockedin.js      # entry point — একমাত্র অংশ যা input/output করে
├── src/lockedin.js      # core — pure function যা string ফেরত দেয়
├── test/
│   ├── unit.test.js     # core function-গুলো সরাসরি test করে
│   └── cli.test.js      # আসল binary চালিয়ে তার output পরীক্ষা করে
├── tools/screenshot.js  # docs/-এ দেখা SVG-গুলো render করে
└── package.json         # metadata + `npm test` script

চারটি ধারণা এটিকে চালু রাখে। এগুলো শিখুন, তাহলে আপনি প্রায় যেকোনো পরিবর্তন আত্মবিশ্বাসের সঙ্গে এজেন্টকে চাইতে পারবেন।

ধারণা ১ — একটি pure core যা string ফেরত দেয়

src/lockedin.js খুলুন। খেয়াল করুন render function-গুলো print করে না — সেগুলো string ফেরত দেয়:

function renderConnect() {
  const names = shuffle(NAMES).slice(0, 6);
  // ...লাইনগুলোর একটি array তৈরি করে...
  return out.join('\n');   // text ফেরত দেয়; কিছু print করে না
}

আসল সব printing (এবং আপনার keystroke পড়া) হয় bin/lockedin.js-এ। এই "core data ফেরত দেয়, edge I/O করে" বিভাজনটাই এখানে সবচেয়ে গুরুত্বপূর্ণ জিনিস, কারণ যে function শুধু একটি string ফেরত দেয়, সেটি test করা খুব সহজ:

const out = app.renderConnect();
assert.ok(out.includes("“আমি আপনাকে আমার professional network-এ যোগ করতে চাই।” — পাঠানো হলো "));

কোনো terminal mock করা নেই, কোনো stdout ধরা নেই। আপনি যখন এজেন্টকে একটি feature যোগ করতে বলেন, এ কারণেই সে তার জন্য একটি দ্রুত, নির্ভরযোগ্য test-ও যোগ করতে পারে।

ধারণা ২ — Content pool

রসিকতাগুলো থাকে src/lockedin.js-এর উপরের দিকে সাধারণ array-তে:

const HOOKS = [ 'অপ্রিয় মত:', 'একটু ভাবুন তো।', /* ...~25 total... */ ];
const LESSONS = [ '→ আপনার network-ই আপনার net worth।', /* ... */ ];

Generator-গুলো এই pool থেকে বেছে নেয়। v1.2.0-তে প্রতিটি pool ~২৫টি variation-এ বেড়েছিল, এবং একটি দ্বিতীয় স্তরের template pool যোগ হয়েছিল (যেমন POST_REVEALS এবং REFLECT_TAGSETS) যাতে প্রতিটি output-এর গঠন বদলায়, শুধু শব্দ নয়। content যোগ করা প্রায়ই একটি array-তে string যোগ করার মতোই সহজ — একটি এজেন্টকে দেওয়ার নিখুঁত প্রথম কাজ।

ধারণা ৩ — Seeded randomness = deterministic test

এলোমেলো output এবং স্বয়ংক্রিয় test শুনতে বেমানান মনে হয়। এই প্রকল্প সেই বৃত্তটি বর্গ করে একটি seed করা যায় এমন random number generator দিয়ে:

setSeed(42);
const a = generatePost();
setSeed(42);
const b = generatePost();
// a === b  → একই seed, একই post

প্রতিটি এলোমেলো পছন্দ যায় ভাগ করা pick() / shuffle() helper দিয়ে, যা ওই seeded generator থেকে টানে। LOCKEDIN_SEED=42 সেট করুন, CLI সম্পূর্ণ reproducible হয়ে যায়। যেকোনো পরিবর্তনের সোনালি নিয়ম: নতুন randomness অবশ্যই pick / shuffle ব্যবহার করবে, কখনো সরাসরি Math.random নয় — নইলে determinism (এবং test) ভেঙে যায়। এটা মনে রাখুন; অধ্যায় ৩-এ আপনি এজেন্টকে এটা মনে করিয়ে দেবেন।

ধারণা ৪ — test-এর দুটি স্তর

  • test/unit.test.js core function-গুলোকে call করে এবং তারা যে string ফেরত দেয় তার উপর assert করে (দ্রুত, নির্ভুল)।
  • test/cli.test.js আসলে bin/lockedin.js চালায় এবং তার সত্যিকারের stdout ও exit code পরীক্ষা করে (প্রমাণ করে গোটা জিনিসটা শুরু থেকে শেষ পর্যন্ত কাজ করে)।

একসঙ্গে এগুলোই গেট। এগুলো invariant-ও এনকোড করে — অ্যাপ যে প্রতিশ্রুতিগুলো দেয়। উদাহরণস্বরূপ, একটি post সবসময় একটি পরিচিত hook দিয়ে শুরু হয় এবং সবসময় অন্তত তিনটি lesson রাখে; "connect" screen সবসময় incalculable বলে। এজেন্ট যখন কোড বদলায়, এই test-গুলো নীরবে ভাঙা যেকোনো প্রতিশ্রুতি ধরে ফেলে।


একটি এজেন্টের সঙ্গে কাজের জন্য এটা কেন গুরুত্বপূর্ণ

চারটি ধারণা একসঙ্গে রাখুন, তাহলে আপনি এমন একটি codebase পান যেখানে একটি এজেন্ট পারে:

  1. একটি feature যোগ করা একটি pure function হিসেবে যা string ফেরত দেয়,
  2. তার জন্য কোনো I/O কসরত ছাড়াই একটি test যোগ করা,
  3. seeded RNG-এর মাধ্যমে output reproducible রাখা, এবং
  4. বিদ্যমান গেট চালিয়ে প্রমাণ করা যে কিছু ভাঙেনি

এটাই সেই loop যা আপনি পরের অধ্যায়ে চালাবেন।

✅ আপনার এজেন্ট দিয়ে করে দেখুন

আপনার এজেন্টকে আপনার বোঝাপড়া যাচাই করতে বলুন — পড়ে, edit না করে:

  1. "src/lockedin.js-এর প্রতিটি content pool এবং প্রতিটিতে কতগুলো entry আছে তালিকা করো।"
  2. "test/unit.test.js generatePost সম্পর্কে যে একটি invariant প্রয়োগ করে সেটা দেখাও, এবং ব্যাখ্যা করো কী সেটা ভাঙবে।"
  3. "seeded RNG কোথায় সংজ্ঞায়িত, এবং কোন function-গুলোকে Math.random-এর বদলে সেটা ব্যবহার করতেই হবে? কিছু বদলিও না — শুধু ব্যাখ্যা করো।"

এজেন্টের উত্তর যখন এই অধ্যায়ের সঙ্গে মেলে, আপনি তৈরি করার জন্য প্রস্তুত।

পরবর্তী: টিউটোরিয়াল ৩ আপনার প্রথম এজেন্ট টাস্ক

📘 LockedIn CLI wiki

Tutorial

Reference


Satire · Sátira · 風刺. Not affiliated with LinkedIn. GPL-3.0-or-later.

Clone this wiki locally