<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های فرید وطنی</title>
        <link>https://virgool.io/feed/@faridvatani</link>
        <description>Software Developer (JS)</description>
        <language>fa</language>
        <pubDate>2026-06-16 15:58:35</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/6090/avatar/Snd4fL.jpeg?height=120&amp;width=120</url>
            <title>فرید وطنی</title>
            <link>https://virgool.io/@faridvatani</link>
        </image>

                    <item>
                <title>تشخیص تم رنگ سیستم در جاوا اسکریپت</title>
                <link>https://virgool.io/@faridvatani/detect-dark-or-light-theme-in-web-cxvwztfeol8f</link>
                <description>Photo by Ilya Stallone  چند روز پیش در این فکر بودم که چگونه با استفاده از جاوا اسکریپت بفهمم که تم سیستم در وب تیره است یا روشن و راهی برای تشخیص آن پیدا کردم. در این مقاله، پیاده سازی چک کردن تم سیستم رو با شما به اشتراک میگذارم.من از متد ()matchMedia ارائه شده توسط رابط window مرورگر استفاده خواهم کرد.متد matchMedia یک mediaQueryString به عنوان پارامتر دریافت میکند  و یک شی MediaQueryList را برمی گرداند.آبجکت MediaQueryList دارای پراپرتی به نام matches از نوع داده Boolean خواهد بود.کدif (window.matchMedia(&#039;(prefers-color-scheme: dark)&#039;).matches) {
    // Dark Mode
}از prefers-color-scheme که یک CSS media feature است، برای تشخیص تم رنگ سیستم استفاده می شود.کاربر ممکنه، اولویت تم رو از طریق تنظیمات سیستم عامل (حالت روشن یا تاریک) تغییر دهد. همچنین prefers-color-scheme در تمامی مرورگر های موبایل و وب پشتیبانی می شود. ما همچنین می‌توانیم یک listener داشته باشیم، اگر کاربر تم را در این بین تغییر دهد.window
   .matchMedia(&amp;quot(prefers-color-scheme: dark)&amp;quot)
   .addEventListener(&amp;quotchange&amp;quot, (event) =&gt; {
         const theme = event.matches ? &amp;quotdark&amp;quot : &amp;quotlight&amp;quot
    });اگر از روش دیگری برای تشخیص تم سیستم در وب اطلاع دارید، در کامنت  به من اطلاع دهید.ممنونم که وقت گذاشتید و مطالعه کردید. اگر از این مقاله لذت بردید یا آن را مفید دیدید، با لایک کردن اون به دیده شدنش کمک کنید. برای ارتباط با من میتوانید از طریق لینکدین با من در تماس باشید.</description>
                <category>فرید وطنی</category>
                <author>فرید وطنی</author>
                <pubDate>Thu, 29 Sep 2022 11:01:42 +0330</pubDate>
            </item>
                    <item>
                <title>بدهی فنی (Technical Debt) در تولید نرم افزار چیست؟</title>
                <link>https://virgool.io/@faridvatani/what-is-technical-debt-uyerj6qhpc5r</link>
                <description>زمانی که حین تولید نرم افزار بنا به هر دلیلی، شما بجای اینکه کار درست و اصولی رو انجام بدید رو انجام نمیدید و میرید سراغ کار سریع تر و راحت تر، به دلیل اینکه میخواهید زودتر پروژه به نتیجه برسه. این کار یک هزینه ای داره که بهش  بدهی فنی میگویند. به‌طور معمول شرکت‌های تازه وارد در ابتدای ورود به بازار بایستی محصول خود را تایید و اطمینان حاصل کنند که می‌توانند بدون ساخت یک محصول کامل، مشتریان را جذب کنند. حال برای انجام این کار، سرعت عمل از اهمیت فوق‌العاده‌ای برخوردار است و اینجاست که تیم مهندسی باید عمده‌ بدهی‌های فنی را متقبل شود تا زمان ورود محصول به بازار کاهش پیدا کند.البته بیشتر کمپانی‌ها از این اصطلاح استفاده می‌کنند “Hack it for now, fix it later” به این معنی که فعلا اساس کار را انجام دهید و مشکل‌های احتمالی را بعدا برطرف کنید زیرا رسیدن سریع‌تر محصول به مشتری می‌تواند تعداد مشتریان بیشتری را جذب کند اما فراموش نکنید که بدهی فنی عواقبی به‌همراه دارد.اصطلاح Technical Debt  توسط یک توسعه‌دهنده نرم‌افزار با نام Ward Cunningham مطرح شد و ابداع این اصلاح برای توضیح چرایی بودجه‌بندی مجدد به ذی‌نفع‌های غیر فنی بود.با دریافت وام می‌توانید برخی کارها را زودتر از آنچه که انتظار می‌رود انجام دهید اما اقساط آن در بلند مدت شامل پرداخت سود آن پول نیز می‌شود. من فکر می‌کردم گرفتن وام و انتشار سریع‌تر نرم‌افزار برای کسب تجربه، ایده‌ی خوبی است اما باید توجه داشته باشید که پس از مدتی احتیاج می‌شود تا آموخته‌ها و تجربه‌های جدید را در نرم‌افزار خود منعکس کنید. بخشی از توضیح‌های Cunningham برای ذی‌نفعان پروژهبیایید با یک مثال این موضوع رو باز کنیم:فرض کنید شما عضو یک تیم فنی هستید، مدیر پروژه به واسطه فشار های مشتری، به شما میگه که من فیچر x رو تا یک ماه دیگه میخواهم. شما میدونید که اون فیچر در عرض یکماه انجام نمیشه و فرضا دو ماه زمان نیاز داره که انجام بشه، در نتیجه شما برای اینکه کار انجام بشه از یکسری از کارا که به کیفیت نرم افزار مرتبط هست، چشم پوشی می کنید. معمولا هم اولین چیزی که حذفش می کنند بحث تست نرم افزار هست!موارد دیگه ای که میاییم انجام میدیم چیه؟ همین طور پشت سر هم کد بزنیم بدون اینکه ریفکتور کنیم و صرف نظر کردن از بهبود نرم افزار و پرفورمنس پروژه و فقط تلاش میکنیم که اون فیچر نوشته بشه و کار بکنه و به احتمال زیاد از معماری و دیزاین پترن ها هم بیخیال بشیم. یک کار دیگه ای هم که ممکنه انجام بدیم اینکه تند تند فیچر ها رو مینویسیم و یهو همه رو با هم در یک کامیت بدون توضیحات و مستندسازی پوش میکنیم. تنها و تنها ددلاین پروژه اولویت ماست که کار زودتر تموم بشه.در ابتدای کار حتی ممکنه بدون تحقیق، تکنولوژی ای رو انتخاب کنیم و حساسیت بخرج ندیم و فرصت اینکار رو نداشته باشیم و فرضا هر چیزی که تیم دستش باز تر و مسلط ترهه همونو انتخاب کنیم و بریم توکارش!!!همه این انتخاب ها پروژه رو در کوتاه مدت و در ددلاین مورد نظر ممکنه کار شما رو راه بندازه اما موقتی هست. حالا مشتری پروژه رو میبینه و از محصول استفاده میکنه و ممکنه یک رضایت نسبی هم داشته باشه ولی اتفاقی که رخ داده یک فاجعه ست و  حتی ممکنه مشتری هم متوجه این موضوع نشه و فقط تیم فنی میدونه چ کاری کرده!!! :(این مجموعه کارایی که شما برای اون پروژه انجام ندادید میشه بدهی فنی شما و باید در دراز مدت پرداختش کنید. بدهی شما باگی در سیستم بوجود نیاورده و حتی ممکنه مشتری هم متوجه ش نشده باشه. حالا سوال اینجاست، مقصر کیه؟ مشتری؟ مدیر پروژه؟ تیم فنی؟ عموما نمیشه همه ی تقصیر ها رو گردن یک نفر یا یک تیم انداخت چون همه به همون اندازه مسئول هستند.انواع بدهی فنیدر سطوح بالاتر می‌توانیم بدهی‌های فنی را در دسته‌هایی مانند code debt، design debt، infrastructure debt، testing debt و … قرار دهیم اما ما در این بخش قصد داریم تا این موارد را در دسته‌های کلی‌تری بررسی کنیم. یکی از رایج ترین ها ضعف دانش شما یا تیم فنی (Lack of Technical knowledge) هست و چون تیم از مهارت های فنی لازم برخوردار نیست، تا بتونه انتخاب ها و کار های درست رو انجام بده. مورد بعدی که باعث بدهی فنی میشه اینکه تیم فنی اعتقادی به نوشتن تست (Insufficient Testing) نداره! و بعضی ها فکر میکنند وقت کشیه یا بعدا واسش مینویسیم. البته امروز اکثرا تیم ها به اهمیت تست نوشتن آگاه اند و سعی میکنند تست بنویسند. تاخیر در ریفکتور کردن ( Delayed Refactoring) نیز از موارد دیگری هست که باعث بدهی فنی میشه. زمانی که پروژه تون رشد میکنه، نیاز دارید که یکسری از دیزاین پترن ها رو روش اعمال کنید و در دراز مدت چون این تاخیر ها زیاد شده و از طرفی هم حجم ریفکتور ها بالا رفته، کم کم تیم فنی بیخیال ریفکتور کردن میشه. فشار روانی و محدودیت زمانی نیز از مورد های تاثیر گذار بدهی فنی هست.اگر شما وارد یک تیم فنی بشید که از اول پروژه نبودید، الان چطوری میخواهید متوجه بدهی فنی بشید؟ از روی نتیجه ای که پروژه به شما نشون میده، میتونید متوجه این موضوع بشید. حالا فرض کنید همون پروژه ای که بدهی فنی داره، بعد از یک مدتی مشتری از شما چند تا فیچر اضافه میخواد و شما تلاش میکنید که اونو حل کنید تا اینکه بجایی میرسید که پروژه قفل و قابل توسعه نیست و عملا دست و پای شما بسته شده. اینجاست که شما اثرات این بدهی فنی رو متوجه میشید. چون کد باکیفیت تحویل مشتری ندادیم، زمان توسعه فیچر بعدی نیز بیشتر از حد معمول میشه و کاملا تاثیرش رو بصورت زنجیروار در مراحل توسعه میزاره. در نتیجه خیلی از چیز ها فدا میشه و کلی زمان باید بزاریم که اون بدهی ها رو جبران کنیم.توی این شرایط باید چیکار کنیم؟اخلاقی ترین و منطقی ترین راه اینکه شفاف با مشتری صحبت کنیم و مشکلات پروژه رو باهاش در میان بزاریم درسته کار سختی هست اما بهای کم کاری هست که باید بپردازیم. در این حالت ممکنه مشتری شرایط رو درک کنه و از خواسته هاش کوتاه بیاد و به شما زمان بده که شما مشکلات رو حل کنید. چیکار کنیم از همون اول بدهی فنی نداشته باشیم؟اولین کاری که میتونیم انجام بدیم، باید با توجه به ظرفیت تیم و دانش  تیم، براساس این ها به مشتری قول بدید و برنامه ریزی واقع بینانه انجام بدید. همچنین میتونید از متدولوژی های نرم افزار مثل اسکرام و xp ... استفاده کنید و  که بتونید پروژه رو به قسمت های کوچک تری تقسیم کنید و چابک تر نرم افزار رو توسعه بدید. تست نوشتن رو کنار نزارید و حتما براش تست بنویسید که با کیفیت مناسب تری به دست مشتری برسه. البته با وجود رعایت اکثر موارد این نکته رو هم در نظر داشته باشید که بدهی فنی اجتناب ناپذیرهه و ممکنه بوجود بیاد اما سعی براین هست که بدهی فنی رو به حداقل برسونیم. البته شما و تیم باید حواس تون باشه که چه بدهی فنی رو در کجا ایجاد می کنید و در نزدیک ترین فرصت باید اون بدهی فنی رو تکمیل کنید. از طرفی تیم فنی همیشه در تلاش باشه که دانش فنی خودشون رو افزایش بدن و همچنین ایجاد یک ارتباط خوب و امن بین مشتری و مدیر پروژه و تیم فنی باعث میشه ریسک بوجود اومدن بدهی فنی کاهش پیدا کنه.آیا بدهی فنی بد است؟جواب کاملا مشخصی برای این سوال وجود نداره، در مواقع مختلف می‌تواند پاسخ‌های متفاوتی دریافت کند. به‌عنوان مثال در مراحل اولیه داشتن بدهی فنی خوبه، زیرا منجر به رسیدن سریع‌تر محصول به کاربران نهایی می‌شه. بااین‌حال با بالغ شدن محصول، بازپرداخت بدهی فنی برای اطمینان از ثبات محصول ضروری هست و این مورد با بیشتر شدن کاربرانی که از محصول استفاده می‌کنند، مقیاس‌بندی میشه.یک نکته مهم دیگه اینه که افراد تا زمانی که، بدهی فنی مشکلی ایجاد نکرده، اون رو نادیده می‌گیرند و این مورد می‌تونه از بدهی مالی ضرر بیشتری وارد کنه. به‌همین دلیل نیازهه تا عواقب بدهی فنی برای همه‌ی ذی‌نفعان توضیح داده بشه و این اطمینان حاصل بشه که مسئولیت و پاسخگویی بین تیم‌های مهندسی و تیم‌های فروش تقسیم شده باشه.برای نوشتن این مقاله از این لینک کمک گرفتم و امیدوارم از خوندن این مطلب چیزی یاد گرفته باشید. دوست داشتم که با شما هم به اشتراک بذارم. اگر دوست داشتید از طریق لینکدین باهام در تماس باشید یا اگر نظری دارید خوشحال میشم زیر همین پست بنویسید و به اشتراک بگذارید.</description>
                <category>فرید وطنی</category>
                <author>فرید وطنی</author>
                <pubDate>Thu, 01 Sep 2022 22:56:42 +0430</pubDate>
            </item>
                    <item>
                <title>چند نکته در مورد NPM و YARN</title>
                <link>https://virgool.io/@faridvatani/npm-vs-yarn-h0fg62tz4syz</link>
                <description>نه npm و نه yarn هیچکدومشون بد نیستند، فقط npm طی سالیانی که گذشته یکسری حفره های امنیتی ناجور و همچنین یکسری مشکلات پرفورمنسی داشته و روش کار کردند و برطرف شده و دارند حلش می کنند. حالا yarn این وسط چی میگه؟ دولوپرهای فیسبوک داشتند روی یکسری از مشکلات npm کار میکردند، که کارخودشون راه بندازند و بعد از یک مدتی دیدند یک محصولی دارند، شبیه به npm که میتونه جایگزینش بشه و اواخر ۲۰۱۶ yarn رو منتشر کردند.حالا ۵ دلیل برای اینکه yarn رو انتخاب کنیم رو براتون شرح میدم:۱- هر پکیجی که شما با npm یا yarn نصب کنید روی سیستم شما cache میشه. حالا اگر از yarn استفاده کرده باشید، مطابق مستندات yarn اون چیزی که نصب شده قابل اعتماد هست و برای نصب مجدد اون پکیج از همون چیزی که کش شده استفاده میکنه اما این موضوع در مورد npm صدق نمیکنه، در نتیجه زمانی که شما بخواهید پکیجی رو برای بار های دوم و سوم نصب کنید، سرعت نصبش بیشتر است و نکته مهمتر اینکه شما میتونید اون پکیج رو بصورت افلاین هم نصب کنید.۲- یارن (yarn) تمام پکیج ها رو بصورت موازی دانلود و نصب میکنه ولی npm ورک فلوش بصورت سریالی این کار رو انجام میده یعنی در npm، پکیج اول دانلود نصب بعدش میره سراغ پکیج بعدی، در نتیجه سرعت دانلود و نصب پکیچ ها در yarn بالاتر هست.۳- یارن (yarn) اگر در موقع دانلود پکیجی دچار مشکل بشه، خودش بصورت پیشفرض سعی میکنه ادرس های mirror جایگزینش رو تست میکنه و اون عملیات دانلود رو retry میکنه تا پکیج نصب بشه. این مشکل ممکنه بخاطر قطعی اینترنت یا کانکشن شما باشه.۴- ان پی ام (npm) بصورت پیشفرض، هر پکیجی رو که بخواد نصب کنه میره سراغ npm registry که در واقع یک فضای ابری هست که تمام پکیج ها اپلود شده در اونجا قرار دارند و اگر پکیجی در اونجا نباشه، به شما خطا میده و نصب نمیشه، مگر اینکه شما در کانفینگ npm تون برید و مخزن دیگه رو هم تنظیم کرده باشید که اونجا رو هم بگرده، در حالی که در yarn که multiple registry هست و علاوه بر اینکه npm registry رومیره میگرده، Bower registry رو هم میره میگرده. Bower هم یک پکیج منجر هست. جدا از مخزن های انلاین، در yarn این امکان وجود داره که اگر مخزنی بصورت افلاین وجود داشته باشه رو هم میتونید توی کانفیگش yarn سیستم تون تنظیم کنید و اونجا رو هم بگرده.۵- یارن (yarn) این امکان رو به شما میده که برای پروژه هایی که به هم مرتبط هستند و دیپندنسی های مشترک دارند، یک workspace ایجاد بکنید و مدیریت پکیج ها رو راحت تر انجام بدید. حالا شما برای مدیریت پکیج هاتون باید بیرونی ترین پوشه یا پوشه مادری که دارید اونجا پکیج ها رو نصب و مدیریت کنید.اگر از این مقاله چیزی یاد گرفتید، لطفا یه لایک خوشگل بزنید و نظرتونو هم درباره‌ی این مقاله بگید چون خیلی دوس دارم نظرتونو بخونم. ممنون که وقت گذاشتید و مطالعه کردید. اگر دوست داشتید میتونید به کانال تلگرامم هم سر بزنید، یکسری از تجربیاتم رو اونجا هم منتشر میکنم. عالی باشید :)</description>
                <category>فرید وطنی</category>
                <author>فرید وطنی</author>
                <pubDate>Fri, 22 Jul 2022 12:39:35 +0430</pubDate>
            </item>
                    <item>
                <title>من چه نوع برنامه نویسی هستم؟</title>
                <link>https://virgool.io/@faridvatani/%D9%85%D9%86-%DA%86%D9%87-%D9%86%D9%88%D8%B9-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%87%D8%B3%D8%AA%D9%85-cb1ljafwuvqm</link>
                <description>حتما یکی از این نوع برنامه نویس (Coder / Programmer / Developer / Software Engineer) رو شنیدید حتی برای کسانی که در صنعت نرم افزار کار می کنند، این عناوین بسیار گیج کننده به نظر می رسند. بنابراین، چگونه بین این اصطلاحات تمایز قائل شویم؟ آیا می دانید که به چه معنایی هستند و زمانی که نیاز به انجام کاری دارید، به چه کسی باید مراجعه کنید؟ در واقعیت، این اصطلاحات اغلب به جای یکدیگر استفاده می شوند، که از سازمانی به سازمان دیگر نیز متفاوت است، و حتی می تواند بسته به شرایط، به معنای چیزهای مختلفی نیز باشد. در این مقاله قصد دارم، درباره این چهار تایپ مختلف از برنامه نویس ها رو براتون توضیح بدم.کدنویس (Coder) کیه؟افرادی که بعضا خارج از صنعت نرم افزار هستند، معمولاً به هر کسی که می تواند کد بنویسد، به عنوان کدنویس یاد می شود. اما معمولاً کدنویس ها، به عنوان برنامه نویس کم تجربه یا آموزش دیده در نظر گرفته می شوند. مثل کسی که ابزار آشپزی رو بلده و اگر بهش کتاب آشپزی بدید، میتونه یک دستور پخت رو از توی کتاب انتخاب کنه و غذا رو واستون درست کنه ولی روی طعم و مزه ی غذا نمیتونید حساب کنید و فقط میتونید انتظار یک غذا رو داشته باشید. مثلا میتونید تصور کنید که این یک قورمه سبزی هست حالا با هر کم و کاستی که از نظر طعم داره. این افراد دانش الگوریتمی یک Programmer یا Developer را ندارند، زیرا اغلب در این زمینه مبتدی هستند و فقط در یک زبان برنامه نویسی مهارت دارند. معمولاً به کدنویس ها وظیفه نوشتن کدهای ساده داده می شود که به راحتی توسط توسعه دهندگان قابل واگذاری است. گاهی اوقات با عنوان &quot;Junior Programmer&quot; یا &quot;Junior Developer&quot; استفاده می شود. برنامه نویس (Programmer) کیه؟همانند coder، همون کار هایی که کدنویس بلده رو میتونه انجام بده و با این تفاوت که کیفیت کار هم براش اهمیت داره، مثل آشپزی که یک غذا درست میکنه و غذا نیز همون غذایی هست که انتظار خواهید داشت و با این تفاوت که یکسری فوت و فن آشپزی هم بلده و خیال تون از طعم غذا نیز راحته.توسعه دهنده (Developer) کیه؟دولوپر مثل یک سرآشپز میمونه که علاوه براینکه آشپزی رو بلده، مدیریت آشپزخونه رو هم بلده. ذاعقه مشتری هاشو بشناسه و با خلاقیتی که داره، میتونه یک منوی جدید طراحی بکنه و همچنین میتونه آشپزهایی که دارند توی اون اشپزخونه کار میکنند نیز هدایت و رهبری بکنه. توسعه دهندگان در برخی از شرکت ها گاهی اوقات به عنوان ناظران شروع تا پایان یک پروژه شناخته می شوند که مسئول طراحی کلی برنامه هستند.آنها (Programmer و Developer) کدنویسان با تجربه تری هستند که حداقل به دو تا سه زبان مسلط هستند و کدهای تمیز و بدون خطا می نویسند. آنها می توانند دانش الگوریتمی خود را برای ایجاد سطوح پیچیده تری از برنامه نویسی نرم افزار به کار گیرند.مهندس نرم افزار (Software Engineer) کیه؟از میان عناوین گفته شده، بالاترین سطح و متخصص ترین هستند و اغلب به سه زبان برنامه نویسی یا بیشتر تسلط دارند و از مهارت های خود برای طراحی و اجرای معماری کلی برنامه استفاده می کنند. محصول نهایی را ماژولار طراحی می‌کنند تا یک رابط تمیز ایجاد کنند و سپس با Programmerها و Developerها  همکاری می‌کنند. جایگاه مهندسی معمولاً به این معنی است که شما توسعه دهنده ای هستید که دارای یک نوع مدرک خاص، دانش مهندسی و توانایی طراحی یک سیستم نرم افزاری هستید. به بیان ساده تر، برای مدیریت کردن یک رستوران یک سرآشپز کافیه، اما در مورد یک هتل که چندتا رستوران و چند مدل منوی مختلف داره و حالا ما کسی رو میخواهیم که این رستوران ها رو کنترل بکنه و حواسش باشه که هر کدوم از این منو ها رو که داره طراحی میکنه، باعث عدم هماهنگی در اون رستوران ها نشه و کار رو درست بین سراشپز های رستوران تقسیم کنه.حالا در فضای فنی این موارد رو بررسی کنیم. بخاطر پیچیدگی که در دنیای نرم افزار وجود داره، نمیتونیم تنها به یک سرآشپز اکتفا کنیم. ما چندین دولوپر و مهندس نرم افزار نیاز داریم و اینجاست که اهمیت کار تیمی خودشو نشون میده که ده ها مهندس نرم افزار باید با هم همکاری کنند که کدشون، شور یا بی نمک نشه. با شناخت این تعاریف سطح توقع ما از کسی که برنامه نویس هست مشخص خواهد شد و فرضا از یک کدنویس انتظار مدیریت چندین برنامه نویس رو نخواهیم داشت.حالا در مورد حداقل مهارت هایی که یک مهندس نرم افزار باید داشته باشه رو باهم بررسی میکنیم. بطور کلی مهارت های یک مهندس نرم افزار رو ما میتونیم به دو دسته تقسیم کنیم:1- Hard Skills (Technical Skills)2- Soft Skillsبه عنوان مهندس نرم افزار، Soft Skills اهمیت بیشتری نسبت به Technical Skillsداره. به دلیل اینکه به نحوه ی ارتباطات و تعاملات شما در زندگی برمیگرده و در تولید محصول نرم افزاری کار تیمی اولویت بالاتری داره.ترجیحا Soft Skills رو مهارت نرم نخونید. همون Soft Skills استفاده کنید.مهمترین Soft Skills که باید به عنوان یک برنامه نویس بدونیم رو در ادامه براتون توضیح میدم:- به آدم های اطراف تون توجه کنید.همه مثل خود شما احتیاج دارند که مهم باشند و دیده بشن، پس بهشون فضا بدید.- هیچوقت آدم ها رو قضاوت و نقد نکنید، در عوض کارشون رو نقد کنید.- برای کار و زندگی تون هدف گذاری کنید و هر چندوقت یکبار خودتون رو مورد ارزیابی قرار بدید و بدونید کجای کار هستید.- مسئولیت پذیر باشید و اگر اشتباهی کردید اون رو بپذیرید و جبرانش کنید. به هر حال برای همه ممکنه اشتباه پیش بیاد.- دانش خودتون رو با بقیه به اشتراک بگذارید و از این کار هراسی نداشته باشید.- یاد بگیرید که چطوری چیز های جدیدی رو یاد بگیرید.- به سلامت جسم و روان تون اهمیت بدید.هر کدوم از این موارد رو میشه کلی بحث کرد و از دید فیزیولوژی مباحث عمیقی هست، منتها من سعی کردم موارد رو تیتر وار در موردش صحبت کنم. اگر تمایل به تقویت مهارت سافت اسکیل خود داشتید، کتاب Own Your Tech Career رو به شما پیشنهاد میکنم.حالا بریم در مورد مهارت های فنی (Technical Skills) صحبت کنیم. مهارت های فنی مهارت های متنوعی هستند و من اینجا سعی کردم یکسری موارد رو نام ببرم.- به یک زبان خاص یا یک فریمورک خاص وابسته نشید. در واقع زبان ها و فریمورک ها مثل ابزار های جعبه ابزار شما هستند و هر چی جعبه ابزار شما کامل تر باشه ، موقع کار کردن راحت هستید.البته این نکته رو هم اشاره کنم که این به معنای یادگیری همه ی زبان ها یا فریمورک ها نیست بلکه به یکی یا دوتا زبان یا فریمورک تسلط پیدا کنید و مابقی در حد اشنایی باشه که در صورت نیاز بتونید به ابزار دیگه ای سوییچ کنید و منعطف باشید، چون کانسپت و مفاهیم برنامه نویسی یکسان هست.- توی حوزه ی یادگیری، حتما از مباحث و تکنولوژی های پایه شروع کنید. مثلا بجای اینکه اول برید سراغ یادگیری ریکت، ابتدا جاوااسکریپت رو خوب فرا بگیرید.از طرفی اگر شما فریمورک محور باشید در صورتی که فریمورک جدیدی بیاد یا تغییری در اون فریمورک رخ بده مثلا منقضی بشه سوییچ کردنش برای شما سخت خواهد بود چون مبحث پایه ش که جاوااسکریپت هست رو مسلط نیستید.- حتما در پروژه هاتون از سورس کنترل هایی مثل گیت استفاده کنید.- در مورد طراحی و معماری نرم افزار مطالعه داشته باشید. مثل دیزاین پترن ها ، کلین کد و…- حتما برای کدتون تست بنویسید و قابل تست نوشتن باشه.- با فرایند های توسعه نرم افزار مثل اجایل و اسکرام اشنا باشید.- از ابزار های مانیتورینگ یا issue tracking استفاده کنید.- یاد بگیرید که چطوری محصول تون رو درست دیپلوی کنید و در مورد DevOps و زیرساخت اطلاع باشید.و سایر موارد ....قطعا موارد دیگری نیز وجود داره که من نام نبردم، اگر موارد دیگری هست که من فراموش کردم، حتما کامنت بزارید. اگر دوست داشتید میتونید به کانال تلگرامم هم سر بزنید، یکسری از تجربیاتم رو اونجا هم منتشر میکنم. ممنون که وقت گذاشتید و مطالعه کردید :)Difference Between a Programmer, Coder, Developer, and Software EngineerWhat is the difference between a programmer, coder, developer and software engineers?</description>
                <category>فرید وطنی</category>
                <author>فرید وطنی</author>
                <pubDate>Sat, 16 Jul 2022 00:58:32 +0430</pubDate>
            </item>
                    <item>
                <title>کدچلنچ - دو جمع (Two Sum)</title>
                <link>https://virgool.io/@faridvatani/%DA%A9%D8%AF%DA%86%D9%84%D9%86%DA%86-%D8%AF%D9%88-%D8%AC%D9%85%D8%B9-two-sum-x44acgxx23uh</link>
                <description>سلام رفقا، توی این مقاله قصد دارم یکی از چالش های LeetCode رو که با جاوا اسکریپت حل کردم رو براتون شرح بدم. حالا بریم با هم مسئله رو حل کنیم. سعی کنید قبل از خوندن جواب، در موردش فکر کنید و تمرین کنید. سطح مسئله : سادهمسئلهبا توجه به آرایه‌ای از اعداد صحیح ‍nums و یک هدف صحیح target ، شاخص‌های (ایندکس) دو عدد را به گونه‌ای برگردانید که مجموع مقدار شاخص ها برابر با عدد تارگت باشه.  در نظر داشته باشید که هر ورودی دقیقاً یک راه حل دارد و نمی توانید از یک مقدار دو بار استفاده کنید.مثال ۱:Input: nums = [2,7,11,15], target = 9
Output: [0,1]مجموع nums[0] با nums[1] برابر با ۹ که عدد تارگت هست، ما ایندکس [0,1] رو برمیگردونیم.مثال ۲:Input: nums = [3,2,4], target = 6
Output: [1,2]مثال ۳:Input: nums = [3,3], target = 6
Output: [0,1]محدودیت های مسئله رو هم باید در نظر بگیریم.تنها یک پاسخ معتبر وجود دارد.2 &lt;= nums.length &lt;= 104-109 &lt;= nums[i] &lt;= 109-109 &lt;= target &lt;= 109حل مسئله  حالا که خوب مسئله رو خوندیم، بریم باهم حلش کنیم. پس ما یک ارایه داریم و برای بدست اوردن نتیجه باید  ایندکس(ها) رو پیدا کنیم. همچنین میدونیم که ایندکس ارایه ها از صفر شروع میشه. سه روش برای حل این مسئله وجود دارد که با هم بررسی می کنیم.روش اول - Brute Forceیکی از روش ها، روش brute force هست که میتونیم استفاده کنیم. بدین صورت، که برای همه جفت‌های ممکن از اعداد جستجو کنیم در واقع یکی یکی مقادیر آرایه رو جمع کنیم و با عدد تارگت مقایسه کنیم تا نتیجه بدست بیاد. اما این روش یک مشکلی داره، اونم اینکه پردازشش بسیار کند , پیچیدگی زمانی O(n2) است و این روش پیشنهاد نمیشه و بهترهه راه حل brute force را فقط برای صحت کامل بودن صورت مسئله امتحان کنید. با استفاده از راه حل های brute force است که می تونید بهینه سازی هایی را نیز ارائه دهید.const twoSum = (nums, target) =&gt; {
for (let i = 0; i &lt; nums.length; i++) {
        for (let j = i + 1; j &lt; nums.length; j++) {
            if (nums[i] + nums[j] == target) return [i, j];
        }
    }
};برای بهبود این راه حل میتونیم حلقه for داخلی رو حذف کنیم و مقادیر رو داخل یک Object ذخیره کنیم. Object ها نمونه ای از یک Hash Table ها هستند که در ادامه به حل آن میپردازیم.روش دوم - Two-pass Hash Tableما اول اومدیم و ایندکس های آرایه ‍‍‍nums رو با forEach‍ داخل یک ابجکت indices که از قبل تعریف کرده بودیم، مقدار دهی کردیم و سپس در حلقه ی for ، عدد تارگت رو از مقدار عدد [index]nums‍‍ کم کردیم، عدد بدست اومده اسم شو complement  گذاشتیم و اگر عدد بدست اومده داخل indices مون بود یعنی به جواب رسیدیم و داخل if هم که مسئله گفت بود دوبار یک المنت تکرار نشه و فیلتر کردیم.پیچیدگی زمانی این روش برابر با O(n) است.var twoSum = function(nums, target) {
    const indices = {};

    nums.forEach((item, index) =&gt; {
       // 2 = 0
        indices[item] = index
    });

    for (let index = 0; index &lt; nums.length; index++) {
        const complement = target - nums[index];

        if (indices[complement] !== undefined &amp;&amp; indices[complement] !== index) {
            return [index, indices[complement]]
        }
    }
};روش سوم - One-pass Hash Tablevar twoSum = function(nums, target) {
    const indices = new Map();

    for (let index = 0; index &lt; nums.length; index++) {
        const complement = target - nums[index];

        if (indices.has(complement)) {
            return [indices.get(complement), index]
        }

        indices.set(nums[index], index)
    }
};امیدوارم که این مقاله رو دوست داشته باشید و حتما اگر در روش حل مسئله  ایرادی می بینید یا پیشنهادی  که باعث بهبود کیفیت مقاله هام میشه، حتما در کامنت ها برام بنویسید. ممنونم از وقتی که گذاشتید. :)</description>
                <category>فرید وطنی</category>
                <author>فرید وطنی</author>
                <pubDate>Thu, 07 Jul 2022 22:58:02 +0430</pubDate>
            </item>
                    <item>
                <title>کپی کد یا متن از روی ویدیو</title>
                <link>https://virgool.io/@faridvatani/%DA%A9%D9%BE%DB%8C-%DA%A9%D8%AF-%DB%8C%D8%A7-%D9%85%D8%AA%D9%86-%D8%A7%D8%B2-%D8%B1%D9%88%DB%8C-%D9%88%DB%8C%D8%AF%DB%8C%D9%88-slpauq9fkznz</link>
                <description>سلام دوستانتوی این مقاله میخوام با افزونه ی Blackbox آشناتون کنم، شما خیلی راحت میتونید متن یا کدی که در یک ویدیو درحال تماشا هستید مثل یوتیوب، به راحتی Copy کنید و هر جا دلتون خواست Paste کنید.کار با این افزونه خیلی راحته، کافیه ابتدا افزونه رو از Chrome Web Store دانلود کنید.قدم اول - دانلود پلاگینبعد از نصب، از قسمت extensions های مرورگر تون فعالش کنید و برای بار اول باید لاگین کنید. حالا هر زمان که خواستید کدی یا متنی رو از روی ویدیو کپی کنید، ابتدا یکبار روی افزونه Blackbox بزنید تا حالت اسکرین شات برای شما فعال بشه و سپس اون قسمتی که قراره کپی کنید رو ابتدا اسکرین شات میگیره و بعد شما میتونید هر جا خواستید Paste کنید. ممنون که وقت گذاشتید و امیدوارم که این مقاله دوست داشته باشید.</description>
                <category>فرید وطنی</category>
                <author>فرید وطنی</author>
                <pubDate>Sun, 03 Jul 2022 20:27:35 +0430</pubDate>
            </item>
            </channel>
</rss>