کدنویسی با AI

چرا Cursor و Copilot هر روز با یه غریبه می‌بینندت

چرا Cursor و Copilot هر روز با یه غریبه می‌بینندت — راهنمای فارسی از مجموعهٔ «کدنویسی با AI» در وبلاگ آیرا. بازنویسی‌شده با تمرکز روی کاربر ایرانی و روایت شناخت پیوسته.

نوشتهٔ به‌روزرسانی: ۴ دقیقه مطالعه
تصویر مقالهٔ چرا Cursor و Copilot هر روز با یه غریبه می‌بینندت

یه چیز عجیب اتفاق می‌افته وقتی چند ماه با Cursor یا GitHub Copilot کار می‌کنی: هر روز صبح ابزار انگار تو رو نمی‌شناسه. همون اشتباهات رو دوباره توضیح می‌دی. همون preference‌هات رو دوباره می‌گی. دوباره context می‌دی. این یه باگ نیست — یه تصمیم معماری‌ه. و فهمیدنش مهمه.

مشکل اصلی: حافظهٔ جلسه‌ای

Cursor، GitHub Copilot، و بیشتر ابزارهای کدنویسی AI روی یه مدل ساخته شدن: session-based context. یعنی هر بار که ادیتور رو باز می‌کنی، از صفر شروع می‌کنی.

Cursor کد پروژه‌ات رو ایندکس می‌کنه — این خوبه. می‌دونه کجا userId تعریف شده، چه function‌هایی وجود دارن، ساختار فایل‌ها چیه. ولی این «حافظه» فنیه، نه شناختی. نمی‌دونه که تو سه هفته پیش تصمیم گرفتی از این library استفاده نکنی. نمی‌دونه که این بخش از کد رو در حال refactor کردن هستی. نمی‌دونه به چه style ای کد می‌نویسی وقتی تحت فشار هستی.

یه مثال روزمره

فرض کن دیروز یه ساعت با Cursor کار کردی و رسیدی به یه درک مشترک: «توی این پروژه همیشه error handling رو با Result type انجام می‌دیم، نه throw.» Cursor خوب کار کرد، پیشنهادهای دقیق داد.

فردا ادیتور رو باز می‌کنی. این درک رفته. Cursor دوباره از try/catch استفاده می‌کنه. یا اگه .cursorrules داشته باشی، شاید یادآوری کنه — ولی این فرق داره با اینکه واقعاً بفهمه چرا این تصمیم گرفته شده.

چرا اینطور طراحی شدن؟

دلایل فنی و تجاری هر دو وجود دارن:

فنی: نگه داشتن حافظهٔ بلندمدت برای همهٔ کاربران هزینه داره — هم محاسباتی، هم ذخیره‌سازی. زیرساخت context window فعلی مدل‌ها برای session‌های کوتاه بهینه شده.

تجاری: حریم خصوصی کد. اگه Cursor تاریخچهٔ مکالمات و تصمیمات توسعه‌دهنده‌ها رو ذخیره کنه، سوالات جدی امنیتی مطرح می‌شه — مخصوصاً برای شرکت‌ها.

طراحی محصول: GitHub Copilot اصلاً روی «تکمیل خودکار هوشمند» طراحی شده، نه «همکار بلندمدت». این یه انتخاب آگاهانه‌ست.

هزینهٔ واقعی این غریبگی

وقتی هر روز با یه غریبه طرفی، چند چیز اتفاق می‌افته:

Context-loading تکراری: هر بار باید پیش‌زمینهٔ پروژه رو دوباره توضیح بدی. «داریم با Next.js 14 کار می‌کنیم. از App Router استفاده می‌کنیم. TypeScript strict mode فعاله. Tailwind برای استایل...» این‌ها خودشون جا می‌گیرن از context window.

پیشنهادات ناسازگار: AI پیشنهادی می‌ده که با تصمیمات قبلی پروژه سازگار نیست، چون از اون تصمیمات خبر نداره.

خستگی توضیح: بعد از چند ماه، توسعه‌دهنده‌ها شروع می‌کنن به «مرور کردن» سوال‌هایی که جوابشون رو از AI می‌دونن چطور استخراج کنن — نه اینکه واقعاً کمک بگیرن.

عدم رشد رابطه: با یه همکار انسانی، رابطه رشد می‌کنه. اون یاد می‌گیره چطور فکر می‌کنی، چه چیزی مهمه برات، کجا کمک می‌خوای. با یه ابزار session-based، این رشد اتفاق نمی‌افته.

تلاش‌های موجود برای حل این مشکل

چند روش الان وجود داره که توسعه‌دهنده‌ها برای کاهش این مشکل استفاده می‌کنن:

.cursorrules یا CLAUDE.md: یه فایل متنی در ریشهٔ پروژه که context ثابت پروژه رو نگه می‌داره. خوبه ولی دستیه — تو باید یادت باشه آپدیتش کنی.

Custom Instructions در Copilot: می‌شه در تنظیمات GitHub Copilot یه instruction ثابت تعریف کرد. ولی global‌ه و project-specific نیست.

RAG روی documentation: بعضی تیم‌ها documentation داخلی‌شون رو ایندکس می‌کنن و به Cursor می‌دن. پیچیده‌تره و نیاز به setup داره.

همهٔ این‌ها workaround هستن، نه راه‌حل. مشکل اصلی اینه که ابزار کاربر رو نمی‌شناسه — نه فقط کد رو.

تفاوت بین «شناخت کد» و «شناخت توسعه‌دهنده»

این تمایز مهمه:

شناخت کد یعنی: می‌دونم UserService.ts کجاست، چه method‌هایی داره، چطور import می‌شه.

شناخت توسعه‌دهنده یعنی: می‌دونم این آدم معمولاً unit test رو قبل از implementation می‌نویسه. می‌دونم به documentation اهمیت می‌ده. می‌دونم این هفته داره روی یه feature جدید کار می‌کنه که هنوز تموم نشده. می‌دونم سه هفته پیش تصمیم گرفت از Redux به Zustand مهاجرت کنه.

Cursor و Copilot اولی رو خوب بلدن. دومی رو اصلاً نمی‌دونن.

آیا این مشکل حل‌شدنیه؟

بله — ولی نیاز به یه معماری متفاوت داره. باید حافظهٔ بلندمدت، درک رفتار کاربر در طول زمان، و context فعال session با هم ترکیب بشن. این چیزیه که مفهوم شناخت پیوسته بهش می‌پردازه — وقتی AI نه فقط کد رو می‌فهمه، بلکه توسعه‌دهنده رو هم می‌شناسه.

AiraCode با همین رویکرد ساخته شده — یه coding agent ترمینال‌محور که حافظهٔ پروژه‌ای داره و توسعه‌دهنده رو در طول زمان می‌شناسه، نه فقط در یه session.

چه موقع Cursor و Copilot کافیه؟

صادقانه بگم، برای خیلی از use case‌ها کافیه:

  • کارهای یکبارهٔ کوتاه
  • پروژه‌هایی که context پیچیده‌ای ندارن
  • وقتی چند توسعه‌دهنده روی یه کد کار می‌کنن و context shared نیست
  • یادگیری یه زبان یا framework جدید

ولی وقتی روی یه پروژهٔ بلندمدت تنها کار می‌کنی، یا وقتی تصمیمات معماری پیچیده‌ای داری که باید AI ازشون خبر داشته باشه، «غریبه‌بودن» ابزار واقعاً cost داره.

همچنین بخوان

#کدنویسی با AI#شناخت پیوسته

ادامهٔ مسیر

همهٔ مقاله‌ها ←

بیشتر در «کدنویسی با AI»