← 返回列表

سری مصاحبه‌های هوش مصنوعی ۱۴: تفاوت Vibe Coding و Spec Coding؟

این سوالی است که بیشتر برنامه‌نویسان با آن مواجه می‌شوند. Vibe Coding و Spec Coding دو پارادایم متفاوت در برنامه‌نویسی با کمک مدل‌های زبانی بزرگ (LLM) هستند. تفاوت اصلی در این است که «ورودی» شما به AI یک حس مبهم است یا یک مشخصات دقیق.


۱. توضیح ساده تفاوت Vibe Coding و Spec Coding با مثال آشپزی

  • Vibe Coding = به دوستت می‌گویی «غذای تند می‌خواهم»، او بر اساس حس خودش یک غذا درست می‌کند، تو یک لقمه می‌گیری و می‌گویی «کمی نمک بیشتر»، او هم نمک اضافه می‌کند. ممکن است طعم فوق‌العاده‌ای داشته باشد، اما اگر آشپز دیگری باشد، کاملاً متفاوت می‌شود.
  • Spec Coding = تو یک دستور پخت کامل می‌نویسی: «رب‌دانه ۲۰ گرم، ورقه‌های گوشت گاو ۱۵۰ گرم، تکه‌های کرفس ۵۰ گرم، با حرارت بالا به مدت ۲ دقیقه تفت دهید، قبل از سرو ۳ گرم شکر اضافه کنید». آشپزهای مختلف با پیروی از دستور، نتیجه یکسانی می‌گیرند.

۲. تعریف هر دو

بُعد Vibe Coding Spec Coding
نام دیگر برنامه‌نویسی حس‌محور، پرامپت بداهه برنامه‌نویسی مشخصات‌محور، مستندات اول
شکل ورودی «یک صفحه ورود زیبا و مدرن برایم بساز» «صفحه ورود شامل فیلد ایمیل/رمز عبور، چک‌باکس مرا به خاطر بسپار، دکمه ارسال؛ فرانت‌اند با React + Tailwind؛ قوانین اعتبارسنجی فرم: فرمت ایمیل، طول رمز عبور ≥۸؛ در صورت خطا، پیام قرمز نشان داده شود...»
روش استفاده از AI گفت‌وگویی و تکراری: دادن جهت کلی → دیدن خروجی → تنظیمات جزئی مهندسی‌شده: نوشتن PRD/مشخصات فنی دقیق → AI بر اساس مشخصات کد تولید می‌کند
میزان مشارکت انسان کم: وابسته به خلاقیت AI، انسان فقط «آیا درست به نظر می‌رسد؟» را بررسی می‌کند زیاد: انسان ابتدا طراحی/معماری را انجام می‌دهد، AI بیشتر اجرا می‌کند
سناریوهای典型 نمونه‌سازی سریع، ابزارهای شخصی، اکتشاف UI، کدنویسی خلاقانه سیستم‌های سطح تولید، همکاری تیمی، کدهای قابل نگهداری/آزمون

۳. مقایسه جریان کاری

فرآیند Vibe Coding

  1. ایده مبهم: «می‌خواهم یک خزنده بنویسم که فهرست داغ Zhihu را بگیرد.»
  2. نوشتن پرامپت اول: مستقیماً از AI می‌خواهد کد تولید کند.
  3. اجرا → خطا → چسباندن خطا به AI → AI تصحیح می‌کند.
  4. احساس زشتی رابط کاربری → «آن دکمه را گردتر کن و پس‌زمینه را آبی گرادینت کن» → AI تغییر می‌دهد.
  5. کمبود قابلیت → «قابلیت ذخیره در CSV را اضافه کن» → AI اضافه می‌کند.
  6. تکرار مراحل ۳-۵ تا زمانی که «احساس کند کافی است».

فرآیند Spec Coding

  1. نوشتن سند مشخصات: تعیین ورودی/خروجی، ساختار داده‌ها، مدیریت خطا، نیازمندی‌های عملکردی، نیازمندی‌های غیرعملکردی (مانند لاگ، محدودیت نرخ).
  2. تقسیم مشخصات به وظایف: مثلاً وظیفه ۱: پیاده‌سازی تابع fetch_hot_topics() مطابق امضای API در مشخصات.
  3. اجرای هر وظیفه توسط AI: پرامپت شامل امضای تابع، کامنت‌ها، و پیش‌بینی موارد آزمون.
  4. بررسی و اعتبارسنجی دستی: اطمینان از مطابقت با مشخصات، اجرای آزمون‌های واحد.
  5. ادغام و بازگشت.

۴. مقایسه مزایا و معایب

ویژگی Vibe Coding Spec Coding
سرعت شروع بسیار سریع، چند دقیقه تا نمونه اولیه کند، نیاز به نوشتن مستندات و تقسیم وظایف
کیفیت کد پایین (احتمال افزونگی، ناسازگاری، اشکالات پنهان) بالا (خوانا، قابل آزمون، منطبق با معماری)
قابلیت نگهداری ضعیف، دیگران نمی‌فهمند «چرا اینطور نوشته شده» خوب، مشخصات خود سند هستند
وابستگی به LLM بسیار زیاد، تغییر مدل ممکن است خروجی کاملاً متفاوتی بدهد متوسط، تا زمانی که مشخصات واضح باشد، مدل‌های مختلف ساختار مشابهی تولید می‌کنند
مشکل رفع اشکال دشوار، معلوم نیست منطق کد از کجا آمده آسان، بررسی خط به خط بر اساس مشخصات
مناسب همکاری تیمی تقریباً غیرممکن ممکن (مشخصات به عنوان قرارداد ارتباطی)
قطعیت خروجی کم، نتایج هر مکالمه ممکن است متفاوت باشد زیاد، مشخصات یکسان خروجی پایدار ایجاد می‌کند

۵. توصیه‌های کاربردی در دنیای واقعی

«در کار، بین Vibe Coding و Spec Coding یکی را انتخاب نمی‌کنید، بلکه ترکیبی از آنها استفاده می‌کنید: در مرحله اکتشاف (زمانی که از انتخاب فناوری یا سبک UI مطمئن نیستید)، از Vibe Coding برای اعتبارسنجی سریع گزینه‌های مختلف استفاده کنید، مثلاً «یک کامپوننت کارت با Tailwind بنویس تا ببینم چطور می‌شود». به محض تثبیت راه‌حل، فوراً به Spec Coding تغییر وضعیت دهید: نمونه اولیه موفق را به یک مشخصات واضح (ورودی/خروجی، شرایط مرزی، مدیریت خطا) تبدیل کنید، سپس از AI یا انسان بخواهید کد سطح تولید را دقیقاً طبق مشخصات بازنویسی کند. حالت صرفاً Vibe فقط برای اسکریپت‌های یک‌بار مصرف یا ابزارهای داخلی مناسب است؛ برای سیستم‌هایی که نیاز به نگهداری طولانی و استفاده چند نفر دارند، Spec Coding یک الزام سخت است.»

评论

暂无已展示的评论。

发表评论(匿名)