طراحی اپلیکیشن

ساخت اپلیکیشن با هوش مصنوعی

هوش مصنوعی امروز صفحه های یک اپلیکیشن را واقعا سریع می سازد و همان صفحه ها کوچک ترین بخش پروژه اند؛ بقیه، یعنی دسترسی ها، پول، حالت های خطا و نگهداری، همان جایی است که خروجی مدل بدون بازبینی انسان به دردسر می خورد. راه درست عوض کردن ترتیب کار است: اول مشخصات به زبان ساده، بعد تولید کد، و آخر یک پاس امنیتی که خودتان می خوانید.

  • درس ۸ از ۸
  • میانی
  • رایگان، بدون ثبت نام

صفحه ها چه سهمی از یک محصول واقعی دارند؟

خط کد در rgb-freelance، شمرده شده در ۸ سپتامبر ۲۰۲۶۱۷۹۶۳ خط
  1. ۳۲۳۱
  2. ۱۱۵۹۷
  3. ۳۱۳۵
  • صفحه ها ۳۲۳۱
  • پشت صفحه ها ۱۱۵۹۷
  • ظاهر ۳۱۳۵

این یک محصول وب ماست و نه یک اپ موبایل؛ عدد را به عنوان نسبت بخوانید و نه به عنوان قانون.

آخرین بررسی: فکت ها و نام ابزارهای این درس در همین تاریخ با منابعشان بازبینی شده اند.

هوش مصنوعی کدام قسمت اپلیکیشن را واقعا می سازد؟

جوابی که مدل ها را عادلانه قضاوت می کند یک عدد لازم دارد و ما آن را از یکی از محصول های خودمان برداشتیم، چون تنها پروژه ای است که می توانیم تا آخرین خطش بشماریم.

افزونه بازار کار ما، rgb-freelance، سه پوشه دارد. پوشه صفحه ها ۳۲۳۱ خط است، پوشه منطق پشت صفحه ها ۱۱۵۹۷ خط، و ظاهر یعنی CSS و جاوااسکریپت ۳۱۳۵ خط. جمعا ۱۷۹۶۳ خط، که در آن سهم صفحه ها کمی زیر یک پنجم است. این یک اپ موبایل نیست و ادعایش را هم نداریم؛ یک محصول وب با کاربر و پروژه و پیام و فایل است، و شکل تقسیمش همان شکلی است که در اپ موبایل هم دیده می شود.

حالا نقشه را روی مدل ها بگذارید. آن یک پنجم، یعنی صفحه ها، همان چیزی است که مدل ها امروز واقعا خوب می سازند: فرم، فهرست، حالت خالی، چیدمان واکنشگرا. آن دو سوم وسط، یعنی اینکه چه کسی چه چیزی را می بیند و پول کجا حساب می شود و وقتی سرور جواب نداد چه اتفاقی می افتد، همان جایی است که کد تولید شده معمولا کامل به نظر می رسد و نیست.

پس ادعای «اپ را با هوش مصنوعی بساز» نه دروغ است و نه کامل. دقیق ترش این است: سریع ترین بخش را سریع تر می کند. اگر انتظارتان همین باشد، سود واقعی می برید؛ اگر انتظارتان محصول تمام شده باشد، وقتی کشفش می کنید که کاربر واقعی دارید.

گوشی شیشه ای با صفحه های قرمز و سبز رنگ شده روی سازوکار آبی و سفیدی که هنوز اسکلت خالی است

سرعت نمونه سازی: چیزی که واقعا عوض شده

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

کاری که سخت ترین بخش شروع یک محصول بود، یعنی رساندن ایده به چیزی که بشود دستش گرفت و به کسی نشان داد، حالا در همان جلسه ممکن است. سه صفحه با داده الکی، یک جریان ورود، و یک فهرست که اسکرول می شود. برای اپ این حتی مهم تر از وب است، چون آدم ها روی گوشی درباره یک ایده جور دیگری قضاوت می کنند تا روی کاغذ.

ارزش واقعی این سرعت جایی است که کمتر به آن فکر می شود: هزینه دور ریختن. وقتی یک نسخه اولیه در نیم روز ساخته می شود، بی خیال شدنش هم آسان است. تیم هایی که ماه ها روی نسخه اول کار می کنند، به همان اندازه به آن وابسته می شوند و ایده بد را دیرتر رها می کنند. این تنها جایی است که کد ارزان واقعا یک مزیت راهبردی است و نه فقط صرفه جویی.

و مرز این حرف را هم صریح بگوییم، چون همه جا با هم قاطی می شود: نمونه، محصول نیست. نمونه ای که کار می کند هنوز نه کاربر واقعی دیده، نه شبکه ضعیف، نه کسی که عمدا ورودی غلط می فرستد. فاصله بین این دو همان دو سوم بخش قبلی است، و هیچ مدلی آن را برایتان کوتاه نمی کند. اگر همین بحث را از طرف وب دیده اید، وایب کدینگ؛ مزایا و خطرها همین موضع را با جزئیات بیشتری روی کد گرفته.

چه چیزی را به مدل بدهید و چه چیزی را نگه دارید

نگه دارید نزد خودتان

  • تصمیم اینکه چه کسی چه چیزی را می بیند
  • هر جایی که پول یا موجودی حساب می شود
  • کلیدها، رمزها و فایل تنظیمات واقعی
  • قبول نهایی هر تکه کد که وارد پروژه می شود

بدهید به مدل

  • صفحه ها، فرم ها، فهرست ها و حالت خالی
  • چیدمان واکنشگرا و تطبیق راست به چپ
  • نسخه اولیه ای که قرار است دور ریخته شود
  • بازخوانی کدی که خودش نوشته، در جلسه ای جدا

ستون راست به معنی «مدل نمی تواند» نیست؛ به معنی این است که خروجی اش را باید یک آدم قبول یا رد کند.

چهار چیزی که در اپ ساخته شده با مدل خراب می شود

این چهار تا از روی حدس نوشته نشده اند؛ هر کدام یک منبع دارند و منبع هر کدام حرف خود همان شرکتی است که ابزارش را می فروشد.

یک، کلید داخل اپ. اینجا اول باید یک بدفهمی رایج را کنار گذاشت: هر کلیدی داخل اپ خطر نیست. صفحه خود گوگل درباره کلیدهای فایربیس می نویسد که آنها «به طور ذاتی عمومی» هستند و فقط پروژه و اپ شما را معرفی می کنند، و اگر تنظیمات درست باشد لازم نیست مثل راز با آنها رفتار شود و گذاشتنشان در کد ایمن است. ولی همان صفحه یک استثنای صریح دارد که دقیقا همان چیزی است که در اپ های تولید شده دیده می شود: هیچ وقت ای پی آی جمینای را در فهرست مجاز یک کلید عمومی نگذارید. یعنی مدلی که کلید هوش مصنوعی را کنار کلید فایربیس داخل اپ می گذارد، در ظاهر همان کار را کرده و در عمل حساب شما را باز گذاشته.

دو، دسترسی که نوشته نشده. کد تولید شده معمولا مسیر خوشبینانه را کامل می سازد و مسیر بدبینانه را نه. فهرست OWASP Mobile Top 10 خانه اول را به «استفاده نادرست از اطلاعات هویتی» داده و شیوع آن را رایج، تشخیصش را آسان و اثرش را شدید ارزیابی کرده؛ یعنی این کلاس خطا هم زیاد اتفاق می افتد و هم راحت پیدا می شود، که ترکیب بدی است. اولین سوالی که باید از کد تولید شده بپرسید این است: کجا چک شده که این کاربر اجازه این کار را دارد؟

سه، کدی که ماه بعد قابل نگهداری نیست. این خطر برخلاف دو تای قبلی امنیتی نیست و به همین دلیل دیرتر معلوم می شود. مشکل کد بد نیست، کد بی صاحب است: چهار تکه از چهار جواب مختلف که هر کدام الگوی خودشان را دارند و هیچ کس نمی داند کدامشان چرا آنجاست. راه حل ساده ای دارد که هیچ ربطی به هوش مصنوعی ندارد: قبل از قبول هر تکه کد، بتوانید در یک جمله بگویید چه می کند.

چهار، مجوز. اینجا هم واقعیت از هر دو روایت رایج معتدل تر است. مستندات گیتهاب درباره کوپایلت می نویسد که پیشنهادها با کد عمومی مقایسه می شوند و اگر تطابقی پیدا شود، آدرس فایل ها و نام مجوزی که بر آن کد حاکم است ثبت می شود تا خودتان تصمیم بگیرید. همان صفحه می گوید این تطابق ها معمولا در کمتر از یک درصد پیشنهادها رخ می دهد، و دو نکته مهم تر: این بررسی فقط برای پیشنهادهای درون ویرایشگر که پذیرفته شده اند انجام می شود، و کدی که خودتان نوشته اید یا پیشنهادی که تغییرش داده اید اصلا بررسی نمی شود. پس ابزار سنجش وجود دارد، ولی محدود است و روشن بودنش یک تنظیم است نه یک پیش فرض جهانی.

چهار جایی که خروجی مدل کامل به نظر می رسد و نیست

  • کلید در جای اشتباه

    کلید فایربیس داخل اپ ایراد ندارد؛ کلید ای پی آی هوش مصنوعی کنارش دارد.

  • دسترسی چک نشده

    مسیر خوشبینانه کامل است و هیچ جا نپرسیده این کاربر اجازه دارد یا نه.

  • کد بی صاحب

    چند تکه از چند جواب مختلف، بدون الگوی مشترک و بدون کسی که بداند چرا.

  • مجوز نامعلوم

    ابزار سنجش تطابق با کد عمومی وجود دارد ولی روشن بودنش یک تنظیم است.

هیچ کدام از این چهار تا مخصوص هوش مصنوعی نیستند؛ کد دست نویس هم می تواند هر چهار را داشته باشد. تفاوت در سرعت تولیدشان است.

ترتیب درست: اول مشخصات، بعد کد

هر چهار مورد بالا یک ریشه مشترک دارند و آن ریشه فنی نیست: از مدل خواسته شده کد بنویسد در حالی که هنوز کسی تصمیم ها را نگرفته بود. مدل تصمیم نمی گیرد، جای خالی را پر می کند، و جای خالی را با متعارف ترین چیزی که دیده پر می کند.

پس ترتیب را عوض کنید. سه پاس، به همین ترتیب، و هیچ کدام را جا نیندازید.

پاس اول مشخصات است و هیچ کدی در آن نیست: فهرست قابلیت ها به زبان ساده، شکل داده، و اینکه هر کسی چه چیزی را می بیند و چه چیزی را عوض می کند. اگر بک اند اپلیکیشن چیست را خوانده باشید، این همان جدول دسترسی است و جایش دقیقا اینجاست، قبل از تولید.

پاس دوم تولید است و ورودی اش خروجی پاس اول است، نه توضیح شفاهی شما. تفاوت این دو زیاد است: وقتی فهرست قابلیت ها و شکل داده جلوی مدل باشد، چیزی برای حدس زدن نمانده و کدی که می سازد قابل مقایسه با یک سند است.

پاس سوم بازبینی است و آن را نباید همان جلسه ای انجام داد که کد تولید شده. یک پاس جداگانه با یک پرسش مشخص: این کد کجا فرض کرده که کاربر راست می گوید. این پاس همان چیزی است که در بخش بعد به شکل نسخه آمده.

یک قاعده که در هر سه پاس صادق است و ساده ترین آنهاست: هر کد تولید شده ای که خودتان نمی توانید در یک جمله توضیحش بدهید، وارد پروژه نشود. نه به این دلیل که حتما غلط است، به این دلیل که وقتی خراب شود کسی نمی داند از کجا شروع کند. کدنویسی با هوش مصنوعی همین قاعده را از سمت زبان برنامه نویسی باز کرده.

برگه بازبینی کد تولید شدهدر جلسه ای جدا از تولید

قبل از وارد کردن کد به پروژه

  • می توانید در یک جمله بگویید این تکه چه می کند
  • هر جایی که داده عوض می شود، اجازه کاربر چک شده
  • هیچ کلید یا رمزی داخل کد نیست جز آنهایی که عمومی اند
  • هر درخواست شبکه یک حالت خطا و یک مهلت دارد

اینها یعنی هنوز قبولش نکنید

  • مبلغ یا نقش یا موجودی از سمت کلاینت می آید
  • کد از کتابخانه ای استفاده می کند که شما اسمش را هم نشنیده اید
  • بازبینی را همان مدلی کرده که کد را نوشته، در همان جلسه
  • هیچ کس نمی داند این تکه چرا اینجاست

مسیر سریع با هوش مصنوعی

نسخه ای که واقعا فرق می کند یک پرامپت نیست، سه تاست، و ترتیبشان مهم تر از متنشان است. اولی هیچ کدی تولید نمی کند، دومی از خروجی اولی تغذیه می شود نه از حرف شما، و سومی در جلسه ای جدا اجرا می شود تا مدل کد خودش را با چشم تازه ببیند.

  1. پاس یک، مشخصات. از مدل فهرست قابلیت ها و شکل داده را بخواهید و صریح بگویید هیچ کدی ننویسد. خروجی این پاس سندی است که خودتان می خوانید و اصلاح می کنید.
  2. پاس دو، تولید. سند اصلاح شده را عینا جلوی مدل بگذارید و بگویید فقط از روی همین بساز. اگر چیزی در سند نیست، به جای ساختنش باید بپرسد.
  3. پاس سه، بازبینی امنیتی، در یک جلسه تازه. کد را بدون تاریخچه گفتگو بدهید و فقط سوال های نسخه سوم را بپرسید. مدلی که کد را نوشته، در همان جلسه از آن دفاع می کند.
  4. برای پاس یک و سه مدل قوی بگذارید و برای پاس دو مدل ارزان تر هم کافی است. انتخاب فعلی ما در بخش هوش مصنوعی سایت آمده و شماره نسخه اش را عمدا اینجا ننوشته ایم.

نسخه آماده کپی

--- پاس ۱: مشخصات، بدون کد ---
می خواهم این اپلیکیشن را بسازم:
{توضیح ساده اپ به زبان عادی}

هیچ کدی ننویس. بده:
۱) فهرست صفحه ها، و برای هر صفحه یک جمله که چه کاری با آن انجام می شود.
۲) شکل داده: جدول ها یا مجموعه ها، فیلدها، و اینکه هر سطر مال کدام کاربر است.
۳) جدول دسترسی: برای هر نقش کاربری، چه چیزی را می بیند و چه چیزی را عوض می کند، هر خانه با یک جمله کامل.
۴) فهرست «سوال هایی که باید بپرسم» برای هر جای خالی. جای خالی را پر نکن.

--- پاس ۲: تولید، از روی سند ---
این سند مشخصات است و من خودم اصلاحش کرده ام:
{خروجی اصلاح شده پاس ۱}

کد اپ را بر اساس همین سند بنویس، با این قاعده ها:
- چیزی نساز که در سند نیست. اگر لازم بود و نبود، به جای ساختن یک کامنت با متن «در سند نیست، باید پرسیده شود» بگذار.
- هر کلید و رمزی را از تنظیمات بخوان و هیچ مقدار واقعی در کد ننویس، حتی نمونه.
- هر جا داده عوض می شود، اجازه کاربر را چک کن و اگر جدول دسترسی چیزی نگفته، چک نکردن را ننویس؛ کامنت بگذار.
- هر درخواست شبکه یک مهلت و یک حالت خطا داشته باشد، و خطاها را بر اساس کد وضعیت دسته بندی کن.
- در انتها فهرست هر کتابخانه بیرونی که استفاده کرده ای را بنویس، با یک جمله دلیل برای هر کدام.

--- پاس ۳: بازبینی، در جلسه ای تازه ---
این کد یک اپلیکیشن است. آن را ننوشته ای و درباره اش تاریخچه ای نداری.
{کد}

فقط به این چهار سوال جواب بده، هر کدام با شماره خط:
۱) کجا فرض شده که ورودی کاربر درست است؟
۲) کجا داده ای عوض می شود بدون اینکه اجازه کاربر چک شده باشد؟
۳) چه چیزی در کد هست که باید در تنظیمات باشد؟
۴) کدام درخواست شبکه مهلت یا حالت خطا ندارد؟

اگر برای سوالی موردی پیدا نکردی، بنویس «موردی پیدا نشد». چیزی اضافه نکن و کد اصلاح شده ننویس.

قبل از اعتماد به خروجی: خروجی پاس سوم فهرست اتهام است و نه فهرست حقیقت. هر موردی که برگشت را خودتان روی همان شماره خط باز کنید و ببینید؛ مدل ها هم مورد جا می اندازند و هم مورد از خودشان می سازند. و یک چیز که هیچ پاسی نمی گیردش: مدل نمی داند کدام داده در محصول شما حساس است. اینکه کدام جدول اطلاعات شخصی دارد و کدام یکی نه، تصمیم شماست و باید در همان سند پاس اول نوشته شده باشد، وگرنه هر سه پاس روی فرض های خنثی اجرا می شوند.

هوش مصنوعی در این کار

موضع ما این است: برای اپلیکیشن، از مدل ها استفاده کنید و از روز اول یک آدم را مسئول قبول کردن هر تکه کد بگذارید. سه ابزار پایین برای سه کار متفاوت اند و مهم ترین نکته این است که ابزار پاس بازبینی نباید همان جلسه ای باشد که کد را نوشته.

ابزارهایی که واقعا کمک می کنند

  • Claude Code برای پاس دوم و سوم روی خود پروژه به کار می آید، چون فایل ها را می بیند و می تواند شماره خط بدهد. روی همان حساب انتروپیک کار می کند و ایران در فهرست کشورهای پشتیبانی شده نیست.
  • Claude برای پاس مشخصات و برای بازبینی کد در یک جلسه تازه مناسب است. ایران در هیچ یک از دو فهرست کشورهای پشتیبانی شده انتروپیک نیست. این را از صفحه خود انتروپیک خوانده ایم و نه از تست شبکه.
  • Gemini برای پاس دوم و برای کارهای تکراری روی صفحه ها مقرون به صرفه است. صفحه خود گوگل می گوید اپ وب جمنای در بیش از دویست و سی کشور و منطقه کار می کند و ایران در آن فهرست نیست.

کجا نتیجه معکوس می دهد

خطر اصلی این درس یک باگ نیست، یک عادت است: قبول کردن کدی که هیچ کس نخوانده. سه تا از چهار موردی که در بخش سوم آمد، همه در بازبینی یک آدم پیدا می شوند و هیچ کدام در تست خودکار. پس قاعده ای که پیشنهاد می کنیم قاعده کدنویسی نیست، قاعده تیمی است: هر تکه کد یک نفر را دارد که آن را قبول کرده و می تواند توضیحش بدهد، حتی اگر ننوشته باشدش.
خطر مشخص تر همان کلید است و منبعش صفحه خود گوگل: کلید فایربیس عمومی است و گذاشتنش در کد ایمن است، ولی همان صفحه صریح می گوید ای پی آی جمینای هرگز نباید در فهرست مجاز یک کلید عمومی باشد. مدلی که «کلیدها را در فایل تنظیمات اپ بگذار» را کورکورانه اجرا کند، این دو را یکی می بیند. هر بار که خروجی مدل کلیدی را جایی گذاشت، خودتان بپرسید این کلید به چه چیزی دسترسی می دهد و اگر یک غریبه آن را داشته باشد چه می تواند بکند.

منبع ها: Firebase: learn about using and managing API keys GitHub Docs: Copilot code referencing OWASP Mobile Top 10: M1 improper credential usage Anthropic: supported countries Google: where Gemini Apps are available

حد این توصیه

ما اپلیکیشن موبایلی که یک مدل از ابتدا تا انتها نوشته باشد را منتشر نکرده ایم، و عددی که در بخش اول آمد از یک محصول وب ماست و نه از یک اپ موبایل. پس آن نسبت را به عنوان یک تناسب بخوانید و نه به عنوان قانونی که روی هر پروژه ای صدق کند. سه چیز دیگر هم عمدا اینجا نیست: هیچ ادعایی درباره اینکه کد نوشته شده با مدل قابل تشخیص است، هیچ درصدی درباره اینکه چند درصد کد امروز را مدل ها می نویسند، و هیچ مقایسه ای بین ابزارها بر اساس کیفیت خروجی. هر سه بدون اندازه گیری قابل گفتن نیستند و ما اندازه نگرفته ایم.

از تجربه خود ما

عددهای بخش اول را همین امروز روی افزونه خودمان شمردیم و با سه دستور قابل تکرارند. در پوشه rgb-freelance: فایل های PHP پوشه templates روی هم ۳۲۳۱ خط اند، فایل های PHP پوشه includes روی هم ۱۱۵۹۷ خط، و فایل CSS به همراه شش فایل جاوااسکریپت ۳۱۳۵ خط. چیزی که این شمارش برای ما روشن کرد این بود: بخشی که در جلسه های نمایش محصول همه درباره اش حرف می زنند، کمتر از یک پنجم کدی است که نوشته شده. و یک قرینه از همین بخش آموزش که به همان نتیجه رسیده: اعتبارسنج همین درس ها، تابع rgbl_validate_lesson، بیست و سه قاعده دارد و یکی از آنها هر درسی را که بلوک محدودیت یا بلوک تجربه دست اول نداشته باشد رد می کند. آن دو بلوک را از اول برای همین اجباری کردیم که دقیقا همان دو چیزی هستند که یک متن تولید شده به طور پیش فرض ندارد.

سوال هایی که واقعا پرسیده می شوند

بدون بلد بودن برنامه نویسی می شود با هوش مصنوعی اپ ساخت؟

یک نمونه که کار کند بله، و بارها دیده شده. یک محصولی که پول واقعی و داده واقعی آدم ها را نگه دارد نه، چون سه تا از چهار خطر این درس فقط با خواندن کد پیدا می شوند. راه میانی این است که خودتان نمونه را بسازید و برای پاس بازبینی از کسی کمک بگیرید که کد می خواند.

کد تولید شده با هوش مصنوعی مشکل مالکیت دارد؟

وضعیت از هر دو روایت رایج معتدل تر است و به ابزار و تنظیماتش بستگی دارد. مستندات گیتهاب می گوید پیشنهادها با کد عمومی مقایسه می شوند و در صورت تطابق، نام مجوز آن کد ثبت می شود تا خودتان تصمیم بگیرید، و این تطابق معمولا در کمتر از یک درصد پیشنهادها رخ می دهد. برای هر ابزار دیگری باید شرایط خودش را بخوانید و ما اینجا از طرف هیچ کدام حرف نمی زنیم.

مدل ها بهتر است کل اپ را بنویسند یا فقط تکه هایش را؟

به اینکه بعدش چه اتفاقی می افتد بستگی دارد. برای چیزی که قرار است دور ریخته شود، کل اپ را بدهید و اصلا نخوانید؛ سرعت همان هدف است. برای چیزی که قرار است بماند، تکه تکه بدهید و هر تکه را قبل از تکه بعد قبول کنید، چون کد بی صاحب دقیقا وقتی ساخته می شود که پنج تکه با هم آمده باشند.