همه‌ی نوشته‌های غلامرضا صابری تبریزی

چاپ ششم کتاب برنامه نویسی با پایتون

تصویر جلد کتاب برنامه نویسی با پایتون ۳ ترجمه غلامرضا صابری تبریزی

چاپ ششم کتاب برنامه نویسی با پایتون هم به بازار آمد. نام دقیق این اثر «برنامه نویسی با پایتون ۳» است. چاپ اول این کتاب (همون طور که در این پست) توضیح دادم سال ۱۳۹۳ به بازار ارائه شد، و «برنامه نویسی با پایتون» نام داشت. با به روز شدن نسخه اصلی کتاب، و ترجمه اون انتشارات تصمیم گرفت اسم ویرایش دوم و چاپ سوم کتاب را به «برنامه نویسی با پایتون ۳» تغییر دهد. چاپ ششم این کتاب هم با همین نام به بازار ارائه شده است (چاپ ششم با احتساب دو بار چاپ شدن ویرایش اول و چهارمین چاپ ویرایش دوم کتاب). امیدوارم مفید واقع بشه. می تونید کتاب رو به صورت آنلاین از نشر دانشگاهی کیان سفارش بدین.

مطالعه رایگان یک فصل از کتاب برنامه نویسی با پایتون ۳

 

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

تیم های نرم افزاری و سوگیری های روانی آنها

چند وقت پیش در مدیم (Medium) مطلبی با عنوان «Software teams, and their psychological biases» نوشتم. در آن مطلب سعی کرده بودم نتایج مطالعات و مشاهداتی که طی سالها کار در صنعت نرم افزار درباره سوگیری های (Bias) روانی تیم ها با اونها مواجه شده بودم رو خلاصه کنم. از همان موقع میخواستم ترجمه فارسی این مطلب رو هم بنویسم. امروز فرصتی شد برای نوشتن این پست.

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

  • جلسه های بسیاری دیدم که منجر به تصمیم احمقانه ای شدن و همه (به جز یکی دو نفر) از اون تصمیم خوشحال بودن!
  • تیم های زیادی رو دیدم که تعداد زیادی از اعضای اون هیچ کاری نمی کنن، و تمام فشار کار روی تعداد محدودیه و در لایه مدیریت هم کسی عکس العملی نشون نمیده!

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

  1. گروه (تیم) چیست؟
  2. چه زمانی یک گروه (تیم) شکل میگیره؟
  3. فرنودآوری کوشش (Effort Justification) چیست، و چطور بر مصاحبه های کاری تاثیر میزاره؟
  4. اثر مالکیت (Endowment effect) چیست و چگونه بر تیم تاثیر می گذارد؟
  5. آیا هوش یک تیم بیشتر از هوش یک فرد است؟
  6. گروه زدگی (Groupthink) چیست و چگونه بر تیم اثر می گذارد؟
  7. آیا گروه ها مسئولیت پذیرتر از افراد هستند؟
  8. آیا افراد وقتی عضوی از یک گروه می شوند ریسک بیشتری قبول می کنند؟
  9. آیا همه اعضای تیم تمام توان خود را برای انجام کار به صورت یکسان به کار می گیرند؟

توجه: وجود این سوگیری های روانی به معنای بد بودن کار تیمی نیست. وجود این سوگیری ها یعنی کار تیمی ظرافت ها، و ویژگی هایی دارد که ما باید به عنوان اعضای تیم از آنها آگاه باشیم و آنها را مد نظر قرار بدیم. راهکارهایی برای فیصله (برای معنای دقیق فیصله به این پست مراجعه کنید) به همه این سوگیری ها وجود دارند. شما باید بر اساس شرایط خودتان بهترین راهکار را انتخاب کنید.

برای بررسی روان شناسی گروهی (Group Psychology) کارم رو با خواندن کتاب «روان شناسی گروهی و تحلیل اگو» اثر زیگموند فروید (Sigmund Freud) آغاز کردم. در این کتاب فروید روان شناسی گروهی را به صورت زیر تعریف کرده است:

روان شناسی گروهی با انسان به عنوان عضوی از یک نژاد، ملت، حرفه، سازمان، یا عضوی از یک توده از افراد، که در قالب یک گروه در زمانی مشخص، و برای هدفی مشخص سازمان یافته اند سر و کار دارد

اما از منظر فروید چه شرط ( یا شروطی) باید برای تشکیل یک گروه برآورده شوند؟

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

حال فرض کنید یک تیم نرم افزاری داریم (یک گروه). این گروه یک علاقه مشترک دارد. این علاقه مشترک، تولید یک محصول نرم افزاری و به دست آوردن پول است. چه اتفاقی می افتد؟ از نظر من یکی از اولین کارهایی که این تیم انجام می دهد وضع مجموعه ای قانون برای عضویت در تیم است. سوگیری روانی مهمی می تواند در این نقطه شکل بگیرد. عموما وقتی می خواهیم عضو تیم (گروهی) شویم با فرنودآوری کوشش (Effort Justification) مواجه خواهیم شد. در کتاب «The art of thinking clearly» رولف دوبلی (Rolf Dobelli) فرنودآوری کوشش را چنین تعریف می کند:

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

به نظر من در تیم های نرم افزاری این فرنودآوری کوشش خود را در قالب مصاحبه های عجیب و غریب نشان می دهد (البته این تنها هدف مصاحبه نیست). بارها دیده، و شنیده ام «فلان شرکت سوال های مصاحبه خیلی سختی دارد»؛ اما پس از ورود به شرکت افراد داستان هایی از بی نظمی های عجیب و غریب در این شرکتها تعریف می کنند! شاید این فرنودآوری کوشش دلیل افتخار بعضی افراد به تیم هایی است که عضو آن هستند. با وجود اینکه این تیم ها تفاوت چندانی با  سایر تیم های نرم افزاری ندارند. البته به نظر من این «افتخار عضویت» به اثر دیگری به نام «اثر مالکیت» (Endowment effect) هم مربوط می شود. در نهایت از نظر من دانش هم یک توزیع پارتو (Pareto distribution) دارد. در نتیجه اکثر تیم ها از نظر توانایی و دانش فنی در یک سطح قرار دارند.

اما درباره هوش گروه چه می توان گفت؟ آیا گروه ها باهوش تر از افراد هستند؟ در این باره فروید می گوید:

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

برای درک بهتر علت کم بودن هوش گروه، یک شبکه کامپیوتری را در نظر بگیرید. سرعت ارتباط این کامپیوترها، برابر با سرعت کندترین کامپیوتر است. می توان از قیاس مشابهی برای هوش گروهی هم استفاده کرد. البته در گروه ها مسائل روان شناختی بسیار دیگری هم درگیر هستند که منجر به کم شدن هوش گروه می شوند. یکی از شناخته شده ترین آنها گروه زدگی (Groupthink) است. منابع بسیاری به بررسی گروه زده گی می پردازند. تعریف زیر مربوط به ویکی پدیا است:

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

گروه زدگی خود به پدیده عام تری به نام Social Proof مربوط می شود.

اما آیا مسئولیت پذیری گروه ها بیشتر از افراد است؟ در پاسخ باید به پدیده ای به نام پخش مسئولیت (Diffusion of responsibility) مراجعه کنیم:

در گروه ها افراد از مسئولیت پذیری شانه خالی می کنند. هیچ کس مسئولیت تصمیمات غلط گروه و نتایج آن را نمی پذیرد.

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

آیا گروه ها ریسک پذیرتر از افراد هستند؟ در پاسخ به این سوال باید به اثری به نام Risky shift مراجعه کنیم:

طی Risky shift اعضای یک گروه برسر تصمیمی که ریسکی از تر تصمیماتی است که افراد به تنهایی اتخاذ می کنند به توافق می رسند

این اثر را می توان ترکیب چند اثر دیگر مثل پخش مسئولیت هم در نظر گرفت. این اثر می تواند نتایج فاجعه باری به همراه داشته باشد.

اما آیا اعضای یک تیم همه توانایی و تلاش خود را برای رسیدن به هدف صرف می کنند؟ پاسخ کوتاه خیر است! به این ویژگی اصطلاحا «طفره رفتن اجتماعی» (Social loafing) می گویند:

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

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

منابع

  1. کتاب Group Psychology and Analysis of Ego اثر زیگموند فروید (این کتاب به فارسی ترجمه شده است)
  2. کتاب The Art of Thinking Clearly اثر رولف دوبلی (این کتاب هم به فارسی ترجمه شده است)
  3. دوره آموزشی آنلاین The science of everyday thinking سایت Edx
  4. مقاله Dilemmas in a general theory of planning اثر هورست ریتل (قبلا در باره این مقاله پست مفصلی اینجا نوشته ام)
  5. دوره آموزشی Design Thinking وب سایت IDF. درباره Design Thinking هم قبلا مطلبی اینجا نوشته ام
  6. کتاب Agile! The Good, the Hype and the Ugly اثر برتراند میر
  7. Wikipedia

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

وضعیت مهاجرت در داده های نظرسنجی جادی

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

۱. برای تحلیل از چه داده هایی استفاده شده است؟ برای تحلیل از داده های سال ۹۷ استفاده کرده ام که با استفاده از این آدرس می توانید آنها را دانلود کنید

۲. داده های مورد استفاده در تحلیل چند متغیر (ستون) و چند مشاهده (سطر) دارند؟ داده های مورد استفاده در تحلیل ۴۱ ستون (متغیر) و ۴۴۸۴ سطر دارند (بدون احتساب سطر مربوط به سرآیند). تعداد مشاهده های موجود در این فایل با «بلاگ بهداد» برابر است. اما در «تحلیل وبسایت جادی» این عدد ۲۹۵۷ ذکر شده (این ناسازگاری باید توسط منبع ارائه دهنده داده ها که وبسایت جادی است بررسی شود)

۳. آیا این داده ها سوگیری، یا بایاس (Bias) خاصی دارند؟ بله. مهمترین این سوگیری ها، اصطلاحا سوگیری در نمونه برداری (Sampling bias) نام دارد. یعنی برخی از افراد جامعه مقصد درصد مشارکت کمتری نسبت به جامعه واقعی دارند. از آنجا که جامعه آماری شرکت کننده گان در این پرسشنامه اکثرا از کاربران توییتر و خواننده گان وبلاگ جادی هستند، دچار یک سوگیری در نمونه گیری هستند. البته این سوگیری در تحقیقات مربوط به علوم اجتماعی بسیار رایج است

۴. سوگیری های موجود در داده ها چگونه خود را نشان می دهند؟ برای مثال از میان ۴۴۸۴ شرکت کننده تنها ۴۱۴ نفر از شرکت کننده گان (۹.۲۳٪) را خانم ها تشکیل می دهند. به علاوه اکثر شرکت کننده گان نسبتا کم سن و سال هستند.

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

۶. شرکت کننده گان در کدام شهرها کار می کنند؟ نمودار زیر با استفاده از اطلاعات مربوط به فیلد «استان محل کار» رسم شده است

۷. مبداء و مقصد مهاجرت برنامه نویسان ایرانی چه شهرهایی است؟ در زمان مشاهده گراف زیر این موارد را مد نظر قرار دهید (برای بزرگ کردن تصویر روی آن کلیک کنید):

  •  در گراف زیر اگر تعداد مهاجران از یک شهر به شهر دیگر بزرگتر یا مساوی ۲۰ نفر بوده باشد یک یال بین دو شهر رسم شده است. در نتیجه مهاجرت های کوچکتر رسم نشده اند
  • شهر مقصد با نوک پیکان مشخص شده است
  • تعداد مهاجران روی هر یال نوشته شده است
  • حلقه (یالی از یک شهر به همان شهر نشان دهنده یکسان بودن مبداء و مقصد ذکر شده در پرسشنامه، یا عدم مهاجرت است)

گراف مهاجرت

اطلاعات بسیار جالبی در این گراف قابل مشاهده است:

  • تقریبا می توان گفت مقصد نهایی تمامی مهاجرت های داخلی تهران است. البته اگر در شهرهای بزرگی چون اصفهان، یا خراسان رضوی باشید محتملا به تهران مهاجرت نخواهید کرد. اما، اگر در سایر شهرها باشید وضعیت متفاوت خواهد بود
  • اگر ساکن تهران باشید و قصد مهاجرت داشته باشید تنها مقصدتان کشورهای خارجی، یا دورکاری است
  • برخی شهر ها هم هستند که مهاجرتی زیر ۲۰ نفر دارند، اما تعداد شرکت کننده گان آنها بزرگتر یا مساوی ۲۰ است. این شهرها در پایین گراف در قالب مجموعه ای جدا افتاده (Isolates) نشان داده شده اند

آنچه در این داده ها دیده می شود ناخوشایند است. خوب بود اگر برنامه نویسان و کارکنان آی تی مقصدی به جز تهران در مهاجرت های داخلی داشتند…

۸. در داده های موجود به طور کلی احتمال مهاجرت چقدر است؟ به طور کلی، اگر کسانی که شهر مبداء آنها مخالف شهر محل کارشان است را مهاجر فرض کنیم، و تعداد آنها را به تعداد کل شرکت کننده گان تقسیم کنیم به عدد ۰.۲۸۲ خواهیم رسید. به عبارت دیگر افراد به احتمال ۲۸ درصد برای کار مهاجرت می کنند.

البته میزان صحت این احتمال با اعتبار داده های پرسشنامه مستقیما در ارتباط است.

۹. احتمال مهاجرت از هر شهر چقدر است؟ احتمال مهاجرت از شهرهایی که بیش از ۲۰ مهاجر داشته اند در جدول زیر آمده است:

شهر مبدا شهر مقصد تعداد مهاجر احتمال مهاجرت
البرز تهران ۸۸ ۰.۵۸۳
مرکزی تهران ۲۷ ۰.۵۴۰
لرستان تهران ۳۲ ۰.۵۰۰
همدان تهران ۴۳ ۰.۴۶۷
کرمانشاه تهران ۲۵ ۰.۴۵۵
زنجان تهران ۲۴ ۰.۴۴۴
مازندران تهران ۶۲ ۰.۴۰۸
کردستان تهران ۳۰ ۰.۳۶۶
کرمان تهران ۳۱ ۰.۳۶۵
آذربایجان غربی تهران ۳۱ ۰.۳۵۲
خوزستان تهران ۴۸ ۰.۳۳۶
گیلان تهران ۴۳ ۰.۳۱۲
یزد تهران ۲۴ ۰.۲۶۷
فارس تهران ۵۱ ۰.۲۴۱
آذربایجان شرقی تهران ۳۵ ۰.۲۴۸
اصفهان تهران ۷۷ ۰.۲۳۶
قم تهران ۲۰ ۰.۲۱۷
خراسان رضوی تهران ۵۵ ۰.۱۵۳
تهران ریموت-خارج کشور ۲۲ ۰.۰۱۴

همان طور که در جدول فوق هم قابل مشاهده است احتمال مهاجرت از شهرهای بزرگ مثل خراسان و اصفهان به تهران یا از تهران به خارج کشور (یا دورکاری) نسبتا اندک است.

البته می توان رابطه بین داده های مربوط به مهاجرت برنامه نویسان را با بسیاری از متغیرهای دیگر موجود در پرسشنامه بررسی کرد. برای مثال:

  •  آیا سن رابطه ای با مهاجرت دارد؟
  • آیا رابطه ای میان میزان تخصص و مهاجرت وجود دارد؟
  • جنسیت در تصمیم بر مهاجرت تاثیری دارد؟

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

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

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

ریاضیات تشخیص (مقدمه ای بر قانون بیز)

فرض کنید پزشک هستید، و بیماری با مجموعه ای از عوارض(Symptoms) نزد شما می آید. برای مثال، فرض کنید صورت بیمار پر از لکه های قرمز کوچک است. از آنجه که شما پزشک هستید می دانید دو بیماری هستند که می توانند موجب بروز چنین لکه هایی شوند:

  1. آبله (Smallpox): بیماری بسیار خطرناک که می تواند به راحتی بیمار را از پا در آورد، و به راحتی درمان نمی شود
  2. آبله مرغان (Chickenpox): بیماری که آنقدر خطرناک نیست و به راحتی درمان می شود

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


در عبارات فوق علامت | به معنای «به شرط»، و p به معنای احتمال است. در نتیجه، (آبله | جوش های قرمز)p خوانده می شود «احتمال جوش های قرمز به شرط اینکه بیمار مبتلا به آبله باشد». اما اگر با استفاده از اطلاعات فوق نتیجه بگیریم بیمار مبتلا به آبله است تشخیص درستی داده ایم؟ پاسخ این سوال خیر است. در این محاسبات پارامتر بسیار مهمی وجود دارد که مد نظر قرار نگرفته است. این پارامتر تجربه قبلی ما در رابطه با میزان شیوع این بیماری ها در جامعه است. در واقع بیماری آبله بسیار نادر، و بیماری آبله مرغان بسیار رایج است. می توانیم این تجربه را با استفاده از یک عدد نشان دهیم. فرض کنید میزان شیوع آبله ۰.۰۰۱، و میزان شیوع آبله مرغان ۰.۱ است. حال می توانیم از این اطلاعات در تشخیص خود استفاده کنیم. با ضرب این اطلاعات در موارد قبلی به اعداد زیر خواهیم رسید:

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

آنچه با هم بررسی کردیم نمونه ای از قانون بیز (Bayes’ Theorem) است. قانون بیز یکی از قوانین بسیار پرکاربرد احتمال است که با آن می توانید تجربه قبلی خود را در محاسبه احتمالات دخیل کنید. در این قانون به تجربه قبلی ما اصطلاحا احتمال پیشین (Prior Probability)، به احتمال بیماری های مختلف اصطلاحا درست نمایی (Likelihood)، و به احتمال نهایی هر بیماری احتمال پسین (Posterior Probability) می گویند.

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

منبع: Bayes’ rule: A tutorial introduction to Bayesian analysis اثر جیمز استون.

 

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

NNT چیست؟

 برای آگاهی از اینکه پزشکی مدرن چقدر می تواند به بیماران کمک کند راهی وجود دارد. این راه، یک مفهوم آماری بسیار ساده به نام «عدد مورد نیاز برای درمان» (Number Needed to Treat) یا به اختصار NNT است. NNT معیاری برای میزان تاثیر دارو، یا درمان ارائه می دهد. این معیار، تعداد بیمارانی که باید درمان شوند تا، یک نفر تحت تاثیر قرار گیرد را تخمین می زند. NNT یک مفهوم آماری، اما شهودی است. همان طور که می دانید، همه افراد از مداخله پزشک یا استفاده از دارو سود نمی برند – برخی درمان می شوند، برخی هیچ نتیجه ای نمی گیرند، و برخی دیگر به علت درمان دچار آسیب می شوند. NNT تعداد افراد موجود در هر گروه را مشخص می کند.

برای مثال، درمانی خیالی برای حمله قلبی به نام «ضد-حمله» را در نظر بگیرید. برای بررسی میزان تاثیر این درمان، بیماران را به دو گروه تقسیم می کنیم «گروه درمان»، و «گروه شبه دارو». «گروه درمان» را در معرض «ضد-حمله» قرار می دهیم، و به اعضای «گروه شبه دارو» هیچ دارویی نمی دهیم. فرض کنید ۷۵ درصد بیماران «گروه درمان» که «ضد-حمله» را استفاده می کنند زنده مانده، و ۲۵ درصد آنها میمیرند. در گروه «شبه دارو» ۷۵ درصد بیماران میمیرند، و ۲۵ درصد آنها زنده می مانند. همان طور که مشاهده می کنید داروی «ضد-حمله» بسیار موثر است و می تواند نرخ مرگ و میر را به میزان قابل توجهی کاهش دهد. با این حال، ۲۵ درصد بیماران گروه «شبه دارو» که هیچ دارویی دریافت نمی کنند زنده مانده، و ۲۵ درصد اعضای «گروه درمان» هم با وجود استفاده از دارو میمیرند. به طور کلی، درمان «ضد-حمله» هیچ تاثیری بر ۵۰ درصد بیماران ندارد. در مقابل ۵۰ درصد بیمارانی که از این راه درمانی استفاده می کنند هم بهبود می یابند.
نکته قابل توجه، این است که در اکثر داروها و درمان ها، نمی دانیم آیا درمان به افراد کمک کرده، هیچ تاثیری بر آنها نداشته، یا باعث آسیب به آنها شده است. اگر بخواهیم حساب کنیم چند نفر باید تحت درمان «ضد-حمله» قرار گیرند تا یک نفر درمان شود این عدد ۲ نفر است (زیرا این دارو تنها ۵۰ درصد بیماران را بهبود می دهد). به عبارت دیگر، NNT درمان «ضد-حمله» برابر با ۲ است.
توجه داشته باشید در بسیاری از درمان ها نرخ میزان تاثیر درمان بسیار کمتر از ۵۰ درصد است. برای مثال، ممکن است NNT درمانی خاص ۵۰ باشد. یعنی تنها دو درصد بیمارانی که تحت این درمان قرار میگیرند از آن بهره می برند. در این حالت برای درمان یک نفر ۵۰ بیمار باید تحت درمان قرار بگیرند. مسلما، از میان این ۵۰ بیمار عده ای دچار عوارض آن خواهند شد.از این رو، بهتر است موقع استفاده از دارو، یا درمانی خاص NNT، و عوارض آن را مد نظر قرار دهید.

منبع: http://www.thennt.com/thennt-explained

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

چاپ پنجم کتاب برنامه نویسی با پایتون

چاپ پنجم کتاب برنامه نویسی با پایتون هم به بازار آمد. نام دقیق این اثر «برنامه نویسی با پایتون ۳» است. چاپ اول این کتاب (همون طور که در این پست) توضیح دادم سال ۱۳۹۳ به بازار ارائه شد، و «برنامه نویسی با پایتون» نام داشت. طی چاپ های متوالی و با به روز شدن کتاب، نام ویرایش دوم و چاپ سومش به «برنامه نویسی با پایتون ۳» تغییر کرد و چاپ پنجم این کتاب هم با همین نام به بازار ارائه شده است (چاپ پنجم با احتساب دو بار چاپ شدن ویرایش اول و سومین چاپ ویرایش دوم کتاب). امیدوارم مفید واقع بشه. برای سفارش آنلاین کتاب می توانید به وب سایت نشر دانشگاهی کیان مراجعه کنید.

مطالعه رایگان یک فصل از کتاب برنامه نویسی با پایتون ۳

 

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

به یادت – قیصر امین پور

 

به یادت داغ بر دل می نشانم
ز دیده خون به دامن می فشانم

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

به یادت ای چراغ روشن من
زداغ دل بسوزد دامن من

ز بس در دل، گل یادت شکوفاست
گرفته بوی گل ، پیراهن من

همه شب خواب بینم ، خواب دیدار
دلی دارم ، دلی بی تاب دیدار

تو خورشیدی و من شبنم چه سازم
نه تاب دوری و نه تاب دیدار

سری داریم و سودای غم تو
پری داریم و پروای غم تو

غمت از هرچه شادی دلگشاتر
دلی داریم و دریای غم تو

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

نیمچه تحلیل فرویدی

یکی از سوالاتی که همیشه برایم مطرح بوده، علت رفتار هموطنانم در برابر گرانی است. در جهانی ایده آل، می توان گفت افزایش قیمت، باعث کاهش خرید میشود. در اقتصاد، به این رابطه اصطلاحا قانون تقاضا (Law of Demand) می گویند. اما، در کشورمان با افزایش قیمت هر وسیله ای شاهد پدیده ای عجیب هستیم: پس از گران شدن کالاهای حتی غیرضروری، تقاضا برای این کالاها افزایش می یابد. این پدیده، باعث می شود قیمت اقلام، چندبرابر حالت عادی افزایش یابد!

مدتی قبل به سفارش یکی از همکاران، شروع به خواندن کتاب “روانشناسی گروهی و تحلیل اِگو” اثر زیگموند فروید کردم. فروید در این کتاب به نکات بسیار جالبی اشاره می کند. در بررسی علت شکست سپاهیانی که بارها در جنگ پیروز شده اند فروید می گوید: علت شکست این سپاه، بر خلاف باور اکثر افراد، ترس نیست. علت شکست، از هم گسستن روابط بین سپاهیان است. بین افراد هر گروهی علاقه ای وجود دارد، و این علاقه، علت کنارهم ماندن افراد گروه است. وقتی این علاقه از بین برود، هر یک از اعضای گروه خود را جدا از سایرین، و تنها می بیند. این تنهایی در مقابله با سپاه دشمن در فرد ترس ایجاد می کند. در نهایت، ترس باعث می شود فرد همه تلاش خود را برای نجات خویش انجام دهد، و سایرین را نادیده بگیرد. در نتیجه، سپاه از هم متلاشی شده، و شکست می خورد.

این تحلیل می تواند پاسخی ساده برای سوال من باشد. شاید، دور شدن هموطنان، و ترس از مواجهه با سختی ها باعث چنین رفتاری می شود.

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

داکر چیست؟

لوگوی داکر

مدتی است داکر (Docker) در فضای IT تبدیل به یک موضوع داغ تکنولوژیک شده است. در نتیجه، بسیاری به دنبال یادگیری و استفاده از این ابزار برآمده اند. در این پست سعی می کنم خلاصه ای از ماهیت داکر و مسائلی که این ابزار سعی در حل آنها دارد را بیاورم.

داکر متشکل از یک ابزار خط فرمان و یک سرویس (Daemon) است که:

  • رابطی یکپارچه برای نصب نرم افزارها فراهم می آورد. به عبارت دیگر، وقتی نرم افزار یا سرویسی را با داکر راه اندازی می کنید، همواره این کار را با مجموعه دستورهای یکسانی انجام می دهید
  • امکان ایزوله کردن نرم افزارهای نصب شده روی یک سیستم را فراهم می آورد، و از این رو تداخل بین نرم افزارها را کاهش می دهد
  • امکان مجازی سازی در سطح سیستم عامل را در اختیار شما قرار می دهد (در مقابل مجازی سازی با استفاده از ماشین های مجازی مثل VMWare). در نتیجه از هدررفت منابع می کاهد
  • روشی یکپارچه برای دریافت نرم افزارها فراهم می آورد (از طریق یک اندیس مرکزی). این روش یکپارچه معادل کاری است که گوگل پلی یا اپ استور برای سیستم های اندروید و آی او اس کرده اند
  • قابلیت حمل (Portability) نرم افزارها را افزایش می دهد

در ادامه هر یک از این موارد را با جزئیات بیشتر مورد بررسی قرار می دهیم.

همان طور که گفتیم یکی از مزایای داکر، فراهم آوردن رابطی یکپارچه برای نصب نرم افزارها است. داکر با استفاده از مفهومی به نام کانتینر(Container) این ویژگی را فراهم می آورد. در صنعت حمل و نقل، می توان هر کالایی را با استفاده از کانتینرها جا به جا کرد. در واقع کانتینر روشی استاندارد برای بسته بندی کالا (صرفنظر از محتوای آن) است. داکر این مفهوم را به نرم افزار تعمیم داده است. در واقع هر نرم افزار در کانتینری قرار می گیرد. راه اندازی این کانتینرها صرفنظر از نرم افزار درون آنها (که اصطلاحا به آن Image می گویند) یکسان است. به عبارت دیگر، شما از دستورات یکسانی برای راه اندازی کانتینرها استفاده می کنید. این دستورات را ابزارهای خط فرمان داکر فراهم می آورند.

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

یکی دیگر از امکانات داکر مجازی سازی در سطح سیستم عامل است. اما این عبارت به چه معناست و چه مزایایی دارد؟ در گذشته نه چندان دور، یکی از روش های ایزوله سازی نرم افزارها استفاده از ماشین های مجازی بود (البته ماشین مجازی کاربردهای دیگری هم دارند که برای ساده تر شدن درک مفاهیم از آنها صرفنظر می کنیم). در این رویکرد یک ماشین میزبان (Host) وجود دارد که سیستم عاملی مشخص دارد برای مثال لینوکس. به علاوه، روی سیستم میزبان یک نرم افزار مجازی سازی نصب می شود (مانند VMWare یا سایر ابزارهای مشابه). حال باید با استفاده از ابزار مجازی سازی ماشین های مجازی ایجاد شوند. هر ماشین مجازی باید یک سیستم عامل و در نهایت نرم افزاری که می خواهیم ایزوله شود را داشته باشد. خلاصه این موارد را می توانید در تصویر زیر مشاهده کنید:

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

توجه: امکاناتی که داکر در اختیار کاربران قرار می دهد مدت هاست توسط هسته لینوکس (و برخی سیستم عامل های دیگر) پشتیبانی می شود. داکر فقط استفاده از این امکانات را ساده تر ساخته است.

یکی دیگر از امکانات داکر فراهم آوردن یک مخزن برای دانلود و نصب نرم افزارها است. این مخزن به آدرس https://hub.docker.com در دسترس است (هرچند به علت تحریم ها در حال حاضر این سایت به صورت مستقیم قابل استفاده نیست. اما می توانید با ابزارهای دور زدن تحریم یا اندیس های جایگزین از این امکان استفاده کنید).

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

در نوشتن این پست سعی شده موارد تا حد امکان بدون ذکر جزئیات فنی مطرح شوند تا مطلب برای همه مخاطبان قابل مطالعه باشد. اگر به یادگیری بیشتر در این باره علاقه دارید، پیشنهاد می کنم کتاب Docker In Action نوشته Jeff Nickoloff رو مطالعه کنید. در نهایت امیدوارم موارد مطرح شده مورد استفاده قرار بگیرد.

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

چاپ چهارم کتاب برنامه نویسی با پایتون

امروز چاپ چهارم کتاب برنامه نویسی با پایتون به بازار ارائه شد. نام دقیق این اثر «برنامه نویسی با پایتون ۳» است. چاپ اول این کتاب (همون طور که در این پست) توضیح دادم سال ۱۳۹۳ به بازار ارائه شد و «برنامه نویسی با پایتون» نام داشت. طی چاپ های متوالی و با به روز شدن کتاب نام ویرایش دوم و چاپ سومش به «برنامه نویسی با پایتون ۳» تغییر کرد و چاپ چهارمش هم، با همین نام به بازار ارائه شده است. امیدوارم مفید واقع بشه. برای سفارش آنلاین کتاب می توانید به وب سایت نشر دانشگاهی کیان مراجعه کنید.

مطالعه رایگان یک فصل از کتاب برنامه نویسی با پایتون ۳

 

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