این روزها که خبر تغییر لایسنس AutoMapper و MediatR و MassTransit به جمع قبلیها یعنی ImageSharp, IdentityServer, Fluent Assertions پیوست که تازه اینا اکوسیستم داتنت بودن، و اگر فارغ از اکوسیستم نگاه کنیم Redis و Elastic و... هم اضافه میشن؛ خوبه تا فرایند انتخاب تکنولوژی، مدیریت فنی محصول، بودجهبندی و... رو مرور کنیم.
چقدر تیمها بابت جوگیری و چپوندن انبوه کتابخونهها به پروژه با هدف عقب نیوفتادن از موج وبلاگها و ویدیوهای بلاگرهای تکنولوژی، خودشون و اعصابشون و محصول و زمان رو دچار چالش کردن...
لذا خوبه تا مسیر اصولی رو یاد بگیریم، کاری که توی تیمهای بزرگ عموما توسط technology manager هدایت میشه. با یه مثال انترپرایز بزنم تا بعدن نسبت به سایز کوچکتر بریم جلو:
شما میخواهید از کتابخونه A استفاده کنید، اول چک میکنید ببینید آیا توی green book سازمان لیست شده یا نه. اگر نشده باشه، جک میکنید ببینید کاری که اون کتابخونه قراره انجام بده، در دنیای محصولات تجاری، چقدر هزینه داره؟! و اگر کدباز است، نوع لایسنسش چیه؟ چند نفر توسعهدهنده فعال داره؟ کامیونیتیاش چقدر بزرگه؟ بنیه مالی این پروژه چجوریه؟ آیا جایگزین کدباز یا تجاری با امکانات مشابه یا حداقل نیاز ما وجود داره؟ و سوالات دیگهای که بهمون کمک کنه تا چیزی رو انتخاب کنیم که آینده محصول تحت تاثیر عمیق قرار نگیره. بعد، موضوع پیادهسازی پیش میاد که کد ما چقدر قابلیت تعویض قطعات پازلش رو داره؟ (وابستگیها با چقدر تغییر قابل تغییر هستن؟)
خلاصه اینکه توسعه محصول فقط استفاده از کتابخونهها نیست، انتخاب ابزار هم بخشی از مسیر و نیازمندیهای دانش و تجربه است. توسعه خیلی از محصولات «غلط اضافی» شرکتها هستند!! (با توجه به استعداد مالی و بنیه فنی و...) کما اینکه تاسیس شرکت و استقلال هم «غلط اضافی» برخی علاقهمندانِ پوزیشن مدیرعاملیه....
چقدر تیمها بابت جوگیری و چپوندن انبوه کتابخونهها به پروژه با هدف عقب نیوفتادن از موج وبلاگها و ویدیوهای بلاگرهای تکنولوژی، خودشون و اعصابشون و محصول و زمان رو دچار چالش کردن...
لذا خوبه تا مسیر اصولی رو یاد بگیریم، کاری که توی تیمهای بزرگ عموما توسط technology manager هدایت میشه. با یه مثال انترپرایز بزنم تا بعدن نسبت به سایز کوچکتر بریم جلو:
شما میخواهید از کتابخونه A استفاده کنید، اول چک میکنید ببینید آیا توی green book سازمان لیست شده یا نه. اگر نشده باشه، جک میکنید ببینید کاری که اون کتابخونه قراره انجام بده، در دنیای محصولات تجاری، چقدر هزینه داره؟! و اگر کدباز است، نوع لایسنسش چیه؟ چند نفر توسعهدهنده فعال داره؟ کامیونیتیاش چقدر بزرگه؟ بنیه مالی این پروژه چجوریه؟ آیا جایگزین کدباز یا تجاری با امکانات مشابه یا حداقل نیاز ما وجود داره؟ و سوالات دیگهای که بهمون کمک کنه تا چیزی رو انتخاب کنیم که آینده محصول تحت تاثیر عمیق قرار نگیره. بعد، موضوع پیادهسازی پیش میاد که کد ما چقدر قابلیت تعویض قطعات پازلش رو داره؟ (وابستگیها با چقدر تغییر قابل تغییر هستن؟)
خلاصه اینکه توسعه محصول فقط استفاده از کتابخونهها نیست، انتخاب ابزار هم بخشی از مسیر و نیازمندیهای دانش و تجربه است. توسعه خیلی از محصولات «غلط اضافی» شرکتها هستند!! (با توجه به استعداد مالی و بنیه فنی و...) کما اینکه تاسیس شرکت و استقلال هم «غلط اضافی» برخی علاقهمندانِ پوزیشن مدیرعاملیه....
👍15⚡4 2
اگر حضرت سعدی در زمانهی ما زیست میکرد، احتمالا علاوه بر «دم فرو بستن به وقت گفتن، و گفتن به وقت خاموشی» دو چیز دیگه رو هم طَیرهٔ عقل اعلام میفرمود:
۱: ست کردن جلسه بدون ذکر رئوس مطالب توی ایمیل دعوت
۲: ساختن تیکتی که توضیح و acceptance criteria دقیق نداره
* طَیرهٔ عقل: سبک مغزی
** این لیست مستعد کامل شدن تا دهها مورد طَیرهٔ عقل است، توی کامنت بنویسید، حضرت سعدی حتمن مطالعه خواهند کرد و در نسخ جدید گلستان اعمال خواهند کرد 🤓
۱: ست کردن جلسه بدون ذکر رئوس مطالب توی ایمیل دعوت
۲: ساختن تیکتی که توضیح و acceptance criteria دقیق نداره
* طَیرهٔ عقل: سبک مغزی
** این لیست مستعد کامل شدن تا دهها مورد طَیرهٔ عقل است، توی کامنت بنویسید، حضرت سعدی حتمن مطالعه خواهند کرد و در نسخ جدید گلستان اعمال خواهند کرد 🤓
😁14👍3👏2
یه پروژه جذاب و کاربردی برای اتصال AI Assistentها...
همزمان با دسترسی عمومی Agent mode و پشتیبانی از MCP روی VSCode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6 3🔥2
پروژه شخصی (بخوانید دلی) لینوس توروالدز که تبدیل به ابزار روزمره ما شد...
اگر دوست دارید بدونید نبوغ و پشتکار این مرد چقدره، همین بس که اولین نسخهی کار بکن git طی ۵ روز نوشته شد!
پیشنهاد میکنم خوب یاد بگیرید، در مورد معماری و فایلسیستم git و VFSForGit بخونید که بسی جذابه!
توی یکی از جلسات تکافترنون سالها پیش در موردش مفصل گفتم، اگر و اگر فایل صوتی جلسه رو پیدا کنم میگذارم توی کانال.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12 7
🔄 معرفی Agent2Agent Protocol (A2A) از گوگل!
امروز گوگل توی کنفرانس Cloud Next پروتکل جدید Agent2Agent (A2A) رو معرفی کرد. این پروتکل باعث میشه تا AIها بدون توجه به اینکه با چه فریمورکی ساخته شدن، بتونن با هم ارتباط برقرار کنن. یعنی دیگه مثل این نیست که هر مدل باید به مدل خودش حرف بزنه؛ حالا همه میتونن با هم گپ بزنن! A2A تکمیلکننده مسیر Model Context Protocol (MCP) از آنتروپیک است (شرکت خالق Claude.ai)
تو این سیستم، یه تقسیمبندی ساده داریم: یه جوری AIها به دو دسته تقسیم میشن؛ یه دسته که "کلاینت" هستن و درخواستها رو میدن و دستهی دیگه که "ریموت"، یعنی درخواستها رو انجام میدن. این یه جور «قرارداد ارتباطی» به وسیله استانداردهای HTTP, SSE, و JSON-RPC فراهم میکنه و حتی از احراز هویت و سطح دسترسی هم پشتیبانی میکنه. پروتکل از قابلیتهای مورد نیاز برای کارهای طولانی مدت هم پشتیبانی میکنه، یعنی میتونه بازخوردها، اعلانها و وضعیت روز رو به صورت لحظهای به شما گزارش بده.
همچنین لازم بدونید که گوگل تاکید میکنه این پروتکل، Agent2Agent، قرار نیست جایگزین Model Context Protocol (MCP) بشه؛ بلکه یک مکمل برای اون محسوب میشه. در واقع MCP برای دسترسی به دادهها به صورت استاندارد استفاده میشه و Agent2Agent هم برای ارتباط مستقیم بین مدلها به کار میره. در کنار همکاری بیش از ۵۰ شریک فناوری معروف مثل Atlassian, Box, MongoDB, Salesforce و ...، این نوآوری گام مهمی توی تقویت همکاری هوش مصنوعیها بین خودشونه.
امروز گوگل توی کنفرانس Cloud Next پروتکل جدید Agent2Agent (A2A) رو معرفی کرد. این پروتکل باعث میشه تا AIها بدون توجه به اینکه با چه فریمورکی ساخته شدن، بتونن با هم ارتباط برقرار کنن. یعنی دیگه مثل این نیست که هر مدل باید به مدل خودش حرف بزنه؛ حالا همه میتونن با هم گپ بزنن! A2A تکمیلکننده مسیر Model Context Protocol (MCP) از آنتروپیک است (شرکت خالق Claude.ai)
تو این سیستم، یه تقسیمبندی ساده داریم: یه جوری AIها به دو دسته تقسیم میشن؛ یه دسته که "کلاینت" هستن و درخواستها رو میدن و دستهی دیگه که "ریموت"، یعنی درخواستها رو انجام میدن. این یه جور «قرارداد ارتباطی» به وسیله استانداردهای HTTP, SSE, و JSON-RPC فراهم میکنه و حتی از احراز هویت و سطح دسترسی هم پشتیبانی میکنه. پروتکل از قابلیتهای مورد نیاز برای کارهای طولانی مدت هم پشتیبانی میکنه، یعنی میتونه بازخوردها، اعلانها و وضعیت روز رو به صورت لحظهای به شما گزارش بده.
همچنین لازم بدونید که گوگل تاکید میکنه این پروتکل، Agent2Agent، قرار نیست جایگزین Model Context Protocol (MCP) بشه؛ بلکه یک مکمل برای اون محسوب میشه. در واقع MCP برای دسترسی به دادهها به صورت استاندارد استفاده میشه و Agent2Agent هم برای ارتباط مستقیم بین مدلها به کار میره. در کنار همکاری بیش از ۵۰ شریک فناوری معروف مثل Atlassian, Box, MongoDB, Salesforce و ...، این نوآوری گام مهمی توی تقویت همکاری هوش مصنوعیها بین خودشونه.
Googleblog
Google for Developers Blog - News about Web, Mobile, AI and Cloud
Explore A2A, Google's new open protocol empowering developers to build interoperable AI solutions.
👍10🔥2❤1 1
مسعود دانشپور عزیز، برای تیمش توی دیجیکالا دنبال چند مهندس نرمافزار خبره می گرده که از پس تراکنش های بسیار بالا مثل بلک فرایدی بر بیان، طبیعتا افرادی که خودشون رو واجد شرایط بدونن اپلای میکنن و براشون آرزوی موفقیت دارم.
به نظرم اومد شاید دوستانی باشن که دوست داشته باشن بدونن نقشهراه و توصیف دقیقتر چالشهای این تیپی چیه، و برای اینکه در آینده بتونن برای موقعیتهای مشابه اپلای کنن، چه چیزهایی رو باید دقیقتر یاد بگیرن و تمرین کنن، و مسیر پیشنهادی چی میتونه باشه.
اگر جلسه آنلاین با محوریت بررسی این شرح شغلی و موارد مشابه براتون جالبه لطفا با ایموجی بگید تا اگر حدنصابی مناسبی داشت، برای روز یکشنبه یه دورهمی آنلاین داشته باشیم 😊
اگر حتمن شرکت میکنید:⚙️
اگر شاید شرکت میکنید: 🤓
به نظرم اومد شاید دوستانی باشن که دوست داشته باشن بدونن نقشهراه و توصیف دقیقتر چالشهای این تیپی چیه، و برای اینکه در آینده بتونن برای موقعیتهای مشابه اپلای کنن، چه چیزهایی رو باید دقیقتر یاد بگیرن و تمرین کنن، و مسیر پیشنهادی چی میتونه باشه.
اگر جلسه آنلاین با محوریت بررسی این شرح شغلی و موارد مشابه براتون جالبه لطفا با ایموجی بگید تا اگر حدنصابی مناسبی داشت، برای روز یکشنبه یه دورهمی آنلاین داشته باشیم 😊
اگر حتمن شرکت میکنید:
اگر شاید شرکت میکنید: 🤓
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Learning With M
سلام.
من مسعود دانش پور هستم.
همسر، پدر، پسر، برادر، انسان و مهندس نرم افزار.👻
اینجا جایی هست که من تلاش می کنم موضوعاتی که برای یک مهندس نرم افزار مهم و لازمه رو بازگو کنم.
آکادمی یادگیری با M :
https://academy.daneshpour.ir
من مسعود دانش پور هستم.
همسر، پدر، پسر، برادر، انسان و مهندس نرم افزار.👻
اینجا جایی هست که من تلاش می کنم موضوعاتی که برای یک مهندس نرم افزار مهم و لازمه رو بازگو کنم.
آکادمی یادگیری با M :
https://academy.daneshpour.ir
بالاخره بعد از کشوقوسهای فراوون (شروع جدیاش از سال ۲۰۲۱ بود) بالاخره امکان 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<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
GitHub
core/release-notes/10.0/preview/preview3/csharp.md at main · dotnet/core
.NET news, announcements, release notes, and more! - dotnet/core
🔥7👍6👏1
ارزش «باور به توانایی»، اعتبار فردی...
احتمالا با خانم یعنی میرا موراتی، CTO سابق OpenAI که از ابتدای طراحی ChatGPT نقش داشت و چند وقت پیش استعفا داد تا دنبال رویای خودش بره آشنایی دارین.
استارتاپ ایشون که الان تعداد انگشتشمار! کارمند داره و هنوز محصولی بیرون نداده، یعنی Thinking Machines Lab الان ۲ میلیارد دلار جذب سرمایه (خطرپذیر) داشته.
این نمونه واقعی اینه که اعتبار و باوری که آدمها از خودشون میسازن، چقدر میتونه ارزشمند باشه.
حالا میرا موراتی یک نمونه رایج و نرمال نیست. ولی اینکه ما بتونیم توی تیم یا شرکت، ایدهی جدید، تغییر بزرگ، یا یک نوآوری پرریسک رو پیشنهاد بدیم و سازمان یا مدیر «عاقل»، با تکیه بر باور توانایی و اراده ما، فضا و امکان کار روی اون طرح رو بده، بخشی از «پرسنال برندینگ» است که ذره ذره و با ممارست و تلاش فقط به دست میاد.
صحبتم در مورد اعتبار متخلخل و پوشالی نیست، در مورد مدیر احمق و نفهم هم نیست... چون با جفت اینا هم میشه امکان و فضای کار روی محصول یا ایده اشتباه و محکوم به شکست رو پیدا کرد.
از این دست نمونهها زیادن، چه نمونههای خارجی چه ایرانی، توی همه نمونههایی که حداقل من دیدم، تلاش و ممارست فردی، صبر، و اعتباری که پله به پله ساخته شده، وجه مشترک آدمهایی بوده که بهشون اعتماد شده، و کارهای بزرگ کردن...
فقط هم محدود به نرمافزار نیست، «گاها» حتی اون آدمها وارد حوزه جدیدی شدن که همپوشانی کاملی با تجربیات قبلیشون نداشته.
یه سری مهارتهای نَرم (soft skills) وجود داره که میتونه کمک کنه تا hard skills ما طوری پرورش پیدا کنه که صاحب «اعتبار و اعتماد» اجرایی بشیم، و شاید این یکی از مهمترین دستاوردهای کاری یک فرد بتونه باشه، یعنی دیگرانی باشن که باور و اعتماد داشته باشن به توانایی به انجام رسوندن کارهای دشوار یا جدید...
💬 تجربهای داشتید؟ نظری دارین؟
احتمالا با خانم یعنی میرا موراتی، 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
Google Docs
دورهمی تکافترنون (مسیر شغلی) یکشنبه ۳۱ فروردین (۲۰ اپریل)
مرور مهارتهای مورد نیاز و مسیر رسیدن به مهندس ارشد نرمافزار
👍7🙏4🔥2
tech-afternoon
Please open Telegram to view this post
VIEW IN TELEGRAM
Google
Real-time meetings by Google. Using your browser, share your video, desktop, and presentations with teammates and customers.
👏6😍4👍1😁1
ممنون از همه دوستانی که تشریف آوردن، امیدوارم هر چه زودتر توی جلسه دوم ببینمتون 😊🌱
لینک یوتیوب
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
بخش ۱: مرور مهارتهای مورد نیاز و مسیر رسیدن به مهندس ارشد نرمافزار
این جلسه حول اینه که ببینیم به عنوان توسعهدهندهای که از سطح Junior به Medior؛ یا از سطح Medior به Senior در حال رشد هستیم، در هر مرحله باید چه مهارتها و توانمندیهایی رو کسب کنیم تا بتونیم در شرکتهایی که چالشهایی مثل تعداد زیاد درخواست همزمان، یا پیچیدگیهای…
❤24🔥4
📝 روشهایی برای اولویتبندی نیازمندیها
وقتی یه تیم محصول یا توسعه تصمیم میگیره یه چیزی بسازه یا بهبود بده، معمولاً با کلی پیشنهاد و نیازمندی (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 بیشتر توی مدیریت پروژه و جلسههای برنامهریزی اسپرینت استفاده میشه. وقتی میخوای با تیم تصمیم بگیری که توی این بازه زمانی رو چی تمرکز کنید.
🧠 اگه خواستی بیشتر بدونی...
اولا هر کاری رو اگر «روشمند» یعنی بر اساس یک مدل بریم جلو، ولو کارهایی که بدیهی به نظر میان، عموما شانس موفقیت بالاتری داریم.
دوما، فقط این دو تا نیست؛ اگه دوست داری مدلهای بیشتری رو بررسی کنی یا روشهای دیگهای برای تصمیمگیری داشته باشی، اینا هم ارزش وقت گذاشتن دارن:
💬 شما از چه روشی برای اولویت دادن به نیازها و کارها استفاده میکنی؟
جلسه «مرور مهارتهای مورد نیاز و مسیر رسیدن به مهندس ارشد نرمافزار» رو بر اساس چرخه توسعه نرمافزار (SDLC) طرح کردم، و بخش اولش «نیازمندیها و تحلیل (Requirements & Analysis)» بود. چون از روشهای MoSCoW و Kano Model برای اولویتبندی نیازمندیها (Prioritization Techniques) اسم بردم، گفتم شاید بد نباشه برای دوستانی که آشنایی ندارن، کمی توضیح بدم.
وقتی یه تیم محصول یا توسعه تصمیم میگیره یه چیزی بسازه یا بهبود بده، معمولاً با کلی پیشنهاد و نیازمندی (requirement) مواجه میشه: از باگهای کوچیک گرفته تا فیچرهای کوچیک و بزرگ.
ولی واقعیت اینه که زمان، نیرو و بودجه محدوده (منابع محدود، در مقایسه با نیازهای نامحدود!). پس مهمه بدونیم چی رو باید اول انجام بدیم، چی رو میتونیم بذاریم برای بعد، و چی رو فعلاً انجام ندیم.
اینجاست که تکنیکهای اولویتبندی میان وسط. اینا ابزارهایی هستن که کمک میکنن:
دو تا روش محبوب رو اینجا معرفی میکنم که میتونن کمک کنن. Kano Model و MoSCoW
🔍 مدل اول: Kano – وقتی رضایت کاربر مهمه
مدل Kano از اسم یه پروفسور ژاپنی به اسم «نوریآکی کانو» الهام گرفته شده. ایده اصلی اینه که همه فیچرها تأثیر یکسانی روی رضایت کاربر ندارن. بعضیاشون اگه نباشن، کاربر عصبانی میشه. بعضیا اگه باشن، خیلی خوشحال میشه. بعضیا هم بودن یا نبودنش براش فرقی نداره! (کاربر رو ذینفع (stakeholder) هم تعبیر میکنیم)
دستهبندی ویژگیها توی Kano:
🔧 کاربرد: این مدل خیلی برای مصاحبه با کاربر و طراحی تجربه کاربری خوبه. کمک میکنه روی فیچرهایی تمرکز کنی که "دل کاربر رو میبره"، نه فقط اونایی که لازمه.
——————————————————-
📦 مدل دوم: MoSCoW – برای اولویتبندی سریع و پروژهمحور
اشتباه نشه؛ MoSCoW یه مخففه و ربطی به شهر مسکو نداره! 😄:
🔧 کاربرد: MoSCoW بیشتر توی مدیریت پروژه و جلسههای برنامهریزی اسپرینت استفاده میشه. وقتی میخوای با تیم تصمیم بگیری که توی این بازه زمانی رو چی تمرکز کنید.
🧠 اگه خواستی بیشتر بدونی...
اولا هر کاری رو اگر «روشمند» یعنی بر اساس یک مدل بریم جلو، ولو کارهایی که بدیهی به نظر میان، عموما شانس موفقیت بالاتری داریم.
دوما، فقط این دو تا نیست؛ اگه دوست داری مدلهای بیشتری رو بررسی کنی یا روشهای دیگهای برای تصمیمگیری داشته باشی، اینا هم ارزش وقت گذاشتن دارن:
روش RICE Scoring – برای اولویتبندی عددی و دادهمحور
روش WSJF – مخصوص تیمهای اجایل و SAFe
روش Opportunity Scoring – مبتنی بر نیازهای پنهان کاربر
روش Feature Buckets – دستهبندی فیچرها براساس تأثیر و استراتژی
روش Eisenhower Matrix – ساده ولی کاربردی برای تصمیمگیریهای روزمره
Please open Telegram to view this post
VIEW IN TELEGRAM
tech-afternoon
اگر نظر مثبتی نسبت به جلسه اول «مرور مهارتهای مورد نیاز و مسیر رسیدن به مهندس ارشد نرمافزار» داشتید و فکر میکنید ادامه بحث میتونه براتون جالب باشه، لطفا از طریق فرم زیر بگید 😊
🗓 برای روز یکشنبه ۷ اردیبهشت (۲۷ اپریل) ساعت ۱۸:۳۰ به وقت تهران
https://forms.gle/ayy2Q3MESKnhrNt3A
Please open Telegram to view this post
VIEW IN TELEGRAM
Google Docs
دورهمی تکافترنون (مسیر شغلی) یکشنبه ۷ اردیبهشت (۲۷ اپریل)
مرور مهارتهای مورد نیاز و مسیر رسیدن به مهندس ارشد نرمافزار
❤25
tech-afternoon
Please open Telegram to view this post
VIEW IN TELEGRAM
Google
Real-time meetings by Google. Using your browser, share your video, desktop, and presentations with teammates and customers.
❤5
دیدید بعضیها هر کاری میگی نکن، میکنن و بالعکس...؟
حالا این ریپو برای همینجور آدمهاست...
اسمش هم state-of-the-art Shitcode است 😂
فکر کنم نوادگان لقمان حکیم روش contribute میکنن 😂
پینوشت: دلیل اینکه این ایام کمتر مطلب داریم، گرفتاری شخصی است و ایشالا به زودی دوباره فعال میشیم
پینوشت ۲: لطفا اگر موضوعی هست که فکر میکنید بهش بپردازیم میتونه مفید باشه، حتمن کامنت کنین 😉
حالا این ریپو برای همینجور آدمهاست...
اسمش هم state-of-the-art Shitcode است 😂
فکر کنم نوادگان لقمان حکیم روش contribute میکنن 😂
پینوشت: دلیل اینکه این ایام کمتر مطلب داریم، گرفتاری شخصی است و ایشالا به زودی دوباره فعال میشیم
پینوشت ۲: لطفا اگر موضوعی هست که فکر میکنید بهش بپردازیم میتونه مفید باشه، حتمن کامنت کنین 😉
🤣12😁2❤1
🤔 فارغ از هیجانزدگی و تحلیلهای مبتنی بر گمان، خوبه فکر کنیم در فاجعهی بندرعباس، نقش نرمافزار و تکنولوژی چی بود؟ نقش مدیرمحصولها تا مدیر تکنولوژی چی بود؟
چیزی که محرز است اینه که کانتینر(ها)ی با محتویاتی مستعد اشتعال یا انفجار در جای نامناسب و بدون مراقبت قرار گرفته. آیا جابجایی و چیدمان کانتینر، در یک اسکله بزرگ، بدون حضور نرمافزار ممکنه؟ آیا یک نرمافزار بد میتونه مسبب تخلف، سوءاستفاده، فساد، یا اهمالکاری و چنین فاجعههایی بشه؟ آیا یک مدیر تکنولوژی ناشایست، یک مدیرمحصول بیکفایت، یک بیزنسآنالیست ابله، میتونن جزو متهمین این داغ بزرگ باشن؟
من صحبت از سیستمهای اتوماسیون بندرگاهی و... که گرونقیمت و مشمول تحریم هستن نمیکنم. در مورد نرمافزار و تکنولوژیهای سادهتری صحبت میکنم که «کفایت و دانش» نیاز دارن و «مسئولیتپذیری». این اخیر رو اطلاع ندارم ولی با همون اندک تعاملاتی که سالها پیش با افراد، شرکتها، و سازمانهای مرتبط داشتم؛ نمیتونم نقش مدیران بیکفایت تکنولوژی و نرمافزار، یا حتی توسعهدهندهها و تحلیلگرهای کمدانش و بیتفاوت به کمدانشیشون رو کمرنگ بدونم...
مشکل اینجاست که اینقدر «جان» و «اعداد» تهی از معنی شده که ۷۰ نفر (تا این ساعت) برامون ساده شده و ته تهش ختم میشه به یک بنر یا متن رمانتیک توی اینستاگرام و تمام...
خوشحال میشم نظر شما رو بدونم... آیا نرمافزار و تکنولوژیهای در دسترس، و افراد مرتبط با تکنولوژی سهمی ولو اندک داشتند؟
چیزی که محرز است اینه که کانتینر(ها)ی با محتویاتی مستعد اشتعال یا انفجار در جای نامناسب و بدون مراقبت قرار گرفته. آیا جابجایی و چیدمان کانتینر، در یک اسکله بزرگ، بدون حضور نرمافزار ممکنه؟ آیا یک نرمافزار بد میتونه مسبب تخلف، سوءاستفاده، فساد، یا اهمالکاری و چنین فاجعههایی بشه؟ آیا یک مدیر تکنولوژی ناشایست، یک مدیرمحصول بیکفایت، یک بیزنسآنالیست ابله، میتونن جزو متهمین این داغ بزرگ باشن؟
من صحبت از سیستمهای اتوماسیون بندرگاهی و... که گرونقیمت و مشمول تحریم هستن نمیکنم. در مورد نرمافزار و تکنولوژیهای سادهتری صحبت میکنم که «کفایت و دانش» نیاز دارن و «مسئولیتپذیری». این اخیر رو اطلاع ندارم ولی با همون اندک تعاملاتی که سالها پیش با افراد، شرکتها، و سازمانهای مرتبط داشتم؛ نمیتونم نقش مدیران بیکفایت تکنولوژی و نرمافزار، یا حتی توسعهدهندهها و تحلیلگرهای کمدانش و بیتفاوت به کمدانشیشون رو کمرنگ بدونم...
مشکل اینجاست که اینقدر «جان» و «اعداد» تهی از معنی شده که ۷۰ نفر (تا این ساعت) برامون ساده شده و ته تهش ختم میشه به یک بنر یا متن رمانتیک توی اینستاگرام و تمام...
خوشحال میشم نظر شما رو بدونم... آیا نرمافزار و تکنولوژیهای در دسترس، و افراد مرتبط با تکنولوژی سهمی ولو اندک داشتند؟
👍11👌4🤔2
بیمقدمه: فصل گرما در پیش است، اخبار گواه اینه که بهبود خاصی در ظرفیت تولید، یا مدیریت توزیع برق کشور اتفاق نیوفتاده، برای اینکه با از دسترس خارج شدن دیتاسنترها، سرویسهامون دچار مشکل نشه، بهتره نگاهی به معماری سلولی و تجربه اسلک بندازیم...
توی معماری سلولی سیستمهای پیچیده به واحدهای مستقل و خودکفا (سلولها) تقسیم میشن. هر سلول میتونه به تنهایی کار کنه و اگر یک سلول دچار مشکل بشه، بقیه سلولها میتونن به کار خودشون ادامه بدن.
یه روز توی اسلک، نمودارهای مانیتورینگ نشون دادن که یکی از Availability Zone (AZ) های AWS در منطقه us-east-1 داره پکتهای زیادی رو از دست میده. این باعث خطا و کندی سرویس برای کاربرها شده بود.
مشکل اصلی اینجا بود که با وجود اینکه اسلک از چند AZ استفاده میکرد، وقتی یک AZ دچار مشکل میشد، کل سرویس تحت تأثیر قرار میگرفت! خب این اصلاً منطقی نیست! مگه نه اینکه هدف استفاده از چند AZ همین هست که اگه یکی به مشکل خورد، بقیه کار رو پیش ببرن؟
در مورد اسلک، هر AZ تبدیل به یک سلول شد. یعنی مجموعهای از سرویسهایی که در یک AZ هستن و میتونن به عنوان یک واحد از سرویس خارج بشن یا به سرویس برگردن.
🎯 اسلک چهار هدف اصلی داشت:
- حذف ترافیک از یک AZ در کمتر از ۵ دقیقه (سرعت)
- حذف ترافیک نباید باعث خطای قابل مشاهده برای کاربر بشه
- خروج و بازگشت ترافیک یک AZ باید تدریجی باشه (مثلاً ۱٪ یا ۱۰٪)
- مکانیزم Drain نباید به AZ مشکلدار وابسته باشه
🧠 استراتژیهای پیادهسازی در اسلک
چرا این بار موفق شدن؟
اسلک قبلاً یک بار تلاش کرده بود این کار رو انجام بده و شکست خورده بود. این بار چند اصل مهم رو رعایت کردن:
- تدریجی بودن (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
🤔 اگر برای دههی چهارم زندگی خودتون بخواهید بین این دو گزینه تصمیم بگیرید:
Anonymous Poll
66%
کار در یک انترپرایز با ثبات + فشار کاری معقول + تقسیم وظایف + توازن بین نوآوری و توسعه و نگهداری
34%
شرکت بزرگ فنآوری + فشار کار، حساسیت و استرس بسیار بالا + نوآوریهای هیجانانگیز یا مرزشکن
👍1
عموما انتخاب معماری، تکنولوژی یا ابزار، از بین ابزارهای موجود و شناختهشده انجام میشه و به ندرت تیمها نیاز یا حتی توانایی خلق معماری جدید رو دارن. توی چنین شرایطی شناخت معماری و زمینهی پیدایشش کمک بزرگی به پیشگیری از انتخاب اشتباه میکنه. یعنی وقتی میدونیم یک معماری در چه شرایطی و برای تأمین چه نیازی به وجود اومده، میتونیم فکر کنیم آیا شرایط و نیاز و مسئلهی فعلی ما هم راستا با شرایط و نیاز ما هست یا نه!
قصد دارم تا طی چند پست در مورد چند معماری مرسوم که عموما به اشتباه انتخاب میشن و بیشتر از اینکه انتخابشون تابعی از نیاز و شرایط باشه، ناشی از ترندهای فضای نرمافزار و حبابهاست بپردازم...
- مایکروسرویس
- متدولوژی Domain-Driven Design
- معماریها Clean / Hexagonal / Onion
اگر فکر میکنید موضوع جذابیه:⚙️
اگر هم پیشنهادی براش دارید حتمن بنویسید 😊
قصد دارم تا طی چند پست در مورد چند معماری مرسوم که عموما به اشتباه انتخاب میشن و بیشتر از اینکه انتخابشون تابعی از نیاز و شرایط باشه، ناشی از ترندهای فضای نرمافزار و حبابهاست بپردازم...
- مایکروسرویس
- متدولوژی Domain-Driven Design
- معماریها Clean / Hexagonal / Onion
اگر فکر میکنید موضوع جذابیه:
اگر هم پیشنهادی براش دارید حتمن بنویسید 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
شاید بد نباشه تا دفعه بعد که خواستید در مورد معماری و ساختار یه پروژه تصمیم بگیرید، یه بار پیشینهی پیدایش مایکروسرویس رو مرور کنین تا از تناسب «نیاز» و «راهکار»ی که مدنظر دارید مطمئن باشید.
نمیشه دقیق و قاطع گفت «اولین» بار کی مفهوم مایکروسرویس رو پیاده کرده. مفهوم مایکروسرویس از تکامل معماریهای قبلتر از خودش، خصوصا به عنوان یک پاسخ به محدودیتهای سیستمهای یکپارچه، و پیچیدگی معماری سرویسگرا (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🔥6❤1
اوایل دههٔ ۲۰۰۰ شرکتهای خیلی بزرگ (بانکها، بیمه، و …) با سیستمهای نرمافزاریای روبهرو بودند که:
- دامینهای با پیچیدگی خیلی بالا داشتند (مثل قوانین کسبوکار پرشمار و در حال تغییر).
- گپ ارتباطی وحشتناکی بین تحلیلگرها و برنامهنویسها وجود داشت؛ اصطلاحات یکی برای دیگری نامفهوم بود.
- هر تغییر کوچک به موجی از 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 نمیشید.»
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24 5