وقتی اپساز هوش مصنوعی رشتهٔ کار را گم میکند: برگرداندن بیلدتان به مسیر بدون شروع دوباره
یک حس مشخص هست که مردم بعد از چند ساعت ساختن با یک اپساز هوش مصنوعی توصیفش میکنند. ساعت اول عالی است. یک ایده را طرح میزنید، میبینید که آن چیز جلوی چشمتان خودش را سرهم میکند، در اپ نیمهساختهتان کلیک میکنید و نیشتان باز میشود. بعد جایی حدود ساعت سوم، اوضاع شروع به لغزیدن میکند. هوش مصنوعی باگی را که گزارش دادید درست میکند، اما صفحهٔ بالایش حالا متفاوت به نظر میرسد. ازش میخواهید برگرداند، و چیز دیگری را تغییر میدهد. تا ساعت پنجم دیگر مطمئن نیستید چه چیزی ذخیره شده و چه چیزی نه، و دارید به این فکر میکنید که نکند باید فقط از نو شروع کنید.
نباید بکنید. اپساز هوش مصنوعی خراب نشده؛ رشتهٔ کار را گم کرده. این حالتی بسیار قابلرفع است، و لازم نیست پروژهتان را منفجر کنید تا از آن بیرون بیایید.
«گم کردن رشتهٔ کار» واقعاً یعنی چه
وقتی یک اپساز هوش مصنوعی نتایج خوبی تولید میکند، به این خاطر است که دو چیز با هم ردیفاند: تصویری روشن از آنچه میخواهید دارد، و تصویری روشن از اینکه اپ حالا چه شکلی است. اکثر مارپیچهای بیلد بد از مبهم شدن یکی از این دو میآیند.
کمی شبیه این است که از یک دوست بخواهید یک اتاق را از پشت تلفن تزئین مجدد کند. اگر بتواند اتاق را ببیند و هدف را بفهمد، عالی است. اگر دارد اتاق را از روی عکسی که دو ساعت پیش فرستادید به یاد میآورد، و هدف از آن موقع سه بار تغییر کرده، شروع به جابهجا کردن چیزها به گوشههایی میکند که دیگر وجود ندارند. هوش مصنوعی در همان موقعیت است. دارد از روی یک عکس فوری کار میکند، و عکس فوری شما کهنه شده.
معمولاً از طریق یکی از سه نشانه متوجهش میشوید.
نشانهٔ ۱: هوش مصنوعی دارد همان چیز را بازنویسی میکند
از هوش مصنوعی میخواهید دکمهٔ ورود را درست کند. دکمهٔ ورود را بازنویسی میکند. از او میخواهید همان دکمهٔ ورود را دوباره درست کند — با همان عبارت، همان دستور — و دوباره بازنویسیاش میکند، کمی متفاوت. دو دور دیگر و دکمه حالا رنگ سومی است و در بخش دیگری از صفحه زندگی میکند.
این یک نشانهٔ روانشدگی حافظه است. هوش مصنوعی استفاده از کار قبلیاش بهعنوان پایه را متوقف کرده و هر نوبت دارد از روی توصیف شما از نو شروع میکند. نسخهٔ جدید همیشه بدتر نیست، فقط متفاوت است، که اگر قبلاً نسخهٔ قدیمی را دوست داشتهاید همان به اندازهٔ بدتر است.
وقتی این اتفاق میافتد، ترفند این است که آن را لنگر بیندازید. توصیف تغییر را بهصورت انتزاعی متوقف کنید («دکمهٔ ورود را تمیزتر کن») و شروع به توصیفش به شکلی کنید که هوش مصنوعی بتواند با آنچه واقعاً روی صفحه است تطبیقش دهد («دکمه الان میگوید “ورود”، در مرکز است، و آبی است — هر سه را نگه دار، فقط گوشهها را گرد کن»). دارید یک عکس فوری تازه به هوش مصنوعی میدهید. چیزی که همیشه به غیربرنامهنویسها برای خروج از این حلقه کمک میکند، یک جمله است که میگوید «الان X میکند — فقط Y را تغییر بده».
نشانهٔ ۲: هر رفع چیز دیگری را خراب میکند
یک فرم ثبتنام خراب را گزارش میدهید. هوش مصنوعی فرم را درست میکند. صفحه را بارگذاری مجدد میکنید و چیدمان داشبورد جابهجا شده. ازش میخواهید داشبورد را به جایش برگرداند. فرم ثبتنام دوباره خراب میشود.
این همان مارپیچی است که مردم را به وحشت شروع دوباره میاندازد، و رایجترین دلیلی است که بیلدها در ۸۰٪ تکمیل رها میشوند. آنچه زیر سطح در حال وقوع است این است که هوش مصنوعی دارد به فایلها یا اجزایی دست میزند که بیش از ناحیهای که پرسیدید را تحت تأثیر قرار میدهند. یک بنیانگذاری را اخیراً تماشا کردم که از هوش مصنوعی خواست «رنگهای صفحهٔ اصلی را درست کن» و در نهایت یک نوار ناوبری متفاوت در همهجا گیرش آمد — چون استایلهایی که هر دو را پیش میبردند در یک جا زندگی میکردند، و هوش مصنوعی هر دو را یکجا درست کرد. فکر میکند دارد یک چیز را درست میکند؛ در واقع دارد دو چیز را ویرایش میکند.
رفع، مکانیکی است. به زبان ساده از هوش مصنوعی بخواهید فقط فایل یا صفحه یا جزئی را که برایتان مهم است تغییر دهد، و به همه چیز دیگر دست نزند. اکثر اپسازهای هوش مصنوعی وقتی این محدودیت را تعیین میکنید به آن احترام میگذارند. «فقط صفحهٔ ثبتنام را ویرایش کن. به چیدمان داشبورد دست نزن، فایل جدید اضافه نکن، چیزی را بازسازماندهی نکن.» اگر باگ در کد مشترک است — مثلاً استایلی که هم فرم و هم داشبورد را پیش میبرد — هوش مصنوعی به شما خواهد گفت. این اطلاعات مفیدی است، و نقطهٔ شروع بسیار بهتری از حدس زدن است.
چیز دیگری که اینجا کمک میکند: انباشتن رفعها را متوقف کنید. اگر بیلد در حالت نیمهخراب است، یک پیروزی کوچک بگیرید، ذخیرهاش کنید، و جلو بروید. اپسازهای هوش مصنوعی میتوانند مشکلات را سریع روی هم انباشته کنند، چون هر دستور حالت نیمهخراب قبلی را بهعنوان ورودی دارد. یک نقطهٔ ذخیرهٔ تمیز آن زنجیره را میشکند.
نشانهٔ ۳: هوش مصنوعی دارد همان سؤالها را از شما میپرسد
سه نوبت پیش پرسید کدام پایگاه داده را میخواهید. گفتید Postgres. حالا دوباره میپرسد، اما با عبارتی متفاوت — «آیا این داده باید بین جلسهها بماند؟» — و میفهمید دارد به سمت همان تصمیم روان میشود.
این معمولاً یعنی هوش مصنوعی بافتار سطح-پروژه را گم کرده. دارد با چند پیام آخر کار میکند، نه با انتخابهای معماری که قبلاً کردید. واقعاً نمیتوان مقصرش دانست؛ انسانها هم در جلسههای طولانی همین کار را میکنند. اما نتیجه این است که مدام دارید سر پایه دوباره دادخواهی میکنید درحالیکه سعی دارید طبقهٔ دوم را بسازید.
راه خروج این است که یک بریف پروژهٔ کوتاه و به زبان ساده بنویسید و وقتی هوش مصنوعی شروع به روان شدن میکند دوباره بچسبانیدش. دو یا سه جمله کافی است: «این یک وباپ برای رزرو کلاسهای گیتار است. مربیها دردسترس بودنشان را مدیریت میکنند. شاگردها یک جای خالی رزرو میکنند، پرداخت میکنند، و یک ایمیل تأیید میگیرند. برای ذخیرهسازی از Postgres و برای پرداخت از Stripe استفاده کن.» آن پاراگراف، چیزی است که هوش مصنوعی بیش از همه باید نزدیک نگهش دارد، و چیزی است که بیش از همه فراموشش میکند. با آن مثل یک یادداشت روی یخچال رفتار کنید.
یک راهنمای کوچک برای خارج شدن از گیر
وقتی به یکی از آن سه نشانه برخوردید، این چیزی است که معمولاً جواب میدهد، به ترتیب. لازم نیست همهاش را انجام دهید؛ اولین قدمی که علامت را رفع کند معمولاً کافی است.
آنچه جواب میدهد را ذخیره کنید. پیش از هر کار دیگری، مطمئن شوید بخشهایی از اپتان که هنوز کار میکنند بهعنوان یک نسخه یا نقطهٔ بازرسی ذخیره شدهاند. اکثر اپسازها این را بهصورت داخلی دارند؛ اگر مال شما ندارد، اسکرینشات بگیرید و رفتار قابلمشاهده را در یک یادداشت کپی کنید. به یک خطمبنا نیاز خواهید داشت.
هدف را در یک جمله نام ببرید. با صدای بلند، بهصورت نوشتاری، جایی. «دارم سعی میکنم فرم ثبتنام یک ایمیل و رمز عبور بپذیرد و یک پیام خوشآمد ایمیل کند.» اگر نمیتوانید آن را در یک جمله نام ببرید، این بخشی از دلیل روان شدن هوش مصنوعی است — دارد ابهام خودتان را به شما بازمیتاباند.
قطعهٔ خراب را جدا کنید. به هوش مصنوعی بگویید مجاز است به کدام صفحه، جزء یا قابلیت دست بزند. دقیق باشید. «فقط فرم ثبتنام را ویرایش کن. چیز دیگری را تغییر نده.» اگر نمیتوانید دقیقاً نام ببرید چه چیزی خراب است، از هوش مصنوعی بخواهید خلاصه کند آخرین بار چه چیزی را تغییر داد؛ این اغلب قطعهٔ متحرک واقعی را آشکار میکند.
تغییر را به آنچه حالا هست لنگر بیندازید. حالت فعلی و حالت هدف را توصیف کنید. «الان یک پیام خطای قرمز زیر فیلد رمز عبور نشان میدهد. میخواهم آن پیام خطا وقتی کاربر دوباره شروع به تایپ میکند ناپدید شود.» قبل-و-بعدِ ملموس از نیّت انتزاعی بهتر است.
پیروزی را بگیر و بایست. سختترین بخش کل این فهرست. وقتی بیلد به یک حالت کارآمد برگشت، ذخیره کنید و برای چند دقیقه کنار بروید. فوراً سعی نکنید چیز بعدی را درست کنید. بیلدهایی که چهار پنج رفع را پشتسرهم روی هم میگذارند معمولاً وارد مارپیچ دیگری میشوند. بیلدهایی که یک چیز را درست میکنند، ذخیره میکنند، و مکث میکنند معمولاً نمیشوند.
وقتی واقعاً زمان شروع دوباره است
گاهی انتخاب درست واقعاً شروع از نوست، و دانستن نشانهها ارزش دارد. اگر پروژهتان زیاد چرخش داشته — ایدهٔ اصلی دیگر ایدهٔ واقعی نیست، و اپ سه چهار نسخهٔ متفاوت از «این چیست» را بازتاب میدهد — یک شروع تمیز با یک دستور جدید سریعتر از باز کردن گره است. همین برای وقتی صدق میکند که آنقدر طولانی تکرار کردهاید که دیگر واقعاً نمیدانید چه چیزی در پروژه هست. هزینهٔ هدررفته به شما خواهد گفت ادامه دهید. خودِ فردایتان بابت بازنشانی از شما تشکر خواهد کرد.
اما این استثناست. نسخهٔ روزمرهٔ «این بیلد دارد کج میرود» اگر بدانید دنبال چه بگردید در پنج دقیقه قابلرفع است. هوش مصنوعی یادش نرفت چطور اپ بسازد. فقط یادش رفت کدام را میساختید.
اگر یکی از این مارپیچها را پشتسر گذاشتهاید — حلقهها، رفعهای آبشاری، همان سؤالها بهصورت تکراری — سعی کنید هدف یکجملهای پروژهتان را جایی بنویسید که بتوانید دوباره بچسبانیدش. این یک عادت کوچک است که لحظهٔ گیر بعدی را کوتاهتر میکند.