<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های Soheib Papi</title><link>https://virgool.ir/feed/@soheib.papi</link><description>یک برنامه نویس علاقه مند به یادگیری.</description><language>fa</language><pubDate>2026-11-11 07:03:00</pubDate><image><url>https://files.virgool.ir/upload/users/3255737/avatar/avatar.png</url><title>Soheib Papi</title><link>https://virgool.ir/@soheib.papi</link></image><item><title>برنامه‌نویسی در عصر هوش مصنوعی</title><link>https://virgool.ir/@soheib.papi/برنامه-نویسی-در-عصر-هوش-مصنوعی-dxeltem4mpo0</link><description>این یه موضوعیه که این روزا توی دنیای برنامه‌نویسی بسیار بحث‌برانگیزه. این که با وجود هوش مصنوعی، برنامه‌نویس‌ها چی رو باید بدونن، چی رو حفظ کنن و چی رو از AI بخوان؟📌 برنامه‌نویسی در عصر هوش مصنوعی چجوریه؟قبلاً یه برنامه‌نویس باید همه‌چیز رو حفظ می‌کرد، از سینتکس زبان گرفته تا جزئیات الگوریتم‌ها. اما امروز با وجود هوش مصنوعی، دیگه حفظ کردن جزئیات یه کار بیهوده است. مثلاً:نیازی نیست تو تمام متدهای LINQ رو حفظ کنی.نیازی نیست پیاده‌سازی یه ساختار داده رو از صفر بلد باشی.نیازی نیست تمام APIهای یه فریم‌ورک رو از بر باشی.کافیه بدونی که یه چیزی هست، بعدش وقتی نیاز داشتی، از AI یا سرچ استفاده کنی.اما این به این معنی نیست که کلاً هیچ چیز حفظ نکنی و فقط به AI وابسته بشی!📌 چی رو باید بلد باشی؟ چی رو باید حفظ کنی؟✅ ۱. مفاهیم پایه‌ای برنامه‌نویسی (Fundamentals)هوش مصنوعی هرچقدر هم که پیشرفته باشه، بدون فهمیدن مفاهیم پایه‌ای، تو رو تبدیل به یه مهندس واقعی نمی‌کنه. باید بلد باشی:ساختمان داده و الگوریتم‌ها (در حدی که بدونی چی هستن و کی باید ازشون استفاده کنی)مدیریت حافظه و Performance (هوش مصنوعی نمی‌دونه کد چقدر بهینه اجرا می‌شه)چطور دیباگ کنی و خطاها رو بفهمیچطور با کدهای دیگران کار کنی و اونارو تحلیل کنی✅ اینا چیزایی هستن که باید بلد باشی، اما نیازی نیست تمام جزئیاتش رو حفظ کنی!✅ ۲. تفکر سیستمی و معماری نرم‌افزارهوش مصنوعی می‌تونه یه کلاس یا یه متد برات بنویسه، اما نمی‌تونه یه معماری درست طراحی کنه!باید بدونی چطور سیستم‌ها رو طراحی کنی (مثلاً انتخاب Microservices یا Monolith بر اساس نیاز پروژه)باید بلد باشی چطور بخش‌های مختلف یه نرم‌افزار رو مدیریت کنیBest Practices و Design Patterns رو بشناسی (لازم نیست حفظشون کنی، اما باید بدونی چی هستن)✅ اینا چیزایی هستن که هوش مصنوعی نمی‌تونه برات انجام بده، باید خودت بلد باشی!✅ ۳. نحوه تعامل با هوش مصنوعی (AI Prompt Engineering)یه برنامه‌نویس مدرن باید بلد باشه چطور از هوش مصنوعی استفاده کنه!باید سوال‌های دقیق بپرسی تا جواب‌های مفید بگیری.باید بتونی کدهای تولید شده توسط AI رو بررسی و اصلاح کنی.باید بدونی که AI همیشه درست نمی‌گه و نیاز به ارزیابی داری.✅ این یعنی &#34;دانستن این‌که از AI چی بخوام&#34; تبدیل به یه مهارت مهم شده!📌 چی رو حفظ نکنیم و از AI بپرسیم؟✅ سینتکس دقیق زبان‌ها (چون همیشه توی داکیومنت‌ها هست)✅ متدهای فریم‌ورک‌ها (چون راحت سرچ می‌شه)✅ پیاده‌سازی الگوریتم‌های معروف (چون می‌تونی سریع از AI بگیری)✅ Queryهای پیچیده‌ی SQL یا Regular Expressions (چون نوشتنش سخته ولی AI راحت تولیدشون می‌کنه)📌 استراتژی نهایی برای یه برنامه‌نویس مدرن۱. یاد بگیر که چطور فکر کنی، نه این‌که فقط حفظ کنی.۲. هوش مصنوعی رو به‌عنوان یه ابزار کمکی ببین، نه جایگزین دانش خودت.۳. مهارت تحلیل، دیباگ و معماری نرم‌افزار رو تقویت کن، چون اینا رو AI بلد نیست.۴. یاد بگیر چطور بهترین درخواست‌ها (Prompts) رو از AI بگیری تا نتیجه‌ی بهتری داشته باشی.نتیجه‌ی نهایی؟✅ برنامه‌نویس مدرن کسیه که کمتر حفظ می‌کنه، بیشتر می‌فهمه، و از هوش مصنوعی به بهترین شکل ممکن استفاده می‌کنه! 🚀</description><category>Soheib Papi</category><author>Soheib Papi</author><pubDate>Sat, 01 Mar 2025 10:55:17 +0330</pubDate></item><item><title>انواع blittable در سی شارپ کدامند؟</title><link>https://virgool.ir/@soheib.papi/انواع-blittable-در-سی-شارپ-کدامند-ajy8fu7nw0sy</link><description>انواع blittable در سی شارپ کدامند؟در سی‌شارپ، نوع‌های blittable آن‌هایی هستند که می‌توانند بدون نیاز به تبدیل یا تغییر شکل، به صورت مستقیم بین حافظه مدیریت‌شده (managed memory) و حافظه غیرمدیریت‌شده (unmanaged memory) منتقل شوند. این نوع‌ها دارای ویژگی‌هایی مشخص هستند که آن‌ها را blittable  می‌کند.انواع blittable  در سی‌شارپ1- نوع‌های عددی پایه‌ای:نوع‌های اصلی و پایه‌ای زیر، همیشه blittable هستند:byte (8 بیتی، بدون علامت)sbyte (8 بیتی، با علامت)short (16 بیتی، با علامت)ushort (16 بیتی، بدون علامت)int (32 بیتی، با علامت)uint (32 بیتی، بدون علامت)long (64 بیتی، با علامت)ulong (64 بیتی، بدون علامت)float (32 بیتی، عدد اعشاری)double (64 بیتی، عدد اعشاری)char (16 بیتی، یونیکد)2- ساختارهای ساده‌ای که فقط شامل نوع‌های blittable  هستند:ساختارهایی که از ترکیبی از نوع‌های blittable  تشکیل شده‌اند، همچنان blittable  محسوب می‌شوند. برای مثال:public struct BlittableStruct{     public int X;     public float Y;}3- اشاره‌گرها (Pointers) در حالت ناامن (unsafe):در محیط‌های unsafe، اشاره‌گرها نیز blittable  محسوب می‌شوند، زیرا آن‌ها به صورت مستقیم با آدرس‌های حافظه کار می‌کنند.unsafe{     int* pointer;}4- نوع‌های ویژه برای عملیات سطح پایین:System.IntPtr و System.UIntPtr:اشاره‌گرهای عدد صحیح که اندازه آن‌ها وابسته به معماری سیستم است (32 یا 64 بیتی).این نوع‌ها به دلیل تطابق مستقیم با معماری سیستم، blittable  هستند.چه نوع‌هایی blittable  نیستند؟نوع‌هایی که در حافظه به صورت مستقیم قابل انتقال نیستند یا نیاز به تبدیل دارند:نوع‌های ارجاعی (Reference Types):stringobjectکلاس‌ها  مانند class MyClassساختارهایی که شامل نوع‌های غیر blittable هستند:اگر ساختاری شامل یک رشته (string) یا نوع ارجاعی باشد، blittable  نیست.نوع‌های جنریک:مگر اینکه نوع جنریک به یک نوع blittable  محدود       شده باشد.آرایه‌ها:آرایه‌ها به دلیل مدیریت ارجاعی، معمولاً blittable  نیستند، حتی اگر عناصر آن‌ها blittable  باشند.چرا مهم است؟استفاده از نوع‌های blittable  در سناریوهای زیر اهمیت دارد:P/Invoke  فراخوانی توابع غیر مدیریت‌ شده با عملکرد بهتر.Interop  تعامل با کدهای غیرمدیریت‌شده مثل C یا C++کارایی بالا: حذف نیاز به تبدیل داده‌ها بین حافظه مدیریت‌شده و غیرمدیریت‌شده.نتیجه‌گیری:نوع‌های blittable  در سی‌شارپ شامل تمام نوع‌های عددی پایه، ساختارهای ساده و اشاره‌گرها هستند. اگر در حال کار با تعاملات غیر مدیریت ‌شده یا بهینه‌سازی عملکرد هستید، استفاده از این نوع‌ها می‌تواند بسیار مفید باشد.</description><category>Soheib Papi</category><author>Soheib Papi</author><pubDate>Sat, 15 Feb 2025 23:25:32 +0330</pubDate></item><item><title>تفاوت بین dynamic و ExpandoObject در سی‌شارپ</title><link>https://virgool.ir/@soheib.papi/تفاوت-بین-dynamic-و-expandoobject-در-سی-شارپ-hj1chvr63rvd</link><description>هر دو برای مدیریت پویا در سی‌شارپ استفاده می‌شن، اما از نظر کاربرد و عملکرد تفاوت‌های مهمی دارن:نوع dynamic چیست؟ماهیت: dynamic یک نوع خاصه که به کامپایلر می‌گه بررسی نوع و اعضا رو به زمان اجرا (runtime) موکول کن.انعطاف: می‌تونی متغیرهایی از هر نوع (مقداری یا مرجع) بهش تخصیص بدی و در زمان اجرا نوعش تغییر کنه.اعضا: هر چیزی که متغیر بهش اشاره کنه، اعضای اون نوع قابل دسترسیه (یعنی اگر متغیر مقدار رشته ای داشته باشه، تمام متدهای رشته رو میشه براش استفاده کرد مثلا ToUpper). اما خود dynamic نمی‌تونه اعضای جدید (پراپرتی و متد) اضافه کنه.نوع ExpandoObject چیست؟ماهیت: ExpandoObject بخشی از فضای نام System.Dynamic است و بهت اجازه می‌ده اعضای جدید (property یا method) رو در زمان اجرا به یک شیء اضافه کنی.انعطاف: بیشتر شبیه به یک شیء پویا (dynamic object) در زبان‌های پویا مثل Python یا JavaScript عمل می‌کنه.اعضا: می‌تونی به صورت پویا اعضای جدید (property یا method) به یک شیء اضافه کنی یا اعضای موجود رو حذف کنی.مثال: dynamicdynamic obj = &#34;Hello, World!&#34;&#xA;Console.WriteLine(obj.Length); // 13&#xA;&#xA;obj = 123;&#xA;Console.WriteLine(obj + 10); // 133نمی‌تونی مستقیماً یک property جدید اضافه کنی:obj.NewProperty = &#34;Test&#34; // زمان اجرا خطا می‌دهمثال: ExpandoObjectusing System.Dynamic;&#xA;&#xA;dynamic expando = new ExpandoObject();&#xA;expando.Name = &#34;John&#34; // اضافه کردن یک property&#xA;expando.Age = 30; // اضافه کردن یک property جدید&#xA;&#xA;Console.WriteLine($&#34;{expando.Name}, {expando.Age}&#34;); // John, 30اضافه کردن متد:expando.Greet = (Action)(() =&gt; Console.WriteLine($&#34;Hello {expando.Name}!&#34;));&#xA;expando.Greet(); // Hello John!چه زمانی از هرکدام استفاده کنیم؟نوع dynamic:وقتی نوع داده یا رفتار متغیر از قبل مشخص نیست و فقط در زمان اجرا می‌تونی تصمیم بگیری.مثال: دریافت داده از یک API یا JSON.نوع ExpandoObject:وقتی نیاز داری یک شیء پویا با اعضای دلخواه در زمان اجرا بسازی و اون رو مدیریت کنی.مثال: ساختن یک مدل پویا برای داده‌هایی که ساختار ثابت ندارن.جمع‌بندی:نوع dynamic: ابزاریه که بهت اجازه می‌ده رفتار شیء رو در زمان اجرا مدیریت کنی، ولی نمی‌تونی مستقیماً عضو جدید اضافه یا حذف کنی.نوع ExpandoObject: یه شیء پویا واقعی که می‌تونی بهش property و متد جدید اضافه کنی.</description><category>Soheib Papi</category><author>Soheib Papi</author><pubDate>Sat, 15 Feb 2025 12:06:57 +0330</pubDate></item><item><title>Operator Lifting in C#</title><link>https://virgool.ir/@soheib.papi/operator-lifting-in-c-sjsopfsy8qu7</link><description>ساختار Nullable&lt;T&gt; عملگرهایی مانند &lt;, &gt;, یا حتی == را تعریف نمی‌کند. با این وجود، کد زیر به درستی کامپایل شده و اجرا می‌شود:int? x = 5;&#xA;int? y = 10;&#xA;bool b = x &lt; y; // trueاین موضوع به این دلیل کار می‌کند که کامپایلر عملگر کوچک‌تر از (less-than) را از نوع مقدار اصلی (underlying value type) قرض می‌گیرد یا به اصطلاح &#34;بالا می‌برد&#34; (lift می‌کند). به صورت مفهومی، کامپایلر عبارت مقایسه‌ای بالا را به این صورت ترجمه می‌کند:bool b = (x.HasValue &amp;&amp; y.HasValue) ? (x.Value &lt; y.Value) : false;به عبارت دیگر، اگر هر دو متغیر x و y دارای مقدار باشند، مقایسه از طریق عملگر کوچک‌تر از (less than) مربوط به نوع int انجام می‌شود؛ در غیر این صورت، مقدار false بازمی‌گرداند.به عبارت دیگر، عملگرهای تعریف‌شده برای انواع مقدار (Value Types) به‌طور خودکار برای انواع nullable آن‌ها نیز کار می‌کنند. برای مثال، اگر عملگر + برای int تعریف شده باشد، به صورت خودکار برای Nullable&lt;int&gt; (یعنی int?) نیز قابل استفاده خواهد بود.در سی‌شارپ، Operator Lifting به فرآیندی گفته می‌شود که طی آن عملگرها (Operators) برای انواع nullable (Nullable&lt;T&gt;) نیز پشتیبانی می‌شوند. این ویژگی امکان استفاده از عملگرهای ریاضی، منطقی و مقایسه‌ای را برای انواع nullable فراهم می‌کند، به‌طوری که رفتار عملگرها برای مقدار null به‌درستی مدیریت می‌شود.چرا Operator Lifting اهمیت دارد؟فرض کنید می‌خواهید روی متغیرهایی کار کنید که ممکن است مقدار null داشته باشند. بدون پشتیبانی از Operator Lifting، باید قبل از هر عملیات، وجود مقدار (HasValue) را به‌صورت دستی بررسی کنید. اما سی‌شارپ این کار را با قابلیت lifting ساده کرده است.مثال:در زیر یک مثال ساده از عملیات ریاضی روی انواع nullable آورده شده است:int? a = 10;&#xA;int? b = null;&#xA;int? result = a + b;&#xA;&#xA;Console.WriteLine(result); // Output: nullتوضیح:مقدار a برابر 10 است و مقدار b برابر null.هنگام استفاده از عملگر +، به دلیل اینکه یکی از متغیرها null است، نتیجه نیز null می‌شود.این رفتار مطابق قوانین null propagation در سی‌شارپ است.عملگرهای پشتیبانی‌شدهعملگرهای زیر در سی‌شارپ برای انواع nullable lifted شده‌اند:عملگرهای ریاضی: +, -, *, /, %عملگرهای مقایسه‌ای: &lt;, &gt;, &lt;=, &gt;=, ==, !=عملگرهای منطقی: &amp;, |, ^مثال‌های کاربردی:1. مقایسه اعداد nullable:int? x = 5;&#xA;int? y = null;&#xA;&#xA;bool isEqual = x == y; // Output: false2. ترکیب مقادیر nullable:double? value1 = 2.5;&#xA;double? value2 = null;&#xA;&#xA;double? sum = value1 * 3 + value2; // Output: nullنکات مهم:اگر یکی از مقادیر nullable null باشد، نتیجه معمولاً null خواهد بود.اگر هر دو مقدار nullable باشند و مقداری داشته باشند، عملگر روی مقادیر اجرا می‌شود.در صورت استفاده از عملگرهای منطقی مانند &amp;&amp; یا ||، رفتار بر اساس قوانین کوتاه‌سازی (short-circuiting) عملگرها تنظیم می‌شود.نتیجه‌گیریقابلیت Operator Lifting یکی از ویژگی‌های بسیار کاربردی در سی‌شارپ است که باعث ساده‌تر شدن کار با انواع nullable می‌شود. این قابلیت به توسعه‌دهندگان اجازه می‌دهد تا کدهای خواناتر، مختصرتر و امن‌تر در برابر خطاهای مرتبط با null بنویسند.</description><category>Soheib Papi</category><author>Soheib Papi</author><pubDate>Tue, 07 Jan 2025 10:48:33 +0330</pubDate></item><item><title>Hoisting in C#</title><link>https://virgool.ir/@soheib.papi/hoisting-in-c-volss7exf8db</link><description>برای درک مطلب این پست باید موارد زیر را بدانید:Capture and Closurelambda and anonymous methodsدر سی‌شارپ،   hoist کردن معمولاً به انتقال متغیرها به یک کلاس خصوصی داخلی (private class) توسط کامپایلر اشاره داره.مفهوم hoisting در سی‌شارپ:هنگام استفاده از closures :وقتی یک متغیر محلی درون یک closure (مثل یک lambda یا متد ناشناس) استفاده می‌شه، کامپایلر این متغیر رو به یک فیلد (field) در یک کلاس داخلی منتقل می‌کنه.این کار به متغیر اجازه می‌ده که طول عمر بیشتری داشته باشه و همچنان بعد از پایان متد اصلی قابل‌دسترس باشه.مثال برای hoist کردن:کد اصلی:csharpCopy codeFunc&lt;int&gt; CreateCounter()&#xA;{&#xA;    int counter = 0;&#xA;    return () =&gt; counter++;&#xA;}کد کامپایل‌شده (بعد از hoisting):csharpCopy codeprivate class Closure&#xA;{&#xA;    public int counter; // متغیر به یک فیلد ارتقا داده شد&#xA;}&#xA;&#xA;Func&lt;int&gt; CreateCounter()&#xA;{&#xA;    var closure = new Closure();&#xA;    closure.counter = 0;&#xA;&#xA;    return () =&gt; closure.counter++;&#xA;}چرا hoisting انجام می‌شود؟طول عمر متغیر: متغیرهای محلی معمولاً با پایان متد از بین می‌رن. اما اگر داخل یک closure استفاده بشن، نیاز به طول عمر بیشتری دارن.دسترسی به متغیرها در lambda یا متد ناشناس: کامپایلر باید مطمئن بشه که lambda یا متد ناشناس می‌تونن به متغیرهای بیرونی‌شون دسترسی داشته باشن.خلاصه:در سی‌شارپ، hoisting یعنی انتقال متغیرهای محلی به یک کلاس داخلی (closure class) برای اطمینان از طول عمر و دسترسی. این اتفاق معمولاً وقتی رخ می‌ده که از lambda یا closure استفاده کنی.</description><category>Soheib Papi</category><author>Soheib Papi</author><pubDate>Sun, 05 Jan 2025 22:10:13 +0330</pubDate></item><item><title>ریفکتور کد: اصلا چرا؟</title><link>https://virgool.ir/@soheib.papi/ریفکتور-کد-چرا-و-چه-زمانی-ngqqmkzaybe3</link><description>ریفکتور چیست؟ریفکتور فرآیند بازنویسی یا بهبود کد بدون تغییر عملکرد آن است. هدف اصلی این کار، افزایش کیفیت کد برای آسان‌تر شدن نگهداری و توسعه در آینده است. اما ریفکتور بدون هدف یا دلیل مشخص، نه تنها سودی ندارد بلکه هزینه‌های زمانی و مالی به تیم تحمیل می‌کند.چرا باید کد را ریفکتور کنیم؟دلایل اصلی ریفکتور به نظر من بیشتر موارد زیره (ممنون میشم شما هم نظرتون رو بدید):امنیت:کدی که امنیت لازم را نداشته باشد، می‌تواند خطرات جدی برای کسب‌وکار ایجاد کند. با ریفکتور می‌توان آسیب‌پذیری‌هایی مانند SQL Injection را برطرف کرد.پرفورمنس:ریفکتور می‌تواند گلوگاه‌های عملکردی (Bottlenecks) را شناسایی و رفع کند، مثل کاهش تعداد کوئری‌های دیتابیس یا بهینه‌سازی الگوریتم‌ها.خوانایی:کدی که خوانا نباشد، تغییر دادن آن سخت و پرهزینه می‌شود. ریفکتور به ما کمک می‌کند کدی تمیزتر، با نام‌های متغیر و متد معنادارتر داشته باشیم.آینده‌نگری در معماری و دیزاین:با تغییر نیازهای پروژه، ممکن است ساختار کد نیاز به تغییر داشته باشد. ریفکتور به ما اجازه می‌دهد معماری پروژه را برای پاسخ‌گویی به نیازهای آینده آماده کنیم.تست‌پذیری بهتر:کدی که تست‌پذیر نباشد، احتمال بروز خطا در تغییرات بعدی را افزایش می‌دهد. ریفکتور می‌تواند کد را به گونه‌ای بازنویسی کند که نوشتن تست‌های خودکار برای آن آسان‌تر شود.ریفکتور فقط با هدف ارزشمند استریفکتور کردن نباید صرفاً به دلیل &#34;تمیز کردن کد&#34; انجام شود. ما هزینه ریفکتور می‌دهیم تا منفعتی واقعی و ارزشمند به دست آوریم. این منفعت ممکن است افزایش امنیت، بهبود عملکرد یا آماده‌سازی برای تغییرات آتی باشد. در غیر این صورت، ریفکتور احتمالا تنها هدر دادن منابع است.چه زمانی نباید ریفکتور کنیم؟زمانی که هزینه ریفکتور بیشتر از سود آن باشد.زمانی که کد مشکلی برای عملکرد یا توسعه ایجاد نمی‌کند.وقتی فقط به دنبال &#34;زیبایی ظاهری&#34; هستیم.حرف آخرریفکتور یک ابزار قدرتمند است، اما باید به‌درستی و فقط در زمان‌های ضروری استفاده شود. اگر ریفکتور هدفمند و با دلایل منطقی انجام شود، به یک سرمایه‌گذاری مفید تبدیل خواهد شد که کد را برای توسعه‌های آینده آماده می‌کند. به یاد داشته باشیم که کد ما باید برای انسان‌ها خوانا باشد و برای ماشین‌ها قابل اجرا. 😊</description><category>Soheib Papi</category><author>Soheib Papi</author><pubDate>Sat, 21 Dec 2024 14:01:32 +0330</pubDate></item><item><title>تفاوت زیر آب زدن با فیدبک</title><link>https://virgool.ir/@soheib.papi/تفاوت-زیر-آب-زدن-با-فیدبک-fmyiiolr4ekc</link><description>زیر آب زدن و فیدبک دادن شاید از دور شبیه باشن (هر دو دارن چیزی در مورد کسی می‌گن)، ولی از نظر نیت و تاثیر مثل فرق نوشابه رژیمی با چایی سبزه! 😂تفاوت اصلی زیر آب زدن و فیدبک:نیت (Intent):زیر آب زدن: هدف اصلیش تخریب یا بد جلوه دادن یه نفره. انگار می‌خوای کسی رو از کشتی بندازی بیرون تا جا برای خودت باز بشه. 😈فیدبک: هدفش بهبود عملکرد و کمک به اون نفر یا تیمه. مثل اینه که بگی: &#34;ببین، کشتی داره سوراخ می‌شه، بیا درستش کنیم!&#34; 😇روش بیان (Delivery):زیر آب زدن: معمولاً پنهانی، پشت سر، با آب و تاب و اغراق. انگار داری یه سریال جنایی تعریف می‌کنی! 😅مثال: &#34;ببین فلانی چقدر افتضاحه، اگه من جاش بودم، اینطوری نمی‌کردم...&#34;فیدبک: مستقیم، شفاف، با لحن سازنده و محترمانه.مثال: &#34;به نظرم فلان کار رو می‌شه اینطوری بهتر انجام داد.&#34;محل تاثیر:زیر آب زدن: اثرش روی ذهن افراد دیگه است، نه روی کسی که حرفش رو می‌زنی. تو محیط یه جو مسموم می‌سازه.فیدبک: مستقیماً به کسی داده می‌شه که قراره پیشرفت کنه.تاثیر بلندمدت:زیر آب زدن: تخریب روابط، کاهش اعتماد، و محیط کاری زهرآلود.فیدبک: بهبود عملکرد، رشد فردی و تیمی، و افزایش اعتماد.چند مثال ساده برای فهم بیشتر:زیر آب زدن:&#34;فلانی اصلاً سر وقت کاراش رو تحویل نمی‌ده. نمی‌دونم چرا هنوز اینجا کار می‌کنه!&#34;(مخفیانه گفتن، بدون راه‌حل، با نیت تخریب.)فیدبک:&#34;می‌دونم سرت شلوغه، ولی اگه کارها رو سر وقت تحویل بدی، می‌تونه کل تیم رو توی زمان‌بندی بهتر کنه. کمکی خواستی، بهم بگو.&#34;(شفاف، محترمانه، با پیشنهاد همکاری.)چرا زیر آب زدن بده و فیدبک لازمه؟زیر آب زدن:مثل اینه که بخوای یه ساختمون رو خراب کنی تا همه بگن: &#34;وای، عجب زلزله‌ای شد!&#34; اما در واقع تو بودی که خرابش کردی.نتیجه‌اش می‌شه بی‌اعتمادی، اختلاف، و کاهش کیفیت کار.فیدبک:مثل اینه که یه چراغ بندازی روی مشکل، ولی بعدش با هم کمک کنین تا درست بشه. باعث رشد، یادگیری، و بهبود محیط می‌شه.چطور مطمئن بشیم فیدبک می‌دیم، نه زیر آب می‌زنیم؟مستقیم صحبت کن: فیدبک رو مستقیماً به خود فرد بده، نه به پشت سرش.راه‌حل ارائه بده: فقط از مشکل نگفتن، بگو چطور می‌شه درستش کرد.نیت مثبت داشته باش: قصدت کمک باشه، نه تخریب.تمرکز روی کار، نه شخصیت: بگو فلان کار بهتر بشه، نه اینکه شخصیت طرف رو زیر سوال ببری.کلام آخر:زیر آب زدن مثل اینه که قایق تیم رو سوراخ کنی و امیدوار باشی فقط اون یکی غرق بشه! ولی فیدبک مثل اینه که دست به دست هم بدین و سوراخ رو پر کنین. پس رفیق، همیشه انتخابت فیدبک باشه؛ زیر آب زدن رو بذار واسه فیلمای جاسوسی! 😄✌️</description><category>Soheib Papi</category><author>Soheib Papi</author><pubDate>Wed, 20 Nov 2024 13:30:50 +0330</pubDate></item></channel></rss>