کلمهٔ «کدنویسی» برای خیلیها تصویر یک صفحهٔ سیاه با نوشتههای سبز و آدمی با هدفون را تداعی میکند که ساعت سه نصفهشب هنوز پشت کامپیوتر است. اما حقیقت این است که امروز یک حسابدار که هر هفته یک ساعت وقت صرف یکی کردن فایلهای اکسل میکند، یا یک دانشجو که یک صفحهٔ ساده برای محاسبهٔ معدلش میخواهد، میتواند به فارسی توضیح بدهد چه میخواهد و هوش مصنوعی کدش را بنویسد.
در این فصل اول با هم، از صفر، یک ابزار کوچک واقعی میسازیم و اجرایش میکنیم. بعد میبینیم فرمولهای اکسل و گوگل شیت در واقع همان «کدنویسی برای غیربرنامهنویسها» است. بخش سوم مخصوص کسانی است که برنامهنویسی بلدند، و در آخر مهمترین بخش را داریم: امنیت.
کد چیست و نقش شما چیست؟
کد یعنی دستورهایی که به زبانی نوشته شدهاند که کامپیوتر میفهمد. همین. در این فصل با دو زبان ساده سروکار داریم: HTML که ساختار و ظاهر یک صفحهٔ وب را میسازد (کجا دکمه باشد، کجا متن) و JavaScript که به آن صفحه رفتار میدهد (وقتی دکمه را زدید، حساب کند).
نقش شما در این ماجرا شبیه کسی است که از یک نجار، کمد سفارشی میخواهد. لازم نیست نجاری بلد باشید، اما باید دقیق بگویید چه میخواهید و وقتی کمد رسید، درها را باز و بسته کنید تا مطمئن شوید درست کار میکند. شما سفارشدهنده و آزمایشکنندهاید؛ هوش مصنوعی نجار است.
پروژهٔ اول: ماشینحساب قسط وام
چرا یک صفحهٔ HTML؟ چون روی هر کامپیوتری که مرورگر (مثل کروم یا فایرفاکس) دارد اجرا میشود و به نصب هیچ برنامهای نیاز ندارد.
قدم ۱: سفارش را دقیق بنویسید
من هیچ دانشی از برنامهنویسی ندارم. یک صفحهٔ HTML ساده میخواهم که قسط ماهانهٔ وام را حساب کند. - سه ورودی: مبلغ وام به تومان، نرخ سود سالانه به درصد، و تعداد ماههای بازپرداخت - یک دکمهٔ «حساب کن» - خروجی: مبلغ قسط ماهانه، جمع کل پرداختی و جمع سود - همهچیز فارسی و راستبهچپ باشد و اعداد خروجی سهرقمسهرقم جدا شوند - همهٔ کد در یک فایل باشد و به اینترنت یا نصب هیچ چیزی نیاز نداشته باشد - ظاهرش ساده ولی مرتب باشد کد کامل را بده و قدمبهقدم بگو چطور روی کامپیوتر ویندوزی اجرایش کنم.
به جزئیات این پرامپت دقت کنید: ورودیها، خروجیها، زبان، و حتی «همه در یک فایل» و «بدون نیاز به اینترنت». هر چه سفارش دقیقتر باشد، دور اصلاح کمتری لازم است.
قدم ۲: کد را ببینید و نترسید
جوابی که میگیرید احتمالاً طولانیتر و زیباتر است، اما اسکلتش چیزی شبیه این است:
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head><meta charset="UTF-8"><title>محاسبهٔ قسط وام</title></head>
<body>
<h2>محاسبهٔ قسط وام</h2>
مبلغ وام (تومان): <input id="p"><br>
سود سالانه (درصد): <input id="y"><br>
تعداد ماه: <input id="n"><br>
<button onclick="calc()">حساب کن</button>
<p id="out"></p>
<script>
function calc() {
var p = +document.getElementById("p").value;
var r = document.getElementById("y").value / 1200;
var n = +document.getElementById("n").value;
var q = r ? p * r * Math.pow(1 + r, n) / (Math.pow(1 + r, n) - 1) : p / n;
document.getElementById("out").innerText = "قسط ماهانه: " + Math.round(q).toLocaleString("fa-IR") + " تومان";
}
</script>
</body>
</html>لازم نیست حتی یک خطش را بفهمید. فقط ببینید که کد هم چیزی جز متن نیست: بالایش سه خانه برای ورودی و یک دکمه است، و پایینش بخشی به نام script که وقتی دکمه را میزنید، حسابوکتاب را انجام میدهد.
قدم ۳: اجرایش کنید
روی ویندوز:
- ۱برنامهٔ Notepad را باز کنید و کد کامل را در آن بچسبانید.
- ۲از منوی File گزینهٔ Save As را بزنید.
- ۳اسم فایل را loan.html بگذارید.
- ۴در قسمت Save as type گزینهٔ All Files را انتخاب کنید و اگر گزینهٔ Encoding را میبینید، روی UTF-8 باشد.
- ۵فایل را ذخیره کنید و روی آن دوبار کلیک کنید. در مرورگر باز میشود و ماشینحسابتان آماده است.
در مک میتوانید از برنامهٔ TextEdit استفاده کنید، به شرطی که آن را در حالت متن ساده (Plain Text) بگذارید. بعضی از چتباتها هم امکانی دارند که کد HTML را همانجا، داخل پنجرهٔ گفتگو، اجرا و نمایش میدهند؛ اگر چنین چیزی دیدید، از آن برای امتحان سریع استفاده کنید.
قدم ۴: تست کنید و گفتگو را ادامه دهید
حالا نوبت آزمایشکننده است. با عددهایی امتحان کنید که جوابشان را میدانید. مثلاً وام ۱۰۰ میلیون تومانی با سود سالانهٔ ۱۸ درصد و بازپرداخت ۱۲ ماهه، با این روش محاسبه قسطی حدود ۹ میلیون و ۱۶۸ هزار تومان دارد. اگر عدد شما خیلی فرق داشت، چیزی اشتباه است.
احتمالاً زود به اولین مشکل برمیخورید: اگر عدد را با کیبورد فارسی تایپ کنید، به جای جواب، کلمهٔ عجیب NaN ظاهر میشود (یعنی «این عدد نیست»). نگران نباشید؛ کافی است مشکل را دقیق بگویید:
وقتی عدد را با کیبورد فارسی مینویسم (مثلاً ۱۰۰۰۰۰۰۰۰)، به جای جواب NaN نمایش داده میشود. کد را طوری اصلاح کن که هم عدد فارسی و هم انگلیسی را قبول کند. همچنین اگر یکی از خانهها خالی بود، یک پیام خطای فارسی نشان بده. کد کامل اصلاحشده را بده.
بعد میتوانید امکانات اضافه کنید: «یک جدول اقساط ماهبهماه زیرش نشان بده» یا «یک دکمه برای پاک کردن فرم بگذار». دو قانون را رعایت کنید: در هر پیام فقط یک تغییر بخواهید، و هر نسخهای که درست کار کرد را با اسم جدید (مثلاً loan-v2.html) نگه دارید تا اگر نسخهٔ بعدی خراب شد، راه برگشت داشته باشید.
وقتی گیر کردید: سه قانون طلایی
- ۱متن کامل خطا را بدهید. «کار نمیکند» به هوش مصنوعی هیچ کمکی نمیکند. پیام خطا را کامل کپی کنید یا از صفحه عکس بگیرید و بفرستید.
- ۲بگویید انتظار چه داشتید و چه دیدید. «انتظار داشتم بعد از زدن دکمه قسط نمایش داده شود، اما هیچ اتفاقی نیفتاد.»
- ۳اگر بعد از سه بار تلاش درست نشد، از نو شروع کنید. یک گفتگوی تازه باز کنید، آخرین نسخهای که کار میکرد را بدهید و بخواهید با روشی سادهتر پیش برود. گفتگوهای طولانی گاهی خود هوش مصنوعی را هم سردرگم میکنند.
اکسل و گوگل شیت: کدنویسی برای کسانی که برنامهنویس نیستند
اگر تا حالا در اکسل فرمول نوشتهاید، در واقع کدنویسی کردهاید. فرمول یک دستور کوچک است که به نرمافزار میگوید چه حسابی انجام دهد. حالا خبر خوب: لازم نیست اسم و ترتیب تابعها را حفظ باشید. فقط باید ساختار جدولتان را دقیق توضیح بدهید.
در اکسل یک جدول فروش دارم: ستون A: تاریخ، ستون B: نام فروشنده، ستون C: نام محصول، ستون D: مبلغ فروش به تومان دادهها از ردیف ۲ تا ۵۰۰ هستند. فرمولی میخواهم که جمع فروش «رضا» را فقط برای محصول «یخچال» حساب کند. فرمول را بده و جزءبهجزء به زبان ساده توضیح بده چه کار میکند.
جواب احتمالاً چیزی شبیه این است:
=SUMIFS(D2:D500, B2:B500, "رضا", C2:C500, "یخچال")
و توضیحش به زبان ساده: «از ستون D جمع بزن، اما فقط ردیفهایی که در ستون B نوشته رضا و در ستون C نوشته یخچال.» دیدید؟ اصلاً ترسناک نیست.
چند نیاز رایج و تابعی که هوش مصنوعی احتمالاً برایش پیشنهاد میدهد:
| کاری که میخواهید | تابع احتمالی |
|---|---|
| جمع زدن با یک یا چند شرط | SUMIF یا SUMIFS |
| شمردن ردیفها با شرط | COUNTIF یا COUNTIFS |
| پیدا کردن اطلاعات از یک جدول دیگر | VLOOKUP یا در نسخههای جدیدتر XLOOKUP |
| تصمیم «اگر اینطور بود، آن کار را بکن» | IF |
| نمایش یک پیام به جای خطای زشت | IFERROR |
| چسباندن متن چند خانه به هم | CONCAT یا TEXTJOIN |
| محاسبهٔ قسط وام | PMT |
مثلاً برای اینکه ماشینحساب بخش قبل را با اکسل چک کنید، این فرمول همان عدد حدود ۹ میلیون و ۱۶۸ هزار تومان را میدهد (علامت منفی پشت مبلغ وام برای این است که جواب مثبت نمایش داده شود):
=PMT(18%/12, 12, -100000000)
یک قدم جلوتر: خودکار کردن کارهای تکراری
برای کارهای تکراری، هوش مصنوعی میتواند ماکرو (Macro) بنویسد؛ یعنی یک برنامهٔ کوچک داخل اکسل که چند کار را پشت سر هم و با یک کلیک انجام میدهد. در گوگل شیت، معادل آن Apps Script است.
در گوگل شیت هر روز باید ردیفهایی را که ستون «وضعیت» آنها «تحویل شد» است به برگهٔ «بایگانی» منتقل کنم. یک اسکریپت Apps Script برایش بنویس و قدمبهقدم بگو کجا بگذارمش و چطور اجرایش کنم. قبل از هر چیز هم بگو چطور از فایلم نسخهٔ پشتیبان بگیرم.
جملهٔ آخر را جا نیندازید. ماکرو و اسکریپت میتوانند در یک لحظه صدها ردیف را جابهجا یا پاک کنند؛ پس اول نسخهٔ پشتیبان، بعد اجرا.
برای برنامهنویسها: یک همکار خستگیناپذیر
اگر برنامهنویس هستید، هوش مصنوعی را مثل یک همکار در برنامهنویسی دونفره ببینید؛ همکاری که سریع است، حوصلهاش سر نمیرود، اما گاهی با اطمینان اشتباه میکند. کلید کار با او زمینه (Context) است: زبان و نسخه، فریمورک، متن کامل خطا، و کارهایی که قبلاً امتحان کردهاید.
رفع خطا (Debugging)
در پروژهٔ Python من این خطا رخ میدهد: [متن کامل پیام خطا] این تابعی است که خطا از آن میآید: [کد] انتظار داشتم فهرست کاربران فعال برگردد، اما خطای بالا را میگیرم. اول بگو به نظرت علت اصلی چیست و چرا. بعد اصلاحیه را با کمترین تغییر ممکن پیشنهاد بده.
عبارت «کمترین تغییر ممکن» مهم است؛ وگرنه ممکن است برای یک باگ یکخطی، کل تابع را از نو بنویسد.
توضیح کد
این کد را یکی از همکارانم سالها پیش نوشته و حالا من باید تغییرش بدهم. خطبهخط توضیح نده. اول در سه جمله بگو کل کد چه کار میکند، بعد بخشهای مهم را نشان بده و هر جایی را که ممکن است رفتار غیرمنتظره داشته باشد مشخص کن. من JavaScript بلدم ولی با این زبان آشنا نیستم؛ هر جا لازم است مقایسه کن. [کد]
نوشتن تست
تست یعنی کد کوچکی که خودکار چک میکند کد اصلی درست کار میکند؛ هر بار که چیزی را تغییر میدهید، تستها خبر میدهند اگر چیزی خراب شده باشد.
برای این تابع، تستهای واحد (Unit Test) با pytest بنویس. حالتهای عادی، حالتهای مرزی (ورودی خالی، صفر، عدد منفی، متن فارسی) و حالتهای خطا را پوشش بده. قبل از نوشتن کد، فهرست حالتهایی را که میخواهی تست کنی بنویس تا من تأیید کنم. [کد تابع]
یک دام رایج: هوش مصنوعی گاهی تستهایی مینویسد که رفتار فعلی کد را تأیید میکنند، حتی اگر آن رفتار اشتباه باشد. پس جوابهای مورد انتظار در تستها را خودتان بخوانید.
بازبینی کد (Code Review)
مثل یک برنامهنویس ارشد سختگیر این کد را بازبینی کن. مشکلات را به ترتیب اهمیت مرتب کن: اول باگها و مشکلات امنیتی، بعد کارایی، و در آخر خوانایی و نامگذاری. برای هر مورد، محل آن، مشکل و پیشنهاد اصلاح را بنویس. اگر بخشی مشکلی ندارد، الکی ایراد نگیر. [کد]
کاربردهای دیگری هم هست که ارزش امتحان دارند:
- نوشتن و توضیح عبارتهای باقاعده (Regex) که خواندنشان برای آدم سخت است
- نوشتن کوئریهای SQL از روی توضیح فارسی
- نوشتن مستندات و توضیح برای تابعها
- نوشتن پیام کامیت (Commit Message) از روی تغییرات
- تبدیل کد از یک زبان به زبان دیگر
علاوه بر پنجرهٔ گفتگو، ابزارهایی هم هستند که مستقیم داخل محیط برنامهنویسی (مثل VS Code) یا خط فرمان کار میکنند و میتوانند کل پروژه را ببینند و تغییر دهند. اسم و امکانات این ابزارها خیلی سریع عوض میشود، اما همهٔ اصول این فصل، بهخصوص بخش بعد، دربارهٔ آنها هم صدق میکند.
امنیت: مهمترین بخش این فصل
هرگز اطلاعات محرمانه را در گفتگو نچسبانید
کلید API (API Key) رمز عبوری است که برنامهها با آن به یک سرویس وصل میشوند؛ مثلاً سرویس پیامک یا درگاه پرداخت. اینها را هرگز در گفتگو با هوش مصنوعی نچسبانید:
- کلیدهای API و توکنها
- رمزهای عبور و اطلاعات اتصال به پایگاه داده
- فایلهای تنظیمات حاوی رمز (مثل فایلهای env.)
- اطلاعات شخصی مشتریها؛ نام، شماره تلفن، کد ملی، آدرس
به جای مقدار واقعی، یک جای خالی بگذارید:
API_KEY = "YOUR_API_KEY_HERE"
اگر اشتباهی یک کلید یا رمز را چسباندید، پاک کردن گفتگو کافی نیست. همان لحظه آن کلید را در سرویس مربوطه باطل کنید و کلید تازه بسازید. و اگر در یک شرکت کار میکنید، قبل از چسباندن کد شرکت در هر ابزاری، سیاست شرکت را بپرسید.
کد را قبل از اجرا بفهمید
کدی که نمیدانید چه میکند را روی کامپیوتر خودتان اجرا نکنید، بهخصوص اگر فایلی را پاک یا عوض میکند، چیزی نصب میکند، یا اطلاعاتی به اینترنت میفرستد. اگر خودتان نمیتوانید بخوانیدش، بپرسید:
قبل از اینکه این کد را اجرا کنم، به زبان ساده بگو دقیقاً چه کارهایی انجام میدهد. آیا فایلی را پاک یا عوض میکند؟ آیا اطلاعاتی به اینترنت میفرستد؟ آیا چیزی نصب میکند یا تنظیمات سیستم را تغییر میدهد؟ [کد]
ترفند خوب: این سؤال را در یک گفتگوی تازه یا حتی از یک ابزار دیگر بپرسید تا نگاه مستقلتری بگیرید.
چند عادت امنیتی دیگر:
- اول روی کپی امتحان کنید. قبل از اجرای هر کد یا ماکرو روی فایلهای واقعی، از آنها نسخهٔ پشتیبان بگیرید.
- بستهها و کتابخانهها را چک کنید. هوش مصنوعی گاهی نام کتابخانهای را پیشنهاد میدهد که وجود ندارد یا اسمش شبیه یک کتابخانهٔ معتبر است. قبل از نصب، مطمئن شوید واقعی، شناختهشده و از منبع رسمی است.
- برای محصول واقعی، بازبینی انسانی بگیرید. اگر کدی قرار است آنلاین شود و با اطلاعات کاربران کار کند، یک برنامهنویس باتجربه باید آن را از نظر امنیتی بررسی کند.
جمعبندی فصل
- برای ساختن ابزارهای کوچک لازم نیست برنامهنویس باشید؛ شما سفارشدهنده و آزمایشکنندهاید.
- یک صفحهٔ HTML تکفایلی را با Notepad ذخیره کنید (با پسوند html و رمزگذاری UTF-8) و در مرورگر باز کنید.
- نتیجه را با عددهای معلوم تست کنید، در هر پیام یک تغییر بخواهید و نسخههای سالم را نگه دارید.
- فرمول اکسل و گوگل شیت هم کدنویسی است؛ ساختار جدول را دقیق توضیح بدهید و فرمول را با چند ردیف چک کنید.
- برنامهنویسها با زمینهٔ کافی میتوانند از هوش مصنوعی برای رفع خطا، توضیح کد، نوشتن تست و بازبینی کمک بگیرند.
- هرگز کلید API، رمز یا اطلاعات شخصی را نچسبانید و هیچ کدی را بدون فهمیدنش اجرا نکنید.
حالا که دیدید هوش مصنوعی میتواند برایتان ابزار بسازد، در فصل سیزدهم سراغ ابزاری میرویم که هر روز با آن سروکار داریم: وقت. از برنامهٔ روزانه تا تحلیل جدولهای اکسل و یادداشت جلسهها.
ابزارهای هوش مصنوعی، قیمتها و قوانین استفادهٔ آنها مرتب تغییر میکند. مطالب این کتاب جنبهٔ آموزشی دارد؛ پیش از هر تصمیم مالی، حقوقی یا پزشکی با متخصص مشورت کنید و مسئولیت رعایت قوانین هر سرویس با کاربر است.