پیشنهاد کتاب: معماری نرم‌افزار

  • یوسف مهرداد بی‌بالان

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

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

گفتار:

طی چندین ماه گذشته با گروهی از دوستان خوبم دو کتاب درباره‌ی معماری نرم‌افزار خواندیم:

– Fundamentals of Software Architecture: An Engineering Approach, 2020, by Mark Richards, Neal Ford
– Software Architecture: The Hard Parts: Modern Trade-Off Analyses for Distributed Architectures, 2021,
by Neal Ford, Mark Richards, Pramod Sadalage, Zhamak Dehghani

کتاب اول هم‌چنان که از عنوان آن پیداست به مبانی معماری نرم‌افزار می‌پردازد. خواندن این کتاب علاوه بر مرور آنچه که از معماری می‌دانستم، دانسته‌ها‌یم را به روز کرد و با واژگان جدیدی هم آشنا نمود. نمونه این واژگان کوانتوم و کوانتا و ارتباط آنها با سیستم‌های یک‌ تکه یا Monolithic و سیستم‌های توزیع‌شده یا Distributed است.

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

گزیده:


Don’t try to find the best design in software architecture; instead, strive for the least worst combination of trade-offs.
Software Architecture: The Hard Parts

IEA/AIE 2024 Conference

  • یوسف مهرداد بی‌بالان

I am excited to share that I will be attending the IEA/AIE 2024 conference (www.ieaaie2024.com) in Hradec Králové, Czech Republic, next week from July 10 to 12! 

I’ll be presenting our paper, “𝑾𝒐𝒓𝒌 𝒊𝒏 𝑷𝒓𝒐𝒈𝒓𝒆𝒔𝒔 𝑷𝒓𝒆𝒅𝒊𝒄𝒕𝒊𝒐𝒏 𝒇𝒐𝒓 𝑩𝒖𝒔𝒊𝒏𝒆𝒔𝒔 𝑷𝒓𝒐𝒄𝒆𝒔𝒔𝒆𝒔 𝑼𝒔𝒊𝒏𝒈 𝑻𝒆𝒎𝒑𝒐𝒓𝒂𝒍 𝑪𝒐𝒏𝒗𝒐𝒍𝒖𝒕𝒊𝒐𝒏𝒂𝒍 𝑵𝒆𝒕𝒘𝒐𝒓𝒌𝒔,” co-authored with Dr. Behrouz Far, Faezeh Eshragh, from University of Calgary, and Bahareh Ghiyasian from Google.

Our presentation is scheduled for July 10 at 11:50 AM CEST. If you’re attending the conference or happen to be near the venue, I would love to connect, exchange insights, and explore potential collaborations.

Looking forward to seeing everyone, especially my friends in Europe!

به احترام «یک آدم معمولی»

  • یوسف مهرداد بی‌بالان

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

به همه‌ی دوستان و خوانندگان فوتبالی و غیرفوتبالی پیشنهاد می‌کنم این ویدیوی بیست دقیقه‌ای را ببینند. اگر هم فرصت ندارید ۸ دقیقه پایانی آن را ببینید. آدرس ویدیو در یوتیوب (https://youtu.be/o3GSDlRGODU?si=B0SQqUokJDqULsK6)

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

از آنجا که وقتی ما می‌خواهیم درباره‌ی مربیان قضاوت کنیم به آمارها نگاه می‌کنیم که ببینیم چند بار قهرمان لیگ برتر انگلیس شده‌اند، چند بار قهرمان لیگ قهرمانان اروپا شده‌اند، وقتی به این آمار نگاه می‌کنی آیا به یاد می‌آری که آن چه واقعا بیشتر از هر جامی اهمیت دارد خانواده (باشگاه لیورپول) است، روابط با انسان‌هاست که تو با خودت از لیورپول به همراه می‌بری؟

و کلوپ پاسخ می‌دهد و در بخشی از پاسخ خود می‌گوید: البته که مردم می‌گویند او طی ۹ سال فقط یک قهرمانی لیگ برتر و یک قهرمانی لیگ قهرمانان را به دست آورده و من با این موضوع راحتم چون کاملا درست می‌گویند. آیا من به این آمارها علاقه‌ای دارم؟ نه. چرا باید علاقه داشته باشم. اگر همین افراد به جای ۲ قهرمانی طی ۹ سال بگویند بگویند ۳ قهرمانی طی ۹ سال ۳، زندگی‌ من حتی یک ذره هم تغییر نخواهد کرد.

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

و سخن پایانی مجری: از شما بسیار سپاسگزارم شما مردم رو خوشحال کردید.

پانوشت:
هنگام ورود کلوپ به لیورپول خبرنگار به او گفت که مورینیو خودش را «آدم خاص» (The Special One) می‌نامد. شما خودتان را چه می‌نامید. کلوپ پاسخ داد: من «یک آدم معمولی» (A Normal One) هستم.

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

مرجع تصویر: اسکای اسپورت

مدل یادگیری ۷۰:۲۰:۱۰

  • یوسف مهرداد بی‌بالان

پیش‌گفتار:

بارها عبارتهایی شبیه جملات زیر را از دوستانم که می‌خواستند شرکت بعدی‌شان را برای همکاری انتخاب کنند شنیده‌‌ام:

  • این شرکت حقوق بیشتری پرداخت می‌کند ولی تکنولوژی‌اش به روز نیست. این شرکت را انتخاب می‌کنم ولی خودم کنارش یادگیری تکنولوژی‌های نوین را ادامه می‌دهم.
  • این شرکت حقوق کمتری نسبت به گزینه دیگرم پرداخت می‌کند ولی سبد تکنولوژی‌اش همان چیزی است که دوست دارم یاد بگیرم. به همین دلیل این شرکت را انتخاب می‌کنم.

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

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

گفتار: مدل ۷۰:۲۰:۱۰

چند وقت پیش به صورت اتفاقی با مدلی آشنا شدم به نام مدل یادگیری و توسعه‌ی ۷۰:۲۰:۱۰ (70:20:10 Learning and Development Model و سایت 702010institute.com). این مدل بر اساس یک نظرسنجی از ۲۰۰ مدیر اجرایی در سال ۱۹۹۶ طراحی شده است. در این نظرسنجی از آنها خواسته شده بود که بیان کنند «چگونه یاد می‌گیرند». بر اساس این مدل، افراد از روش‌های زیر یاد می‌گیرند:

  • ۷۰ درصد یادگیری از محیط کار [از کارهای چالشی یعنی کارها و پروژه‌هایی که مهارت‌هایی فراتر از مهارت کنونی شما دارند و با کارهایی که در آن احساس راحتی می‌کنید (کامفورت زون) متفاوتند]
  • ۲۰ درصد یادگیری از دیگران [ آموزش غیررسمی از طریق شبکه‌‌سازی تخصصی، نشست‌ها، مربیان، منتورها ]
  • ۱۰ درصد از طریق آموزش رسمی

حالا با این مدل شاید بتوان توضیح داد که چرا درگیر شدن در یک پروژه در محیط کار تاثیر به مراتب بیشتری از خودآموزی‌ها و شرکت در کلاس‌ها دارد.

گزیده:

You keep on learning and learning, and pretty soon you learn something no one has learned before.
― Richard Feynman

یادگیری بی‌نام!

  • یوسف مهرداد بی‌بالان

در حوزه‌ی یادگیری فنی شرایط متفاوتی وجود دارد. گاهی «می‌دانیم که می‌دانیم»، گاهی «می‌دانیم که نمی‌دانیم» و گاهی هم «نمی‌دانیم که نمی‌دانیم». وقتی «می‌دانیم که نمی‌دانیم» و به دنبال پاسخ یک پرسش هستیم از منابع مختلفی استفاده می‌کنیم. برای مثال وقتی در پایتون می‌خواهید فهرستی از دانشجویان را بر اساس نمرات درس‌هایشان مرتب کنید و ببینید در هر درس کدام دانشجو بالاترین نمره را گرفته می‌دانید که باید از فانکشن groupby استفاده کنید. اگر ورودی‌ها و خروجی این فانکشن را به خاطر نیاورید یا از ابزار برنامه‌نویسی (IDE) کمک می‌گیرید یا در گوگل جستجو می‌کنید یا ابزار جدیدتری مانند چت‌ جی‌پی‌تی و کوپایلوت استفاده می‌کنید. این روش‌ها بر استفاده از سایت‌هایی مانند استک‌ اورفلو یا شبکه‌های اجتماعی تخصصی اولویت دارد زیرا شما در مدت کوتاه‌تری و بدون منتظر ماندن می‌توانید پاسخ‌تان را پیدا کنید. اینجا شما می‌دانید که می‌دانید. هم صورت مساله را می‌دانید و هم پاسخ را.

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

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

خوب چه باید کرد؟

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

در یک دوره‌ای می‌خواستم مایکروسافت ورد (Microsoft Word) را بهتر یاد بگیرم. دلم نمی‌خواست مثل مبتدی‌ها با آن کار کنم. حوصله و وقت هم نداشتم که یک کتاب بخوانم یا یک سایت آموزش مایکروسافت ورد را از ابتدا تا انتها دنبال کنم. در نتیجه تصمیم گرفتم هر هفته اگر فرصتی دست داد به صورت تصادفی یک بخش از یک کتاب آموزش ورد را بخوانم. بعد از مدتی تسلط من بر امکانات ورد بیشتر شد. اگر می‌خواستم کاری با ورد را انجام بدهم حتی اگر اسم منو یا گزینه‌ مورد نظر در ورد را به یاد نمی‌آوردم ولی می‌دانستم که چنین امکانی در ورد وجود دارد و با یک جستجوی ساده با «واژگان درست» آن را پیدا می‌کردم. اتفاق دیگری که افتاد این بود که تعداد پاسخ‌هایی که از گوگل دریافت می‌کردم و به دلیل ندانستن پیش‌نیاز‌ها مجبور به رد کردن‌شان می‌شدم نسبت به قبل خیلی کمتر شد.

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

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

با این وجود نباید فراموش کنیم که:
چه دانم‌های بسیار است لیکن من نمی‌دانم
که خوردم از دهان بندی در آن دریا کفی افیون

بهشت راه نرفته!

  • یوسف مهرداد بی‌بالان

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

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

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

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

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

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

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

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

در برخی فرهنگ‌ها به افراد توصیه می‌کنند که «تصمیم‌تان را بگیرید و با نتایج و عواقب آن رو به رو شوید!». شاید این بهترین توصیه‌ای است که در این زمینه برای خودم دارم. «تصمیم بگیرم» و به جای آن که اجازه دهم سوهان «بهشت‌ راه‌های نرفته» مغز و روانم را آرام آرام تخریب کند، با «نتایج تصمیم‌»‌های فنی‌ام رو به رو شوم.

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

نوروز ۱۴۰۳

  • یوسف مهرداد بی‌بالان

سال نوی همگی مبارک!

برای‌تان بهترین‌ها را آرزومندم.
شاد باشید و تندرست

حافظ منشین بی‌ مِی و معشوق زمانی
که‌ ایّامِ گل و یاسمن و عیدِ صیام است

برای خروج از جستجو کلید ESC را بفشارید