جزوه دوره تحلیل نیازمندی‌ها

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

پیش‌گفتار: دوره‌ تحلیل نیازمندی‌ها

برای سالها، دوره‌ای تدریس می‌کردم با عنوان روش کاربردی تحلیل نیازمندی‌های نرم‌افزار (Software Requirements Analysis: A Practical Approach). این دوره را مثل بقیه دوره‌هایی که تدریس می‌کردم خیلی دوست داشتم. حس بسیار خوبی داشتم وقتی سر کلاس حاضر می‌شدم. دلم برای کلاس‌ و شاگردهایم خیلی تنگ می‌شود. یادش به خیر.

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

گفتار: جزوه درس تحلیل نیازمندی‌ها

جزوه‌ای که اینجا منتشر شده را آقای امیر سوکی نوشته‌اند. آقای سوکی،‌ جزوه‌ دست‌نویس‌شان را با تایپ کرده‌اند و نمودارها را با ابزار ترسیم و به آن اضافه کرده‌اند. ضمن قدردانی بسیار زیاد از این محبت و کار ارزشمند آقای سوکی و آرزوی بهترین‌ها برای‌شان، این جزوه‌ به پیوست تقدیم شده است.

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

دانلود پی‌دی‌اف تحلیل كاربردی نیازمندی‌های نرم‌افزار

چگونه برنامه‌نویس خوبی شوم

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

پرسش: چه چیزی از یک برنامه‌نویس، یک برنامه‌نویس «خوب» می‌سازه؟

کنت بک: پاسخ این پرسش راحته. «خودت باش» (Be Yourself).

تنها یه بازی [چالش] در کل دنیا وجود داره و اون هم اینه:‌«تمام تلاشت رو بکن» (Do Your Best). ورزش‌‌، کار، روابط انسانی فقط سایه‌هایی از همین «یه بازی»اند. برنامه‌نویسی هم همین طور.
سوال اینه که به عنوان یک برنامه‌نویس تا چه حدی تونستید از حداکثر توان و پتانسیل خودتون استفاده کنید؟ اگر می‌تونید تقریبا بخش زیادی از توان‌تون رو استفاده بکنید، شما برنامه‌نویس خوبی هستید.»

گزیده:
برنامه‌نویس خوب کسی است که موقع رد شدن از یک خیابان یک طرفه همیشه هر دو طرف را نگاه می‌کند. ☺
داگ لیندر

متن انگلیسی نوشته:

What makes a programmer “good?”
This is an easy one. Be yourself. There is only one game in the whole world. It’s called Do Your Best. Sports, careers, relationships are all shadows of the One Game. Programming, too. How close have you come to your full potential as a programmer? If you get kind of close, you’re good.

برنامه نویس کاردرست

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

اگه از من بپرسید برنامه‌نویس کاردرست کیست خواهم گفت «برنامه‌نویس خوبی که عادت‌های ممتازی دارد». این جمله برگرفته از سخن کنت بک (Kent Beck) درباره‌ی خودش است:

«من برنامه‌نویس ممتازی نیستم. من برنامه‌نویس خوبی هستم که عادت‌های ممتازی دارم»

“I’m not a great programmer; I’m just a good programmer with great habits.”

برای من این که «عادت‌‌های ممتاز» (great habits) در برنامه‌نویسی چیست همواره جای سوال و تحقیق بوده است.

کنت بک در جایی در توضیح این جمله‌اش گفته که «تأمل (Reflection) اساسی‌ترین و اصلی‌ترین عادت است. در یک ساعت گذشته چه کارهایی کردم؟ کدوم بخش‌اش رو می‌تونستم بهتر انجام بدم؟ دفعه بعد [توی چنین شرایطی] چه کاری می‌کنم؟ تأمل مادر همه‌ی عادت‌های دیگه است»

اینها برداشت‌های من است از نکاتی که کنت بک به آنها اشاره کرده است:

  • «در یک ساعت گذشته چه کارهایی کردم؟»: یک ساعت گذشته را ارزیابی کنم، به آن چه گذشته، دستاوردها، مسایل و مشکلات، و این که چقدر اثربخش (effective) بوده‌ام فکر کنم.
  • «کدوم بخش‌اش رو می‌تونستم بهتر انجام بدم؟»: کارایی یک ساعت گذشته را بررسی کنم و نسبت به جنبه‌هایی از کارم که قابل بهبود است تفکر نقادانه داشته باشم.
  • «دفعه بعد [توی چنین شرایطی] چه کاری می‌کنم؟» بر اساس تجربه‌‌ای که کسب کردم، کدام بخش از کار رو به شکل دیگری انجام و بهبود خواهم داد و برای انجام آن از چه تکنیک‌ها یا متدهای جدیدی استفاده خواهم کرد.

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

و در پایان کنت بک اشاره می‌کند که «اساسن کتاب‌های من این عادت‌ها را بیان می‌کنند:

  • کدنویسی برای دیگران
  • کار در قالب گام‌های کوچک
  • استراحت کافی».

گزیده:
ما از تجربه‌‌ چیزی یاد نمی‌گیریم، ما با فکر کردن و تامل (Reflection) درباره‌ی تجربه‌‌ها یاد می‌گیریم.
جان دیویی فیلسوف آمریکایی

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

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

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

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

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

گفتار:

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

– 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

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