کدهالیک | codehalic
3.47K subscribers
319 photos
8 videos
66 files
359 links
دوره های آموزشیمون رو از داخل سایت ببینید

https://codehalic.ir
Download Telegram
استخدام در شرکت ازکی

سلام دوستان شرکت ازکی در حال حاضر در این پوزیشن ها در حال استخدام هستش

پوزیشن‌های باز شرکت:

پرفورمنس / دیجیتال مارکتینگ منیجر
مدیر پروژه مسلط به ATL
سرپرست برای تیم ریتنشن
کارشناس ریتنشن

آیدی تلگرام جهت ارسال رزومه:

@ShahrzadTaleghani


@codehalics | کدهالیک
جدیداً یه سوال تو مصاحبه‌ها خیلی تکرار میشه:

«اگه ۸۰٪ کارت با هوش مصنوعی قابل اتوماسیون باشه، چطوری حضورتو تو محیط واقعیِ کار توجیه می‌کنی؟»

یا حتی یه نسخه چالشی‌ترش:
«اگه تا چند سال دیگه AI بتونه ۱۰۰٪ جای تو رو بگیره، واکنشت چیه؟»

این مدل سوال‌ها مخصوصاً تو مصاحبه‌های خارجی خیلی زیاد پرسیده میشه و به نظر میاد قراره بیشتر هم بشه.

حالا سوال از شما:
اگه تو یه جلسه مصاحبه باشین و من مصاحبه‌کننده، چطوری بهش جواب می‌دین؟

@codehalics | کدهالیک
کدهالیک | codehalic
جدیداً یه سوال تو مصاحبه‌ها خیلی تکرار میشه: «اگه ۸۰٪ کارت با هوش مصنوعی قابل اتوماسیون باشه، چطوری حضورتو تو محیط واقعیِ کار توجیه می‌کنی؟» یا حتی یه نسخه چالشی‌ترش: «اگه تا چند سال دیگه AI بتونه ۱۰۰٪ جای تو رو بگیره، واکنشت چیه؟» این مدل سوال‌ها مخصوصاً…
خب من یه ریفر میدم به یه مقاله‌ای که تقریباً می‌تونم بگم وقتی خوندمش، خیلی خیلی تأثیر زیادی رو جواب این سوال داشت. مقاله‌ی "The End of Programming" از مت ولش.

حرف حسابش چیه؟ می‌گه ما همه‌مون مثل دایناسورهایی هستیم که داریم به اون شهاب‌سنگی که داره می‌خوره زمین نگاه می‌کنیم! ولش می‌گه دوران «کد زدن» به معنای کلاسیکش تموم شده. قدیما مهندسا افتخار می‌کردن که با خط‌کش مهندسی (Slide Rule) محاسبات پیچیده می‌کنن، ولی ماشین‌حساب که اومد، اون مهارت کلاً رفت تو موزه‌. الانم دقیقاً همونه؛ اینکه بشینی سینتکس بنویسی و الگوریتم جابه‌جا کنی، داره می‌شه یه مهارت منسوخ.

حالا تو مصاحبه چطوری حضورمون رو توجیه کنیم؟

باید بفهمیم که واحدِ اتمی کار ما عوض شده. قدیما واحد کارمون "خط کد" بود، الان واحد کارمون شده "هدایت مدل‌های AI". اگه ۸۰٪ کار رو AI می‌کنه، دمش گرم! توجیه حضور من اینه که من اون "ناظر" و "معماری" هستم که می‌دونه این قطعات رو چطوری کنار هم بچینه که بیزینس زمین نخوره. AI مسئولیت نمی‌پذیره، AI استراتژی نمی‌فهمه، AI نمی‌تونه بین دو تا Trade-off سختِ معماری تصمیم بگیره.

توجیه ما اینه: ما از «بنا» تبدیل شدیم به «مربی» و «مهندس ارشد». حضور ما واجبه چون ابزار چموشی مثل AI، یه راننده می‌خواد که بفهمه جاده کجاست و تهش قراره به چی برسیم. ما نیومدیم که با AI رقابت کنیم، اومدیم که باهاش خروجی تیم رو ۱۰ برابر کنیم.

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

دعوتتون میکنم که این مقاله رو بخونین ( البته اگر اینترنت
دارید)

https://cacm.acm.org/opinion/the-end-of-programming/

@codehalics | کدهالیک
20👍1
کدهالیک | codehalic
جدیداً یه سوال تو مصاحبه‌ها خیلی تکرار میشه: «اگه ۸۰٪ کارت با هوش مصنوعی قابل اتوماسیون باشه، چطوری حضورتو تو محیط واقعیِ کار توجیه می‌کنی؟» یا حتی یه نسخه چالشی‌ترش: «اگه تا چند سال دیگه AI بتونه ۱۰۰٪ جای تو رو بگیره، واکنشت چیه؟» این مدل سوال‌ها مخصوصاً…
و اما جوابای شما عزیزان راجع به این سوال و تحلیلی که من از این چالش تو مصاحبه دارم! (یادتون باشه این کاملاً نظر شخصی منه و ممکنه اشتباه باشه، ولی از چند تا زاویه بهش نگاه کردم که براتون بازش می‌کنم):

بچه‌ها، من این سوال رو اصلاً "تکنیکال" نمی‌بینم. این سوال ۱۰۰٪ برای سنجش سافت‌اسکیل (Soft Skills) شما طراحی شده، اونم به چند دلیل:

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

۲. تواضع فکری (یا همون غرور کاذب نداشتن!)
بعضی‌ها رو دیدم می‌نویسن: «نه حاجی! AI که جامو نمی‌گیره». این جمله قشنگ پالسِ غرور کاذب می‌ده به مصاحبه‌کننده.
اونا دوست دارن ببینن چقدر اپتیمیست (خوش‌بین) هستید یا پسمیست (بدبین). قطعاً بودن یه آدم اپتیمیست تو تیم خیلی بیشتر از یه آدم بدبین کمک‌کننده‌اس.
یه مثال بزنم (البته از اون ساید که منو تو گونی نندازن!): مثلاً وقتی آمریکا درکی از قدرت موشکی ما نداشت و دست‌کم گرفتنش نتیجش شد این که می‌بینید؛ ما پیروز شدیم (دی:). پس دست‌کم گرفتن قدرتِ حریف (AI) اولین قدم برای شکست خوردنه!

۳. تو تایپیستی یا مهندس؟ (تفکیک کدنویس از حل‌کننده مسئله)
این همون چیزیه که من همیشه روش تأکید دارم. اینکه شما تایپیستی یا مهندسی!
مهندس فرزاد دلیر رو نمیتونه کسی جایگزین کنه، ولی احتمالا اون فردی که ناپلئونی معماری رو پاس کرده خیلی سخت نباشه جایگزین کردنش، نه؟
شرکت اینطوری می‌فهمه که شما حتی اگر فردا برنامه‌نویسی کلاً منسوخ بشه، باز هم به درد آن مجموعه می‌خورید چون "فهمِ سیستمیک" داری.

۴. هوش هیجانی (EQ)
از همون چیزایی که از زمان راهنمایی معلم‌ها می‌گفتن (البته منظورم اون جمله‌ی "هیچ گوهی نمی‌شی" نیست! دی:).
می‌خواد ببینه اون لحظه دقیقاً واکنشت چیه. بایاس‌دار می‌شی یا نه؟ عصبی می‌شی؟ با منطق برخورد می‌کنی یا فقط دفاع می‌کنی؟ این از اون سوالای منابع انسانی‌طوره؛ قشنگ می‌فهمه پس‌فردا تو ددلاین نزدیک و فشار کاری بالا، شخصیتت چه شکلی می‌شه. شاید بگی ربطی نداره، ولی HR اینارو خوب می‌فهمه!

در کل خیلی پرحرفی کردم، ولی امیدوارم به دردتون بخوره تو مصاحبه‌ها :))

@codehalics | کدهالیک
10👍4
سلام به ۱۰۰۹ همراه کدهالیکی در دوره ی پیشرفته فرانت اند ❤️

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

برای اینکه بتونم به قولم عمل کنم و کیفیت دوره رو در بالاترین سطح نگه دارم، یک تصمیم مهم گرفتم:
تغییر کوچکی در سرفصل‌ها داریم؛ دو مبحث Next.js و Redux رو از این دوره حذف کردیم.

چرا این تصمیم رو گرفتم؟
۱. تمرکز روی خروجی: پروژه جلاتوهاوس اینقدر براتون جذاب بوده که می‌خوام تمام توانمون رو بذاریم تا این پروژه رو با همین میرورهایی که داریم، به بهترین شکل به اتمام برسونیم.
۲. جلوگیری از فرسودگی: طولانی شدن بیش از حد دوره در این شرایط اینترنت، ممکنه خسته‌کننده بشه. هدف ما ارائه یک دوره کوتاه، کاربردی و اثربخشه.

ممنونم که درک می‌کنید. هدف من اینه که همگی با هم این دوره رو با یک نمونه‌کار قوی و حرفه‌ای تموم کنیم.

@codehalics | کدهالیک
10
ثبت نام فریلنسرها برای دریافت اینترنت پرو آغاز شد

🔹طبق پیگیری‌های صورت گرفته، فریلنسرها ( آزادکاران) برای دریافت اینترنت بین المللی می‌تواند از طریق سایت نصر ثبت نام و پس از گذراندن مراحل مختلف به اینترنت بین الملل دسترسی پیدا کنند.

https://www.irannsr.org/fa/page/120025-%D8%AB%D8%A8%D8%AA-%D9%86%D8%A7%D9%85-%D8%A2%D8%B2%D8%A7%D8%AF%D9%83%D8%A7%D8%B1.html

پ.ن : خیلی علاقه ای به شیر کردن اینترنت طبقاتی ندارم ولی خب ذره ذره داریم به بی آبرویی عادت میکنیم مثل اینکه :)
@codehalics | کدهالیک
👎15🖕9
تو این شرایط کاموا هم به بن بست رسید و بست :))

https://kamva.ir/

@codehalics |کدهالیک
💔13
مایکروسافت بالاخره یکی از اعصاب‌خُردکن‌ترین مشکلات ویندوز رو حل کرد:

اضافه شدن sudo

یعنی دیگه لازم نیست برای یه دستور ساده، کل ترمینال رو ببندی و Run as Administrator بزنی.
حالا می‌تونی همون‌جا فقط همون یک دستور رو با دسترسی ادمین اجرا کنی.

البته:
این همون sudo لینوکس نیست، چون مدل دسترسی ویندوز فرق داره و بعضی اسکریپت‌ها مستقیم کار نمی‌کنن.

فعال‌سازی:
Settings → Developer Features → Sudo for Windows

سورس کد منتشر شده اش که با راست نوشته شده :

https://github.com/microsoft/sudo


@codehalics | کدهالیک
🔥6
این روزها یه بار سنگین از تنهایی افتاده روی دوشمون؛ دقیقاً وسط فشاری که انگار از هر طرف داره گریبانمونو میگیره. مخصوصاً بعد از موج این تعدیل‌های اخیر و اوضاعی که همه‌مون درگیرش شدیم.

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

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

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

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

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

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

@codehalics | کدهالیک
13👍1
ورسل گفته یه هک جدی تو آپریل ۲۰۲۶ اتفاق افتاده که از یه سرویس هوش مصنوعی به اسم Context.ai شروع شده. هکر از طریق اکانت یه کارمند وارد سیستم‌های داخلی شده و تونسته به یه‌سری اطلاعات (غیرحساس) دسترسی بگیره.
میگن تعداد کمی از مشتری‌ها درگیر شدن و دارن باهاشون مستقیم هماهنگ می‌کنن. پروژه‌های مهم مثل Next.js هم آسیب ندیدن.
در کل داستان نشون میده استفاده از سرویس‌های شخص ثالث می‌تونه ریسک امنیتی داشته باشه. بهتره همه کلیدها و دسترسی‌ها رو چک و در صورت نیاز عوض کنید.

@codehalics | کدهالیک
👍2👀1
شروع کارم در دیجی‌کالا با دو چالش بزرگ همراه بود:

1. هر تغییر در اپ (که با React Native ساخته شده بود) نیاز به آپدیت توسط کاربر داشت، اما خیلی‌ها آپدیت نمی‌کردند.
2. پروژه آن‌قدر بزرگ شده بود که باید به تیم‌های کوچک‌تر و مستقل تقسیم می‌شد تا سرعت توسعه بالا برود.

در حالی که خیلی‌ها سراغ استفاده از صفحات وب داخل اپ رفتند، ما تصمیم گرفتیم نیتیو را حفظ کنیم و راه‌حل متفاوتی پیدا کنیم.

ایده ما استفاده از Module Federation برای موبایل بود. با کمک ابزاری به نام Re.Pack (که آن زمان خیلی جدید بود)، این ساختار را پیاده‌سازی کردیم و حتی در بهبودش مشارکت داشتیم.

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

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

برای همین مدل را تغییر دادیم به:
«اول آپدیت، بعد اجرا» (شبیه وب)

نتیجه این تغییر شد نسخه 3.1.1:
یکی از پایدارترین نسخه‌ها از نظر آپدیت درون‌برنامه‌ای 🚀

(جزئیات فنی بیشتر را بعدا مفصل‌تر می‌نویسم)

از لینکدین حسین محمدی :

https://www.linkedin.com/feed/update/urn:li:activity:7451739953459548160

@codehalics | کدهالیک
5🔥1
کدهالیک | codehalic
شروع کارم در دیجی‌کالا با دو چالش بزرگ همراه بود: 1. هر تغییر در اپ (که با React Native ساخته شده بود) نیاز به آپدیت توسط کاربر داشت، اما خیلی‌ها آپدیت نمی‌کردند. 2. پروژه آن‌قدر بزرگ شده بود که باید به تیم‌های کوچک‌تر و مستقل تقسیم می‌شد تا سرعت توسعه بالا…
استفاده از یه پکیجِ کم‌ستاره مثل Re.Pack برای اپلیکیشنی که میلیون‌ها کاربر داره، یه ریسکِ سنگین مهندسیه که هر کسی زیر بارِش نمی‌ره. واقعاً حرکتِ پرجرأتی بوده! خیلیا شاید می‌گفتن «بیخیال بابا، وب‌ویو می‌زنیم بره»، ولی اینا ایستادن پایِ کیفیتِ نیتیو و رفتن دنبال یه راه‌حل مدرن که تازه اول راهشه. این یعنی تیم دیجی‌کالا عملاً خودشون شدن بخشی از توسعه‌دهنده‌های اون ابزار و هزینه باگ‌هاشو به جون خریدن تا سرعت توسعه رو ببرن بالا. این جور تجربه‌هاست که عیارِ یه تیم فنی رو مشخص می‌کنه. منتظر یه گزارشِ فنی و مشتی از جزئیات این داستان هستیم!

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

@codehalics | کدهالیک
👍11🔥1
مثل اینکه فیگما باز شده
روی ایرانسل و همراه اول و فیبر نوری بدون فیلتر باز میشه

@codehalics | کدهالیک
👍3
:))))))))

@codehalics | کدهالیک
🤣3👨‍💻1
معرفی ابزار OpenPencil: ویرایشگر طراحی متن‌باز و AI-Native

اگر به دنبال جایگزینی متن‌باز و هوشمند برای ابزارهای طراحی هستید، OpenPencil پروژه نوظهوری است که ارزش بررسی دارد. این ابزار با تمرکز بر هوش مصنوعی و انعطاف‌پذیری بالا توسعه یافته است.

ویژگی‌های کلیدی:

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

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

پشتیبانی از پروتکل MCP: با بهره‌گیری از MCP Server، امکان اتصال به کلاینت‌هایی مانند Cursor، Claude Code و سایر ابزارهای سازگار فراهم شده است.

دسترسی چندپلتفرمی: علاوه بر نسخه وب (app.openpencil.dev)، نسخه دسکتاپ آن نیز برای سیستم‌عامل‌های مختلف در دسترس است.

وب‌سایت پروژه:
https://openpencil.dev/

مخزن گیت‌هاب و نسخه‌های دسکتاپ:
https://github.com/open-pencil/open-pencil/releases

@codehalics | کدهالیک
🔥2
خب، تصمیمم رو گرفتم دوره‌ی منتورینگ Frontend Engineering رو برگزار می‌کنم.

ظرفیت این دوره فقط ۱۰ نفره و شرکت‌کننده‌های مستعد، رزومه‌شون به تیم PWA بلوبانک ریفر میشه.

شرایط شرکت:
• حداقل ۳ سال تجربه‌ی کاری تمام‌وقت
• تجربه‌ی کار با React

📩 رزومه‌هاتون رو به این ایمیل ارسال کنید:
p.faramarzian@bluteam.ir

در صورتی که به ایمیل سازمانی دسترسی نداشتید:
PooriaFaramarzian@gmail.com

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

منبع :
https://x.com/pooridev/status/2046186231902416990

@codehalics | کدهالیک
🔥5😁2
خب امروز می‌خوام یکی دیگه از سوالای مصاحبه‌ای که اگر به عنوان مصاحبه‌کننده باشم از بقیه می‌پرسم رو باهاتون مطرح کنم و نظر شما رو بپرسم.

سناریو: جلوگیری از فاجعه در درگاه پرداخت

فرض کنید یوزر روی دکمه «پرداخت نهایی» کلیک می‌کنه (پرداخت از کیف پول داخلی). به دلیل کندی اینترنت، Response سریع برنمی‌گرده؛ یوزر چندین بار پشت سر هم روی دکمه کلیک می‌کنه یا صفحه رو رفرش می‌کنه.

صورت مسئله:
۱. سمت Frontend، غیرفعال کردن دکمه (Disable Button) لایه اوله اما کافی نیست (چون با ابزارهایی مثل Postman یا رفرش صفحه قابل Bypass شدنه).
۲. سمت Backend، ما نباید تحت هیچ شرایطی اجازه بدیم بیش از یک‌بار از حساب کاربر کسر بشه، حتی اگر ۵ ریکوئست کاملاً یکسان در یک «میلی‌ثانیه» به سرور برسه (Race Condition).

سوال:
حرفه‌ای‌ترین و استانداردترین راهکار برای اینکه مطمئن بشیم یک عملیات حساس «دقیقاً و فقط یک‌بار» (Exactly-once) اعمال می‌شه چیه؟

نظراتتون رو بنویسید، شب درباره راهکار استانداردش (که توی شرکت‌های بزرگی مثل اسپاتیفای و اسنپ و ... استفاده می‌شه) گپ می‌زنیم.


"Do not hesitate to answer this question!"

@codehalics | کدهالیک
3
کدهالیک | codehalic
خب امروز می‌خوام یکی دیگه از سوالای مصاحبه‌ای که اگر به عنوان مصاحبه‌کننده باشم از بقیه می‌پرسم رو باهاتون مطرح کنم و نظر شما رو بپرسم. سناریو: جلوگیری از فاجعه در درگاه پرداخت فرض کنید یوزر روی دکمه «پرداخت نهایی» کلیک می‌کنه (پرداخت از کیف پول داخلی).…
خب مثل دفعه پیش می‌خوام ریفرتون بدم به یه مقاله عالی از دوست و همکار خوبم محمدجواد ابراهیمی. محمدجواد توی این مطلب خیلی ساده و تمیز مفاهیم اصلی رو باز کرده که خلاصه‌ش می‌شه این:

هر متدی که ما مینویسیم یا هر فانکشنی که مینویسیم باید چند خاصیت داشته باشه همیشه :
Side-effect Free:
یعنی متد ما نباید بره یه جای دیگه از برنامه رو ناخواسته تغییر بده (Shared State ایجاد نکنه).

Idempotent:
یعنی اگه یه تابع رو با ورودی یکسان، ۱۰۰ بار هم صدا بزنیم، نتیجه (خروجی و اثرش) همیشه همون بار اول باشه و سیستم رو به هم نریزه.

Pure Functions:
توابعی که هر دو ویژگی بالا رو دارن و فرشته نجات کد ما هستن!

توی بحث درگاه پرداخت و Race Condition که سوال کردم، اگر کد ما Idempotent نباشه، با هر بار کلیک یوزر، یه فاجعه مالی رخ میده!

حتماً یه زمان ۵ دقیقه‌ای بذارید و اصل مقاله رو بخونید که برای هر برنامه نویسی از نون شب واجب‌تر

https://virgool.io/dotnetzoom/%D8%A7%D9%87%D9%85%DB%8C%D8%AA-side-effect-free-%D9%88-idemponency-%D8%AF%D8%B1-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-gazelp35o4zw

@codehalics | کدهالیک
3
کدهالیک | codehalic
خب امروز می‌خوام یکی دیگه از سوالای مصاحبه‌ای که اگر به عنوان مصاحبه‌کننده باشم از بقیه می‌پرسم رو باهاتون مطرح کنم و نظر شما رو بپرسم. سناریو: جلوگیری از فاجعه در درگاه پرداخت فرض کنید یوزر روی دکمه «پرداخت نهایی» کلیک می‌کنه (پرداخت از کیف پول داخلی).…
توی رفرنس های خارجی هم بهترین مقاله ای که راجب این موضوع میتونم بهتون بگم که بخونین مقاله استرایپ راجع به idempotent بودن عه :

ایده Idempotency Key: فرانت‌اِند یه کلیدِ یونیک (مثل UUID) می‌فرسته. سرور اگه این کلید رو قبلاً دیده باشه، دیگه اصلاً وارد منطق پرداخت نمی‌شه و فقط جواب قبلی رو از ککش برمی‌گردونه. یعنی یوزر ۱۰۰ بار هم روی دکمه کلیک کنه، فقط «یک‌بار» پول کسر می‌شه.

داستان Retryها: استرایپ می‌گه وقتی اینترنت قطع می‌شه، نباید مثل رگبار ریکوئست زد به سرور! از تکنیک Exponential Backoff استفاده می‌کنن؛ یعنی هر بار که شکست خورد، فاصله ریکوئست بعدی رو بیشتر می‌کنن تا سرور زیر فشارِ «گله‌ایِ» ریکوئست‌ها (Thundering Herd) نپکه!

این مقاله هم خیلی جذاب راجب همین موضوع بحث میکنه

https://stripe.com/blog/idempotency

@codehalics | کدهالیک
🔥3
کدهالیک | codehalic
خب امروز می‌خوام یکی دیگه از سوالای مصاحبه‌ای که اگر به عنوان مصاحبه‌کننده باشم از بقیه می‌پرسم رو باهاتون مطرح کنم و نظر شما رو بپرسم. سناریو: جلوگیری از فاجعه در درگاه پرداخت فرض کنید یوزر روی دکمه «پرداخت نهایی» کلیک می‌کنه (پرداخت از کیف پول داخلی).…
و اما نظر شخصی خودم درباره این موضوع:
بچه‌ها، واقعیت اینه که Idempotency (تکرارپذیری) خیلی فراتر از یک بحث بک‌اِندی یا درگاه پرداخته؛ این یک «انتزاع» (Abstraction) هست که توی تمام لایه‌های مهندسی نرم‌افزار، از فرانت‌اِند گرفته تا زیرساخت، حضور داره.

۱. نگاه Idempotent در فرانت‌اِند
خیلی وقت‌ها ما ناخودآگاه کدهایی می‌زنیم که تکرارپذیر نیستن. مثلاً فرض کن یه دکمه داریم که قراره کاربر رو به مرحله بعد ببره:

حالت غلط (Non-Idempotent): setState(prev => prev + 1)
اینجا اگه کاربر به خاطر کندی سیستم یا از سر شیطنت ۱۰ بار روی دکمه کلیک کنه، استیت ما ۱۰ واحد می‌ره جلو! فاجعه‌ست، نه؟

حالت درست (Idempotent):
setState(2)
این یعنی کاربر اگه ۱۰۰ بار هم کلیک کنه، استیت همیشه روی عدد ۲ می‌مونه. خروجی پایداره.

یا مثلاً باز کردن یک مدال (Modal):

به جای اینکه بنویسیم setState(!state) که حالت Toggle داره و با هر کلیک یه جواب متفاوت می‌ده، باید بنویسیم setState(true). اینطوری همیشه خروجی همونه: مدال باز است.

۲. نگاه Idempotent در بک‌اِند و پیام‌رسانی
در لایه بک‌اِند هم داستان همینه. توی معماری‌های مبتنی بر ایونت (Event-Driven)، ممکنه یک پیام به هر دلیلی (مثل Retryهای مسیج‌بروکر) چند بار به دست مصرف‌کننده برسه.
سیستم نباید گیج بشه! باید همیشه یک Idempotency Key یا کلید یکتا همراه پیام باشه که حتی اگه ۳۰۰ بار هم پردازش شد، فقط بار اول «اثر» بذاره و دفعات بعدی صرفاً بگه: «انجام شده بود، خیالت راحت!»

ما به عنوان توسعه‌دهنده باید یاد بگیریم سیستم رو جوری طراحی کنیم که نسبت به «تکرار»، مقاوم (Resilient) باشه. فرقی نمی‌کنه کلیک کاربر باشه یا ریکوئستِ شبکه؛ سیستمِ بالغ، سیستمیه که Side-effect اضافه ایجاد نکنه.


@codehalics | کدهالیک
6