کدنویسی با AI

پرامپت‌نویسی برای کدنویسی

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

نوشتهٔ به‌روزرسانی: ۴ دقیقه مطالعه
تصویر مقالهٔ پرامپت‌نویسی برای کدنویسی

اکثر توسعه‌دهنده‌هایی که از ChatGPT یا Claude برای کد می‌پرسن، همون روزهای اول یه تجربهٔ مشترک دارن: «مدل یه چیز عمومی داد که به دردم نخورد.» این مشکل مدل نیست — مشکل پرامپته. پرامپت‌نویسی برای کدنویسی یه مهارت جداست از پرامپت‌نویسی معمولی.

فرق پرامپت کدنویسی با پرامپت عمومی

وقتی از AI می‌خوای یه مقاله بنویسه، زمینه کمتری لازمه — AI از دانش عمومی‌اش استفاده می‌کنه. ولی کد به context بسیار دقیق‌تری نیاز داره:

  • چه زبانی؟ چه نسخه‌ای؟
  • چه library‌هایی در پروژه هستن؟
  • کد این فانکشن باید با کدام کدهای موجود تعامل داشته باشه؟
  • سبک کدنویسی پروژه چیه؟ (naming convention، error handling، formatting)
  • این کد قراره در تست اجرا بشه یا production؟

هر چقدر این context رو بهتر منتقل کنی، کد بهتری دریافت می‌کنی.

ساختار پرامپت کدنویسی موثر

یه ساختار چهاربخشی که در اکثر موارد جواب می‌ده:

[زبان و محیط] + [کد موجود یا context] + [خواسته‌ٔ دقیق] + [محدودیت‌ها]

مثال بد:

«یه تابع برای validate کردن ایمیل بنویس»

مثال خوب:

«TypeScript، Node.js 20. در پروژه از zod استفاده می‌کنیم. یه schema bنویس برای validate ایمیل که پیام خطای فارسی برگردونه. نباید regex دستی بنویسی.»

فرق این دو پرامپت رو ببین: دومی زبان، tooling، output format، و محدودیت رو مشخص کرده.

پنج الگوی عملی

۱. الگوی «فانکشن موجود رو بهبود بده»

بجای اینکه بگی «این کد رو بهتر کن»، context بده:

«این تابع داره N+1 query می‌زنه. با Prisma include بهینه‌اش کن. تست‌های موجود باید همچنان پاس بشن.»

// [کد موجود رو اینجا paste کن]

۲. الگوی «bug رو توضیح بده»

وقتی یه error داری، کل stack trace رو بده نه فقط پیام خطا:

«این error رو می‌گیرم در production. Node.js 18، Redis 7. کد: [کد] خطا: [stack trace کامل] همین کد در local کار می‌کنه.»

«در local کار می‌کنه» اطلاعات مهمیه — مدل می‌فهمه احتمالاً مشکل config یا environment فرق داره.

۳. الگوی «از صفر بساز با spec»

برای ساخت یه feature جدید، یه mini-spec بنویس:

«یه middleware برای rate limiting بنویس:

  • ورودی: request object + config (maxRequests, windowMs)
  • ذخیره‌سازی: in-memory با Map (نه Redis)
  • رفتار: وقتی limit رد شد، 429 با header Retry-After برگردون
  • تایپ‌ها در یه فایل جدا
  • Jest test برای edge case‌ها: همزمان بودن request‌ها، window reset»

۴. الگوی «refactor با قرارداد»

وقتی می‌خوای کد رو تغییر بدی ولی interface باید ثابت بمونه:

«این کلاس رو از class-based به functional تبدیل کن. public API (function signatures) نباید تغییر کنه چون جاهای دیگه‌ای از این استفاده می‌کنن.»

۵. الگوی «code review»

برای گرفتن نظر قبل از merge:

«این PR رو review کن از نظر security. مخصوصاً نگران SQL injection و authorization bypass هستم. تکنولوژی: FastAPI، PostgreSQL، JWT.»

[کد]

چه زمانی context رو در چند پیام بده؟

در مکالمه‌های طولانی، مدل context اولیه رو «فراموش» می‌کنه یا کم‌رنگ‌تر می‌شه. چند راه:

Anchoring: در هر پیام جدید یه جملهٔ خلاصه از context کلی بذار: «ما روی authentication module پروژهٔ X کار می‌کنیم که از JWT استفاده می‌کنه. حالا می‌خوام...»

تقسیم به زیرمسئله: بجای اینکه «یه سیستم کامل authentication بساز» بپرسی، اول schema بخواه، بعد validation، بعد token generation. هر پیام یه task کوچیک.

خلاصه کردن تصمیم‌های قبلی: «جلسهٔ قبل تصمیم گرفتیم از bcrypt استفاده کنیم و salt rounds رو ۱۲ بذاریم. با این فرض، حالا...»

اشتباهات رایج

Vague verbs: «بهبود بده»، «بهتر کن»، «optimize کن» بدون مشخص کردن معیار. بگو «سرعت رو بیشتر کن» نه «بهتر کن».

بدون کد موجود: اگه می‌خوای کد موجود رو تغییر بدی، حتماً کد رو paste کن. AI بدون دیدن کد، کد جدید می‌نویسه که احتمالاً با ساختار موجود تطابق نداره.

درخواست همه‌چیز در یه پرامپت: «یه سیستم کامل e-commerce با payment gateway، inventory management، و user authentication بنویس» — این کار نمی‌کنه. هر چیزی که بیشتر از چند صد خط بشه، باید تکه‌تکه ساخته بشه.

بی‌توجهی به محدودیت: اگه پروژه یه lib خاص نداره، بگو. وگرنه AI راه‌حلی می‌ده که نمی‌تونی استفاده کنی.

وقتی کد خروجی خوب نیست

بجای اینکه دوباره از صفر بپرسی، iterate کن:

«کدی که دادی X مشکل داره. می‌خوام همین کد رو نگه داری ولی [مشکل خاص] رو برطرف کنی.»

این بهتر از «دوباره بنویس» است چون مدل می‌فهمه چه چیزی رو دوست داشتی و چه چیزی رو نه.

پرامپت‌نویسی در coding agents (vs chatbot)

در chatbot مثل ChatGPT، هر مکالمه جداست. ولی وقتی از یه coding agent (مثل Cursor، Aider، یا AiraCode) استفاده می‌کنی، مدل مستقیم به فایل‌های پروژه‌ات دسترسی داره.

اینجا پرامپت‌نویسی کمی فرق می‌کنه:

  • دیگه لازم نیست کد موجود رو paste کنی — agent خودش می‌خونه
  • ولی هنوز باید نیت رو واضح بگی: «می‌خوام این refactor رو به شکلی انجام بدی که تست‌های موجود پاس بمونن»
  • و باید scope رو مشخص کنی: «فقط این فایل رو تغییر بده» یا «اگه تغییر به فایل‌های دیگه هم می‌رسه، اول بهم بگو»

یه مزیت coding agent‌هایی که شناخت پیوسته دارن اینه که دیگه لازم نیست هر بار از صفر توضیح بدی «پروژهٔ من چیه». context پروژه از قبل موجوده.

ابزارهای کمک به پرامپت‌نویسی کدنویسی

  • GitHub Copilot inline comments: با نوشتن comment، کد پیشنهاد می‌گیری — یه شکل ضمنی از پرامپت
  • Cursor's @-mentions: با @file یا @code می‌تونی context دقیق بدی بدون paste کردن دستی
  • System prompt در Claude API: اگه با API کار می‌کنی، یه system prompt با توضیح پروژه، زبان، و conventions بنویس

جمع‌بندی

بهترین پرامپت کدنویسی: دقیق، با context، با محدودیت‌های مشخص. هرچقدر AI بیشتر بدونه تو چه پروژه‌ای داری، چه tooling‌ای داری، و دقیقاً چی می‌خوای — کد بهتری می‌گیری. این یه مهارت اکتسابیه و با تمرین خیلی سریع بهتر می‌شه.

همچنین بخوان

#کدنویسی با AI

ادامهٔ مسیر

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

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