tech-afternoon – Telegram
tech-afternoon
1.23K subscribers
174 photos
6 videos
6 files
166 links
تِک‌افترنون، رویدادی گاه‌به‌گاه است با موضوعات حول معماری و توسعه نرم‌افزار، این کانال هم برای اشتراک اخبار، آموزش، نکاتی حول مهندسی نرم‌افزار، دیتابیس‌، تکنولوژی و مدیریت تولید محصولات نر‌م‌افزاری خواهد بود.
youtube.com/@AminTechTalks/videos
امین مصباحی
Download Telegram
📔 قابلیت Extension members در سی‌شارپ ۱۴

بالاخره بعد از کش‌وقوس‌های فراوون (شروع جدی‌اش از سال ۲۰۲۱ بود) بالاخره امکان Extension members به سی‌شارپ ۱۴ (نسخه پیش‌نمایش ۳) اومد.

از سی‌شارپ ۳ می‌تونیم اکستنشن‌متد برای تایپ‌ها بنویسیم. ولی حالا دیگه محدود به متد نیستیم و property و static method هم پشتیبانی می‌شه.

توی سی‌شارپ ۱۴ یه بلاک جدید به نام extension داریم:

public static class Extensions
{
extension(IEnumerable<int> source)
{
public IEnumerable<int> WhereGreaterThan(int threshold)
=> source.Where(x => x > threshold);

public bool IsEmpty
=> !source.Any();
}
}

توی مثال بالا، عملا دیگه از this استفاده نشده، قبلا همین رو باید اینجوری می‌نوشتیم:
WhereGreaterThan(this IEnumerable<int> source, int threshold)

در حالیکه:

*️⃣بخش extension(IEnumerable<int> source): اینجا نشون می‌ده که بلاک اکستنشن با یک receiver از نوع IEnumerable<int> شروع شده.

*️⃣متد WhereGreaterThan: بدون نیاز به استفاده از this، چون receiver به صورت ضمنی تو بلاک extenstion در دسترسه.

*️⃣پراپرتی IsEmpty: هم به راحتی بر اساس receiver تعریف شده که چک می‌کنه آیا لیست خالی هست یا نه.

حتی اینو می‌تونید به صورت جنریک هم بنویسید:
extension<T>(IEnumerable<T> source)
where T : INumber<T>
{
public IEnumerable<T> WhereGreaterThan(T threshold)
=> source.Where(x => x > threshold);

public bool IsEmpty
=> !source.Any();
}

🔗 رفرنس
🔗 مباحثات اولیه

💬 به نظرتون چقدر کاربردیه؟
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍6👏1
ارزش «باور به توانایی»، اعتبار فردی...

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

استارتاپ ایشون که الان تعداد انگشت‌شمار! کارمند داره و هنوز محصولی بیرون نداده، یعنی Thinking Machines Lab الان ۲ میلیارد دلار جذب سرمایه (خطرپذیر) داشته.

این نمونه واقعی اینه که اعتبار و باوری که آدم‌ها از خودشون می‌سازن، چقدر می‌تونه ارزشمند باشه.

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

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

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

فقط هم محدود به نرم‌افزار نیست، «گاها» حتی اون آدم‌ها وارد حوزه جدیدی شدن که هم‌پوشانی کاملی با تجربیات قبلی‌شون نداشته.

یه سری مهارت‌های نَرم (soft skills) وجود داره که می‌تونه کمک کنه تا hard skills ما طوری پرورش پیدا کنه که صاحب «اعتبار و اعتماد» اجرایی بشیم، و شاید این یکی از مهم‌ترین دستاوردهای کاری یک فرد بتونه باشه، یعنی دیگرانی باشن که باور و اعتماد داشته باشن به توانایی به انجام رسوندن کارهای دشوار یا جدید...

💬 تجربه‌ای داشتید؟ نظری دارین؟
Please open Telegram to view this post
VIEW IN TELEGRAM
💯7👍5👏4
tech-afternoon
مسعود دانش‌پور عزیز، برای تیمش توی دیجیکالا دنبال چند مهندس نرم‌افزار خبره می گرده که از پس تراکنش های بسیار بالا مثل بلک فرایدی بر بیان، طبیعتا افرادی که خودشون رو واجد شرایط بدونن اپلای می‌کنن و براشون آرزوی موفقیت دارم. به نظرم اومد شاید دوستانی باشن که…
🔔 جلسه مرور مهارت‌ها و مسیر رسیدن به موقعیت‌های شغلی که بتونه از پس چالش‌های پلتفرم‌های با تعداد درخواست بالای هم‌زمان و پیچیدگی‌های سیستمی بر بیاد...

(⚠️ زمان جلسه تغییر کرده است!️) یکشنبه ۳۱ فروردین (۲۰ اپریل)؛ ساعت ۱۹:۰۰ تا ۲۰:۰۰ ۱۷:۳۰ - ۱۸:۳۰ (به وقت تهران)
لینک ثبت‌نام

* «اگر و اگر» تعداد افراد زیاد باشه «و» تنوع بین «جونیور به مدیور» و «مدیور به سنیور» به حد خوبی برسه، شاید همون یکشنبه ولی دو جلسه متناسب با سطوح مختلف برگزار شه.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🙏4🔥2
📱 ویدیو جلسه مرور مهارت‌های مورد نیاز و مسیر رسیدن به مهندس ارشد نرم‌افزار - بخش ۱

🔄 فایل اسلایدها رو هم در بخش کامنت قرار دادم

ممنون از همه دوستانی که تشریف آوردن، امیدوارم هر چه زودتر توی جلسه دوم ببینمتون 😊🌱

لینک یوتیوب
Please open Telegram to view this post
VIEW IN TELEGRAM
24🔥4
📝 روش‌هایی برای اولویت‌بندی نیازمندی‌ها


جلسه «مرور مهارت‌های مورد نیاز و مسیر رسیدن به مهندس ارشد نرم‌افزار» رو بر اساس چرخه توسعه نرم‌افزار (SDLC) طرح کردم، و بخش اولش «نیازمندی‌ها و تحلیل (Requirements & Analysis)» بود. چون از روش‌های MoSCoW و Kano Model برای اولویت‌بندی نیازمندی‌ها (Prioritization Techniques) اسم بردم، گفتم شاید بد نباشه برای دوستانی که آشنایی ندارن، کمی توضیح بدم.



وقتی یه تیم محصول یا توسعه تصمیم می‌گیره یه چیزی بسازه یا بهبود بده، معمولاً با کلی پیشنهاد و نیازمندی (requirement) مواجه میشه: از باگ‌های کوچیک گرفته تا فیچرهای کوچیک و بزرگ.
ولی واقعیت اینه که زمان، نیرو و بودجه محدوده (منابع محدود، در مقایسه با نیازهای نامحدود!). پس مهمه بدونیم چی رو باید اول انجام بدیم، چی رو می‌تونیم بذاریم برای بعد، و چی رو فعلاً انجام ندیم.

اینجاست که تکنیک‌های اولویت‌بندی میان وسط. اینا ابزارهایی هستن که کمک می‌کنن:

*️⃣خواسته‌های کاربر، کسب‌وکار و تیم توسعه رو دسته‌بندی کنیم.
*️⃣تصمیم‌های درست‌تری بگیریم.
*️⃣روی چیزهایی تمرکز کنیم که بیشترین تأثیر رو دارن.

دو تا روش محبوب رو اینجا معرفی می‌کنم که می‌تونن کمک کنن. Kano Model و MoSCoW

🔍 مدل اول: Kano – وقتی رضایت کاربر مهمه
مدل Kano از اسم یه پروفسور ژاپنی به اسم «نوری‌آکی کانو» الهام گرفته شده. ایده اصلی اینه که همه فیچرها تأثیر یکسانی روی رضایت کاربر ندارن. بعضیاشون اگه نباشن، کاربر عصبانی میشه. بعضیا اگه باشن، خیلی خوشحال میشه. بعضیا هم بودن یا نبودنش براش فرقی نداره! (کاربر رو ذینفع (stakeholder) هم تعبیر می‌کنیم)

دسته‌بندی ویژگی‌ها توی Kano:
*️⃣گروه Basic Needs (Must-be): چیزایی که انتظار می‌ره حتماً باشن. نبودش فاجعه‌ست ولی بودنش کسی رو شگفت‌زده نمی‌کنه.

*️⃣گروه Performance Needs: هرچی بهترش کنی، رضایت بیشتر میشه (مثلاً سرعت سایت یا دقت جستجو).

*️⃣گروه Excitement Needs (Delighters): قابلیت‌هایی که کاربر انتظار نداره، ولی وقتی می‌بینه خوشحال میشه. (مثل auto-save هوشمند یا تم تیره پیش‌فرض)

*️⃣گروه Indifferent: بودن یا نبودنش خیلی فرقی نمی‌کنه.

*️⃣گروه Reverse: بعضیا ممکنه یه فیچر رو نخوان!

🔧 کاربرد: این مدل خیلی برای مصاحبه با کاربر و طراحی تجربه کاربری خوبه. کمک می‌کنه روی فیچرهایی تمرکز کنی که "دل کاربر رو می‌بره"، نه فقط اونایی که لازمه.
——————————————————-

📦 مدل دوم: MoSCoW – برای اولویت‌بندی سریع و پروژه‌محور
اشتباه نشه؛ MoSCoW یه مخففه و ربطی به شهر مسکو نداره! 😄:

*️⃣گروه Must have: اگه اینا نباشن، محصول کار نمی‌کنه.

*️⃣گروه Should have: مهمن، ولی می‌تونن تاخیر بخورن.

*️⃣گروه Could have: اگه وقت شد اضافه‌شون می‌کنیم.

*️⃣گروه Won’t have (this time): الان انجامش نمی‌دیم، شاید بعداً.

🔧 کاربرد: MoSCoW بیشتر توی مدیریت پروژه و جلسه‌های برنامه‌ریزی اسپرینت استفاده میشه. وقتی می‌خوای با تیم تصمیم بگیری که توی این بازه زمانی رو چی تمرکز کنید.

🧠 اگه خواستی بیشتر بدونی...
اولا هر کاری رو اگر «روشمند» یعنی بر اساس یک مدل بریم جلو، ولو کارهایی که بدیهی به نظر میان، عموما شانس موفقیت بالاتری داریم.

دوما، فقط این دو تا نیست؛ اگه دوست داری مدل‌های بیشتری رو بررسی کنی یا روش‌های دیگه‌ای برای تصمیم‌گیری داشته باشی، اینا هم ارزش وقت گذاشتن دارن:

روش RICE Scoring – برای اولویت‌بندی عددی و داده‌محور
روش WSJF – مخصوص تیم‌های اجایل و SAFe
روش Opportunity Scoring – مبتنی بر نیازهای پنهان کاربر
روش Feature Buckets – دسته‌بندی فیچرها براساس تأثیر و استراتژی
روش Eisenhower Matrix – ساده ولی کاربردی برای تصمیم‌گیری‌های روزمره



💬 شما از چه روشی برای اولویت دادن به نیازها و کارها استفاده می‌کنی؟
Please open Telegram to view this post
VIEW IN TELEGRAM
12
tech-afternoon
🔔 جلسه مرور مهارت‌ها و مسیر رسیدن به موقعیت‌های شغلی که بتونه از پس چالش‌های پلتفرم‌های با تعداد درخواست بالای هم‌زمان و پیچیدگی‌های سیستمی بر بیاد... (⚠️ زمان جلسه تغییر کرده است!️) یکشنبه ۳۱ فروردین (۲۰ اپریل)؛ ساعت ۱۹:۰۰ تا ۲۰:۰۰ ۱۷:۳۰ - ۱۸:۳۰ (به وقت…
2️⃣ جلسه دوم مرور مهارت‌های مورد نیاز و مسیر رسیدن به مهندس ارشد نرم‌افزا

اگر نظر مثبتی نسبت به جلسه اول «مرور مهارت‌های مورد نیاز و مسیر رسیدن به مهندس ارشد نرم‌افزار» داشتید و فکر می‌کنید ادامه بحث می‌تونه براتون جالب باشه، لطفا از طریق فرم زیر بگید 😊

🗓 برای روز یکشنبه ۷ اردیبهشت (۲۷ اپریل) ساعت ۱۸:۳۰ به وقت تهران

https://forms.gle/ayy2Q3MESKnhrNt3A
Please open Telegram to view this post
VIEW IN TELEGRAM
25
دیدید بعضی‌ها هر کاری میگی نکن، می‌کنن و بالعکس...؟

حالا این ریپو برای همین‌جور آدم‌هاست...
اسمش هم state-of-the-art Shitcode است 😂

فکر کنم نوادگان لقمان حکیم روش contribute می‌کنن 😂

پینوشت: دلیل اینکه این ایام کمتر مطلب داریم، گرفتاری شخصی است و ایشالا به زودی دوباره فعال می‌شیم

پینوشت ۲: لطفا اگر موضوعی هست که فکر می‌کنید بهش بپردازیم می‌تونه مفید باشه، حتمن کامنت کنین 😉
🤣12😁21
🤔 فارغ از هیجان‌زدگی و تحلیل‌های مبتنی بر گمان، خوبه فکر کنیم در فاجعه‌ی بندرعباس، نقش نرم‌افزار و تکنولوژی چی بود؟ نقش مدیرمحصول‌ها تا مدیر تکنولوژی چی بود؟

چیزی که محرز است اینه که کانتینر(ها)ی با محتویاتی مستعد اشتعال یا انفجار در جای نامناسب و بدون مراقبت قرار گرفته. آیا جابجایی و چیدمان کانتینر، در یک اسکله بزرگ، بدون حضور نرم‌افزار ممکنه؟ آیا یک نرم‌افزار بد می‌تونه مسبب تخلف، سوءاستفاده، فساد، یا اهمال‌کاری و چنین فاجعه‌هایی بشه؟ آیا یک مدیر تکنولوژی ناشایست، یک مدیرمحصول بی‌کفایت، یک بیزنس‌آنالیست ابله، می‌تونن جزو متهمین این داغ بزرگ باشن؟

من صحبت از سیستم‌های اتوماسیون بندرگاهی و... که گرون‌قیمت و مشمول تحریم هستن نمی‌کنم. در مورد نرم‌افزار و تکنولوژی‌های ساده‌تری صحبت می‌کنم که «کفایت و دانش» نیاز دارن و «مسئولیت‌پذیری». این اخیر رو اطلاع ندارم ولی با همون اندک تعاملاتی که سال‌ها پیش با افراد، شرکت‌ها، و سازمان‌های مرتبط داشتم؛ نمی‌تونم نقش مدیران بی‌کفایت تکنولوژی و نرم‌افزار، یا حتی توسعه‌دهنده‌ها و تحلیل‌گرهای کم‌دانش و بی‌تفاوت به کم‌دانشی‌شون رو کمرنگ بدونم...

مشکل اینجاست که اینقدر «جان» و «اعداد» تهی از معنی شده که ۷۰ نفر (تا این ساعت) برامون ساده شده و ته تهش ختم می‌شه به یک بنر یا متن رمانتیک توی اینستاگرام و تمام...

خوشحال می‌شم نظر شما رو بدونم... آیا نرم‌افزار و تکنولوژی‌های در دسترس، و افراد مرتبط با تکنولوژی سهمی ولو اندک داشتند؟
👍11👌4🤔2
📱 معماری سلولی چیه، لزوم توجه بهش؛ و چرا slack رفت دنبالش؟

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

توی معماری سلولی سیستم‌های پیچیده به واحدهای مستقل و خودکفا (سلول‌ها) تقسیم می‌شن. هر سلول می‌تونه به تنهایی کار کنه و اگر یک سلول دچار مشکل بشه، بقیه سلول‌ها می‌تونن به کار خودشون ادامه بدن.

مشکل slack از کجا شروع شد؟
یه روز توی اسلک، نمودارهای مانیتورینگ نشون دادن که یکی از Availability Zone (AZ) های AWS در منطقه us-east-1 داره پکت‌های زیادی رو از دست میده. این باعث خطا و کندی سرویس برای کاربرها شده بود.
مشکل اصلی اینجا بود که با وجود اینکه اسلک از چند AZ استفاده می‌کرد، وقتی یک AZ دچار مشکل می‌شد، کل سرویس تحت تأثیر قرار می‌گرفت! خب این اصلاً منطقی نیست! مگه نه اینکه هدف استفاده از چند AZ همین هست که اگه یکی به مشکل خورد، بقیه کار رو پیش ببرن؟

در مورد اسلک، هر AZ تبدیل به یک سلول شد. یعنی مجموعه‌ای از سرویس‌هایی که در یک AZ هستن و می‌تونن به عنوان یک واحد از سرویس خارج بشن یا به سرویس برگردن.

🎯 اسلک چهار هدف اصلی داشت:

- حذف ترافیک از یک AZ در کمتر از ۵ دقیقه (سرعت)
- حذف ترافیک نباید باعث خطای قابل مشاهده برای کاربر بشه
- خروج و بازگشت ترافیک یک AZ باید تدریجی باشه (مثلاً ۱٪ یا ۱۰٪)
- مکانیزم Drain نباید به AZ مشکل‌دار وابسته باشه

🧠 استراتژی‌های پیاده‌سازی در اسلک

*️⃣منزوی‌سازی (Siloing): سرویس‌ها در یک AZ فقط با سرویس‌های همون AZ ارتباط داشته باشن. ساده‌ترین روش، اما برای همه سرویس‌ها امکان‌پذیر نیست.

*️⃣مدیریت سرویس‌های با consistency قوی: سرویس‌هایی مثل Vitess (لایه شاردینگ روی MySQL) نیاز به مدیریت failover دارن.

*️⃣تقسیم‌بندی براساس CAP: سرویس‌ها براساس نیازشون به Consistency یا Availability دسته‌بندی شدن:
🔤سرویس‌های Stateless مثل webapp ها (راحت‌ترین)
🔤سرویس‌های Eventually Consistent مثل Memcache (نسبتاً راحت)
🔤سرویس‌های Strongly Consistent مثل Vitess (سخت‌ترین)


*️⃣کنترل ترافیک با Envoy و xDS: استفاده از traffic weighting برای هدایت تدریجی ترافیک

چرا این بار موفق شدن؟
اسلک قبلاً یک بار تلاش کرده بود این کار رو انجام بده و شکست خورده بود. این بار چند اصل مهم رو رعایت کردن:

- تدریجی بودن (Incrementality): به جای ساخت یک سیستم کاملاً جدید و تغییر یکباره، هر سرویس رو جداگانه و تدریجی تغییر دادن.
- نگاه از پایین به بالا (Bottom-up): با هر تیم سرویس جداگانه کار کردن و راهکار مخصوص اون سرویس رو پیدا کردن.
- به اندازه کافی خوب (Good Enough): پذیرفتن اینکه لازم نیست همه سرویس‌ها یکجا و کامل تغییر کنن.
- رویکرد Roofshot به جای Moonshot: به جای یک حرکت مستقیم و بلندپروازانه، مجموعه‌ای از قدم‌های کوچکتر که در هر مرحله ارزش ایجاد می‌کنه.
- تست‌های منظم: هر هفته یک AZ رو drain می‌کردن و پیشرفت رو اندازه می‌گرفتن.

⛳️ نتایج:

- الان می‌تونن یک AZ رو در ۶۰ ثانیه از سرویس خارج کنن
- هزینه‌های انتقال داده بین AZ کاهش پیدا کرده
- یک مکانیزم blue-green deployment جدید به دست آوردن
- راهکار عمومی برای مقابله با مشکلات محدود به یک AZ دارن

📝 نکته‌های کلیدی برای پروژه‌های زیرساختی بزرگ

*️⃣تدریجی ولی مداوم کار کنید: پروژه‌های بزرگ زیرساختی باید گام به گام پیش برن
*️⃣در نظر بگیرید هر سرویس دلیلی برای وضعیت فعلیش داره: تصور نکنید که افراد دیگه اشتباه کردن
*️⃣ارزش رو در هر مرحله قفل کنید: پروژه باید در هر مرحله ارزش ایجاد کنه، نه فقط در پایان
*️⃣کارآیی رو برای کاهش ریسک فدا کنید: گاهی راه مستقیم، بهترین راه نیست

🔔 اگر سرویسی دارین که مردم بهش وابسته هستن یا با از دسترس خارج شدنش کار مردم می‌خوابه، لطفا قبل از وقوع حادثه، به فکر علاج باشین... تابستان در پیش است و قطعی برق نزدیک. دیتاسنترهای مختلف (ترجیحا پراکندگی شهری/استانی) می‌تونه در کنار معماری سلولی کمک کنه، هم به اعتبار و درآمد سازمان شما و مهم‌تر به کار مردم...

💬 اگر دوست داشتید در موردش صحبت کنیم، حتمن بگید، سوال و پیشنهاد هم مثل همیشه باعث خوشحالی...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
عموما انتخاب معماری، تکنولوژی یا ابزار، از بین ابزارهای موجود و شناخته‌شده انجام می‌شه و به ندرت تیم‌ها نیاز یا حتی توانایی خلق معماری جدید رو دارن. توی چنین شرایطی شناخت معماری و زمینه‌ی پیدایشش کمک بزرگی به پیشگیری از انتخاب اشتباه می‌کنه. یعنی وقتی می‌دونیم یک معماری در چه شرایطی و برای تأمین چه نیازی به وجود اومده، می‌تونیم فکر کنیم آیا شرایط و نیاز و مسئله‌ی فعلی ما هم راستا با شرایط و نیاز ما هست یا نه!

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

- مایکروسرویس
- متدولوژی Domain-Driven Design
- معماری‌ها Clean / Hexagonal / Onion

اگر فکر می‌کنید موضوع جذابیه: ⚙️
اگر هم پیشنهادی براش دارید حتمن بنویسید 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
54🔥32👍1
📇 تاریخچه و زمینه پیدایش مایکروسرویس

شاید بد نباشه تا دفعه بعد که خواستید در مورد معماری و ساختار یه پروژه تصمیم بگیرید، یه بار پیشینه‌ی پیدایش مایکروسرویس رو مرور کنین تا از تناسب «نیاز» و «راهکار»ی که مدنظر دارید مطمئن باشید.

نمیشه دقیق و قاطع گفت «اولین» بار کی مفهوم مایکروسرویس رو پیاده کرده. مفهوم مایکروسرویس‌ از تکامل معماری‌های قبل‌تر از خودش، خصوصا به عنوان یک پاسخ به محدودیت‌های سیستم‌های یکپارچه، و پیچیدگی معماری سرویس‌گرا (SOA) شکل گرفت. حالا دو چیز رو باید توضیح داد، یک شیوه‌های امروزی‌تر پیاده‌سازی مایکروسرویس، و یکی مفهوم و معماری‌اش. برای پیاده‌سازی مدرن، نتفلیکس رو می‌شه به عنوان یکی از اولین و تأثیرگذارترین پذیرندگان رویکرد میکروسرویس‌ توی مقیاس بزرگ شناخت. نتفلیکس مهاجرت خودش از معماری یکپارچه به مایکروسرویس‌ها رو حدود سال ۲۰۰۹ شروع کرد، خیلی قبل از اینکه اصطلاح "مایکروسرویس‌" به طور رسمی سال ۲۰۱۱ مطرح بشه. تا سال ۲۰۱۱، نتفلیکس طراحی مجدد بخش قابل توجهی از سیستم‌هاش به مایکروسرویس‌ها رو تکمیل کرده بود و از AWS استفاده می‌کرد، و خیلی از الگوهایی که امروز به عنوان استاندارد یا best practice شناخته می‌شن رو پیاده کرده بود.

ولی از نظر مفهومی، آمازون یکی از پذیرندگان اولیه و کلیدی است. یعنی حدود سال ۲۰۰۱، آمازون (در اون زمان تحت هدایت جف‌ بزوس) شروع می‌کنه به تجزیه سیستم‌های یکپارچه، بزرگ و مستحکمش به سرویس‌های کوچک‌تر و مستقل تا بتونه مشکلات مقیاس‌پذیری و استقرار رو بهبود بده. این انتقال، زمینه رو برای اونچه سال‌ها بعد، به عنوان معماری مایکروسرویس می‌شناسیم، فراهم کرد.

پذیرندگان بعدی این معماری، از eBay و Spotify و... همه یک سری دغدغه مشترک داشتن، یعنی مقیاس‌پذیری، پیچیدگی و وسعت سیستم، و استقرار، اونم با تیم‌های بزرگ.

بیایم نگاه بندازیم به روایات!
جناب Fred George یکی از پیشگامان معماری مایکروسرویس می‌گه هر مایکروسرویس باید به قدری ساده و کوچک باشه که توی ذهن یک توسعه‌دهنده جا بشه:

"small enough and simple enough that a single developer can understand the whole thing"


بعدتر همین رو مارتین فولر هم به نحوی تکرار می‌کنه.

حالا سوال اینه که اگر تیم توسعه و تعداد سرویس‌ها بزرگ نیستند، آیا مقیاس‌پذیری مورد نیازمون به حدی رسیده که scale-up پاسخگو نباشه و بریم سراغ شکست و توزیع سرویس‌ها؟ آیا زیرساخت لازم رو از پردازش ابری تا DevOps تا مونیتورینگ/observabilty و... داریم؟ آیا ظرفیت مستندسازی API، فرایند، کاتالوگ داده‌ها و فرایندها و... رو داریم؟

تجربیات مستند زیادی وجود داره که استارتاپ‌ها و تیم‌های کوچیک زیادی «زودتر از موعد» به سراغ مایکروسرویس رفتن و از عهده‌ی سربارش بر نیومدن... یادمون نره، معماری باید در خدمت مسائل ما باشن، نه اینکه ما در خدمت معماری دربیایم.

توی مباحث DDD به تفصیل خواهم گفت که معماری سازمانی ما هم حتی باید با شیوه تحلیل نیازمندی‌ها و شیوه ترجمه‌ی اون‌ها به راهکارهای نرم‌افزاری سازگار باشه.

مایکروسرویس فقط تفیکیک کدها به چند پوشه و وصل کردنشون با API و دپلوی کردنشون تحت پروسه‌های مجزا نیست! و ای بسا می‌تونه آغازی بشه بر مصیبت‌های آشکار فنی و آسیب‌های پرشمار پنهان، منجمله نپرداختن به ریشه‌ی کاستی‌ها، یا افتادن به تله‌ی مرزبندی اشتباه سرویس‌ها از هم.

لذا مایکروسرویس، در زمان مناسبش و با فراهم کرن پیش‌نیازهاش، و علی‌الخصوص وقتی که در خدمت حل‌کردن مسائل ما باشه همون قدر خوب و مفیده که وقتی زودهنگام یا بدون پیش‌نیازهاش می‌ریم سراغش، مضر!

💬 نظر یا تجربه شما چیه؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥61
🔭 تاریخچه و زمینه پیدایش Domain-Driven Design

اوایل دههٔ ۲۰۰۰ شرکت‌های خیلی بزرگ (بانک‌ها، بیمه، و …) با سیستم‌های نرم‌افزاری‌ای روبه‌رو بودند که:

- دامین‌های با پیچیدگی خیلی بالا داشتند (مثل قوانین کسب‌وکار پرشمار و در حال تغییر).

- گپ ارتباطی وحشتناکی بین تحلیلگرها و برنامه‌نویس‌ها وجود داشت؛ اصطلاحات یکی برای دیگری نامفهوم بود.

- هر تغییر کوچک به موجی از regression bugها و استرس انتشار تبدیل می‌شد.

توی چنین شرایطی، Eric Evans می‌گه: «بیایید به جای تمرکز صِرفن روی لایه‌های فنی، قلب مسأله—یعنی دامنه—رو محور کار بگذاریم.» نتیجه شد متدولوژی Domain-Driven Design که توی کتاب معروف «آبی» در سال ۲۰۰۳ متولد شد و ‌بعدتر با کارهای Vaughn Vernon، Jimmy Nilsson و بقیه گسترش پیدا کرد.

برخی مفاهیم پایه در DDD:

- مفهوم Ubiquitous Language
زبان مشترک بین همهٔ ذی‌نفعان. کلاس، جدول DB و اسلاید ارائه باید از یک واژه برای یک مفهوم استفاده کنند، و یک واژه باید همه جا معنی یکسان داشته باشه.

- مفهوم Bounded Context
مرزهایی شفاف برای معنی واژه‌ها. «سفارش» در حسابداری ≠ «سفارش» در انبار.

- مفهوم Aggregate
یک خوشه (گروه) از آبجکت‌ها، با یک ریشهٔ واحد که می‌شه به‌صورت واحد تلقی کردشون.

- مفهوم Context Map
نقشهٔ روابط بین Bounded Contextها؛ شامل پیوندهای همکار، مشتری–تأمین‌کننده و…

- مفهوم Strategic Design
هنر تشخیص اینکه کِی باید دامنه رو بشکنیم و تیم رو حولش سازمان‌دهی کنیم.

آیا DDD برای همه است؟ نه دقیقاً!
توی «مطلب قبل» دربارهٔ وسوسهٔ ترندها گفتم، DDD هم قربانی حباب‌ها شده. نشونه‌های انتخاب اشتباه:

- دامنه ساده است (CRUD سرراست، منطق پیچیده‌ای هم نداره) ولی تیم حتماً می‌خواد Bounded Context تعریف کنه و Event Storming برگزار کنه!

- ابزارهای تحلیلی، تست، مستندسازی و DevOps هنوز بالغ نیستند اما «می‌خواهیم معماری تمیز + DDD + مایکروسرویس» رو با هم پیاده کنیم.

- تیم کوچک است ولی هر کانتکست رو توی یک ریپو جداگانه Deploy می‌کنه و نصف زمانش صرف هماهنگی بین ریپوها می‌شه.

یادمون نره: DDD هزینه داره—هم آموزشی، هم طراحی، هم نگهداری.
اگر درد پیچیدگی دامنه رو حس نمی‌کنیم، این دارو تلخ و بی‌فایده است!!

چرا لزوماً هر معماری دامین-سنتریک، DDD نیست؟!
— بعدتر دراین‌باره خواهم نوشت که هر گردی گردو نیست!! پیاده‌سازی Clean / Hexagonal / Onion به معنی DDD نیست!

«توی DDD، معماری کد فقط یک لایه از ماجراست؛ موفقیت زمانی رقم می‌خوره که ساختار سازمانی و فرایندهای تیم هم با مرزهای دامنه منطبق شن. اگر تیم کوچکه و دامنه پیچیدگی بالایی نداره، صرف داشتن لایهٔ Domain یا استفاده از معماری Clean، شما صاحب DDD نمی‌شید.»

🔔 اگر علاقه‌مند بودید، روز ۴ خرداد (۲۵ می) ساعت ۱۹:۳۰ به وقت تهران جلسه‌ای به همت انجمن DDD ایران برگزار می‌شه که اگر عمر و فرصتی بود، در این مورد به تفصیل صحبت خواهم کرد. اطلاعات ایونت رو توی کامنت قرار خواهم داد.

💬 نظر؟ تجربه؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍245
🧠 سرنوشت یکی از اولین قربانی‌های هوش‌مصنوعی،
استک‌اورفلو

استک‌اورفلو به خاطر رشد استفاده از LLMها که یکی از منابع یادگیری‌شون خود استک‌اورفلو بوده، حالا حسابی تو دردسر افتاده. آمار جدید نشون می‌ده تعداد سؤال و جواب‌های اپریل ۲۰۲۵ نسبت به دوره مشابه پارسال ۶۴٪ کم شده و اگر با اوج ترافیکش در ۲۰۲۰ مقایسه کنیم، سقوط بالای ۹۰٪ داشته!

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

🧐 کاربرها چی میگن؟
خیلی از کاربرها اصلاً با این تغییر برند موافق نیستن. بعضی کاربرها فکر می‌کنن تغییر اسم و برند راه حل مشکل نیست...

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

جالبه که با وجود کاهش ترافیک، درآمد شرکت هنوز آسیب جدی ندیده. طبق نتایج مالی Prosus (شرکت سرمایه‌گذاری که مالک استک اکسچنج هست)، توی شش ماه منتهی به سپتامبر ۲۰۲۴، استک اورفلو درآمدش رو افزایش داده و ضررش رو هم کمتر کرده.

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

💬 نظر شما چیه؟ قربانی بعدی کیه؟ از این به بعد هوش مصنوعی از کجا تغذیه بشه؟؟
Please open Telegram to view this post
VIEW IN TELEGRAM
💔17👍5
🎮 تاریخچه زمینه پیدایش Clean / Hexagonal / Onion

در یک نگاه، سه الگوی «clean»، «hexagonal» و «onion» همه با یک هدف مشترک متولد شده‌اند: جدا کردن «منطق دامنه» از جزئیات متغیّر فناوری (UI، دیتابیس، فریم‌ورک‌ها) و معکوس کردن جهت وابستگی‌ها. تفاوت‌شون در زاویه دید و لایه‌بندی است؛ hexagonal روی ports و adapters (درگاه‌ها و آداپترها) تأکید می‌کنه، و onion روی «وابستگیِ رو به هسته» و clean یک معماری‌ ترکیبیه که ایده‌های هر دو رو با تمرکز روی use-case گسترش می‌ده.

اما درست مثل مایکروسرویس و DDD، پیاده‌سازی زودهنگام یا بدون مسئله واقعی، می‌تونه هزینه و پیچیدگی بی‌فایده تحمیل کنه.

📇 ریشه و سیر تکامل

- هگزاگونال (Ports & Adapters)
سال ۲۰۰۵ توسط Alistair Cockburn مطرح شد؛ هدف: «قابلیت تست مستقل از UI و پایگاه داده و جلوگیری از بلاک شدن توسط فناوری»

عملا core system از طریق «پورت»‌ها با جهان بیرونی‌اش صحبت می‌کنه؛ هر پورت می‌تونه آداپترهای مختلف مثل REST، CLI، تست و... داشته باشه.

🧅 معماری onion
توسط Jeffrey Palermo در سال ۲۰۰۸ معرفی شد؛ قانون طلایی: «تمام وابستگی‌ها باید به سمت مرکز (دامین مدل) باشن»

چهار رکن اصلی به گفتهٔ خودش:
۱: سیستم باید حول یک object model مستقل شکل بگیره
۲: لایه‌های داخلی interfaceها رو تعریف می‌کنن و لایه‌های بیرونی interfaceها رو پیاده‌سازی.
۳: جهت اتصال به سمت مرکزه.
۴: امکان کامپایلِ Core بدون زیرساخت باید محقق بشه.

معماری clean
توسط پیرمرد پرحاشیه‌ی این روزها 😅 رابرت سی. مارتین (uncle bob) مفهوم «Clean Architecture» سال ۲۰۰۸ توی وبلاگش شرح داد؛ معماری‌ای لایه‌ای با entityها، use caseها و interface adapter که «مستقل از فریم‌ورک و قابل تست» باقی بمونن.

معماری clean رو می‌شه ترکیبی تکامل‌یافته از hexagonal و onion دونست که حلقه‌های بیشتری (Entities, Use-Cases, Interface Adapters…) تعریف می‌کنه.

⚖️ چه‌وقت‌ مناسبند؟
- وقتی پیچیدگی دامنه واقعاً بالاست؛ قوانین در حال تغییر و تعاملات متعدد دارید.
- طول عمر سیستم طولانیه و انتظار تغییر فناوری‌های UI یا دیتابیس یا کلن لایه‌های فنی را داریم.
- نیاز به یونیت‌تست قبل از آماده بودن زیرساخت احساس می‌شه.

🧩 نسبتشون با DDD و مایکروسرویس
این الگوها «دامین‌سنتر» هستند، اما استفاده ازشون الزاماً به معنی DDD نیست؛ همون‌طور که DDD بدون این معماری‌ها هم ممکنه.

در معماری مایکروسرویس، به‌کارگیری یکی از این الگوها برای هر سرویس به استقلال توسعه/دیپلوی کمک می‌کنه، ولی اگر مقیاس تیم یا ماژول کوچک باشه، شاید حتی الگوی ساده لایه‌ای کفایت کنه! — مثل همون اشتباه «پیاده‌سازی زودهنگام مایکروسرویس».

💬 تجربه شما؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍852
💡آیا ویندوز NT واقعا سیستم‌عامل پیشرفته‌ای بود؟ نمونه مقایسه مهندسی، به جای هیجانات شخصی...

امروز داشتم بوکمارک‌‌تکونی می‌کردم، یهو پست وبلاگ Julio Merino که ماه‌ها پیش ذخیره کرده بودم تا در موردش بنویسم و فراموش کرده بودم رو دیدم.

آقای Julio Merino پیشتر در گوگل و مایکروسافت و الان هم در snowflake مشغول به کاره و روی سیستم‌های یونیکس‌بیس خیلی مسلطه (معماری و لایه‌های پایین‌تر سیستم عامل) و جز دولوپرهای FreeBSD و NetBSD بوده. توی این پست توضیح می‌ده که آیا تعریف و تمجیدهایی که از پیشرفته بودن سیستم‌عامل Windows NT در سال ۱۹۹۳ می‌شده در مقابل یونیکس‌سانان مثل BSD درست بوده یا نه؟!

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

مقاله مفصلیه، و از حوصله پست تلگرامی خارج. ولی مثلا از hybrid microkernel یا Async I/O میگه که NT جلوتر از زمان خودش و پیشرفته از Unix بوده و بعد نظرش رو توضیح می‌ده که چطور linux و یونیکس‌سانان این سال‌ها گپ‌ها رو پر کردن و چالش‌های اصلی توسعه ویندوز چیاست از نظرش.

هدفم از اشتراک این مطلب اینه چقدر در بین مقایسه‌هایی که در مورد زبان‌ها، تکنولوژی‌ها، معماری‌ها و... می‌بینیم، روش و معیارهای فنی می‌بینیم، و چقدر بر اساس رسانه و هیجان و تصورات ذهنی‌مون قضاوت می‌کنیم...
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍2👌2
This media is not supported in your browser
VIEW IN TELEGRAM
🎞 فیلم مستند پایتون!

شرکت Cult-Repo که کارش روایت داستان محصولات کدباز در مدیوم فیلمه، حالا فیلم جدیدی در راه داره... پایتون!

من فیلم‌هاشون رو دوست دارم و نوع متفاوتی از یادگیری داره. اگر شما هم به این موضوعات علاقه دارید، دنبالشون کنید

دوستانی که از قدیمی‌تر هستن توی کانال، اگر یادشون باشه یکی دوبار فیلم‌های نرم‌افزاری برای آخر هفته معرفی کردم که اگر دوست داشتید یه نگاه بندازید.
🔥6👀11
🎙 وبینار فراتر از کُد: درباره تناسب و سازگاری معماری سیستم‌ها با ساختار سازمانی

🗓 روز یکشنبه ۴ خرداد (۲۵ می) ساعت ۱۹:۳۰ به وقت تهران؛ به دعوت انجمن DDD ایران، یه صحبت یک‌ساعته و بعدش هم گپ‌وگفت نیم‌ساعته خواهیم داشت...

اگر رئوس مطالب براتون جالب بود، حضورتون باعث خوشحالیه 😊🌱

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

لینک گوگل فرم برای اعلام حضور
لینک افزودن به تقویم گوگل
لینک پیوستن در گوگل‌میت

کانال تلگرامی انجمن DDD ایران
@DDD_IRAN
Please open Telegram to view this post
VIEW IN TELEGRAM
9👏2
📊 برای ۳ تا ۵ پست بعدی کانال، کدوم موضوع برای شما جذاب‌تره برای دنبال کردن؟
Anonymous Poll
25%
تازه‌های SQL Server 2025
23%
تازه‌های PostgreSQL 18
36%
تازه‌های دات‌نت ۱۰
4%
مرور و مثال Arazzo Spec
9%
مرور Bring your own cloud (BYOC)
4%
توی کامنت می‌گم