<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Mohammad Teimori Pabandi</title>
        <link>https://virgool.io/feed/@mtp1376</link>
        <description>مهندس نرم‌افزار</description>
        <language>fa</language>
        <pubDate>2026-07-01 01:09:01</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/6187/avatar/avatar.png?height=120&amp;width=120</url>
            <title>Mohammad Teimori Pabandi</title>
            <link>https://virgool.io/@mtp1376</link>
        </image>

                    <item>
                <title>طراحی API-first: مفهوم API</title>
                <link>https://virgool.io/@mtp1376/api-first-design-1-bmxiynmzfsaj</link>
                <description>سلام. اگر کلمه‌ی API تا حالا به گوشتون خورده و دوست دارید معنی‌ش رو بدونید، احتمالاً این پست به دردتون می‌خوره. در این سلسله پست‌ها می‌خوام از پایه یه سری مفاهیم رو توضیح بدم تا برسیم به API و بعد طراحی API-first.اینترفیس (interface) چیه؟وقتی یک وسیله‌ای نیاز به برق شهری داره، احتمالاً یک دوشاخه براش تعبیه شده و وقتی شما یک دوشاخه می‌بینید، یاد پریز می‌افتید:پریز یعنی چی؟اگه بخوام بگم که از نظر من مهم‌ترین توصیف از پریز چیه، می‌گم که یه interface ـه. حالا interface یعنی چی؟ببینید به دست آوردن برق کاریه که به ۱۰۲۳۹۸۱ روش می‌شه انجامش داد؛ یکی از طریق سوزوندن بنزین تو ماشین برق تولید می‌کنه، یکی از طریق انرژی خورشیدی این‌کارو می‌کنه، یکی هم ممکنه هسته‌ی اورانیوم رو بشکافه و با بخارکردنِ آب توسط اون حرارت به دست اومده توربین بچرخونه و ... نهایتاً برق به دست بیاره!خب. حالا سؤال اینه که آیا شما وقتی می‌خواید خونتون رو جارو برقی بکشید، باید اصلاً به این‌که برقش از کجا و چطوری تولید شده فکر کنید؟ نه! شما فقط یه کاربرِ عادی هستید و هزارتا مشغله و بدبختی دارید و فقط می‌خواید برق رو بگیرید و استفاده‌اش کنید.حالا طراحِ دو شاخه اومده چیکار کرده؟ گفته که خب یه سری چیزها که متغیرن؛ مثلِ نحوه‌ی به دست آوردنِ برق، نوعِ دستگاه‌هایی که ساخته می‌شن، و مردمی که از دستگاه‌ها استفاده می‌کنن.ولی ما می‌تونیم یه بخشی رو ثابت طراحی کنیم و اسمش رو بذاریم «پریز». این‌طوری فارغ از این‌که اون پشت داره چطور برق به دست می‌آد، یا دستگاهی که ازش قراره استفاده کنه چیه، یه زبان مشترکی داریم که می‌تونیم با هم سرش توافق کنیم:الآن تو مثال بالا می‌تونیم آدمی رو که داره هندل می‌زنه برداریم و یک قطار بذاریم که از طریق سوزوندن سوخت، برق تولید می‌کنه. ولی مادامی که برق رو از طریق یک پریز ارائه بدن، هر کس که بخواد جاروبرقی بکشه می‌تونه با دوشاخه ازش استفاده کنه.انگار که این پریز، این‌جا اومده و کار آدم‌ها رو با یک لایه‌ی میانیِ مشترک ساده کرده و از یک طرف به «نحوه‌ی به دست آوردن برق (جزئیات پیاده‌سازی)» به عنوان یک عملِ انتزاعی نگاه کرده، و از طرف دیگه هم «نحوه‌ی استفاده از برق (کاربری)» رو به شکل یک انتزاع دیده. در نتیجه هر دوی این طرفین می‌تونن به شکل‌های دلخواه تغییر کنن و یک انعطافِ خیلی زیادی به این شکل ایجاد شده.استفاده‌کننده‌ی وسیله‌ی برقی: فارغ از این‌که وسیله‌ش چیه، چیزی باشه که از پریز می‌تونه برق بگیرهارائه‌دهنده‌ی برق (مثلاً سازنده‌ی ساختمان): فارغ از این‌که برق رو از کجا آورده، به شکل پریز اون رو ارائه بدهدو شرطِ بالا کافیه تا خدمت‌دهنده و خدمت‌گیرنده بتونن به راحتی با هم تعامل کنن و خدمتِ «ارائه‌ی برق» انجام بشه.حالا API چیه؟این کلمه مخفف Application Programming Interface ـه. اگه مفهومِ اینترفیس به خوبی تو مغزتون جا رفته باشه، متوجه‌شدنِ  API اصلاً سخت نیست.توی مثالِ پریز، یک خدمت‌رسان داشتیم (که برق ارائه می‌داد) و یک خدمت‌گیرنده (که می‌خواست وسیله‌ی برقی استفاده کنه). نرم‌افزارها هم خیلی وقت‌ها خدماتی رو ارائه می‌دن؛ از ساده تا پیچیده. برای مثال ممکنه یک نرم‌افزار هر یک از این خدمات رو بخواد ارائه بده:تاریخ امروز رو به شکلِ شمسی به ما بدهبا متنِ دلخواهمون یک ایمیل برامون ارسال کنهیادداشتمون رو یک جای امن ذخیره‌سازی کنه تا بعداً بتونیم بهش دسترسی داشته باشیمبیاید روی مثالِ آخر صحبت کنیم: یک نرم‌افزار داریم که متنِ یادداشتی رو می‌گیره و «یک جای امن» ذخیره‌ش می‌کنه. فرض کنیم یه سری آدم هم داریم که یادداشت‌هایی دارن ولی هیچ جای امنی ندارن که اونو ذخیره کنن.حالا این آدم‌ها چطور یادداشت‌هاشونو بدن دستِ اون نرم‌افزار؟ یه راهش اینه که خودشون اجتهاد کنن و در قالبِ دلخواهشون اون رو بنویسن و به جای دلخواهشون بفرستنش:الآن نرم‌افزارِ خفن باید با بدبختی یادداشت‌ها رو جمع کنه، متن اصلی‌شون رو جدا کنه و نهایتاً اون‌ها رو در جای امن قرار بده. علتِ این‌که این‌همه زحمتِ اضافه باید بکشه، اینه که از قبل مشخص نکرده که تحتِ چه «اینترفیس»ـی می‌شه باهاش ارتباط گرفت. اگر بیاد و اینترفیسش رو مشخص کنه، افرادی که می‌خوان ازش سرویس بگیرن می‌تونن دقیق‌تر باهاش ارتباط بگیرن:الآن هر کس بخواد از خدماتِ نرم‌افزارِ خفن استفاده کنه، کافیه یادداشتش رو به اون آدرس ارسال کنه و نرم‌افزارِ خفن براش یادداشتش رو در یک جای امن ذخیره می‌کنه.این جداسازیِ جزئیاتِ پیاده‌سازی (این‌که نرم‌افزارِ خفن چه «جای امن»ـی و چجوری داره ذخیره‌سازی می‌کنه) از کاربری (متن هر کاربر یه چیز متفاوتیه و هر کاربر به دلیل متفاوتی می‌خواد متن ذخیره کنه) و گذاشتنِ یک لایه‌ی ثابت در این وسط، در واقع تعریفِ API ـه. نرم‌افزارِ ما کلی چیز داخلِ خودش داره (مثلاً رمزنگاری، کپی‌کردن یادداشت‌ها روی ۳ قاره‌ی مختلف، و غیره) ولی یک «اینترفیس» تعریف کرده که می‌گه فقط متنِ یادداشتتون رو به من بدید و بقیه‌ی اجزای پیاده‌سازی‌ش رو کاری نداشته باشید. کاربرها هم با استفاده از اون «اینترفیس» با نرم‌افزار تعامل می‌کنن و یادداشتشون رو می‌فرستن.حالا پس‌فردا یک شرکتی به نام «سوپراپ‌سازان تقویم‌ساز آسیا» که کارشون ارائه‌ی تقویمِ اذان‌گوئه، شاید بخواد به اپلیکیشنش بخش «یادداشت‌ها» اضافه کنه. اما خودش جای امنی نداشته باشه که یادداشت‌ها رو توش ذخیره کنه و بخواد از خدمتی که نرم‌افزار خفن ارائه می‌کنه استفاده کنه. مادامی که بتونه با اینترفیسِ مذکور با نرم‌افزار خفن تعامل کنه، می‌تونه مثلِ یک خدمت‌گیرنده‌ی دیگه یادداشت‌هاشو روی فضای امن ذخیره‌سازی کنه و در روزِ نیاز بهشون دسترسی داشته باشه.همچنین شاید نرم‌افزار خفن، از هفته‌ی دیگه بخواد به جای این‌که روی ۳ تا قاره ذخیره‌سازی رو انجام بده، یک کپی هم روی کره‌ی مریخ نگهداری کنه که در صورتِ از بین‌رفتنِ کره‌ی زمین و انقراض نسل بشر، هنوز یادداشت‌های افراد قابلِ دسترسی باشن. در این صورت هم API هیچ تغییری نمی‌کنه؛ چون جزئیات پیاده‌سازی درش دخیل نبوده و کاربران کماکان می‌تونن مثلِ قبل با نرم‌افزار تعامل کنن.امیدوارم مطالب پست به دردتون خورده باشه. می‌دونم که متن، رویکرد و روندِ پست خیلی ایرادات داره و واقعاً باید بهتر بشه. پس حتماً بهم بازخورد بدید تا اصلاحش کنم. متشکرم.</description>
                <category>Mohammad Teimori Pabandi</category>
                <author>Mohammad Teimori Pabandi</author>
                <pubDate>Mon, 22 Jan 2024 22:12:12 +0330</pubDate>
            </item>
                    <item>
                <title>راهبردهای طراحی نرم‌افزار حسابداری با تمرکز بر «همیان» - بخش سوم: جدا کردن موجودیت حسابداری</title>
                <link>https://virgool.io/@mtp1376/accounting-software-part-3-jvkctamlxdar</link>
                <description>به نام خداوقتی می‌خوایم برای سیستمی که حسابداری هم داره طراحی دیتابیس انجام بدیم یکی از انتخاب‌هایی که باید بکنیم، اینه که متغیرهای حسابداری رو در یک موجودیت مستقل قرار بدیم یا روی موجودیت‌های اصلی سوار کنیم. در این پست می‌خوایم با نگاه به وضعیت فعلی همیان بررسی کنیم که کدوم می‌تونه بهتر باشه.طراحی جداول همیانفرض کنید الآن می‌خوایم یک دیتابیس حداقلی برای همیان طراحی کنیم. همون‌طور که قبلاً گفتیم همیان یه جاییه که آدم‌ها توش تشکیل یک سری گروه مالی (صندوق قرض‌الحسنه) می‌دن و سپرده‌ی مشترک ایجاد می‌کنن. پس می‌شه گفت این موارد رو نیاز داریم:Moneypool: صندوق قرض‌الحسنهUser: یک کاربر در اپلیکیشن همیانیک طرح فرضی برای صندوق و رابطه‌ی آن با اعضادر پایگاه‌داده، جدول بالا معمولاً به این شکل ذخیره نمی‌شه و از یک جدول میانی استفاده می‌کنن که رابطه‌ی «عضویت یک عضو در صندوق» رو نشون می‌ده. این جدول در همیان اسمش هست Poolship (ترکیبی از Membership و Moneypool). هر سطر در این جدول یک رابطه‌ی عضویت رو نشون می‌ده و مثلاً برای هر کدوم از ۵ عضو صندوق همیانستان، یک سطر در این جدول قرار می‌گیره.جدول «عضویت در صندوق» در پایگاه‌دادهحالا غیر از نام صندوق و اعضای اون چی مهمه؟ یکی از چیزهایی که خیلی مهمه، موجودی صندوقه. در این پست می‌خوایم به این بپردازیم که «موجودی صندوق» رو در پایگاه داده بهتره کجا قرار بدیم.موجودی صندوق رو کجا بذاریم؟اولین جایی که برای موجودیِ صندوق به ذهن می‌رسه، اینه که روی خودِ صندوق قرارش بدیم. به هر حال «موجودی» یک ویژگی برای خود صندوقه دیگه. نه؟موجودی به عنوان یکی از ویژگی‌های صندوقدر خیلی از موارد ممکنه این الگو کار کنه و مشکلی هم ایجاد نکنه. اما این طراحی محدودیت‌هایی رو ایجاد می‌کنه که می‌خوایم به یکی از مهم‌هاش اشاره کنیم:پیوندِ تنگاتنگ (tight coupling) اطلاعات حسابداری با اطلاعات صندوق: در اینجا اطلاعات صندوق با اطلاعات حسابداری در هم فرو رفتن و قابل تفکیک نیستن؛ برای مثال «نام صندوق» و «اعضا» دقیقاً در جدولی نگهداری می‌شن که «موجودی» توش هست. اما این چه مشکلی ایجاد می‌کنه؟تراکنش اتمیدموکریت، دانشمند یونانی اولین بار واژه‌ی «اتم» رو به معنای «تجزیه‌ناپذیر» استفاده کرد. اون گفت که اگه شروع کنیم چیزها رو هی بشکونیم و جلوتر بریم، توی یک نقطه به چیزی به نام «اتم» می‌رسیم که دیگه اونو نمی‌تونیم به ذرات کوچکتر بشکونیم و اتم چیزیه که غیرقابل شکسته‌شدن به اجزای کوچکتر باشه.بعضی‌وقت‌ها ما هم نیاز داریم با مجموعه‌ای از کارها به صورت یک «اتم» رفتار کنیم. برای مثال فرض کنید یک تراکنش انتقال پول داریم که در اون، از حساب من ۱۰۰۰ تومن کسر می‌شه و ۱۰۰۰ تومن باید به حساب مجتبی واریز بشه. این تراکنش در واقع دو بخش داره:از حساب محمد ۱۰۰۰ تومن کم کن (بالانس جدید محمد = بالانس قبلی محمد منهای ۱۰۰۰)به حساب مجتبی ۱۰۰۰ تومن اضافه کن (بالانس جدید مجتبی = بالانس قبلی مجتبی به‌علاوه‌ی ۱۰۰۰) اما یا باید کل این تراکنش اجرا بشه و یا هیچ بخش از اون اجرا نشه و حالت وسطی نباید داشته باشیم. مثلاً فرض کنید بخش ۱ انجام می‌شه ولی قبل از انجام بخش ۲، برق سرور قطع می‌شه و انجام نمی‌شه. در این صورت «اصل پایستگی ارزش» نقض شده و پول تو سیستم غیب شده (از محمد کم شده ولی به هیچ‌جا نرفته و جابجایی صورت نگرفته، بلکه پول از بین رفته).این امکان خوشبختانه در دیتابیس‌ها وجود داره که ما چندتا چیز رو با هم یکی کنیم و به عنوان Atom با اون‌ها رفتار کنیم. در این شرایط، یا کل تراکنش انجام می‌شه و یا کلش انجام نمی‌شه. در نتیجه نیازی نیست نگران باشیم که پول توی سیستممون ظاهر و یا غیب بشه. حتی اگه سرور وسط کار خاموش بشه، به محض روشن شدن عملیات رو عقب‌گرد (rollback) می‌کنه و پول به حساب محمد برگشت داده می‌شه.در حالتی که تراکنشمون اتمی باشه، همه‌ی عملیات نگه داشته می‌شه و کلش با یک حرکت در دیتابیس می‌نشینه. یعنی هیچ زمانی وجود نداره که در دیتابیس حالت زیر رخ بده:از حساب محمد ۱۰۰۰ کم شده باشه ولی هنوز حساب مجتبی ۱۰۰۰ اضافه نشده باشه.بخش بحرانی و مشکلات همزمانیتراکنش اتمی خیلی خوبه و تضمین می‌کنه که کل کارمون یا انجام بشه و یا انجام نشه. این خوبه ولی کافی نیست.در کامپیوتر (مثلاً در درس سیستم عامل) مفهومی داریم به نام «بخش بحرانی» که توضیح ویکی‌پدیاش خوبه:در برنامه نویسی همروندی، دسترسی‌های هم روندی به منابع مشترک ممکن است منجر به رفتار غیر قابل پیش بینی یا خطا شود. بنابر این بخش هایی از برنامه که در آن منبع مشترک مورد دسترس قرار می‌گیرد باید به گونه‌ای حفظ شود که از دسترسی همزمان پیشگیری شود. این ناحیه محافظت شده همان بخش بحرانی یا منطقه بحرانی نام دارد. این ناحیه را نمی‌توان توسط بیش از یک پروسه در هر زمان اجرا کرد. به طور معمول بخش بحرانی به  یک منبع مشترک نظیر یک ساختمان داده، یک ابزار محیطی، یا یک اتصال شبکه دسترسی پیدا می کند، این منبع مشترک در صورت چندین دسترسی همزمان به درستی کار نخواهد کرد.اینا یعنی چی؟ با یک مثال بررسی کنیم: فرض کنیم محمد درخواست انتقال ۱۰۰۰ تومن پول رو به حساب مجتبی انجام می‌ده. در این حالت سیستم اول باید ببینه آیا محمد ۱۰۰۰ تومن پول داره که این انتقال رو انجام بده؟ اگه داشت بعدش طی یک عملیات اتمی، این مبلغ رو از حساب محمد کم کنه و همین‌قدر به حساب مجتبی اضافه کنه. شبه‌کدش به شکل زیر می‌شه:if mohammad account balance &gt; 1000 tomans:
  atomicly do:
     decrease mohammad account balance by 1000 tomans
     increase  mohammad account balance by 1000 tomansهمه‌چیز در شبه‌کد بالا به نظر خوب می‌رسه، تا اینکه بحث همزمانی رخ بده. اگه نرم‌افزار ما فقط روی یک ریسه در حال اجرا باشه مشکلی نیست. ولی در محیط‌های عملیاتی از هم‌روندی (multi-threading)ّ و چندین ریسه استفاده می‌شه. در این حالت نرم‌افزار ما داره روی چند سرور اجرا می‌شه و هر کدوم از اون‌ها ممکنه مستقلاً درخواست انتقال رو دریافت بکنن. در نتیجه ممکنه دو سرور به صورت کاملاً همزمان سعی کنن تیکه‌کد بالا رو اجرا کنن.حالا چه مشکلی ممکنه رخ بده؟ این مشکل:سرور یک بررسی می‌کنه و می‌بینه محمد ۱۰۰۰ تومن پول دارهدر همین لحظه سرور دو هم بررسی می‌کنه و اون هم می‌بینه محمد ۱۰۰۰ تومن پول داره (چون هنوز هیچ عملیات کسر و اضافه‌ای انجام نشده)سرور یک کسر و اضافه رو انجام می‌دهسرور دو هم کسر و اضافه رو انجام می‌دهبه این باگ می‌گن باگ race condition که یکی از سخت‌ترین باگ‌ها برای پیداکردن و رفعه.اتفاقی که می‌افته اینه که ۲۰۰۰ تومن از حساب محمد کسر می‌شه و ۲۰۰۰ تومن به حساب مجتبی اضافه می‌شه. ولی ممکنه بالانس حساب محمد کلاً ۱۰۰۰ تومن باشه و در این حالت حساب محمد منفی می‌شه و در واقع بیش از دارایی‌ش خرج می‌کنه.این مشکل از اونجایی ریشه گرفت که هنگام عملیات حسابداری، موجودیت مورد حسابداری رو قفل نکردیم. وقتی داریم روی «موجودی حساب محمد» یک کاری انجام می‌دیم، این موجودیت باید قفل بشه و فقط توسط یک سرور یا ریسه قابل دسترسی باشه و بقیه باید منتظر باشن که عملیات حسابداری سرور اول با «موجودی حساب محمد» تمام بشه و بعد بتونن دسترسی به این مقدار پیدا بکنن.اگر بخوایم کد بالا رو طوری بنویسیم که درست کار کنه، باید اینطوری تغییرش بدیم:lock mohammad account balance
if mohammad account balance &gt; 1000 tomans:
  atomicly do:
     decrease mohammad account balance by 1000 tomans
     increase  mohammad account balance by 1000 tomans
unlock mohammad account balanceدر این حالت، سرور اول که می‌خواد عملیات حسابداری انجام بده، موجودی حساب رو قفل می‌کنه و سرور دوم نمی‌تونه هیچ‌کاری بکنه تا کارهای سرور اول تموم بشه. وقتی سرور اول کارش تموم شد دیگه عملیات حسابداری تموم شده و شرط رو تازه بررسی می‌کنه و می‌بینه که پول در حساب محمد نیست و در نتیجه عملیات رو انجام نمی‌ده و ارور برمی‌گردونه.قفل‌کردن و موقعیت موجودی حسابحالا که گفتیم باید در حین عملیات حسابداری، موجودیتِ موردِ حسابداری باید قفل بشه، لازمه ببینیم این موجودیت رو باید جدا کنیم یا روی خود موجودیت اصلی قرار بدیم. انتخاب بین این دوتاست: قرار دادن موجودی حساب توی جدول «صندوق قرض‌الحسنه» مثل مثال اولیهجدا کردن «حساب صندوق قرض‌الحسنه» و قرار دادنش روی یک جدول جدیداگه بخوایم با رویکرد ۱ بریم جلو، باید کل صندوق رو در حین عملیات حسابداری قفل کنیم. این شامل اسم صندوق و اعضای اون هم می‌شه. خسته شدم. بقیه‌شو بعداً می‌نویسم. قرار بود از اولش همینو بگم ولی مجبور شدم کلی مفهوم دیگه رو توضیح بدم اول :|.</description>
                <category>Mohammad Teimori Pabandi</category>
                <author>Mohammad Teimori Pabandi</author>
                <pubDate>Mon, 13 Nov 2023 20:16:35 +0330</pubDate>
            </item>
                    <item>
                <title>راهبردهای طراحی نرم‌افزار حسابداری با تمرکز بر «همیان» - بخش دوم: الگوی نامه‌ی اعمال</title>
                <link>https://virgool.io/@mtp1376/accounting-software-part-2-rl8ruwnbn27y</link>
                <description>در این پست می‌خوام در خصوص یک الگوی دیگه صحبت کنم که خیلی جاها تکرار می‌شه؛ از دین تا مهندسی نرم‌افزار و حسابداری. تصمیم گرفتم بهش بگم «الگوی نامه‌ی اعمال» و جلوتر توضیح می‌دم چرا این اسم رو براش انتخاب کردم.به طور کلی یه سری «چیز» داریم که حاصل‌جمع هستن؛موجودیِ حساب: جمعِ تراکنش‌های ورودی و خروجی.وضعیتِ فایل در git: جمعِ commit هاست.وضعیتِ فعلیِ یک فایلِ فتوشاپ: حاصلِ تعدادی عملیات در این برنامه است (می‌تونید با undo مسیرش رو تا اول عقب‌عقب برید و این موضوع رو ببینید).وضعیتِ فعلیِ دیتابیس: مثلاً در دیتابیسِ Postgres یک سری فایل داریم به نام wal که وضعیتِ دیتابیس از طریقِ پخشِ پشت‌سرهمِ اون فایل‌ها به دست می‌آد.بلاکچین: از طریقِ پخشِ پشت‌سرهمِ تراکنش‌ها روی وضعیتِ اولیه، به وضعیتِ فعلی‌ش می‌تونیم برسیم.شخصیت انسان (طبق نگاه استفان کاوی): حاصل‌جمع «اعمال» ماست. این‌که کی هستیم جمعِ همه‌ی کارهاییه که از نقطه‌ی اول کردیم (نامه‌ی اعمال به مثابه git و شخصیت ما به مثابه file).خیلی مفاهیم و چیزها رو در جهان می‌شه از پشتِ این عینک دید و این لیست رو می‌شه زیاد ادامه داد، ولی برای این بحثمون، این مثال‌ها رو آوردم تا بعدش بگم همه‌ی این موارد دو مفهومِ تشکیل‌دهنده دارن: یک متغیر read-only که به صورت مستقیم تغییر نمی‌کنه و یک حاصل‌جمعه: مثلِ موجودی، وضعیتِ دیتابیس و شخصیتِ انسان. مثلاً دسترسی نداری که همین‌طوری دست ببری توی شخصیتت و از فردا صبح یک‌هو آدمِ با تمرکزی بشی.یک اهرم که وقتی می‌خوای با اون متغیر read-only تعامل کنی و تغییرات روش بدی، این اهرم رو در دست داری و هر کاری می‌کنی باید با همین اهرمت انجام بدی. مثلاً می‌تونی با هر روز مراقبه‌کردن شخصیتت رو به سمتِ یک شخصیتِ با تمرکز هُل بدی.یک متغیر داریم که مستقیماً امکانِ ویرایشش وجود نداره، اما به واسطه‌ی یک اهرم می‌تونیم تغییراتمون رو به اون متغیر هُل بدیم.این الگو رو در پیاده‌سازی میکروسرویس‌ها با نام Event Sourcing می‌شناسن:The application reconstructs an entity’s current state (متغیر) by replaying the events (اهرم).یعنی اتفاقاتی که برای یک موجودیت می‌افته رو لیست می‌کنن، و هر سیستم می‌آد اون اتفاقات رو پشت سر هم پخش می‌کنه و وضعیت نهایی رو می‌سازه. این‌طوری ضمنِ این‌که همه در وضعیتِ نهایی با هم اشتراک‌نظر دارن، مسیرِ رسیدن به اون وضعیت هم کاملاً مشخصه و می‌شه در هر نقطه از زمان، فهمید که وضعیتِ موجودیتمون به چه شکل بوده.برای مثال فکر کنید موجودیتمون «موجودی جیبمون» ـه و می‌خوایم از طریق یه سری تراکنش بهش برسیم. این لیست رو در نظر بگیرید:برای راحتی کار فقط دارم موجودیِ جیبِ خودم رو حسابداری می‌کنم و اصلِ پایستگی ارزش رو فعلاً بی‌خیال شدمحالا اگه یک وضعیتِ اولیه در نظر بگیریم (در ۱۹ آبان موجودی جیبم ۰ بوده)، می‌تونیم با بازپخش تراکنش‌هامون، به وضعیتِ نهایی برسیم.در نتیجه من در ۳۱ آبان موجودیِ جیبم می‌شه:balance = +2000 -100 -400 +100اما ویژگیِ خوبِ دیگه‌ی این روش، اینه که در هر نقطه از زمان هم می‌تونم موجودی رو محاسبه کنمbalance(t=start of 21 Aban) = +2000balance(t=start of 22 Aban) = +2000 -100balance(t=start of 23 Aban) = +2000 -100 balance(t=start of 24 Aban) = +2000 -100 -400balance(t=start of 25 Aban) = +2000 -100 -400...بخشی از تراکنش‌ها به صورت خط زمانیحالا که با این الگو بیشتر آشنا شدیم، می‌خوام دوباره تأکید کنم که مقدار «موجودی» در یک حساب بانکی، یک حاصل‌جمعه. حاصل‌جمعی که نمی‌شه مستقیماً بهش دست زد و ویرایشش کرد و باید از «اهرم» ویژه‌ی اون استفاده کنیم تا موجودی رو عوض کنیم. برای «موجودی»، این اهرم می‌شه همون «تراکنش» که جلوتر در موردش بیشتر صحبت خواهیم کرد.در نتیجه توی طراحی نرم‌افزارمون، باید این رو لحاظ کنیم که هیچ‌کس نتونه مستقیماً به مقدار موجودی دست بزنه. با این مقدار باید به شکل فقط‌خواندنی(read-only) رفتار بشه و تنها چیزی که می‌تونه تغییرش بده، باید تراکنش باشه.مطالعه‌ی بیشتر:https://martinfowler.com/eaaDev/EventSourcing.html#EventsAndAccountshttps://www.youtube.com/watch?v=ck7t592bvBg</description>
                <category>Mohammad Teimori Pabandi</category>
                <author>Mohammad Teimori Pabandi</author>
                <pubDate>Sat, 11 Nov 2023 17:23:41 +0330</pubDate>
            </item>
                    <item>
                <title>راهبردهای طراحی نرم‌افزار حسابداری با تمرکز بر «همیان» - بخش اول: اصل پایستگی ارزش</title>
                <link>https://virgool.io/@mtp1376/%D8%B1%D8%A7%D9%87%D8%A8%D8%B1%D8%AF%D9%87%D8%A7%DB%8C-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%AD%D8%B3%D8%A7%D8%A8%D8%AF%D8%A7%D8%B1%DB%8C-%D8%A8%D8%A7-%D8%AA%D9%85%D8%B1%DA%A9%D8%B2-%D8%A8%D8%B1-%D9%87%D9%85%DB%8C%D8%A7%D9%86-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-%D8%A7%D8%B5%D9%84-%D9%BE%D8%A7%DB%8C%D8%B3%D8%AA%DA%AF%DB%8C-%D8%A7%D8%B1%D8%B2%D8%B4-or0lcyyxnpmw</link>
                <description>سلام بر همگی، محمد هستم و مهندس نرم‌افزارم. در این سلسله پست می‌خوایم نکات مهمی رو بررسی کنیم که باید در طراحی یک نرم‌افزار حسابداری رعایت بشن. با تکرارِ زیادی دیدم که نرم‌افزارهایی که بخش‌های حسابداری دارن در این موضوع دچار مشکلات زیادی هستن؛ از گم‌شدنِ پول گرفته تا اشتباه حساب‌شدن بدهکاریِ آدم‌ها. به همین خاطر تصمیم گرفتم این سلسله مطالب رو منتشر کنم که هم حرف‌های خودم پایه و اساسِ دقیق‌تری داشته باشن و فُرم بگیرن، و هم این‌که اگه کسی خواست نرم‌افزاری با قابلیت‌های مشابه ایجاد کنه، تو دیوار نره و بتونه یه چیزِ مستحکم با امکانِ خطای صفر بسازه. اخیراً به همیان اضافه شدم و به خاطرِ همین می‌خوام پست‌هام رو با تمرکز بر این اپلیکیشن بنویسم. بد نیست نصبش کنید و یکم باهاش کار کنید تا بیشتر در جوِ صحبت‌هام قرار بگیرید.معرفی همیانهمیان یک اپلیکیشنه که با استفاده ازش می‌تونید با گروهی از آدم‌ها، صندوق مالی ایجاد کنید. روال کار این‌طوریه که صندوقتون رو ایجاد می‌کنید و اعضا رو بهش اضافه می‌کنید، بعد هر کی می‌تونه پول به صندوق واریز کنه و در کنارِ هم یک سپرده‌ی مشترک داشته باشید. قطره‌قطره جمع که می‌شه وانگهی دریا می‌شه و با کلی پولی که جمع شد می‌شه کلی کارهای مختلف کرد؛ مثلاً به عضوهایی از گروهمون که الآن نیاز دارن وام بدیم، با هم یک چیزی بخریم یا کارهای دیگه‌ای که خلاقیت شما بهتر از من می‌تونه پیداشون کنه.صندوقی که هر کس توش پولِ کمی گذاشته، ولی پولِ زیادی توش جمع شدهطراحی یک نرم‌افزار دارای امکان حسابداریاول این رو بگم که منظورمون از «طراحی» در این پست‌ها طراحیِ پایگاه‌داده، منطق نرم‌افزار و ان‌شاءالله API هاست. پس پست‌هامون طراحی تجربه‌ی کاربری و طراحی محصول رو در بر نمی‌گیرن. هر چند اون موارد هم مهم هستن و امیدوارم روزی بتونیم روشون وقت بذاریم و بررسی‌شون کنیم.وقتی اسم حسابداری می‌آد، یه مقدار خود من مورمور می‌شم. آیا داریم صحبت از دفتر و دستک و کارهای اداری و بازی‌های حقوقی می‌کنیم؟ در این‌جا نه. در این‌جا وقتی می‌گیم «حسابداری»، منظورمون اینه که حساب و کتاب یه «چیز»ی رو می‌خوایم داشته باشیم؛ حالا این «چیز» می‌تونه مثلاً سهمیه‌ی سوخت باشه (در یک سیستم که سهمیه‌بندی سوخت افراد رو ذخیره می‌کنه)، می‌تونه پول باشه (در همیان، که بفهمیم کدوم عضو توی کدوم صندوق چقدر پول داره) و یا هر چیز دارای ارزشی که ما می‌خوایم حساب و کتابش رو تو دستمون داشته باشیم.برای جا افتادن مسئله بیاید حساب بانکی‌مون رو بررسی کنیم. اول ببینیم در مورد این حساب، مهم‌ترین مسئله چیه؟ احتمالاً می‌گید «موجودی» و درست هم می‌گید. ولی آیا دونستنِ موجودیِ حساب کافیه؟ و آیا این موجودی یک موجودیتِ مستقله؟ دیگه چه چیزهایی لازمن برای این‌که مفهوم حساب بانکی و موجودیِ اون تکمیل بشه؟قبل از ادامه‌دادن، ببینید همین الآن چی توی نمودار بالا کمه؟ بذارید با چند سؤال، ذهنتون رو هُل بدم به سمتِ چیزی که می‌خوام بگم:اگه بگیم توی حسابِ من الآن ۴ میلیون و ۳۲۱ هزار تومن پول هست، آیا می‌تونیم بگیم «حساب و کتاب» موجودی من رو انجام دادیم؟اگه «موجودی» یک موجودیتِ مستقله، آیا می‌تونم همین‌طوری کم و زیادش کنم؟ فرض کنید من بانکم و دسترسی به پایگاه‌داده دارم. آیا می‌تونم بیام و موجودیِ حسابِ محمد رو ۱ میلیون تومن همین‌طوری اضافه کنم؟ (فرضاً این موجودی یه ستون توی پایگاه‌داده باشه - آیا می‌تونم برم تغییرش بدم تا پولِ تو حساب بیشتر بشه؟)اگر جوابتون به هر کدوم از سؤالات بالا «بله» است، توی تلگرام به آی‌دی من (mtp_zdr@) پیام بدید تا بیشتر در این خصوص بحث کنیم. اما برای این پست، می‌خوام بگم که پاسخ درست «نه» است.به خصوص بیاید روی سؤال دوم بحث کنیم: اگه بتونم بیام به موجودی حساب محمد همین‌طوری ۱ میلیون‌تومن اضافه کنم چه اتفاق بدی توی سیستم می‌افته؟قوانین پایستگیتا حالا اسم قانون پایستگی جرم به گوشتون خورده؟ آنتوان لاوازیه یک زمان گفت:نه در کارهای هنری و نه در طبیعت هیچ چیز ظاهر نمی‌شود. و از آنجایی که کیفیت و کمیت مواد اصلی در هر واکنشی ثابت است می‌توان میزان ماده را پیش و پس از واکنش‌ها وزن نمود و دید که هیچ چیز نه به وجود می‌آید و نه از بین می‌رود. بلکه فقط از صورتی به صورت دیگر تبدیل می‌شود.عبارات اولش جالبن؛ «نه در کارهای هنری و نه در طبیعت». به نظرم این نگاهش به دنیا حائز اهمیته. یه سری الگوهایی هستن که در جاهای مختلفی در دنیا می‌شه اون‌ها رو دید و یکی از اون‌ها، «قوانین پایستگی» ـه. قوانین پایستگی به طور کلی می‌گن که «X ـی به وجود نمی‌آد و از بین نمی‌ره، بلکه از جایی به جای دیگه منتقل می‌شه». به جای X می‌شه هر چیزی رو گذاشت و به یک قانون جدید رسید.حالا این مسائل چه ربطی به بحثِ حسابداری حساب من دارن؟ ربطشون وقتی مشخص می‌شه که به جای X بیایم و «پول» رو بذاریم:پول به وجود نمی‌آد و از بین نمی‌ره، بلکه از جایی به جای دیگه منتقل می‌شه.اصلِ اول در هر سیستم حسابداری: اصلِ پایستگیِ ارزشپس اگه من بیام و مقدار «موجودی» رو در حساب بانکیِ بانک رسالتم همین‌طوری ۱ میلیون تومن زیاد کنم، اصلِ بالا رو نقض کردم. چرا؟ چون یه پولی رو همین‌طوری ظاهر کردم بدون اینکه بگم از کجا اومده. اگه قرار باشه ۱ میلیون تومن به موجودی من اضافه بشه، باید اون ۱ میلیون تومن از یک جای دیگه اومده باشه.نقل و انتقال پولپس دیدیم که بر اساس قانون پایستگیِ ارزش، مهمه که پول‌ها در یک سیستم حساب و کتاب، فقط جابه‌جا بشن و ظاهر یا غیب نشن (هر چیزی که شما می‌خواید حساب و کتابش کنید این‌طوره. یهو ظاهر یا غیب نمی‌شه). این شاید مهم‌ترین چیزیه که باید در طراحی یک سیستم حسابداری بهش دقت کنیم.حالا سؤال اینه که چطور جداول پایگاه‌داده و منطقِ نرم‌افزار رو طراحی کنیم که اصل پایستگی ارزش در اون حفظ بشه. در پست‌های بعدی سعی می‌کنیم به این سؤال پاسخ بدیم و گام‌به‌گام یک سیستم حسابداری اصولی طراحی کنیم که بتونه بدونِ غلط کار کنه و همیشه دقیق باشه.</description>
                <category>Mohammad Teimori Pabandi</category>
                <author>Mohammad Teimori Pabandi</author>
                <pubDate>Wed, 01 Nov 2023 19:33:47 +0330</pubDate>
            </item>
                    <item>
                <title>به کلاس مبانیِ قدرتِ اراده خوش‌آمدید</title>
                <link>https://virgool.io/@mtp1376/welcome-to-willpower-101-vjhpvkcnvthu</link>
                <description>این پست در واقع ترجمه‌ی آزادی از کتاب The Willpower Instinct، بخش Introductionـه که قراره هر بخشش رو که ترجمه می‌کنم روی ویرگول منتشر کنم. با توجه به این‌که انجام ترجمه برای چنین کتابی سنگین و دشواره، این بخش اول رو منتشر کردم که ببینم اقبال عمومی به چنین نوشتاری چیه. اگه فاز توسطِ خوانندگان گرفته بشه، ان‌شاءالله بخش‌های بعدی رو هم منتشر خواهم کرد.هروقت به این اشاره می‌کنم که مدرس کلاس‌های اراده هستم، تقریباً پاسخِ همه بهم اینه که «اوه، این چیزیه که بهش احتیاج دارم». الآن بیش‌تر از هر زمان دیگه‌ای، آدم‌ها متوجهِ این هستن که اراده- یعنی قدرتِ کنترل‌کردن توجه، احساسات و غرایزشون- روی سلامت جسمی، امنیت مالی، روابط و موفقیت حرفه‌ای‌شون تأثیر داره. همه‌ی ما اینو می‌دونیم. می‌دونیم که بایستی کنترلِ همه‌ی جنبه‌های زندگی‌مون رو در اختیار داشته باشیم؛ از خوراک گرفته تا چیزی که انجامش می‌دیم، و می‌خریم.با این وجود، اکثر مردم احساس شکست در اراده می‌کنن- یعنی یک لحظه همه‌چیز براشون تحت کنترله ولی لحظه‌ی بعدی یهو به خاطر فشار، چیزها از کنترلشون خارج می‌شه. بنا به گفته‌ی American Psychological Association، آمریکایی‌ها «فقدان اراده» رو به عنوان مهم‌ترین مانع رسیدن به اهدافشون نام می‌برن. خیلی‌هاشون به خاطر ناامیدکردنِ خودشون و دیگران، احساس گناه می‌کنن. بقیه در مقابل افکار، احساسات و تمایلاتشون احساس استیصال می‌کنن و حس می‌کنن که زندگی‌شون به جای انتخاب‌های آگاهانه، توسطِ تکانه‌ها دیکته می‌شه. حتی کسانی که موفق می‌شن زندگی رو مدیریت کنن هم حس خستگی و فشارِ زیاد برای نگه‌داشتنِ همه‌چیز سرِ جاش پیدا می‌کنن و با خودشون می‌گن یعنی زندگی قرار بوده همین‌قدر سخت باشه؟به عنوان روان‌شناس سلامت و مدرس برنامه‌ی توسعه‌ی سلامت دانشکده‌ی علوم‌پزشکی Stanford، شغل من کمک‌کردن به افراد برای مدیریت استرس و انجام انتخاب‌های سالمه. پس از سال‌ها تماشای دست‌وپازدن مردم برای تغییردادن افکار، احساسات، بدن و عادت‌هاشون، متوجه شدم که بیش‌ترِ اون‌چه که مردم در مورد اراده بهش باور دارن، داره موفقیتشون رو به فنا می‌ده و براشون استرسِ غیرضروری ایجاد می‌کنه. هرچند تحقیقات علمی چیزهای زیادی برای کمک بهشون داره، ولی این مشخصه که چنین دانشی هنوز بخشی از فهم عمومی در جامعه نشده. به جاش مردم کماکان از رویکردهای فرسوده‌ای برای کنترل خودشون استفاده می‌کنن. من به طور مکرر متوجه شدم که رویکردهایی که بیش‌تر آدم‌ها استفاده می‌کنن نه تنها غیرمؤثرن، بلکه در واقع نتیجه‌ی معکوس هم دارن و منجر به خودتخریبی و از دست دادن کنترل می‌شن.همه‌ی مواردِ فوق منو به سمت این برد که کلاس «علمِ اراده» رو بسازم؛ کلاسی که در برنامه‌ی مطالعات تکمیلی Stanford به عموم مردم ارائه می‌شد. این کلاس جدیدترین بینش‌ها در مورد خودکنترلی رو از روان‌شناسی، اقتصاد، علوم اعصاب و پزشکی کنار هم جمع کرد تا توضیح بده که چطور می‌تونیم عادت‌های قدیمی‌مون رو بشکونیم و عادت‌های سالمی ایجاد کنیم، بر اهمال‌کاری چیره بشیم، تمرکزمون رو بازیابی کنیم و استرسمون رو مدیریت کنیم. بهمون نشون می‌ده که چطور در مقابل وسوسه‌ها(Temptations) کم می‌آریم و چطور می‌تونیم قدرتِ مقاومت در مقابلشون رو به دست بیاریم. این کلاس همین‌طور اهمیتِ درک‌کردن محدودیت‌های خودکنترلی رو برامون شرح می‌ده و بهمون نشون می‌ده که بهترین رویکردها برای تمرین‌دادن قدرت اراده چیه.باعث افتخارمه که بگم کلاس «علمِ اراده» خیلی سریع به یکی از محبوب‌ترین کلاس‌هایی که توسط مرکز مطالعات تکمیلی Stanford ارائه می‌شد تبدیل شد. اولین‌باری که این کورس ارائه شد، مجبور شدیم چهاربار جای کلاس رو تغییر بدیم تا تعداد اعضایی رو که هی زیاد می‌شدن توش جا بدیم. مدیران اجرایی شرکت‌ها، معلم‌ها، ورزش‌کارا، متخصصان پزشکی و هر کسی که در مورد قدرت اراده کنجکاو بود با هم یکی از بزرگ‌ترین کلاس‌های درسِ استنفورد رو پر کردن. همین‌طور دانش‌جوهامون شروع به آوردنِ همسر، بچه‌ها و هم‌کارهاشون به کلاس کردن تا بتونن تجربیاتشون رو با اون‌ها به اشتراک بذارن.امیدوار بودم که این کلاس برای چنین گروه متنوعی که با اهدافی از ترکِ سیگار و کاهشِ وزن گرفته تا خروج از بدهی و پدرومادرِ بهتری‌شدن به کلاس اومده بودن، مفید بوده باشه. ولی حتی من هم آخرش از نتایج شگفت‌زده شدم. یکی از نظرسنجی‌هایی که چهارهفته بعد از شروع کلاس گرفتیم، نشون می‌داد که ۹۷ درصد از دانش‌جوهامون حس می‌کردن که بهتر از قبل رفتار خودشون رو درک می‌کنن، و ۸۴ درصد هم گفتن که رویکردهایی که توی کلاس یاد گرفتن باعث شده قدرت اراده‌شون تقویت بشه. موقعِ پایانِ کورس، شرکت‌کننده‌ها قصه‌هایی از این‌که چطور اعتیادِ ۳۰ساله‌شون رو به شیرینی‌جات پایان دادن، یا چطور بالأخره مالیات‌هاشون رو تسویه کردن، یا چطور دیگه سرِ بچه‌هاشون داد نمی‌زنن، یا چطور دارن به طور منظم ورزش می‌کنن و به طور عمومی حسِ بهتری در مورد خودشون و این‌که کنترلِ بیش‌تری روی انتخاب‌هاشون دارن تعریف می‌کردن. ارزیابیِ کورسمون مشخص کرد که این کلاس برای افراد حاضر در اون متحول‌کننده بوده. اجماعِ دانش‌جوها بر این نکته واضح بود: درک‌کردنِ علمِ پشتِ قدرتِ اراده بهشون استراتژی‌هایی رو برای توسعه‌دادنِ خودکنترلی داده بود و قدرتشون رو برای دنبال‌کردن چیزی که بیش‌تر از همه براشون اهمیت داشت افزایش داده بود. بینشِ علمی برای شخصی که اعتیاد به الکل داشت همون‌قدر مفید بود که برای معتاد به ایمیل‌چک‌کردن فایده داشت. و استراتژی‌های خودکنترلی به مردم کمک می‌کردن که در مقابل وسوسه‌هایی از قبیل شکلات، بازی‌های کامپیوتری، خریدکردن، و حتی یک هم‌کارِ متأهل مقاومت کنن. دانش‌جوها از کلاس برای رسیدن به اهداف شخصی‌ای مثلِ دویدنِ ماراتن، شروع‌کردن یک کسب‌وکار، مدیریت استرس ناشی از اخراج‌شدن، مشکلات خانوادگی و امتحانِ املای ترس‌ناکِ صبحِ شنبه(این چیزیه که وقتی مامان‌ها بچه‌شون رو به مدرسه می‌برن اتفاق می‌افته) استفاده کردن.و البته همون‌طور که هر معلمِ باصداقتی بهتون می‌گه، من هم کلی چیز از دانش‌جوهام یاد گرفتم. وقتی در موردِ یک یافته‌ی علمی زیادی وِروِر می‌کردم و اشاره‌ای نمی‌کردم که حالا این چه کمکی به چالش‌های اراده‌ی اون‌ها می‌کنه، سر کلاس خوابشون می‌برد. همین‌طور خیلی سریع بهم می‌گفتن که کدوم استراتژی‌ها در دنیای واقعی کار می‌کنن و کدوماشون ناموفق هستن(چیزی که تحقیق آزمایشگاهی هیچ‌وقت نمی‌تونه بهتون بگه). اون‌ها برداشت‌های متفاوتی از تمریناتِ هفتگی‌مون داشتن و بهم راه‌های جدیدی رو برای تبدیل تئوری‌های انتزاعی به قواعدِ مفید برای زندگیِ روزانه یاد می‌دادن. این کتاب بهترین بینش‌های علمی و تمریناتِ کاربردی رو از این کورس ترکیب کرده، و از آخرین تحقیقات در کنار خردِ جمعیِ صدها دانشجویی که این کورس رو گذروندن استفاده می‌کنه.برای موفق‌شدن در خودکنترلی، باید بدونید که چطور شکست می‌خوریدبیش‌ترِ کتاب‌های تغییر رفتار- چه رژیمِ غذاییِ جدیدی باشه یا راهنمایی برای استقلال مالی- بهتون کمک می‌کنن یه سری هدف برای خودتون مشخص کنید و یا حتی بهتون می‌گن که چی‌کار کنید تا بهشون برسید. ولی اگه مشخص‌کردنِ چیزی که دلمون می‌خواد تغییرش بدیم کافی بود، هر تصمیم سال نویی یک موفقیت رو در پی داشت و کلاسِ من خالی می‌شد. کتاب‌های کمی بهتون کمک می‌کنن که ببینید چرا با وجود این‌که خیلی خوب می‌دونید باید چی‌کار کنید، هنوز موفق به انجامش نشدید.من اعتقاد بر این دارم که بهترین راه برای بهبود خودکنترلی، اینه که ببینیم چرا و چطور کنترلمون رو از دست می‌دیم. دونستنِ این‌که چطور احتمالش وجود داره که تسلیم بشید، برخلاف ترسِ اکثرِ مردم، باعث نمی‌شه برای شکست‌خوردن آماده بشید. در واقع این‌کار بهتون اجازه می‌ده پشتیبان خودتون باشید و از تله‌هایی که منجر به شکست قدرت اراده‌تون می‌شن اجتناب کنید. تحقیقات نشون می‌دن افرادی که فکر می‌کنن بیش‌ترین قدرت اراده رو دارن، در واقع محتمل‌ترین اشخاص برای از دست‌دادن کنترل در زمانی که مورد وسوسه قرار بگیرن هستن. برای مثال سیگاری‌هایی که در مورد توانایی خودشون برای مقاومت در برابر وسوسه‌ها خوش‌بین‌ترین هستن، بیش‌ترین احتمال برگشت به سیگار رو چهارماه بعد دارن و رژیم‌گیرهای فوق‌خوش‌بین کم‌ترین احتمال رو برای کاهش وزن دارن. چرا؟ چون این دسته در پیش‌بینیِ زمان، مکان و چراییِ تسلیم‌شدنشون ناموفق هستن. خودشون رو در معرضِ وسوسه‌های بیش‌تری قرار می‌دن؛ برای مثال با سیگاری‌ها بیرون می‌رن یا جاهای مختلف خونه کلوچه جا می‌ذارن. همین‌طور این گروه بیش‌ترین احتمالِ شگفت‌زده‌شدن از شکست‌ها و تسلیم‌شدن‌هاشون موقعِ به مشکل‌خوردن رو دارن.خودشناسی- به خصوص دونستن این‌که چطور دچارِ مشکلِ اراده می‌شیم- زیربنای خودکنترلیه. به همین خاطر، هم کلاس «علمِ اراده» و هم این کتاب تمرکزشون رو روی متداول‌ترین خطاهای قدرت اراده که همه‌مون مرتکب می‌شیم قرار می‌دن. هر بخش یکی از تصوراتِ غلطِ متداول در مورد خودکنترلی رو برطرف می‌کنه و بهتون راه جدیدی برای فکرکردن در مورد چالش‌های قدرت اراده‌تون می‌ده. برای هر اشتباهمون در خصوصِ قدرت اراده، یک کالبدشکافی به عمل خواهیم آورد: زمانی که در مقابل وسوسه‌ها تسلیم می‌شیم یا چیزی رو که می‌دونیم باید انجام بدیم بی‌خیال می‌شیم، چی منجر به این سقوطمون شده؟ اشتباه مهلکمون چی بوده و چرا انجامش می‌دیم؟ مهم‌تر از همه این‌که دنبال فرصت برای نجاتِ خودِ آینده‌مون از این سرنوشت خواهیم گشت. چطور می‌تونیم اطلاع از نحوه‌ی شکستمون رو به استراتژی‌هایی برای موفقیت تبدیل کنیم؟حداقلش، وقتی که این کتاب رو تموم کنید، درک بهتری از رفتارِ ناقص ولی کاملاً انسانیِ خودتون پیدا خواهید کرد. یک چیزی که علمِ اراده مشخص می‌کنه، اینه که هر کسی به نحوی با وسوسه‌ها سر و کله می‌زنه؛ وسوسه‌هایی مثل اعتیاد، حواس‌پرتی، یا اهمال‌کاری. این‌ها ضعفِ فردی نیستن که نشون از ناکافی‌بودنِ ما باشن- بلکه تجربیات همگانی و بخشی از شروطِ انسان‌بودن هستن. اگه این کتاب هیچ‌کاری غیر از کمک‌کردن بهتون برای دیدن وجهِ انسانیِ مشترکِ دغدغه‌های اراده‌تون نکنه، من بازم راضی‌ام. ولی امیدوارم که خیلی بیش‌تر بهتون کمک برسونه و استراتژی‌های کتاب این قدرت رو بهتون بده که تغییراتِ پایدار و واقعی توی زندگی‌تون ایجاد کنید.چطور از این کتاب استفاده کنیم؟دانشمند قدرتِ اراده بشیدمن دانشمند و دخیل توی کارهای علمی بودم و یکی از اولین چیزهایی که یاد گرفتم این بود که هر چند تئوری‌ها خیلی دل‌پذیرن، ولی داده(Data) ازشون بهتره. به خاطر همین می‌خوام ازتون درخواست کنم که با این کتاب مثلِ یک آزمایش برخورد کنید. رویکردِ علمی به خودکنترلی محدود به آزمایشگاه نیست. شما هم می‌تونید- و باید- خودتون رو در معرض مطالعاتِ واقعیِ خودتون قرار بدید. وقتی این کتاب رو می‌خونید، حرف‌های منو به طور کامل قبول نکنید. بعد از این‌که مدرکِ یک ایده رو بهتون دادم، ازتون خواهم خواست که این ایده رو توی زندگیِ خودتون تستش کنید. داده‌های شخصیِ خودتون رو جمع‌آوری کنید تا ببینید که چی درسته و چی برای شما کار می‌کنه.در هر بخش کتاب، دو مدل تکلیف پیدا می‌کنید که بهتون کمک می‌کنن دانشمندِ قدرتِ اراده بشید. به مدل اول می‌گم «زیر میکروسکوپ». این تکالیف ازتون می‌خوان که ببینید یک ایده چطور از قبل توی زندگی‌تون در حال عمل می‌کنه. قبل از این‌که چیزی رو تغییر بدید، لازمه همون‌طور که هست ببینیدش. برای مثال، ازتون خواهم خواست که توجه کنید چه زمان‌هایی بیش‌ترین احتمال وجود داره که در مقابل وسوسه‌ها تسلیم بشید، یا این‌که ببینید چطور گرسنگی روی خرج‌کردنتون تأثیر می‌ذاره. ازتون دعوت خواهم کرد به این توجه کنید که چطور با خودتون در مورد چالش‌های قدرت اراده‌تون صحبت می‌کنید، مثلاً این‌که وقتی اهمال‌کاری می‌کنید به خودتون چی می‌گید، یا شکست‌ها و موفقیت‌های قدرتِ اراده‌تون رو چطور قضاوت می‌کنید. همین‌طور ازتون درخواست خواهم کرد که یک سری مطالعات میدانی انجام بدید و ببینید که چطور فروشنده‌ها از طراحی فروشگاه برای تضعیف‌کردن قدرت اراده‌ی شما استفاده می‌کنن. توی هر کدوم از این تکالیف، رویکردِ غیرِ قضاوتی و ناظرانه رو پیش بگیرید- یعنی دقیقاً مثل یک دانشمندی که به میکروسکوپ با امید کشف یک چیز مفید و هیجان‌انگیز خیره می‌شه. این‌ها فرصتی برای تنبیه‌کردنِ خودتون واسه‌ی هر شکستِ قدرتِ اراده یا موقعیتی برای توبیخ‌کردنِ دنیای مدرن و همه‌ی وسوسه‌هاش نیستن(کلاً جایی برای اولی نیست و در مورد دومی من خودم حسابشو می‌رسم).همین‌طور تکالیفی با عنوان «آزمایش قدرت اراده» توی هر بخش پیدا می‌کنید. این‌ها استراتژی‌های کاربردی‌ای بر اساس مطالعات علمی یا تئوری برای بهبود خودکنترلی هستن. می‌تونید این قرص‌های تقویتیِ قدرتِ اراده رو بلافاصله توی زندگیِ واقعی‌تون استفاده کنید. من ترغیبتون می‌کنم که در مورد هر استراتژی، حتی اونایی که به نظر متناقض می‌رسن(و چندتایی ازشون خواهیم داشت)، روشن‌فکر باشید. اونا توسط دانش‌جوهای کلاسم تست شدن و در عین حال که همه‌ی استراتژی‌ها روی همه جواب نمی‌دن، اینا روش‌هایی هستن که بیش‌ترین امتیاز رو گرفتن. روش‌هایی که در تئوری به نظر خوب می‌رسیدن ولی توی دنیای واقعی گند می‌زدن چی؟ اونا رو لای این صفحات پیدا نخواهید کرد.این آزمایش‌ها یه راه خوب برای خروج از عادت‌هاتون و پیداکردنِ راه‌کارهایی جدید برای مشکلاتِ قدیمی هستن. تشویقتون می‌کنم که استراتژی‌های مختلفی رو امتحان کنید و داده‌های شخصیِ خودتون رو در خصوصِ این‌که کدوم بیش‌تر از همه کمکتون کرد به دست بیارید. از اون‌جایی که این‌ها آزمایش هستن، و نه امتحان، نمی‌تونید توشون شکست بخورید- حتی اگه تصمیم بگیرید دقیقاً برعکسِ چیزی رو که علم پیشنهاد می‌ده عمل کنید(به هر حال علم نیاز به بدبین‌ها داره). استراتژی‌ها رو با دوستان، اعضای خانواده و هم‌کارانتون به اشتراک بذارید و ببینید که برای اون‌ها چطور کار می‌کنه. همیشه یه چیزی یاد خواهید گرفت و می‌تونید از چیزهایی که یاد گرفتید برای بهبوددادن استراتژی‌های خودتون در مورد خودکنترلی استفاده کنید.چالش قدرتِ اراده‌ی شمابرای این‌که بیش‌ترین استفاده رو از این کتاب ببرید، پیشنهاد می‌کنم یه چالشِ به خصوصِ قدرتِ اراده‌تون رو انتخاب کنید تا هر کدوم از ایده‌ها رو روش امتحان کنید. همه‌ی ما چالش‌هایی برای قدرتِ اراده‌مون داریم. بعضی‌هاشون همگانی هستن- برای مثال با تشکر از غریزه‌ی بیولوژیکمون در مورد ولعِ شکر و نمک، همه‌ی ما لازمه که در مقابلِ عطشمون برای تنهایی سرِ پا نگه‌داشتنِ قنادیِ سرِ کوچه مقاومت کنیم. ولی خیلی از چالش‌های قدرت اراده‌مون هم یکتا هستن. یه چیزی که شما براش اشتیاق دارید رو ممکنه شخصِ دیگه‌ای پس بزنه. چیزی که شما بهش اعتیاد دارید ممکنه به نظرِ شخصِ دیگه‌ای خسته‌کننده برسه. و چیزی که شما راحت می‌ذاریدش کنار رو، ممکنه کسی برای انجامش پول پرداخت بکنه. جزئیات کار هر چه باشن، این چالش‌ها عادت دارن برای هر کدوم از ما به شکل مشابهی عمل کنن. اشتیاق شما برای شکلات‌خوردن خیلی فرقی با هیجان یک سیگاری برای سیگارکشیدن، یا یک معتاد به خرید برای هزینه‌کردن نداره. نحوه‌ی قانع‌کردنِ خودتون در موردِ ورزش‌نکردن، فرق چندانی با توجیهاتی که یکی دیگه برای پرداخت‌نکردنِ به موقعِ قبض‌هاش می‌آره یا توجیهِ کسی که یه شبِ دیگه درس نمی‌خونه نداره.چالشِ قدرتِ اراده‌ی شما می‌تونه چیزی باشه که از انجامش طفره می‌رید(چیزی که من بهش می‌گم چالشِ قدرتِ «انجامش می‌دم»(I will)) یا عادتی باشه که می‌خواید بشکنیدش(چالشِ قدرتِ «انجامش نمی‌دم»(I won&#x27;t)). همین‌طور می‌تونید یک هدف مهم در زندگی‌تون که می‌خواید انرژیِ بیش‌تری روش بذارید و روش تمرکز کنید رو انتخاب کنید(چالشِ قدرتِ «می‌خوامش»(I want))- چه این چالش، بهبود سلامت، کنترل استرس، قوی‌ترکردن مهارت‌های والدگری، یا پیش‌رفتِ شغلی باشه. چون که حواس‌پرتی، وسوسه‌شدن، کنترل تکانه و اهمال‌کاری آن‌چنان چالش‌های همگانیِ انسانی هستند که استراتژی‌های این کتاب می‌تونه برای هر هدفی که انتخاب می‌کنید مفید باشه. زمانی که این کتاب رو تموم می‌کنید، بینش بهتری در خصوص چالش‌هاتون و یه مجموعه از استراتژی‌های خودکنترلی برای پشتیبانی از خودتون در دست خواهید داشت.عجله نکناین کتاب برای استفاده به طوری طراحی شده که انگار شما دارید کلاسِ ده‌هفته‌ای منو می‌گذرونید. به ده بخش تقسیم شده که هر کدومشون یک مفهوم کلیدی، دانشِ پشتش و این‌که چطور می‌تونه روی اهداف شما اعمال بشه رو توضیح می‌دن. ایده‌ها و استراتژی‌هایی که ارائه می‌شن روی هم‌دیگه سوار می‌شن، لذا چیزی که توی هر بخش انجام می‌دید، شما رو برای بخش بعدی آماده می‌کنه.هرچند که می‌تونید کل این کتاب رو توی یک آخر هفته بخونید، ولی من تشویقتون می‌کنم زمانی که به پیاده‌سازی استراتژی‌ها می‌رسه، آهسته پیش برید. دانش‌جوهای کلاس من یک هفته‌ی کامل برای مشاهده‌ی این‌که هر ایده چطور در زندگی‌شون تأثیر می‌ذاره صرف می‌کنن. اون‌ها هر هفته یک استراتژی برای خودکنترلی رو امتحان می‌کنن و در مورد اون‌هایی که بهتر عمل می‌کنن گزارش‌نویسی می‌کنن. بهتون پیشنهاد می‌کنم که شما هم رویکرد مشابهی رو پیش بگیرید، به خصوص اگه برنامه دارید که از این کتاب استفاده کنید تا از عهده‌ی هدفی مثل کاهش وزن یا مدیریت مالی بربیاید. به خودتون زمان بدید تا تمرینات کاربردی رو امتحان کنید و بهشون فکر کنید. به جای این‌که ده‌تا استراتژیِ جدید رو یهویی بردارید، یک استراتژی رو- اونی رو که بیش‌تر به چالشتون مرتبط به نظر می‌رسه- از هر بخش انتخاب کنید.می‌تونید از ساختار ده‌هفته‌ای کتاب هر زمان که خواستید تغییری ایجاد کنید یا به هدفی برسید استفاده کنید- درست مثل بعضی از دانش‌جوها که کلاس رو چندبار گذروندن و هر بار روی چالش جدیدی تمرکز کردن. اما اگه قصد دارید که کل کتاب رو اول بخونید، ازش لذت ببرید- و نگران هماهنگ‌نبودن با تمرینات کتاب نباشید. از اون‌هایی که به نظرتون جذاب‌تر می‌رسن یادداشت بردارید و هر وقت که برای عملی‌کردنِ ایده‌ها آماده بودید بهشون برگردید.شروع کنیماولین تکلیف شما اینه: یک چالش رو برای سفرمون در دنیای علمِ اراده‌ی انتخاب کنید. بعد منو توی بخش اول ملاقات کنید. توی بخش اول قراره یه مسافرت بریم به زمان‌های دور تا ببینیم که این چیزی که بهش می‌گیم قدرت اراده از کجا می‌آد و چطور می‌تونیم بیش‌تر ازش داشته باشیم.زیر میکروسکوپ: چالشِ قدرتِ اراده‌ی خودتون رو انتخاب کنیداگه هنوز این‌کارو نکردید، الآن وقتشه که اون چالشِ قدرتِ اراده‌تون رو انتخاب کنید که بیش‌تر از همه می‌خواید روش ایده‌ها و استراتژی‌های این کتاب رو اعمال کنید. سؤالات زیر می‌تونن بهتون کمک کنن چالشی رو که قراره باهاش مواجه بشید انتخاب کنید:چالش قدرت «انجامش می‌دم»: چه کاری هست که می‌خواید بیش‌تر ازش انجام بدید، یا دیگه از سرتون بازش نکنید چون می‌دونید که انجام‌دادنش کیفیتِ زندگی‌تون رو افزایش می‌ده؟چالش قدرت «انجامش نمی‌دم»: «سخت‌ترین» عادت توی زندگی‌تون چیه؟ چه چیزیه که می‌خواید دست از انجامش بردارید یا کم‌تر انجامش بدید چون که باعث تضعیف سلامتی، خوش‌حالی یا موفقیتتون می‌شه؟چالش قدرت «می‌خوامش»: مهم‌ترین هدف بلندمدت‌تون که دوست دارید انرژی‌تون رو روش متمرکز کنید چیه؟ چه خواسته‌ی آنی‌ای محتمله که حواسِ شما رو از این هدف پرت کنه یا به خودش وسوسه‌تون کنه؟</description>
                <category>Mohammad Teimori Pabandi</category>
                <author>Mohammad Teimori Pabandi</author>
                <pubDate>Tue, 31 Mar 2020 06:44:56 +0430</pubDate>
            </item>
            </channel>
</rss>