tech-afternoon
رفتن به کانال در Telegram
مطالب تِکافترنون حول AI، معماری و توسعه نرمافزار؛ و موضوعات مرتبط با تکنیکال لیدرشیپ است. https://mesbahi.net/fa/ youtube.com/@AminTechTalks/videos امین مصباحی
نمایش بیشتر1 510
مشترکین
+324 ساعت
+317 روز
+13530 روز
در حال بارگیری داده...
جذب مشترکین
ژوئیه '26
ژوئیه '26
+62
در 1 کانالها
ژوئن '26
+100
در 2 کانالها
Get PRO
مه '26
+84
در 0 کانالها
Get PRO
آوریل '26
+18
در 0 کانالها
Get PRO
مارس '26
+5
در 0 کانالها
Get PRO
فوریه '26
+53
در 3 کانالها
Get PRO
ژانویه '26
+41
در 3 کانالها
Get PRO
دسامبر '25
+86
در 4 کانالها
Get PRO
نوامبر '25
+1 142
در 3 کانالها
| تاریخ | رشد مشترکین | اشارات | کانالها | |
| 11 ژوئیه | +6 | |||
| 10 ژوئیه | +3 | |||
| 09 ژوئیه | +4 | |||
| 08 ژوئیه | +2 | |||
| 07 ژوئیه | +1 | |||
| 06 ژوئیه | +2 | |||
| 05 ژوئیه | +7 | |||
| 04 ژوئیه | +13 | |||
| 03 ژوئیه | +22 | |||
| 02 ژوئیه | +1 | |||
| 01 ژوئیه | +1 |
پستهای کانال
داستان یک Date بد!
گاهی بزرگترین باگها، اونهایی نیستن که همون لحظه خطا بدن یا سیستم رو متوقف کنن. بلکه گاهی باگ، ۲۰ سال، ۳۰ سال، یا حتی بیشتر کنار ما زندگی میکنه. همه هم میدونن که بده. همه هم تجربهاش کردن. همه هم حداقل یک بار بهش فحش و فضیحت دادن. ولی چون میلیونها خط کد بهش وابسته است، کسی جرأت نمیکنه مستقیم دست ببره و درستش کنه.
شروع ماجرا: ده روز فرصت و یک تصمیم عجولانه
سال ۱۹۹۵، Brendan Eich در Netscape، شرکتی که بعدها پروژه Mozilla از دلش بیرون اومد؛ فقط ده روز وقت داشت تا زبونی بسازه که بعداً اسمش شد JavaScript. دستور مدیریت هم روشن بود: «شبیه جاوا بسازش.» در چنین شرایطی، برای بخش تاریخ و زمان، سادهترین راه رو رفت:
Date رو مستقیم از java.util.Date کپی کرد (به بیان دقیقتر: در عمل Date جاوا به JavaScript منتقل شد؛ حتی Brendan بعدتر توضیح داده که این بخش، port مستقیمی از Date جاوا به C بوده. Ken Smith که یکی از توسعهدهندههای Netscape بود قبلاً از Borland اومده بود؛ java.util.Date نسخه JDK 1.0 جاوا رو port کرد. این port مستقیماً برای موتور JavaScript Netscape انجام شد، که عمدتاً به زبان C بو که بعدتر به ++C نوشته شد.)!
نکتهی جالب اینجاست که خودِ اون پیادهسازی جاوا هم از اول مشکلدار بود؛ اونقدر افتضاح بود که فقط دو سال بعد، توی جاوا ۱.۱، تقریباً اکثر متدهاش منسوخ شدن و با یه API جدید جایگزین شدن. یعنی جاوااسکریپت یک طراحی معیوب رو از زبانی به ارث برد که خودش هم اون رو منسوخ کرد بعداً. و چون طبق اصل بنیادین TC39 یعنی «don't break the web» هیچ تغییری در Date مجاز به شکستن کدهای موجود نبود، این طراحی معیوب دقیقاً همونطور که بود، در استاندارد ECMAScript 1 (سال ۱۹۹۷) رسمی و منجمد شد.
فهرست مشکلات هم که برای هر کسی که با جاوااسکریپت کار کرده آشناست:
ماهها zero-indexed هستند (0 میشه ژانویه) ولی روزها و سالها نه! یک ناهماهنگی بیدلیل که فقط باگ تولید میکرد.
آبجکت قابل تغییر (mutable) است؛ یعنی هر تابعی که یک Date بهش پاس بده میتونه بیسروصدا مقدارش رو عوض کنه.
هیچ پشتیبانی واقعی از timezone وجود نداشت و فقط UTC و timezone محلی سیستم.
رفتار parser اونقدر غیرقابل پیشبینی بود که در عمل غیرقابلاعتماد محسوب میشد.
هیچ پشتیبانی از تقویمهای غیرمیلادی (هجری و…) نداشت.
برای دو دهه، راهحل اکوسیستم این بود که این مشکلات رو دور بزنن، و نه اینکه حل کنن. کتابخونههایی مثل Moment.js (که خودش mutable بود و باندل سنگینی داشت)، بعدتر هم چندین کتابخونه دیگه که هرکدوم یک لایهی محافظتی روی یه هستهی خراب ساختن، از راه رسیدن. الگویی که هر مهندسی میشناسه: وقتی یک مشکل بنیادین رو نمیشه حل کرد، دورش دیوار میکشیم و اسمش رو میگذاریم best practice 😅
نقطهٔ شروع واقعی: یک گفتگوی توییتری
اینجا بخشی از داستانه که کمتر روایت میشه و برای منی که سالهاست دنبال «لحظههای شروع» میگردم، جالبترین قسمت ماجراست. سال ۲۰۱۷، Maggie Pint که اون موقع یه مهندس نرمافزار توی مایکروسافت بود و هنوز لید هم نشده بود، طی یک گفتگوی توییتری با Brendan Eich (خالق جاوااسکریپت) و Matt Johnson (نگهدارندهٔ Moment.js) دربارهی همین ذات خراب Date صحبت میکردن. و همون گفتگو بود که Brendan تاریخچهی تصمیم دهروزهاش رو براشون تعریف میکنه. از دل همین صحبت، Maggie با Brian Terlson (نمایندهٔ مایکروسافت توی TC39 و ویراستار وقت ECMA262) هم آشنا میشه و همونجا تصمیم میگیرن که وقتش رسیده این مشکل رو از بیخ حل کنن.
نکتهای که باید با دقت گفت: این داستانِ «یک نفر که تنهایی یه مشکل بیستسالهی زبان رو حل کرد» نیست؛ و اینجوری گفتنش، بیاحترامی به شخصیت کاری این افراد، و به واقعیتِ پروژه است. اونچه واقعاً اتفاق افتاده این بوده که یک گفتگوی غیررسمی توی توییتر، نقطهٔ شروع یک تلاش چندساله و رسمی در TC39 شده؛ با آدمهای مهمی مثل Philipp Dunkel، Maggie Pint ،Matt Johnson-Pint، و Shane F. Carr، بهعلاوهی توسعهدهندههایی مثل Bloomberg و Igalia که پروپوزال Temporal رو رسماً همون سال ۲۰۱۷ باز کردن. جالب اینجاست که این تلاش عظیم و چندساله، سرمنشأیی به این کوچکی و این غیررسمی داشته.
حالا چرا اینقدر طول کشید؟
پروپوزال Temporal مسیر استاندارد TC39 رو طی کرد:
سال ۲۰۱۷ — Stage 1: پذیرش پروپوزال بهعنوان یک مسیر اکتشافی.
سال ۲۰۱۹ — Stage 2: انتشار طراحی اولیه.
سال ۲۰۲۱ — Stage 3: تکمیل spec و پیادهسازیهای آزمایشی شروع شدن.
مارس ۲۰۲۶ — Stage 4: که Temporal رسماً بخشی از ECMAScript 2026 میشه.
عملا ۹ سال، فقط برای طیکردن این مراحل. چرا؟ چون این بار قرار نبود همون اشتباه تکرار بشه. طراحی Temporal باید همهچیز رو پوشش میداد: تقویمهای قمری-شمسی چینی، تقویم اسلامی، عبری، امپراتوری ژاپن؛ دیتابیس جهانی timezone یعنی IANA TZDB با تمام گذارهای DST؛ محاسبات duration با ماهها و سالهای با طول متغیر؛ و یکپارچگی عمیق با Intl. توی این مسیر، هر ادعای «تمام شد» با یک edge case جدید (مثل رفتار مبهم wall-clock در لحظهٔ تغییر ساعت DST) نقض میشده و spec دوباره اصلاح میشده.
یک تلنگر جالب هم در سال ۲۰۲۲ اتفاق افتاده: آسیبپذیری path traversal در Moment.js (CVE-2022-31129) نشون داد که حتی کتابخونههای پایهای هم بخشی از سطح حمله اپلیکیشن میشن. این اتفاق استدلال برای وجود یک راهحل native رو قویتر کرد.
رسیدن به مقصد: Node.js 26
پنجم ماه می امسال، Node.js 26 منتشر شد و برای اولینبار Temporal بدون هیچ flag یا پیشنیازی، بهصورت پیشفرض فعال بود. دیگه نیازی به فلگ و کتابخونه اضافی نیست.
نتیجه، چیزیه که هر کسی که این ۳۱ سال با این زبونِ پرحاشیه زندگی کرده، حسرتش رو داشته!
💡 چیزی که این داستان یادم میاندازه
من سالهاست دربارهی فاصلهی بین «مهارت فنی» و «ownership» زیاد نوشتم، صحبت کردم و تلاش کردم توی مسیر رشد دیگران قرار بدم. این داستان، دقیقاً همون فاصله رو نشون میده، اما در سطح یک اکوسیستم کامل. تصمیم Brendan Eich در ۱۹۹۵ نه غیرمنطقی بود و نه بیکفایتی؛ او ده روز وقت داشت. مشکل واقعی جای دیگهای بود: این بدهی فنی برای دو دهه به رسمیت شناخته میشد، دورش مستندسازی و کتابخونه ساخته میشد، ولی هیچ گروه مشخصی مسئولیت حل ریشهایاش رو عهده نمیگرفتن! تا اینکه یک گفتگوی غیررسمی، افراد درست رو در یک اتاق (یا یک رشتو توییتری) کنار هم گذاشت.
نکته برای من این نیست که «یک نفر جسور مشکل بیستسیسالهی یه زبون رو حل کرد». نکته اینه که حل بدهی فنی بزرگ، همیشه به یک لحظهٔ شروع کوچیک نیاز داره. یک نفر که تصمیم میگیره بهجای دورزدن مشکل، دربارهی ریشهاش صحبت کنه. بعدش کار سخت، یعنی ۹ سال طراحی دقیق و صبورانه، شروع میشه. و اون بخش، هیچوقت کار یک نفر نیست.
پینوشت: این بخش کوچکی از یه ارائه مفصل چند جلسهای برای گروهی از تازه لیدِ فنی شدههای یه سازمان بزرگ بود؛ گاهی برای یادگیری؛ مثال و داستان بهتر از شمردن نکتهها و تیترهاییه که یا سریع از خاطر میرن یا تبدیل میشن به لقلقه زبون آدمها برای شوآف. اگر دوست داشتید؛ PostgreSQL یا MongoDB یا داستان Mel و Monorail و... هر کدوم مثل حکایتهای کلیله و دمنه یا بوستان سعدی هستن (البته در مثال محل مناقشه نیست) که در قالب یه قصه میشه دهها صفحه درس و نکته رو یاد گرفت. علاقهمند بودید لابلای وبلاگ پدیدآورندهها و ردیت و توییتر، داستانهای جذابی پیدا میشه. یا سری مصاحبههای Ryan Peterman یا داستانهای Dave Plummer پینوشت۲: احتمالا مطلب بعدی یا A2UI خواهد بود یا در مورد روشهای ارزیابی عملکرد دورهای تیمهای فنی. اگر پیشنهاد یا نکتهای دارید حتمن کامنت کنید :)
| 2 | گاهی سرویس Identity اول پیام AccessRequested رو دریافت میکنه، اما هنوز پیام EmployeeCreated رو پردازش نکرده. و خطا میده که کارمند رو پیدا نکرده. بهترین پاسخ از نظر شما کدومه؟ | 804 |
| 3 | نقش Forward Deployed Engineer یا FDE
توصیف ساده FDE کسیه که برای تولید محصول، به جای منتظرِ requirement موندن، خودش میره وسط میدون، requirement رو کشف میکنه، ابهامها رو کم میکنه، prototype یا راهحل production-ready میسازه، سیستم رو با محیط واقعی customer fit میکنه و فیدبکها رو برمیگردونه به محصول.
کِی FDE کاربرد داره؟
ریشه پیدایش چنین نقشی بیشتر به شرکتهایی مثل Palantir برمیگرده.
وقتی محصول خیلی تکنیکال باشه، در عین حال، مشتری که میتونه کاربر درونسازمانی هم باشه؛ خیلی technical نیست. مثلا شرکت Palantir، محصولاتی مثل پلتفرمهای AI/Agentic، یا ابزارهای پیچیده انترپرایز که توی صنایع سنتی مثل manufacturing، aviation، CPG و HR استفاده میشن داره. یعنی جایی که مشتری، مسئله بزرگ یا خیلی بزرگ داره، ولی توان فنی کافی برای تبدیل مسئله به راهحل نرمافزاری نداره.
دقت کنیم که FDE به هیچ وجه Sales Engineer یا Software Engineer معمولی یا Consultant / Professional Services نیست!
بهطور خلاصه، FDE یک مهندس مشتریمحوره که بین consulting، product management و software engineering میایسته، ولی خروجی نهاییش باید نرمافزار و outcome واقعی برای مشتری باشه، نه فقط دمو، تحلیل یا توصیه.
فرق بین ownership of project و ownership of problem اینجا خیلی مهمه. آدمی که project ownership دارد ممکنه آدم سختکوشی باشه، ساعات زیادی کار کنه و پروژه رو هم تموم کنه. ولی FDE باید problem ownership داشته باشه. یعنی موفقیتش با این سنجیده میشه که آیا مشکل مشتری واقعاً حل شده یا نه، نه اینکه PR merge شده یا ticket بسته شده.
چنین افرادی برای سازمانها خیلی ارزشمندن. چه برای مصاحبه کردن چه در ارزیابی خودتون میتونید از ۳ بُعد بررسی کنید که به صورت کلیدواژه و خلاصه میگم:
بُعد Communication -> شنیدن فعال، شفاف حرف زدن، آماده بودن و executive presence
بُعد Product sense -> توضیح تصمیمها، انتخاب scope درست و trade-off prioritization
بُعد Engineering -> درک عمیق از completeness، test cases، edge cases misuse cases، end-to-end delivery
نکته مهم هم اینه که FDE برای همهجا مناسب نیست. برای محیطهای پویا و خلاق و پیشرفته؛ ارزش زیادی داره، چون فرد میتونه کنار تیم بیزینس یا عملیات بنشینه و سریع adjustment رو انجام بده. اما توی سیستمهای سنتی، stable، heavily governed و با release process سختگیرانه، این مدل اگه درست کنترل نشه میتونه ریسک تولید کنه.
این هم فراموش نکنیم که عنوانهای جدید، همیشه با خودشون جوگیری رو هم میارن؛ خصوصا این روزها و با وجود AI! | 2 535 |
| 4 | مفهوم Loop Engineering:
لایهی بعد از Prompt، Context و Harness Engineering
چون هنوز این اصطلاح هنوز خیلی جا نیفتاده، اول یه تعریف ساده از Loop Engineering:
تا قبل از این، هر بار که با یه ایجنت یا مدل زبانی کار میکردیم، خودمون پشت فرمون بودیم:
پرامپت مینوشتیم،
نتیجه رو نگاه میکردیم،
اگه غلط بود دوباره پرامپت رو اصلاح میکردیم،
دوباره اجرا میکردیم.
این چرخه دستی بود، و آدمیزاد حلقهی کنترل (control loop) رو با دست میچرخوند. ولی Loop Engineering دقیقاً یعنی همین حلقه رو از دست آدم دربیاری و بدی دست یه سیستم کوچیک. یعنی بهجای اینکه خودت هر بار prompt بزنی، ببینی جواب چی شد، بعد دوباره prompt بزنی، یه لایهی نرمافزاری میسازی که این کار رو برات تکرار میکنه: goal رو تعریف میکنه، کار رو به ایجنت میده، نتیجه رو verify میکنه، اگه قبول بود state رو ذخیره میکنه و میره سراغ کار بعدی، اگه رد بود دلیل رد شدن رو ثبت میکنه و دوباره تلاش میکنه. این یعنی همون loop، و مهندسیاش میشه Loop Engineering.
نکتهی مهم اینه که این لایه، لایههای قبلی رو حذف نمیکنه، روشون سوار میشه. یعنی کماکان Prompt و Context وجود دارن، فقط دیگه آدم نیست که هر دور دستی بنویسدشون؛ خود loop این کار رو انجام میده.
🕠 مرور تاریخچه:
اگه مسیر رو دنبال کنیم، چهار مرحله داشتیم:
توی Prompt Engineering یاد گرفتیم چطور با مدل حرف بزنیم. (۲۰۲۲-۲۰۲۳)
توی Context Engineering یاد گرفتیم چه چیزی رو به مدل نشون بدیم. (۲۰۲۴-۲۰۲۵)
توی Harness Engineering یاد گرفتیم چطور ایجنت رو امن اجرا کنیم. (اوایل ۲۰۲۶)
توی Loop Engineering یاد میگیریم چجوری سیستمی بسازیم که خودش چرخهی کار رو جلو ببره، اما فقط تا جایی که بتونه ثابت کنه واقعا به مقصد تعیین شده رسیده. (اواسط ۲۰۲۶)
اگر علاقه داشتید وارد جزئیاتش بشم، بنویسید 😊 | 1 974 |
| 5 | این روزها با انبوه مدلهای هوش مصنوعی که در دسترس همه قرار گرفته، میشه ضعفهای فنی زیادی رو تا حدی پوشش داد؛ از کدنویسی و دیباگ گرفته تا طراحی، مستندسازی و حتی بازبینی معماری.
اما حداقل فعلا، هیچ مدل هوش مصنوعی نمیتونه جای بعضی چیزها رو بگیره:
- ذهنیت و مهارت ownership
- داشتن accountability و responsibility واقعی
- رفتار حرفهای و مهارتهای نرم
- توانایی دیدن مسئله تا انتها، نه فقط انجام دادن یه تسک
با AI میشه خروجی فنی رو بهتر کرد اما هنوز نمیشه بهجای آدمی که نسبت به کار، تیم و نتیجه احساس مسئولیت داره، نقش بازی کرد!
رونوشت: اهل تفکر و تعمق؛ اگه این مهارتها قابلاندازهگیری با AI نیستن، پس تو فرآیند استخدام/ارزیابی چطور باید سنجیده بشن؟ | 1 681 |
| 6 | کوییز:
توی سیستمهای توزیعشده، مخصوصا وقتی چند سرویس به واسطه پیامها، eventها یا APIها با هم sync میشن، Reconciliation Job بیشتر برای چه کاری استفاده میشه؟ | 1 356 |
| 7 | 🫂 چالشهای مصاحبههای فنی: بررسی لایوکدینگ، نقش AI
این توییت، مسبب نوشتن این مطلب شد!
داستان از جایی شروع شد که یک روز شلوغ کاری، مجبور شدم توی مرحله لایوکدینگ یک مصاحبه شرکت کنم، ولی بعد از ۹۰ دقیقه مصاحبه که نتیجه ناامیدکنندهای داشت، این توییت رو نوشتم. چند ساعت بعد، دیدم بازخورد و تعداد مشاهدههاش نسبت به میانگین توییتهای من خیلی بیشتر شد! لذا به نظرم اومد که شاید موضوع بدی نباشه برای نوشتن...
بهطور خلاصه بازخوردها حول دو محور اصلی بودن:
- چرا استفاده از AI در مصاحبه مذموم دونسته شده
- چرا لایوکدینگ داریم؟ و برخی این روش رو منسوخ میدونستن
مشکل اصلی نه AI است، نه لایوکدینگ، نه حتی سؤال الگوریتمی. مشکل اصلی مصاحبهایه که نمیدونه دقیقا دنبال چه سیگنالی باید بگرده.
یادمون نره؛ مصاحبه قرار نیست حقیقت مطلق رو کشف کنه. مصاحبه یعنی کاهش ریسک تصمیم استخدام.
این مطلب
- تاریخچه مصاحبه در مهندسی نرمافزار!
- به چه مصاحبهای میگیم بد؟
- مصاحبه خوب چجوریه؟
- چرا لایوکدینگ هنوز هم قابل دفاع است؟
- لایوکدینگ رو حذف نکنیم، یاد بگیریم چجوری ازش استفاده کنیم!
- حالا چرا ساختمانداده، الگوریتم و...؟
- یک مصاحبه فنی خوب رو چجوری طراحی کنیم؟
- با AI چه کنیم؟
- مثال و تجربه شخصی
🔗 لینک مطلب
15 | 1 067 |
| 8 | 🖊 مطلب بعدی:
چالشهای مصاحبههای فنی: بررسی لایوکدینگ، نقش AI
هفته پیش یه توییت زدم که تمایز تعداد بازخوردها و دیدهشدنش نسبت به عدد معمول توییتهای هر از گاهیِ من، باعث شد به فکر نوشتن مطلبی در همین رابطه بیوفتم.
موضع مطلب پرداختن به مسئله اصلیه، یعنی مصاحبه فنی گرفتن و موضوع AI در مصاحبهها؛ نه پاسخ به نظرات گاها خیلی قطعی و جهانشمولپندارانه.
فعلا این بخشها رو در نظر دارم، اگر دغدغه، سوال یا پیشنهادی داشتید حتمن بنویسید شاید به بهتر شدن مطلب کمک کنه:
مصاحبههای فنی:
- اصل مسئله چیه؟چرا لایوکدینگ اومد؟ چرا هنوز هست؟ از کجا و چه زمانی خراب شد؟ آیا همهجا باید بمونه؟
- مصاحبه بد چه جوریه؟
- مصاحبه خوب چه سیگنالهایی داره؟
- AI در مصاحبه: ممنوع، آزاد یا کنترلشده؟
- شرکتها بسته به اندازه و نیازشون چجوری باید مصاحبه طراحی کنن؟
- مسئله ابزار نیست، مسئله طراحی مصاحبه متناسب با نیاز و شرایطه.
- تجربه و روش خودم | 1 040 |
| 9 | 💡مرور الگوی outbox/inbox
توی نظرسنجی آخر، گزینه Inbox/Outbox Pattern رأی دوم رو آورد، بالاخره امروز مطلب رو جمعجور کردم. با اینکه «مرور» است ولی از نظر حجم کمی بیشتر از مطالب رایج شد (چون اصل داستان سیستمهای توزیع شده، خیلی مبحث گستردهایه و مرور یک مفهوم رایج و دمدستیاش هم نیاز به توضیح بیشتری داشت.
پیشاپیش بابت اشتباهات نگارشی یا انشایی متن عذرخواهی میکنم، دلیلش هم اینه که طی دو هفته هر زمان فرصت کوتاهی پیدا میشد بخشیاش رو نوشتم و احتمالا اگر فرصت بازبینی و ویرایشش بود، متن روانتری به دست میومد؛ ولی خب، قرار نیست هر ورژن اولیهای بهترین باشه.
- مرور الگوی outbox/inbox
- مسئله اصلی: Dual Write Problem
- الگوی Outbox
- الگوی Inbox
- بررسی جزئیتر مفهوم Idempotency
- طراحی بهتر پیامها
- تفاوت Domain Event و Integration Event
- روشهای پیادهسازی Outbox Publisher
- ابزارها و فریمورکهای رایج برای پیادهسازی inbox/outbox
- مفاهیم مکمل: Poison Message، Retry و Dead Letter
- لزوم Observability و Monitoring
- کاربرد Ordering پیامها
- پاکسازی دادهها
- تفاوت Outbox با Event Sourcing
- نسبت Outbox و Inbox با Saga
- چه زمانی واقعا به Inbox و Outbox نیاز داریم؟
🔗 لینک مطلب | 4 124 |
| 10 | 🧠 از MCP تا Agent، بررسی A2A و ACP | وقتی Agentها باید با هم حرف بزنند
هر بار که تغییر بزرگی در اتمسفر توسعه نرمافزار پیش میاد؛ مثل وقتی که تکنولوژی انقلابی جدید معرفی میشه، ابزارها یا رویکردها تغییر بزرگی رو تجربه میکنن؛ مثل دورانی که SOA اومد، یا بعد که microservice اومد؛ یا این قریب به ۴ سال که GenAI از عمق تحقیاتی به سطح زندگی روزمره اومده؛ لازمه تا مفاهیم جدید رو دقیق یاد بگیریم تا درگیر حباب تکنولوژی، تبلیغات، یا استفاده اشتباه و نابجا نشیم. و به همون اندازه مهمه تا از دوران جدید جا نمونیم.
لذا اینکه چه زمانی و کجا؟ و با چه مقدمه و برای چه نیازی؟ چه راهکاری رو انتخاب کنیم؛ سوال مهمیه که حتی از اجرا کردن کًد باید برامون مهمتر باشه. مثلا بدونیم تفاوت و کاربرد اینا چیه:
Prompt-based
Tool/skill-based
MCP
Instantiated role
Single long-lived agent
Multi-agent + A2A/ACP
برای همین، چند خطی درباره A2A نوشتم که اگر دوست داشتید بخونید. رویکردم توضیح از پایه و مفاهیم بوده تا به نحوی باشه که از engineering manager تا architect تا developer رو پوشش بده. بنا به اقبال این موضوع، شاید بخش یا بخشهای بعدی هم با رویکرد عمیقتر و نگاه تخصصیتر (مثلا معماری یا توسعه یا امنیت) و عملیتر (کد) بنویسم.
🔗 لبنک مطلب و طبیعتا خوشحال میشم نظر و تجربهتون رو بنویسید | 2 559 |
| 11 | 📊 کدوم مفهوم رو با توضیح ساختار، کاربرد، مثال و چند الگوی مشابه، در مطلب بعدی بررسی کنیم؟ | 1 091 |
| 12 | وقتی ابزار بودن AI Agent تبدیل به «باور» میشه!
اگر پیگیر تحولات حوزه AI باشین، تکاپوی شرکتهای بزرگ تکنولوژی برای تکمیل تکههای پازل «AI در انترپرایز» رو درک کردید؛ و کمکم ابزارها، تحقیقها، و روشهایی که پیشتر به صورت داخلی استفاده میکردن رو علنی میکنن یا از ابدا به صورت عمومی توسعه میدن. اما تمرکز از مدل، یا چتبات به سمت «زیرساخت» رفته.
دو نمونه برای مثال یا سرنخ:
🔐 انتشار NVIDIA SkillSpector: یه security scanner برای AI agent skills. بر اساس کار تحقیقی روی ۴۲ هزار skill واقعی که نشون داده ۲۶٪ شون آسیبپذیری دارن و ۵٪ هم احتمالاً مخرب هستن! SkillSpector تا الا ۶۴ تا الگوی مشخص رو اسکن میکنه: از prompt injection و data exfiltration گرفته تا privilege escalation، memory poisoning، و MCP tool poisoning.
⚖️ انتشار Microsoft Agent Governance Toolkit: که یه لایه governance برای دپلوی کردن ایجنتها در محیط عملیاتیه. سه سوال اصلی رو هدف میگیره: این action مجاز هست؟ کدوم ایجنت این کار رو کرد؟ میتونی ثابت کنی چه اتفاقی افتاد؟ از policy enforcement با YAML/OPA/Cedar گرفته تا identity با SPIFFE و audit log با Merkle chain. حتی cost و token budget هم داخلش هست.
اما این همه ماجرا نیست. وقتی agent ها از اسباببازی به ابزار کاری تبدیل میشن، یه لایه کامل از مشکلات ظاهر میشه که قبلاً وجود نداشت:
- چه کسی هزینه inference رو میپردازه و چطور باید ردیابیش کرد؟
- اگر agent ای یه تصمیم اشتباه گرفت و خسارت زد، مسئولیت با کیه؟
- چطور ثابت میکنی که ایجنت در لحظهی تصمیم، دقیقاً با همون policy که تأیید شده بود کار میکرد؟
- وقتی دهها ایجنت به هم وکالت میدن (delegation chain)، اعتماد بینشون چجوری منتقل میشه؟
اینها سوالهای فنی نیستن. یا دقیقتر بگم: فقط فنی نیستند.
شرکتهای بزرگ دارن میفهمن که مشکل اصلی ایجنتها، هوش مصنوعی داخل شون نیست. مشکل اصلی، اعتماد، مسئولیت، و قابلیت audit است.
درست مثل همون چیزی که سالها پیش با مایرکوسرویسها صنعت یاد گرفت؛ ولی این بار با ریسک بالاتر!
سوال: ایا این موضوعات جایی بین دغدغههای سازمان و تیم شما داره؟ | 2 517 |
| 13 | بهینهسازی خودکارِ مهارتها، SkillOpt
چند سال پیش یکی از مهمترین دغدغههای استفاده از AI این سوالها بود: «کدوم مدل رو استفاده کنیم؟» یا «چجوری پرامپت بهتری بنویسیم؟»
حالا سوال مهمتر اینه: «این مدل با چه skillهایی کار میکنه، و کی کیفیتشون رو تضمین میکنه؟»
خروجی یه پروژهی تحقیقاتی مشترک Microsoft و چند دانشگاه چینی شده SkillOpt که این هفته بهصورت کدباز منتشر شد. ایدهاش سادهست: به جای fine-tune کردن مدل، فایل skill رو train کن.
یعنی یه فایل Markdown به عنوان trainable parameter یه agent frozen در نظر گرفته میشه. و optimizer، مسیر حل مسئله رو تحلیل میکنه، تغییرات ساختارمند پیشنهاد میده، و فقط اگه روی مرحله ارزیابی، بهتر شده بود، تغییرات رو قبول میکنه.
خروجی نهایی؟ یه best_skill.md بین ۳۰۰ تا ۲۰۰۰ توکن. بدون تغییر وزن مدل، بدون overhead در inference. نتایج تجربیشون روی ۵۲ از ۵۲ سلول ارزیابی بهترین یا مساوی بهترین بوده. روی GPT-5.5 بهطور میانگین +۲۳.۵ امتیاز نسبت به حالت بدون skill.
اما به نظرم مهمتر از خود ابزار، پیامشه:
اسکیل خوب میتونه خروجی یه مدل معمولی رو خیلی بهتر کنه. اسکیل بد میتونه خروجی یه مدل قوی رو خراب کنه. و اسکیل بدون validation و lifecycle، دیر یا زود تبدیل میشه به همون بدهی فنی قدیمی، فقط این بار در لباس AI.
اگه ۲۰ دقیقه وقت دارید و میخواید بدونید این چرخه بهینهسازی، چجوری کار میکنه، چه فرقی با prompt tuning معمولی داره، و چرا governance روی اسکیلها برای تیمهای انترپرایز جدیه، نسخهی مفصلتر رو روی بلاگ بخونید.
🔗لینک مطلب کامل روی بلاگ خودم | 1 042 |
| 14 | 😊 دو ساعت با خالق سیپلاسپلاس
هفته گذشته رایان پیترمن، مصاحبه مفصلی با بیارنه استراستروپ، خالق سیپلاسپلاس منتشر کرد که حداقل برای من بیشتر یک درس بود تا مصاحبه.
اگر دوست دارید از مهندسی عمیق؛ تجربه؛ و موضوعاتی فارغ از حبابهای زودگذر بشنوین؛ این مصاحبه خیلی ارزشمنده.
- داستان پیدایش ++C و دوران آزمایشگاههای بل
- فلسفه طراحی زبان و بحث شیءگرایی
- چالشهای فنی پیادهسازی و مفهوم abstraction با هزینه صفر (Zero/Negative Overhead):
- پاسخ به انتقادها درباره امنیت حافظه و کدهای مدرن ++C
داستان شکلگیری کمیته استاندارد ISO برای ++C و دموکراسی در توسعه زبان
- آینده برنامهنویسی و نقش هوش مصنوعی (LLMs)
- اشتباهات گذشته و حسرتها | 1 191 |
| 15 | 🧪 کیفیتسنجی AI Agent Skillها
اگر با مفهوم و ساختار skill آشنا نیستین، پیشتر در موردش نوشتم (مقدمهای بر Skills، مهارتآموزی AI برای توسعه نرمافزار)
دیگه Skill خوب نوشتن، مثل خوب کد نوشتن، یکی از معیارهای برنامهنویس خوب بود شده. گاهی فکر میکنم صرف نوشتن یه Agent Skill همه چیز تمومه؛ در حالی که اینطور نیست و معلوم نیست اسکیلی که نوشتیم چقدر خوب کار میکنه و شاید حتی استفاده نشه یا برای مدل، بدآموزی داشته باشه! طی یک سال گذشته، به جز کدریویو، من کلی اسکیلریویو هم کردم و قبل از این ابزارها، که توی این مطلب معرفی خواهم کرد؛ ابزارهای داخلی برای تیم توسعه دادیم چون بنچمارکهایی که روی کدبیسهای بزرگ داشتم نشون میده که مدلهای AI و ابزارهای مختلف، خیلی به کیفیت و ساختار اسکیل اهمیت میدن (یا به بیان بهتر ازش اثرپذیری دارن). ولی الان ابزارهای کدبازی مثل waza یا skill validator هستن که در مورد کیفیت اسکیلها بررسی انجام میدن و اگر از AI استفاده میکنین؛ استفاده ازشون حیاتی به نظر میاد.
مثلا شاید بگین ساختار و spec رو رعایت کردم؛ ولی لینکهات سالمن؟ token budget رو رعایت کردی؟ روی Claude و GPT هر دو یهجور رفتار میکنه؟ agent واقعاً میدونه کِی باید این skill رو استفاده کنه؟
دو تا ابزار که این سؤالها رو جواب میدن: یکی Waza و skill-validator هستن که میشه به صورت مستقل یا توی پایپلاین CI/CD ازشون استفاده کرد.
در مورد این دوتا اینجا نوشتم؛ اگر دوست داشتید بخونید :)
🔗 [لینک مطلب] | 2 039 |
| 16 | بعضی آدمها مثل Andrej Karpathy اسمشون فقط یک رزومه نیست؛ بلکه سیگناله!
کسی که رهبری بخش AI و Autopilot Vision تسلا رو بر عهده داشته، عضو اولیه OpenAI بوده، و البته از چهرههای مهم آموزش Deep Learning بوده هزاران نفر بخشی از سواد AIشون رو از محتوای آموزشی ایشون دارن.
حالا ایشون رفته Anthropic؛ و میدونیم که احتمالا امسال آنتروپیک در مسیر IPO شدن و عرضه عمومی سهام است. و ماموریتش pre-training مدلهای Claude است.
بعد از خبر پیوستنش به آنتروپیک، بعضیها نوشتند که حضور Karpathy به تنهایی دهها میلیارد دلار به ارزشگذاری Anthropic اضافه کرده. (عدد دقیقش رو باید با احتیاط دید؛ چون سوشالمدیا اغراق دوست داره)
چیزی که همیشه برام جذاب بوده اینه که حضور یه آدم، همیشه پر کردن یک position نیست. گاهی مولفه اثرگذار روی سرنوشت محصول یا شرکته. گاهی یه signal مهم به بازار. گاهی سیگنال به استعدادهای اون حوزه. گاهی سیگنال به سرمایهگذارها. و گاهی حتی یه سیگنال به رقباست.
به نظرم هر از گاهی خوبه تا از خودمون بپرسیم:
«روی زمین، و نه پای منقل و سماور، من واقعاً چقدر برای سازمانم ارزش میسازم؟»
نه توی ذهن خودم یا گندهگوییهام پیش رفقا. نه توی عنوان شغلی. نه بنا به تعداد جلسهها یا میزان شلوغی تقویممون.
بلکه توی توان حل مسئله، کاهش ریسک، ساختن سیستم، تربیت آدمهای بهتر، و بالا بردن کیفیت تصمیمهای سازمان.
همه قرار نیست Karpathy باشیم. ولی همه میتونیم از خودمون بپرسیم: حضور من چه چیزی رو با چه میزان ارزشی واقعا بهتر میکنه؟ | 2 230 |
| 17 | استفاده از مدلهای آفلاین AI برای توسعه نرمافزار
از اینکه این مطلب رو نه الزاما به عنوان یک موضوع مهندسی، بلکه با در نظر گرفتن شرایط تحمیلی این روزهای اینترنت ایران؛ و تفکر مخرب اینترنت طبقاتی دارم مینویسم؛ حس بدی دارم!
اپیزود اخیر پادکست Merge Conflict، در مورد موضوع جالبیه که که شاید توی شرایط فعلی اینترنت ایران، مرورش بد نباشه. استفاده از مدلهای مختلف AI داخل VS Code و GitHub Copilot، ولی از طریق BYOK (یا Bring Your Own Key).
یعنی به جای اینکه فقط از مدلهای پیشفرض Copilot، Claude Code، Cursor یا ابزارهای مشابه استفاده بشه، بتونیم کلید API خودمون را از OpenAI، Anthropic، Azure Foundry، OpenRouter یا حتی سرویسهای دیگه که خودمون هاست کردیم بگیریم. بدون وابستگی به اینترنت. بدون مصرف اعتبار Copilot. مثلا Qwen با حدود ۲۷ میلیارد پارامتر، با quantization چهار بیتی، روی یک GPU با ۲۴ گیگابایت VRAM اجرا میشه. و تجربه گوینده توی خیلی از کارهای روزمره کدنویسی، تشخیص تفاوت بین این مدلهای کوچیک و لوکال از مدلهای بزرگی مثل Opus یا Sonnet رو سخت کرده!
نکته اول اینکه شاید ما بیش از حد روی «اسم مدل» حساس شدیم. یا اولویت مدل رو به فرایند برتری دادیم.
به جای اینکه بپرسیم Claude بهتره یا GPT؟ Sonnet بهتره یا Opus؟ شاید سوال مهمتر این باشه که آیا workflow ما درست طراحی شده یا نه؟ این چالش فقط برای دلداری دادن برای استفاده از مدل آفلاین نیست؛ خیلی شرکتها و تیمها چالش هزینه مصرف توکن رو دارن (و مثلا مایکروسافت اشتراک Claude code نیروهاش رو داره قطع میکنه) یا تجربه شخصی خودم: اعدادی که هر ماه از میزان مصرف توکن و هزینهی AI تیمم میگیرم؛ باعث شد بفهمم خیلی از برنامهنویسها ولو اینکه توی حوزه خودشون که اتفاقا AI هم هست، تخصص عمیق و تجربه طولانی دارن؛ الزاما LLM رو به خوبی نمیشناسن و ۵ رکن Harness و Model و Context و Tools و Prompts رو درک نکردند. برای همین مصرف توکنشون و هزینهشون خیلی بالاست؛ و مثلا برای تولید توضیحات PR هم از مدلهای بزرگ و گرون مثل Opus 4.7 و GPT 5.5 و... استفاده میکنن!! اگر دوست داشتید میتونیم روی این موضوع عمیقتر صحبت کنیم بعدن.
ولی به صورت کلی؛ اگه context رو خوب بسازیم؛ فایلهای درست رو در اختیار agent بگذاریم، planning داشته باشیم، task رو خوب خرد کنیم و خروجی رو مرحله به مرحله review کنیم، شاید تفاوت مدلها توی خیلی از سناریوهای روزمره کمتر از چیزی باشه که تصور میکنیم.
دوم اینکه agent فقط مدل نیست. و چیزی که ما توی VS Code، Copilot، Claude Code یا Cursor یا گراکبیلد تجربه میکنیم، فقط یه LLM خام نیست. پشتش کلی system prompt، ابزار خوندن و ویرایش فایل، حافظه، planning mode، sub-agent، permissions و کلی glue code دیگه وجود داره. به همین دلیل دو ابزار مختلف با یک مدل یکسان، لزوما تجربه یکسانی نمیدن.
مدل مهمه؛ اما harness یا همون محیطی که مدل رو تبدیل به یه دستیار کدنویسی واقعی میکنه هم به همون اندازه مهمه و باید خوب یادش بگیریم. باز به تجربه خودم برگردم که چند ماه پیش متوجه شدم که بعضی از بچههای تیم؛ در مورد امکان و شیوه دیباگ کردن مدل AI و ایجنتهاش بیاطلاعن؛ این یعنی همونطور که ما در رابطه با یک IDE جدید، زیر و بم امکانات، میانبرها و ابزارهای دیباگ کردنش رو یاد میگیریم؛ باید کارکرد و اجزاء ابزارهایی مثل کوپایلوت و کلادکد و... رو هم عمیق و اصولی یاد بگیریم و مثل چت تلگرام ازشون استفاده نکنیم.
و اینکه هنوز محدودیتها جدیان. همه یک RTX 3090 یا 4090 ندارن (البته وقتی وضع اینترنت اینه شاید شرکتها بتونن بهش فکر کنن؛ من سعی کردم ببینم الان قیمت ریالی این کارتها چنده؛ ولی به طور شرمآوری هر سایت داخلی که توی صفحه اول گوگل اومد، در دسترس نبود!!).
نهایتا این مطلب هم برای استفاده از مدلهای لوکال و Copilot CLI شاید مفید باشه.
امیدوارم چنین راهکارهایی از سر انتخاب و ترجیح انجام باشه به جای اجبار و ناچاری.
خوشحال میشم نظر یا تجربه شما رو هم بدونم 😊 | 853 |
| 18 | 💡 نمونههایی از بازنویسی با AI و نیاز به بازنگری در SDLC
طی چند ماه اخیر، چند نمونه از بازنویسی محصولات بزرگ با کمک AI منتشر شد که ارزش توقف و مرور عمیقتر و بینسطور این اخبار رو داره!
مثلا کلادفلر نسخه اولیه EmDash رو منتشر کرد؛ بازنویسی وردپرس با TypeScript، با معماری AI-native که هم امنتره هم سبکتر. همین کلادفلر کمی قبلترش، vinext رو هم به عنوان نسخه بهینهتر از Next.js طی مدت کوتاهی توسعه داد. LakeSail نشون داد که میشه یه SQL parser رو با Rust در یک هفته نوشت که از نمونههای مشابه (PySpark) عملکرد بهتری داشته باشه. و نمونه مفهومیتر، پروژه cpp-to-rust-skill بود که البته برای کدبیسهای واقعی و بزرگ به تنهایی کافی نیست.
نکته مشترک همه این مثالها: این تیمها از AI برای تسریع چیزی استفاده کردن که خودشون بهش تسلط داشتن. دانش domain، تجربه معماری، و درک عمیق از مشکلی که میخواستن حل کنن؛ اینا پیشنیاز بود، نه خروجی AI. ابزار سرعت داد، نه جهت.
البته نمونههای زیادی هم هست که اولش خیلی سریع با AI تولید شده، بعدن توی دیباگ و نگهداری و… عاجز موندن.
این تمایز، یه سوال جدیتر رو باز میکنه و من به عنوان بهانه برای مطالب بعدی میخوام ازش استفاده کنم (در صورت استقبال)
وقتی یکی از مراحل SDLC؛ یعنی توسعه؛ سریعتر و ارزونتر میشه، بقیه بلاکهای چرخه نمیتونن بدون تغییر بمونن. Requirements & Analysis باید دقیقتر بشه، نه سطحیتر. Testing باید پوشش بیشتری بده، چون خروجی بیشتره و حالتها غیرقابل پیشبینی، بیشتر. Maintenance باید پذیرای کدی باشه که شاید کمتر «دستساز» احساس بشه. حتی ownershipها باید بازنگری شن. مسئولیتهای tech lead هم دیگه مثل قبل نیست.
اگه علاقهمند باشید، یه مطلب مفصلتر درباره تغییرات لایهبهلایه SDLC در دوره AI مینویسم.
💬 به نظرتون در سازمان شما، کدوم بلاک SDLC بیشترین lag رو داره؟ لیدرشیپ سازمان و تیمتون خودش رو با دوره AI همآهنگ کرده؟!
6 | 921 |
| 19 | ⚙️ یک مسئله، یک ابزار، سه سطح نگاه!
نقش AI در آینده شغلی و حرفهای ما و البته خیلی رشتههای دیگه نه تنها غیرقابل انکاره، بلکه همراه با ملاحظاتی است که اگه ازشون غافل باشیم، شاید از گردونه رقابت حذف شیم یا در حالت خوشبینانهترش، نقشمون کمرنگ و موقعیتمون متزلزل بشه.
استفاده از AI برای توسعه نرمافزار، فقط این نیست که «چقدر سریعتر کد تولید میکنیم». مسئله مهمتر اینه که «چه کسی» «چه» تصمیمی رو «چرا» میگیره؟! «مدل» تصمیمگیر و تعیینکنندهی «جهت» است یا «دانش ما»؟!
برای درک این مطلب، یک قابلیت ساده مثل احراز هویت و دسترسی رو توی یک REST API را از سه سطح نگاه بررسی کردم:
سطح اول: پرامپتی که قابلیت رو مطالبه میکنه
سطح دوم: پرامپت مهندسیشده که جهتگیری و چگونگی رو تبیین میکنه
سطح سوم: Skill، Agent و استانداردسازی سازمانی
خلاصهی مطلبم اینه که:
امروز AI میتونه سرعت بده؛ اما جهت رو هنوز دانش مهندسی تعیین میکنه.
پس AI در توسعه نرمافزار؛ یه ضریبه.
اگر دانش داری، ضریبی که سرعتت رو بالا میبره. اگر دانش نداری، ضریبی که اشتباهاتت رو سریعتر تولید میکنه.
🔗 لینک مطلب
💬 نظر شما چیه؟ | 3 168 |
| 20 | ♻️♻️ مدیر محصول و مهندس نرمافزار: همکاری یا تنش؟ (بخش دوم)
بخش ۲، فلوی شکلگیری ایده تا رسیدن به محصول و محیط عملیاتی
در بخش اول دیدیم که ریشهی تنش بین مدیر محصول و مهندس، بیشتر از اینکه یه موضوع فردی باشه، یک مشکل ساختاریه. ابهام در مالکیت، اشتباه گرفتن Product Manager با Project Manager، و موندن توی مدل Feature Team، باعث میشه سیستم به سمت اصطکاک هدایت بشه، نه همکاری.
اما دونستن ریشه کافی نیست. سوال عملی اینه: یک ایده چطور باید از ذهن مدیر محصول به محیط عملیاتی برسه؟ چه کسی در هر مرحله مالک است؟ چه ابزاری کمک میکنه؟ و شرکتهای بزرگ این مسیر رو چطور طی میکنن؟ در این بخش به همین سوالها خواهم پرداخت.
فلوی کامل: از ایده تا Production
مسیر یک فیچر از لحظهی تولد تا استقرار، از شش مرحلهی مجزا عبور میکنه. هر مرحله یک مالک مشخص، یک ورودی مشخص، و یک خروجی مشخص باید داشته باشه.
Discovery → Shaping → Spec → RFC → Development → Release
مطلب کامل رو از لینک زیر مطالعه کنید:
🔗 بخش اول
🔗 بخش دوم
💬 نظر و تجربه شما چیه؟ | 2 446 |
