دوره تفکر مدل از دیدگاه مهندس نرم افزار

من می خواهم در مورد دوره “تفکر مدل” که اخیراً با استفاده از پلتفرم Coursera آن را به پایان رسانده ام، مروری داشته باشم. اگرچه هدف این دوره 8 هفته ای آنلاین از دانشگاه میشیگان این است که ما را شهروندان بهتری در جهان و به طور کلی تصمیم گیرندگان بسازد، من نظرات خود را در مورد اینکه چگونه مطالب آن دوره ممکن است در مهندسی نرم افزار به کار گرفته شود را به اشتراک می گذارم. من قصد دارم چندین بخش درسی را که برای من مرتبطتر بودند، بحث کنم.
چرا مدل می کنیم؟
به عنوان اولین نقل قول از مطالب این دوره، می خواهم این مورد را قرار دهم: “مدل ها Lingua Franca جدید هستند که به افراد از حوزه های مختلف اجازه می دهند تا ایده های خود را به سادگی و واضح بیان کنند.”. همه ما از طراحی Domain Driven می دانیم که چقدر برای یک پروژه نرم افزاری داشتن یک زبان فراگیر بین مهندسان و همکاران غیر فنی بسیار مهم است. غنی سازی اسناد ما با مدل ها، ارتباط بین اعضای تیم را حتی موثرتر می کند.
ما نمیخواهیم به مدلها اجازه دهیم که به ما بگویند چه کار کنیم. ما میخواهیم مدلها به ما کمک کنند تا انتخابهای بهتری داشته باشیم. افراد باهوش هم از مدلها و هم از تجربه استفاده میکنند و نه فقط کورکورانه از مدلها استفاده میکنند.» هر چند مدل ها گلوله نقره ای نیستند. ما باید کاربردها و محدودیتهای آنها را درک کنیم و آنها را به ابزار دیگری تبدیل کنیم، اما جایگزینی برای عقل سلیم و تجربه نباشیم.
یکی از رایجترین نمونههای استفاده از مدلها در روال یک مهندس نرمافزار، توضیح پیچیدگی الگوریتمها است. ما معمولا نمی گوییم “مرتب سازی حبابی” کند است، اما “مرتب سازی ادغام” سریعتر است زیرا هر فردی درک خاص خود را از سرعت و کندی دارد. می گوییم “مرتب سازی حباب” دارای پیچیدگی زمانی O(n^2) است و “مرتب سازی ادغام” دارای O(n log n) است. بنابراین در هنگام تصمیم گیری، ما نه با عواطف و احساسات خود در مورد سرعت الگوریتم ها، بلکه از مدل های ریاضی آنها استفاده می کنیم. این به ما مقایسه عملکرد و درک درستی از کاربردهای احتمالی آن الگوریتم ها می دهد.
مرتب سازی و جلوه های همتا.
در اینجا میتوانیم یک مدل هیجانانگیز از رفتار اجتماعی پیدا کنیم، که ممکن است برای مثال توضیح دهد که چگونه فناوریهای جدید را در صنعت (یا ایدههای جدید در یک تیم) اتخاذ میکنیم. “مدل گرانوتر – دم سگ را تکان می دهد. افرادی که در دم توزیع نرمال قرار دارند افراط گرا هستند، که گاهی به دلیل واکنش زنجیره ای آستانه های افراد دیگر، آنچه را که اتفاق می افتد هدایت می کنند. اگر آستانه های پایین تر وجود داشته باشد، احتمال اقدام جمعی بیشتر است. “دم” که منجر به اثر آبشاری “تکان دادن سگ” می شود) و تنوع بیشتری در آستانه ها وجود دارد (که احتمال واکنش زنجیره ای را افزایش می دهد)..
مدل Standing Ovation – مدل Granovetter، که در آن اثر آبشاری توسط نظر “متخصص”، نظر یک دوست، یک سلبریتی یا سایر تأثیرگذاران تقویت می شود.
تجمع.
این بخش مفاهیم زیادی را توضیح میدهد که یک توسعهدهنده نرمافزار معمولی ممکن است در یک کار روزمره با آنها مواجه شود، مانند منحنی زنگ، انحراف استاندارد و میانگین. ما اغلب ممکن است آن عبارات را در گزارش های تست عملکرد یا داشبوردهای نظارتی ببینیم.
مدل های تصمیم گیری
من این بخش را مفید یافتم زیرا ابزارهای تصمیم گیری برای مقابله با موضوعات پیچیده با ویژگی های متعدد – “مدل های انتخاب چند معیاره” در اختیار ما قرار می دهد. تصور کنید باید یک چارچوب یا کتابخانه را از میان ده ها گزینه انتخاب کنید. در حالی که هر نامزدی ده ها جنبه دارد. جدول مقایسه ممکن است ابزار مناسبی برای آن باشد، اما ممکن است لازم باشد یاد بگیرید که چگونه نتایج چنین مقایسهای را با استفاده از وزنها و فاصلهها گویاتر کنید. همچنین، یکی از موارد ضروری در این بخش، یک جمع بندی کلی در مورد نظریه احتمالات، درختان تصمیم است – یک زمینه اساسی برای هر مهندس.
الگوهای مردم. الکترون های تفکر
این بخش ممکن است به ما توصیه های فنی دقیقی ارائه نکند، اما نحوه رفتار افراد را روشن می کند. نویسندگان نمونه هایی از اقدامات منطقی، غیرمنطقی و مبتنی بر قانون و انواع مختلف سوگیری افراد را نشان می دهند. این ممکن است به ما کمک کند تا افراد را بهتر درک کنیم و در نتیجه بازیکنان تیم بهتری باشیم.
مدل های خطی
بخش مدلهای خطی بینشهای بسیاری را نه تنها در مورد خواندن خروجی برخی از انواع تحلیلهای آماری (مثلاً خروجی رگرسیون)، بلکه در مورد روشهایی برای توضیح دادههای خامی که در اختیار دارید به ما میدهد. به عنوان مثال، ممکن است متوجه شوید که هر چه موضوعات اجرایی بیشتری اضافه کنید، کد شما سریعتر میشود. ممکن است فرض کنید که سرعت کد شما به صورت خطی به مقدار منابعی که دارید بستگی دارد و می توانید ظرفیت های سرور خود را بر اساس این فرض برنامه ریزی کنید. اما یکی از اخطارهای مهم در اینجا این است که مراقب برون یابی داده های خطی خود در خارج از محدوده داده باشید. در برخی مواقع، ممکن است متوجه شوید که افزودن X بیشتر، Y بیشتر به شما نمی دهد.
“همبستگی علیت نیست” همچنین مهم است که در طول تجزیه و تحلیل داده های تاریخی و تلاش برای پیش بینی آینده با استفاده از آن داده ها به خاطر بسپارید. نویسندگان به شما ایده عاقلانه ای می دهند که برای بهینه سازی بیشتر سیستم خود، ممکن است به یک واقعیت جدید نیاز داشته باشید. برای داشتن نتایج بهتر، به جای بهینه سازی یک سیستم قدیمی، فقط در حال ساختن سیستم جدید هستید. “واقعیت جدید – در حال حرکت در خارج از جعبه است که با مدل های خطی و ضرایب به سیستم جدید توضیح داده شده است. به جای بهینه سازی بی پایان پرس و جوهای SQL، سعی کنید داده های خود را دوباره تراز کنید تا در پارادایم NoSQL قرار گیرند.”
رشد اقتصادی.
چه نوع دانش مرتبط با اقتصاد را می توانیم در مسیرهای مهندسی نرم افزار خود مجدداً استفاده کنیم؟ مسیرهای مهندسی ما نه تنها شامل فناوریهایی است که اکنون میشناسیم، بلکه از چگونگی تکامل و رشد ما به عنوان حرفهای تشکیل شده است. این رشد بیشتر از آن چیزی که فکر می کنید با رشد اقتصادی مشترک است. با فرض اینکه مجموعه مهارت های ما نوعی تولید ناخالص داخلی شخصی ما باشد، ممکن است مدل های رشد اقتصادی را برای خودمان اعمال کنیم! مدل پایه رشد اقتصادی نشان می دهد که رشد پایدار مستلزم نوآوری است. بگذارید گزیده ای را نقل کنم: “شما نمی توانید فقط کارهای بیشتری انجام دهید. در برخی مواقع، سرعتی که در آن چیزها از بین می روند و سرعتی که با آن چیزها افزایش می یابد، یکنواخت می شود. اگر به داده ها نگاه کنید که چه چیزی باعث ایجاد افراد واقعاً موفق می شود، افرادی که در حرفه خود بسیار موفق هستند به یادگیری ادامه دهند.”. این امر به ویژه در عصر جایگزینی برخی مشاغل با سیستم های یادگیری ماشین و سایر انواع اتوماسیون بسیار مهم است.
“رشد مستلزم تخریب خلاق است”. مثال دیگر تکامل زبان های برنامه نویسی است. من قصد ندارم جنگ مقدس مربوط به زبانهای خاصی را شروع کنم، اما میخواهم بگویم که یک مدل ریاضی وجود دارد که به ما نشان میدهد در یک مقطع زمانی، بهتر است برنامهنویسی فانتزی جدید ایجاد کنیم (یا اتخاذ کنیم). زبان به جای درهم ریختن یک جوان 20 ساله با مفاهیم جدید، در عین حال سعی در شکستن سازگاری عقب مانده و سبک اصطلاحی آن.
تنوع و نوآوری.
این بخش چیزی را که تقریباً هر روز در محل کارمان با آن مواجه میشویم توضیح میدهد. «قضیه نهار رایگان نیست». کلماتی بهتر از توضیح نویسنده پیدا نکردم – “هیچ قضیه ناهار رایگان به ما می گوید که هیچ اکتشافی واحدی همیشه موثر نیست. اکتشافی که برای یک کلاس مشکل عالی کار می کند ممکن است برای نوع مشکل دیگر بی اثر باشد… همه الگوریتم هایی که تعداد نقاط یکسانی را با هدف مکان یابی حداکثر جستجو می کنند. مقدار یک تابع تعریف شده بر روی یک مجموعه محدود، زمانی که در تمام توابع ممکن میانگین شود، دقیقاً یکسان است.این ممکن است در طول طراحی و بهینهسازی الگوریتمها/منطق کسبوکار مفید باشد. این بخش نکات دیگری برای حل مسئله نیز دارد – “وقتی به حل مشکلات میپردازیم، اولین کاری که انجام میدهیم این است که آنها را رمزگذاری میکنیم. ما تا حدودی نمایشی از مشکل داریم. این بازنمایی تعیین میکند که مشکل چقدر سخت خواهد بود.”. به همین دلیل است که ایده خوبی نیست که بلافاصله پس از خواندن شرح وظایف شروع به نوشتن کد کنید. بهتر است زمان مناسبی را برای طراحی و آماده سازی، شبه کدگذاری صرف کنید و خود کدنویسی را به عنوان مرحله روتین کم اهمیت تر بگذارید. ممکن است در این بخش یک اثبات ریاضی پیدا کنیم که چرا تیم ها در حل مسئله بهتر از افراد هستند – به دلیل تنوع، دیدگاه ها، اکتشافات و ترکیب مجدد آن ایده های جدید. شما همیشه پس از شنیدن این توضیح، یک دستور کار را حفظ خواهید کرد.
شبکه های.
این چیزی است که ممکن است فرد در کالج تحصیل کرده باشد، اما ارزش تکرار دارد. شبکهها و نمودارها به معنای واقعی کلمه همه جا هستند، از خود شبکه کامپیوتری و سیستمهای توزیع شده در آن شبکهها گرفته تا نمودارهای وراثت شی و وابستگی در کد منبع. تجزیه و تحلیل پیچیدگی کد مک کیب، پایگاه داده های گراف و زبان های پرس و جو گراف نیز بر اساس نظریه ای است که در این بخش توضیح داده شده است.
نتیجه.
من کمی بیش از نیمی از بخشهای دوره «تفکر مدل» را مرور کردهام – فقط بخشهایی که بیشترین کاربرد را در مسیر شخصی من یک مهندس نرمافزار پیدا کردهام. با این حال، فهرست مفاهیم مورد علاقه شما ممکن است متفاوت باشد، زیرا دانشی که پس از گذراندن این دوره به دست می آورید، یک دانش فرا دانشی است که ممکن است در موارد مختلف در زندگی شما قابل استفاده باشد. بنابراین، من نه تنها مهندسان نرم افزار، بلکه همه را تشویق به گذراندن آن دوره می کنم.
پیوندها
دوره آموزشی Coursera “تفکر مدل”.