<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های حسام اثناعشری</title>
        <link>https://virgool.io/feed/@ilhesam</link>
        <description>دولوپرِ به دنبالِ سلف‌دولوپمنت!</description>
        <language>fa</language>
        <pubDate>2026-06-07 10:38:02</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/37942/avatar/aH0GB1.jpg?height=120&amp;width=120</url>
            <title>حسام اثناعشری</title>
            <link>https://virgool.io/@ilhesam</link>
        </image>

                    <item>
                <title>خستگیِ تصمیم‌گیری چگونه برنامه‌نویس هارو از پا درمیاره؟</title>
                <link>https://virgool.io/@ilhesam/%D8%AE%D8%B3%D8%AA%DA%AF%DB%8C%D9%90-%D8%AA%D8%B5%D9%85%DB%8C%D9%85-%DA%AF%DB%8C%D8%B1%DB%8C-%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D9%87%D8%A7%D8%B1%D9%88-%D8%A7%D8%B2-%D9%BE%D8%A7-%D8%AF%D8%B1%D9%85%DB%8C%D8%A7%D8%B1%D9%87-ttupuhjtq6z6</link>
                <description>شاید هممون توی برهه‌ای از زندگیمون به دلایل مختلفی تصمیم گرفتیم که چند تا پروژه یا چند تا مسئولیت رو به صورت همزمان قبول و تمرکز و انرژی‌مون رو بین اونها تقسیم کنیم؛این پروژه ها و مسئولیت ها ممکنه به فیلد کاری فعلی یا محل کاری فعلی‌مون مربوط باشن یا هیچ ارتباطی به اون نداشته باشن، در نهایت شایع‌ترین دلیلش هم احتمالا اینه که میخوایم پیشرفت شغلی سریعتری رو تجربه کنیم، دانش‌مون رو ارتقا بدیم، تجربه و پول بیشتری بدست بیاریم یا مفید تر باشیم؛درواقع، میخوایم پله هارو چند تا چند تا بالا بریم غافل از اینکه ممکنه به‌جای بالاتررفتن، زمین بخوریم و به اون نتیجه‌ای که میخوایم دست پیدا نکنیم یا حتی به جای پیشرفت، پسرفت کنیم.توی این نیمچه مقاله میخوام نظریه ی معروف خستگیِ تصمیم گیری ( Decision Fatigue ) رو کنکاش کنم و با هم ببینیم که چطور میتونه تاثیرهای منفی روی عملکرد و بهره‌وری ما برنامه‌نویس ها بذاره.(اگه فیلد کاری‌تون هم برنامه‌نویسی نیست میتونین بسطش بدین به فیلد کاری خودتون)خستگی تصمیم گیری یا Decision Fatigue چیه؟یک ظرف آب رو در نظر بگیرید که هرروز صبح تا لبه پر و به شما تحویل داده میشه،شما باید نیازتون به آب رو با استفاده از این یک ظرف آب تا آخر روز تامین کنید و اگه نتونین به شکل درستی اونو مدیریت کنید مجبور میشید که قسمتی از روزتون رو تشنه و بدون آب سپری کنید؛مشابه همین موضوع رو ما آدما توی تصمیم گیری روزانه‌مون داریم،هرروز که از خواب پا میشیم شروع میکنیم به تصمیمای مختلف گرفتن:امروز دوش بگیرم؟کدوم تیشرتم رو بپوشم؟کدوم شلوارم رو بپوشم؟صبحانه چی بخورم؟یا همین که شروع میکنیم به کد زدن:اسم این متغیر رو چی بذارم؟برای این لاجیک، یه فانکشن جداگانه تعریف کنم یا همه رو بریزم توی همین فانکشن؟این مقادیر رو کش کنم یا مستقیم از دیتابیس بخونم؟و دسته ی بزرگی از این تصمیمات کوچیک و بزرگ که هرکدومشون باعث میشه که ما مقداری از اون ظرفی که بهمون در ابتدای روز برای تصمیمات مختلف داده شده رو مصرف کنیم.طبق این نظریه، هرچی که تصمیمات بیشتری میگیریم، کیفیت تصمیم‌گیری های بعدی‌مون در طول روز کاهش پیدا میکنه و معمولا به وسط روز یا انتهای روز که میرسیم میبینیم حوصله و انرژی لازم برای تصمیم‌گیری راجع به یک موضوع رو نداریم و اگه توی این شرایط هم شروع کنیم به تصمیم‌گیری، احتمالا تصمیم درستی نمیگیریم.حالا اگه نتونیم توی یه برهۀ زمانی این چرخه رو مدیریت کنیم با اضطراب ناشی از تصمیم‌گیری روبرو میشیم و تاثیرش توی کاهش انگیزه و بهره‌وری مون میتونیم مشاهده کنیم.ساعت ۳ بعدازظهر است؛ خسته‌اید و هنوز ۳ جلسهٔ دیگر پیش‌رو دارید. به‌سراغ بسته بادام‌زمینی در کشوی‌تان می‌روید اما یادتان می‌آید که تمام شده‌ است. خودتان را جمع می‌کنید و به قرار بعدی می‌رسید. وقتی زمان تصمیم‌گیری می‌شود، ترجیح می‌دهید آن را به تعویق بیندازید تااینکه تصمیم نامناسبی بگیرید. حاضران در جلسه، نگاهی از روی ناشکیبایی به شما می‌اندازند! در جلسهٔ بعدی راه‌حل‌های پیشنهادی باعث سردرگمی‌تان می‌شوند. صدایی در سرتان از دیگران درخواست می‌کند که به‌جای شما تصمیم بگیرند. این‌طور نیست که شما نظری نداشته باشید؛ اما دیگر نایی برای‌تان نمانده! پس از تصمیم‌گیری‌های بی‌شمار، اکنون به جایی رسیده‌اید که توانایی گرفتن تصمیم‌ درست را ندارید. به سخن دیگر، هرچه تصمیم‌های بیشتری بگیریم، در ارزیابی گزینه‌های مختلف و انتخاب گزینهٔ مناسب ضعیف‌تر عمل خواهیم کرد.پ.ن: از اینجا برداشته شده.راه‌حل چیه؟تصمیمات کم‌اهمیت مثل لباس پوشیدن رو به شب قبل موکول کنید و سعی کنید که صبحتون رو اختصاص بدید به تصمیم‌گیری های مهم.بعضی از تصمیم‌گیری ها مثل برنامه غذایی هفته رو به پنجشنبه و جمعه موکول کنید و در طول هفته از اون برنامه استفاده کنید.چند تا پروژه یا مسئولیت رو به صورت همزمان قبول نکنید تا تعداد تصمیماتی که باید بگیرید کاهش پیدا کنه.اگر میخواید پروژۀ جدیدی رو شروع کنید، لیست واژه های مرتبط با کاری که قراره انجام بدید رو در قالب یک داکیومنت یا Glossary جمع‌آوری کنین و درصورتی که نیاز داشتین برای کلاس ها، فانکشن ها یا متغیرهاتون اسم انتخاب کنید به اون مراجعه کنید و برای جمع‌آوری این موارد هم میتونید تصمیم‌گیری رو بسپرید به ChatGPT و سایر AI Tools.این کار، علاوه بر اینکه تعداد تصمیمات کم‌اهمیتتون در طول روز رو کاهش میده بلکه کمک میکنه که خودتون و تیمتون هم دید بهتری نسبت به کاری که قراره انجام بدید داشته باشید و یه داکیومنت هم برای دولوپرهای بعدی از خودتون به جا میذارید.قبل از اینکه شروع کنید به انجام دادن یک تسک، سعی کنید که فرآیندی که قراره پیاده سازی کنید رو کاملا شفاف کنید (با خودتون یا سایر اعضای تیمتون) و به صورت داکیومنت برای خودتون آماده کنید تا در صورت نیاز یا فراموشی بهش مراجعه کنید.تا حد امکان برای نوشتن کدهای دم‌دستیتون از AI Tools استفاده کنید و خودتون رو کمتر درگیر تصمیم‌گیری کنید.با این حال، صلاح خود را خسروان دانند، بهترین کسی که میتونه برای شما راه‌حل ارائه بده خودتونید، دست به کار شید و یه لیست از کارهایی که میتونه تعداد تصمیمات روزانه‌تون رو کاهش بده دربیارید؛ اگه دوست داشتید با من و دیگران هم به اشتراک بذارید.</description>
                <category>حسام اثناعشری</category>
                <author>حسام اثناعشری</author>
                <pubDate>Thu, 10 Aug 2023 19:45:47 +0330</pubDate>
            </item>
                    <item>
                <title>داکر برای دات نت کار ها - قسمت 3 (اجرای Hello World)</title>
                <link>https://virgool.io/coderlife/%D8%AF%D8%A7%DA%A9%D8%B1-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-%DA%A9%D8%A7%D8%B1-%D9%87%D8%A7-%D9%82%D8%B3%D9%85%D8%AA-3-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-hello-world-comq6gkp4m7z</link>
                <description>پیش نیاز های این قسمت :نصب بودن Gitنصب بودن Dotnet Core SDK / RuntimeClone و اجرا کردن برنامه ی Hello Worldدر این جلسه، ریپازیتوری Hello World رو از روی Github دریافت ( Clone ) و سپس اون رو از طریق کامند لاین ( CLI ) دات نت کور برروی وب سرور Kestrel ران میکنیم.خب، برای Clone کردن ریپازیتوری، کامند لاین ( CLI ) خودمون رو باز و کامند زیر رو در اون تایپ میکنیم :git clone https://github.com/yetanotherchris/packt-helloworld.gitپس از اتمام Clone، کامند زیر رو وارد میکنیم تا به مسیر اصلی پروژه هدایت بشیم :cd packt-hello-world/srcسپس، کامند dotnet run رو اجرا میکنیم تا برنامه Hello World ما ران بشه :dotnet runبعد از چند دقیقه، برنامه با موفقیت برروی وب سرور Kestrel ران میشه و اگه پورت 5001 لوکال هاست رو در مرورگر وارد کنیم به اون دسترسی خواهیم داشت :https://localhost:5001آشنایی با Dotnet CLIسه کامندی که در این دوره به اونها نیاز پیدا خواهیم کرد :dotnet build : یک پروژه و تمام وابستگی های اون رو build میکنهdotnet run : برنامه رو اجرا میکنهdotnet publish : برنامه و تمام وابستگی های اون رو در یک پوشه برای هاست کردن پابلیش میکنه</description>
                <category>حسام اثناعشری</category>
                <author>حسام اثناعشری</author>
                <pubDate>Fri, 03 Jul 2020 22:21:35 +0430</pubDate>
            </item>
                    <item>
                <title>داکر برای دات نت کار ها - قسمت 2 (وب سرور Kestrel)</title>
                <link>https://virgool.io/@ilhesam/%D8%AF%D8%A7%DA%A9%D8%B1-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-%DA%A9%D8%A7%D8%B1-%D9%87%D8%A7-%D9%82%D8%B3%D9%85%D8%AA-2-%D9%88%D8%A8-%D8%B3%D8%B1%D9%88%D8%B1-kestrel-a377xwb98zfe</link>
                <description>Kestrel چیست؟Kestrel یک وب سرور بسیار سبک و کراس پلتفرم هست که وظیفه داره درخواست های HTTP ارسال شده به سمت برنامه ی ASP.NET Core ما رو مدیریت و پردازش کنه.همونطور که مطلع هستین در نسخه های قبل ASP، برای هاست کردن برنامه ها نیاز داشتیم که حتما اون رو روی وب سرور IIS قرار بدیم.خب اینکار یک سری محدودیت ها برای ASP به وجود آورده بود؛ یکی از این محدودیت ها که اهمیت بسیاری هم داشت این بود که برنامه های ASP فقط برروی سرورهای ویندوز قابل اجرا بودن - چون IIS فقط برروی ویندوز ران میشد).یکی دیگه از مشکلات IIS، سرعت کم نسبت به تکنولوژی های نوپا بود به همین دلیل مایکروسافت به فکر چاره افتاد و وب سرور Kestrel رو به ASP.NET Core اضافه کرد تا در کنار کراس پلتفرم بودن، سرعت اجرای برنامه ها رو نیز افزایش بده.این افزایش سرعت باعث شد که Kestrel تنظیمات بسیار محدودتری نسبت به وب سرورهای دیگه مانند IIS ، آپاچی یا nginx داشته باشه (به عنوان مثال تنظیماتی مانند SSL Certificates در Kestrel وجود نداره).به همین دلیل، Kestrel به تنهایی کاربرد نداره و باید در کنار اون از یک Reverse proxy server نیز استفاده کنیم تا ابتدا درخواست های HTTP رو بررسی و سپس به سمت وب سرور Kestrel ما هدایت کنه :همونطور که در تصاویر قابل مشاهده ست، درخواست ابتدا به سمت Reverse proxy server ما که میتونه IIS یا Nginx یا Apache باشه ارسال میشه و پس از انجام عملیات های مورد نیاز اون رو به وب سرور Kestrel پاس میده تا نتیجه مورد نظر رو دریافت کنه.وب سرور Kestrel با داکر کاملا هماهنگه و به همین دلیل برای هاست کردن برنامه ها در داکر از Kestrel استفاده میکنیم.ویژگی های بارز Kestrelکراس پلتفرم ( Cross platform )اوپن سورس ( Open source )سبک بودن ( Lightweight )سرعت بالا ( High speed )مدیریت درخواست ها به صورت غیرهمزمان ( Asynchronous I/O )برای استفاده بسیار ساده است ( Very simple to use )وب سرور Kestrel چگونه کار میکند؟برخلاف وب سرورهای دیگه، Kestrel نیازی به نصب برروی سیستم عامل نداره و فقط یک پکیج nuget هستش که در کنار برنامه ASP.NET Core ما قرار میگیره و هنگام اجرای برنامه فعال میشه و درخواست های HTTP دریافتی رو پردازش میکنه.این وب سرور به صورت رویداد محور ( Event-Driven ) برنامه نویسی شده؛ به این معنی که داخل یک لوپ قرار داره تا زمانی که یک درخواست به سمت اون ارسال بشه، در این زمان به اون واکنش نشون میده و اون رو پردازش میکنه، سپس نتیجه موردنظر رو return میکنه.برای کاهش ارتباط های SYS، کارهای دیگه در Managed code برروی Worker thread های استاندارد دات نت اجرا میشن.</description>
                <category>حسام اثناعشری</category>
                <author>حسام اثناعشری</author>
                <pubDate>Fri, 03 Jul 2020 15:16:27 +0430</pubDate>
            </item>
                    <item>
                <title>داکر برای دات نت کار ها - قسمت 1 (آشنایی با دستورات اولیه)</title>
                <link>https://virgool.io/@ilhesam/%D8%AF%D8%A7%DA%A9%D8%B1-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-%DA%A9%D8%A7%D8%B1-%D9%87%D8%A7-%D9%82%D8%B3%D9%85%D8%AA-1-%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-%D8%A7%D9%88%D9%84%DB%8C%D9%87-wxghac3b6exa</link>
                <description>پیش نیاز های این قسمت :نصب بودن Docker CE برروی OS یا سیستم عامل خودتونآشنایی با داکر ( Docker ) و کاربرد اونبرای آشنایی با داکر میتونید از دوره رایگان و سه قسمتی جادی استفاده کنین!در این قسمت با کامندهای زیر در داکر آشنا میشین :docker pulldocker rundocker psdocker imagesdocker rmdocker rmiکامند docker pullاین کامند، image مورد نظر شما رو از یک registry در docker hub دریافت یا بهتره بگیم pull میکنه.زمانی که pull به اتمام برسه، image برروی دیسک شما سیو میشه و تا در آینده به اون دسترسی داشته باشین.برای کار به صورت عملی با این کامند، ابتدا باید CLI یا همون Command Line خودمون رو باز کنیم.کامند لاین های مختلفی وجود داره که میتونین از یکیش براساس سلایقتون استفاده کنین.هرچند که من پیشنهادم اینه که از PowerShell استفاده کنین.کامند docker pull microsoft/dotnet رو درون کامند لاین خودمون نوشته و اینتر رو میزنیم.کاری که این کامند انجام میده اینه که ایمیج dotnet رو از رجیستری microsoft دریافت میکنه و برروی دیسک ما ذخیره میکنه.خود داکر به صورت پیشفرض آخرین نسخه ایمیج رو برای ما pull میکنه.در این مرحله باید کمی صبر کنین تا دانلود ایمیج به اتمام برسه.اگر احیانا هنگام دانلود با ارور 403 Forbidden مواجه شدین از پروکسی های شکن استفاده کنین.پس از اتمام pull و دانلود، image برروی دیسک شما ذخیره میشه.در ادامه نحوه مشاهده image های ذخیره شده برروی دیسک رو یاد خواهیم گرفت!پس از این بابت نگرانی نداشته باشین.کامند docker runاین کامند، یک image که از قبل برروی سیستم شما pull شده رو run یا اجرا میکنه.اگر image مورد نظر برروی دیسک شما موجود نباشه ابتدا اون رو pull میکنه و سپس اون رو run میکنه.کامند run چندین option داره که در مواقع خاص ازشون استفاده میکنیم :Volumes : دیتای کانتینر رو برروی حافظه ذخیره میکنه تا کانتینر بعدا بتونه ازشون استفاده کنهPorts : برای متصل کردن پورت های کانتینر به پورت های سیستم عامل مورد استفاده قرار میگیرهEnvironment Variables : متغیرهایی که توسط سازنده ایمیج قرار داده میشن تا امکان شخصی سازی ایمیج وجود داشته باشهبسیار خوب، برای اجرای این کامند فقط کافیه که پس از docker run نام image مورد نظرتون رو وارد کنین.به عنوان مثال :docker run anotherchris/packt-helloworldهمونطور که مشاهده میکنین این image برروی دیسک (لوکال) من موجود نبوده و به همین علت ابتدا داره اون رو pull میکنه تا سپس بتونه اون رو run کنه.کامند docker psاین کامند، لیست تمامی container های درحال اجرا رو به ما نشون میده.اگر به انتهای این کامند، سوئیچ a- رو نیز اضافه کنیم، container های متوقف شده نیز نمایش داده میشن.لیست کانتینرهایی که این کامند به ما ارائه میده شامل خصوصیات زیر هست :CONTAINER ID : آیدی یونیک ( Unique ) کانتینر که میشه ازش برای stop / start یا remove کردن کانتینر مورد نظر استفاده کرد.IMAGE : نام ایمیج اجرا شدهCOMMAND : کامند اجرا شدهCREATED : زمان ایجاد کانتینرSTATUS : آخرین وضعیت کانتینرPORTS : پورت های متصل شدهNAMES : نام کانتینر، که یونیک ( Unique ) هستش و تنها تفاوتی که با CONTAINER ID داره در اینه که یک کلمه معنی دار توسط خود داکر جنریت میشه و در اون قرار میگیره.البته هنگام اجرای کانتینر با استفاده از سوئیچ name-- میشه این نام رو به صورت دستی نیز قرار داد.بنابراین برای نمایش لیست کانتینرهای درحال اجرا از کامند زیر استفاده میکنیم :docker psو اگر نیاز داشته باشیم که کانتینرهای متوقف شده نیز به ما نمایش داده بشن سوئیچ a- رو به انتهای این کامند اضافه میکنیم :docker ps -aکامند docker imagesاین کامند، لیست تمامی image هایی که برروی دیسک (لوکال) ما موجود هست رو نمایش میده.این کامند معمولا برای چک کردن اینکه یک image با موفقیت pull یا create شده استفاده میشه.روش خاصی برای استفاده از این کامند وجود نداره و به راحتی میتونیم از اون استفاده کنیم :docker imagesکامند docker rmاین کامند، یک کانتینر رو براساس id یا name اون حذف میکنه.برای کار به صورت عملی با این کامند ابتدا ایمیج hello-world رو ران میکنیم و یک name به صورت دستی به اون پاس میدیم :docker run --name my-hello-world-container hello-worldو سپس این کانتینر رو با استفاده از کامند docker rm حذف میکنیم :docker rm my-hello-world-containerکامند docker rmiکارکرد این کامند دقیقا مانند docker rm هست اما با این تفاوت که این کامند برای حذف کردن image ها مورد استفاده قرار میگیره.برای کار به صورت عملی با این کامند ابتدا ایمیج hello-world رو pull میکنیم (در صورتی که این ایمیج از قبل برروی دیسک شما موجوده نیازی به انجام pull نیست) :docker pull hello-worldو سپس این image رو با استفاده از کامند docker rmi حذف میکنیم :docker rmi hello-worldاگه کامند docker images رو ران کنین میبینید که این ایمیج از لیست ایمیج های لوکال شما حذف شده.</description>
                <category>حسام اثناعشری</category>
                <author>حسام اثناعشری</author>
                <pubDate>Thu, 02 Jul 2020 22:25:46 +0430</pubDate>
            </item>
                    <item>
                <title>رفع خطای A network related هنگام وصل شدن به SQL Server</title>
                <link>https://virgool.io/@ilhesam/%D8%B1%D9%81%D8%B9-%D8%AE%D8%B7%D8%A7%DB%8C-a-network-related-%D9%87%D9%86%DA%AF%D8%A7%D9%85-%D9%88%D8%B5%D9%84-%D8%B4%D8%AF%D9%86-%D8%A8%D9%87-sql-server-mroo5wbec9kj</link>
                <description>یکی از خطاهای رایجی که هنگام وصل شدن به SQL Server تون ممکنه با اون مواجه بشین خطای A network related هستش که ممکنه دلایل مختلفی داشته باشه. (این خطا هنگام اجرای برنامه ای که در اون از SQL Server استفاده شده و هنگام ورود به محیط Microsoft SQL Server Management Studio نمایش داده میشه)متن کامل خطا :خطای A network related در SQL Serverاین خطا اکثرا به دلیل Run نبودن سرویس SQL Server رخ میده.در این مقاله، قصد داریم با هم این مشکل رو حل کنیم.برای Run کردن سرویس SQL Server کافیه که ابتدا وارد Services ویندوزتون بشین؛سپس، سرویس SQL Server رو از توی لیست پیدا کنین؛سرویس SQL Serverروی اون راست کلیک کرده و Start رو بزنین.به همین سادگی سرویس SQL Server شما Run شد.اگر در بخش Status سرویس SQL Server شما Running نوشته شده بود اما همچنان خطا پابرجا بود امکان داره ارور به دلیل دیگه ای رخ داده باشه؛ اما اکثرا این ارور به دلیل ران نبودن سرویس SQL Server پرتاب میشه.امیدوارم که براتون مفید بوده باشه!موفق باشید :)</description>
                <category>حسام اثناعشری</category>
                <author>حسام اثناعشری</author>
                <pubDate>Mon, 20 Apr 2020 17:34:56 +0430</pubDate>
            </item>
                    <item>
                <title>شروع به کار با SignalR در ASP.NET Core</title>
                <link>https://virgool.io/@ilhesam/%D8%B4%D8%B1%D9%88%D8%B9-%D8%A8%D9%87-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-signalr-%D8%AF%D8%B1-aspnet-core-qpaswyuu2u0h</link>
                <description>این مطلب، ترجمه مقاله ی رسمی مایکروسافت با موضوع شروع به کار با SignalR در ASP.NET Core هستش.لینک مقاله در انتهای مطلب قرار دارد!در این آموزش، مقدمات ساخت یک برنامه Real-Time با استفاده از SignalR قرار داده شده است.در این آموزش خواهید آموخت که چگونه :یک پروژه وب ایجاد کنید.کتابخانه سمت کلاینت SignalR را اضافه کنید.یک SignalR Hub ایجاد کنید.پروژه را برای استفاده از SignalR کانفیگ کنید.کد ارسال پیام از یک کلاینت به تمامی کلاینت های متصل را اضافه کنید.در آخر، شما یک برنامه چت خواهید داشت :ساخت برنامه چت با SignalR در ASP.NET Coreپیش نیاز هاویژوال استودیو 2019 با ابزار مختص به توسعه وب ( ASP.NET and web development workload )نسخه 3 NET Core SDK. یا بالاترساخت یک پروژه وب از منو، File و سپس New Project را انتخاب کنید.در پنجره Create a new project، نوع ASP.NET Core Web Application را انتخاب کرده و سپس برروی Next کلیک کنید.در پنجره Configure your new project، نام پروژه را SignalRChat قرار داده و برروی Create کلیک کنید.در پنجره Create a new ASP.NET Core Web Application، ورژن را برروی ASP.NET Core 3 و نوع را برروی NET Core. قرار دهید.ساخت پروژه Web Application در Visual Studioاضافه کردن کتابخانه سمت کلاینت SignalRکتابخانه سمت سرور SignalR به صورت پیشفرض در فریمورک ASP.NET Core قرار دارد.امَا کتابخانه سمت کلاینت مختص جاوا اسکریپت به صورت پیشفرض در پروژه قرار داده نمیشود.در این آموزش، از Library Manager یا همان LibMan جهت دریافت کتابخانه سمت کلاینت از unpkg استفاده میشود.این unpkg که یک Content Delivery Network یا همان CDN است برای ما این امکان را فراهم میکند که از هرچیزی که داخل npm یا همان Node.js Package Manager وجود دارد استفاده کنیم.در Solution، برروی پروژه خود راست کلیک کرده و از بخش Add گزینه ی Client-Side Library را انتخاب کنید.در پنجره Add Client-Side Library، ارائه دهنده یا همان Provider را برروی unpkg قرار دهید.در بخش Library نیز متن زیر را قرار دهید :@microsoft/signalr@latestرادیو باتن را برروی Choose specific files قرار داده و در پوشه dist/browser فایل های signalr.js و signalr.min.js را علامت بزنید.همچنین، Target Location را نیز برروی wwwroot/js/signalr قرار دهید.افزودن کتابخانه سمت کلاینت SignalR به پروژه ASP.NET Core‌لیب من ( LibMan ) به طور خودکار پوشه ی wwwroot/js/signalr را ایجاد کرده و فایل های انتخاب شده را داخل آن قرار میدهد.ایجاد کردن یک SignalR Hubهاب ( Hub ) کلاسی است که به عنوان یک Pipeline سطح بالا، ارتباط های سرور و کلاینت را هندل میکند.در پوشه ی پروژه خود ( SignalRChat )، یک پوشه به نام Hubs ایجاد کنید.در پوشه ی Hubs، یک فایل ChatHub.cs ایجاد کرده و کد زیر را داخل آن قرار دهید.using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;


namespace SignalRChat.Hubs
{
    public class ChatHub : Hub
    {
        public async Task SendMessage(string user, string message)
        {
            await Clients.All.SendAsync(&amp;quotReceiveMessage&amp;quot, user, message);
        }
    }
}کلاس ChatHub از کلاس Hub ارث بری کرده است. کلاس Hub کانکشن ها، گروه ها و پیغام هارا مدیریت میکند.متد SendMessage میتواند با یک کلاینت متصل شده ارتباط برقرار کند تا یک پیام را به تمامی کلاینت ها ارسال کند.در ادامه آموزش، خواهد دید که چگونه با کد جاوا اسکریپت از سمت کلاینت با این متد ارتباط برقرار میکنیم.کد SignalR به صورت Asynchronous است تا بتواند حداکثر مقیاس پذیری را ارائه دهد.پیکربندی SignalRسرور SignalR باید کانفیگ شده باشد تا بتواند ریکوئست های SignalR را به خود SignalR پاس دهد.کدهای زیر را به فایل Startup.cs خود اضافه کنید :using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using SignalRChat.Hubs;

namespace SignalRChat
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
            services.AddSignalR();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExcepti();
            }
            else
            {
                app.UseExceptionHandler(&amp;quot/Error&amp;quot);
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =&gt;
            {
                endpoints.MapRazorPages();
                endpoints.MapHub&lt;ChatHub&gt;(&amp;quot/chatHub&amp;quot);
            });
        }
    }
}این تغییرات، SignalR را به سیستم های مسیریابی ( Routing ) و تزریق وابستگی ( Dependency Injection ) هسته ASP.NET Core اضافه میکند.اضافه کردن کد سمت کلاینت SignalRمحتوای Pages/Index.cshtml را با کد زیر جایگزین کنید :@page
   &lt;div class=&amp;quotcontainer&amp;quot&gt;
        &lt;div class=&amp;quotrow&amp;quot&gt; &lt;/div&gt;
        &lt;div class=&amp;quotrow&amp;quot&gt;
            &lt;div class=&amp;quotcol-2&amp;quot&gt;User&lt;/div&gt;
            &lt;div class=&amp;quotcol-4&amp;quot&gt;&lt;input type=&amp;quottext&amp;quot id=&amp;quotuserInput&amp;quot /&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class=&amp;quotrow&amp;quot&gt;
            &lt;div class=&amp;quotcol-2&amp;quot&gt;Message&lt;/div&gt;
            &lt;div class=&amp;quotcol-4&amp;quot&gt;&lt;input type=&amp;quottext&amp;quot id=&amp;quotmessageInput&amp;quot /&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class=&amp;quotrow&amp;quot&gt; &lt;/div&gt;
        &lt;div class=&amp;quotrow&amp;quot&gt;
            &lt;div class=&amp;quotcol-6&amp;quot&gt;
                &lt;input type=&amp;quotbutton&amp;quot id=&amp;quotsendButton&amp;quot value=&amp;quotSend Message&amp;quot /&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class=&amp;quotrow&amp;quot&gt;
        &lt;div class=&amp;quotcol-12&amp;quot&gt;
            &lt;hr /&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class=&amp;quotrow&amp;quot&gt;
        &lt;div class=&amp;quotcol-6&amp;quot&gt;
            &lt;ul id=&amp;quotmessagesList&amp;quot&gt;&lt;/ul&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;script src=&amp;quot~/js/signalr/dist/browser/signalr.js&amp;quot&gt;
&lt;script src=&amp;quot~/js/chat.js&amp;quot&gt;این کد :تکست باکس هایی را برای نام و متن پیام + یک دکمه ارسال را ایجاد میکند.یک لیست با آیدی messageList برای نمایش پیام هایی که از SignalR Hub دریافت میشوند را ایجاد میکند.شامل رفرنس کدهای جاوا اسکریپت SignalR و chat.js هست که در قدم های بعدی آن را اضافه خواهیم کرد.در پوشه wwwroot/js، یک فایل chat.js ایجاد کرده و کد زیر را داخل آن قرار دهید :&amp;quotuse strict&amp;quot

var connection = new signalR.HubConnectionBuilder().withUrl(&amp;quot/chatHub&amp;quot).build();

//Disable send button until connection is established
document.getElementById(&amp;quotsendButton&amp;quot).disabled = true;

connection.on(&amp;quotReceiveMessage&amp;quot, function (user, message) {
    var msg = message.replace(/&amp;/g, &amp;quot&amp;&amp;quot).replace(/&lt;/g, &amp;quot&lt;&amp;quot).replace(/&gt;/g, &amp;quot&gt;&amp;quot);
    var encodedMsg = user + &amp;quot says &amp;quot + msg;
    var li = document.createElement(&amp;quotli&amp;quot);
    li.textContent = encodedMsg;
    document.getElementById(&amp;quotmessagesList&amp;quot)(li);
});

connection.start().then(function () {
    document.getElementById(&amp;quotsendButton&amp;quot).disabled = false;
}).catch(function (err) {
    return console.error(err.toString());
});

document.getElementById(&amp;quotsendButton&amp;quot).addEventListener(&amp;quotclick&amp;quot, function (event) {
    var user = document.getElementById(&amp;quotuserInput&amp;quot).value;
    var message = document.getElementById(&amp;quotmessageInput&amp;quot).value;
    connection.invoke(&amp;quotSendMessage&amp;quot, user, message).catch(function (err) {
        return console.error(err.toString());
    });
    event.preventDefault();
});این کد :یک کانکشن را ایجاد و استارت میکند.به دکمه ی submit یک هندلر اضافه میکند که پیام را به هاب ( Hub ) ارسال کند.به آبجکت connection یک هندلر اضافه میکند که پیام ها را از هاب ( Hub ) دریافت و آنهارا به لیست اضافه کند.اجرای برنامهبا Ctrl + F5 برنامه بدون Debugging اجرا میشود.لینک را از آدرس بار مرورگر خود کپی کرده و در یک مرورگر یا تب باز شده دیگر پیست کنید.یکی از مرورگرها را انتخاب، نام و پیام خود را وارد، سپس برروی دکمه Send Message کلیک کنید.نام و پیام در صفحه ی دیگر به سرعت نمایش داده میشود :برنامه چت با SignalR و ASP.NET Coreاگر برنامه کار نکرد، Developer Tools مرورگر خود را باز کرده ( با F12 ) و به قسمت Console بروید. باید ارورهایی را در رابطه با کد HTML و جاوا اسکریپت خود مشاهده کنید. برای مثال، ممکن است فایل signalr.js را در یک پوشه دیگر قرار داده باشید. در این حالت به آن فایل رفرنسی داده نخواهد شد و شما ارور 404 را در Console مرورگر خود مشاهده خواهید کرد.خطای 404 در Console مرورگراگر شما در مرورگر کروم خود ارور ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY را مشاهده کردید، این دستورات را در Command Prompt خود اجرا کنید تا Development Certificate شما بروز شود.dotnet dev-certs https --clean
dotnet dev-certs https --trustترجمه مقاله از صفر تا صد با خودم بوده، اگر قصد کپی مقاله رو دارید منبع رو هم ذکر کنید؛ ممنون :)مشاهده مقاله به زبان انگلیسی در وبسایت رسمی مایکروسافت</description>
                <category>حسام اثناعشری</category>
                <author>حسام اثناعشری</author>
                <pubDate>Sat, 18 Apr 2020 03:41:31 +0430</pubDate>
            </item>
                    <item>
                <title>مروری بر تاریخچه ASP.NET و مایکروسافت</title>
                <link>https://virgool.io/coderlife/%D9%85%D8%B1%D9%88%D8%B1%DB%8C-%D8%A8%D8%B1-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE%DA%86%D9%87-aspnet-%D9%88-%D9%85%D8%A7%DB%8C%DA%A9%D8%B1%D9%88%D8%B3%D8%A7%D9%81%D8%AA-rok71srjpmnn</link>
                <description>در این مقاله قصد داریم تاریخچه ASP.NET و مایکروسافت رو با همدیگه مرور کنیم!حدود 24 سال پیش در دسامبر سال 1996، مایکروسافت اولین ورژن فریمورک تحت وبش رو که Classic ASP نام داشت منتشر کرد. (این نسخه رو با نام ASP - مخفف Active Server Pages نیز میشناسد)پسوند صفحات این فریمورک asp. بود و از زبان VBScript برای نوشتن اسکریپت های آن استفاده میشد.در ژانویه سال 2002، مایکروسافت ASP.NET رو به عنوان جایگزین Classic ASP به جامعه ی برنامه نویسان معرفی کرد.در ASP.NET پشتیبانی از زبان سی شارپ اضافه شد و پسوند صفحات نیز به aspx. تغییر یافت.درحال حاضر، ASP.NET 4.6 به عنوان آخرین نسخه ی رسمی ASP.NET شناخته میشود.همچنین، مایکروسافت توسعه نسخه 5 ASP.NET رو که انتظار میرفت تغییرات مهمی رو در اون شاهد باشیم به نفع ASP.NET Core متوقف کرد.بعد از گذشت 6 سال، ASP.NET MVC معرفی شد که مهم ترین قابلیت اون امکان پیاده سازی معماری MVC یا همون Model - View - Controller بود.همزمان با توسعه ASP.NET MVC نسخه های مختلفی از ASP نیز معرفی میشدند ( ASP.NET Web Pages - ASP.NET Web API - ASP.NET Web Forms ) که کم و بیش برای نیاز های مختلف مورد استفاده قرار میگرفتند.در سال 2016، به دلیل اوپن سورس نبودن، کراس پلتفرم نبودن و ناتوانی ASP.NET MVC و دیگر نسخه ها در محیط های ابری ( Cloud ) بیشتر برنامه نویسای دات نت کار درحال کوچ به سمت نود جی اس، پی اچ پی و غیره بودند و این به نشانه عقب افتادن مایکروسافت از سایر غول های تکنولوژی در زمینه برنامه نویسی وب بود.امَا درهمون سال با انتشار ASP.NET Core انقلابی در صنعت وب مایکروسافت رخ داد!چیزی که هیچ کس فکرش رو نمیکرد اتفاق افتاد...برای اولین بار بود که ردموندی ها یکی از اکوسیستم های خودشون (از سورس ها گرفته تا مستندات) رو به صورت اوپن سورس در اختیار عموم برنامه نویسان قرار داده بودن و این انقلاب مایکروسافت در صنعت وب درست در تاریخ 2016/06/27 با انتشار ASP.NET Core رخ داد!استقبال بی نظیر برنامه نویسان وب از ASP.NET Core باعث شد که مایکروسافت در این زمینه (وب) پیشرفت چندبرابری رو تجربه کنه...اکنون، طبق اخبار رسمی، مایکروسافت درحال توسعه ASP.NET 5 هستش که قراره به عنوان جایگزین ASP.NET Core معرفی بشه!</description>
                <category>حسام اثناعشری</category>
                <author>حسام اثناعشری</author>
                <pubDate>Wed, 15 Apr 2020 00:40:43 +0430</pubDate>
            </item>
                    <item>
                <title>بهترین فیلم و سریال های مرتبط با حوزه تکنولوژی و برنامه نویسی</title>
                <link>https://virgool.io/@ilhesam/%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86-%D9%81%DB%8C%D9%84%D9%85-%D9%88-%D8%B3%D8%B1%DB%8C%D8%A7%D9%84-%D9%87%D8%A7%DB%8C-%D9%85%D8%B1%D8%AA%D8%A8%D8%B7-%D8%A8%D8%A7-%D8%AD%D9%88%D8%B2%D9%87-%D8%AA%DA%A9%D9%86%D9%88%D9%84%D9%88%DA%98%DB%8C-%D9%88-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-xrc65ou5y8kg</link>
                <description>بهترین فیلم و سریال های مرتبط با حوزه تکنولوژی و برنامه نویسیمعمولا اکثر افراد علاقه دارن فیلم ها و سریال های مربوط به حوزه کاری خودشون رو ببینن و یه جورایی بهشون انگیزه و قدرت میده!از اونجایی که برنامه نویس ها و افراد شاغل در حوزه تکنولوژی هم از این قاعده مستثنا نیستن، تصمیم گرفتم یه لیست فوق العاده از بهترین فیلم ها و سریال هایی که در این حوزه دیدم رو براتون آماده کنم تا توی این اوضاع قرنطینه هم یکم به کارتون بیاد.فیلم ها و سریال ها به ترتیب اولویت قرار داده شده ان!سریال سیلیکون ولی ( Silicon Valley )سریال سیلیکون ولی ( Silicon Valley ) نام سریال : سلیکون ولی ( Silicon Valley )ژانر : کمدیامتیاز : 8.5 در سایت IMDbسال شروع پخش : 2014سریال مسترربات ( Mr.Robot )سریال مسترربات ( Mr.Robot )نام سریال : مسترربات ( Mr.Robot )ژانر : جنایی، درام، هیجان انگیزامتیاز : 8.5 در سایت IMDbسال شروع پخش : 2015فیلم سینمایی شبکه اجتماعی ( The Social Network )فیلم سینمایی شبکه اجتماعی ( Social Network )نام فیلم : شبکه اجتماعی ( The Social Network )ژانر : بیوگرافی، درامامتیاز : 7.7 در سایت IMDbسال ساخت : 2010فیلم سینمایی فراماشین ( Ex Machina )فیلم سینمایی فراماشین ( Ex Machina )نام فیلم : فراماشین ( Ex Machina )ژانر : درام، علمی، تخیلیامتیاز : 7.7 در سایت IMDbسال ساخت : 2015فیلم سینمایی جابز ( Jobs )فیلم سینمایی جابز ( Jobs )نام فیلم : جابز ( Jobs )ژانر : بیوگرافی، درامامتیاز : 7.3 در سایت IMDbسال ساخت : 2015فیلم سینمایی هکر 2016 ( Hacker 2016 )فیلم سینمایی هکر 2016 ( Hacker 2016 )نام فیلم : هکر 2016 ( Hacker 2016 )ژانر : جنایی، درام، هیجان انگیزامتیاز : 6.3 در سایت IMDbسال ساخت : 2016فیلم سینمایی من کیستم؟ ( Who am i )نام فیلم : من کیستم؟ ( Who am i )ژانر : جنایی، درام، معماییامتیاز : 7.6 در سایت IMDbسال ساخت : 2014امیدوارم براتون مفید بوده باشه؛ اگر جای یک یا چند فیلم در این لیست خالیه ممنون میشم در نظرات اطلاع بدید.</description>
                <category>حسام اثناعشری</category>
                <author>حسام اثناعشری</author>
                <pubDate>Tue, 31 Mar 2020 23:57:29 +0430</pubDate>
            </item>
                    <item>
                <title>راهنمای شروع برنامه نویسی در سال 2020</title>
                <link>https://virgool.io/coderlife/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%B4%D8%B1%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-%D8%AF%D8%B1-%D8%B3%D8%A7%D9%84-2020-etern5c9p1vn</link>
                <description>ممکنه جدیدا شروع به یادگیری برنامه نویسی کرده باشین یا به برنامه نویسی علاقمند شده و قصد داشته باشین که وارد این دنیای گسترده بشین!در این مطلب، راهنمایی برای شروع برنامه نویسی (در سال 2020) برای شما عزیزان قرار دادم که کاملا براساس تجربه، دانش و مطالعات خودم هستش که میتونه در ابتدای راه کمی کمکتون کنه.خوب، در ابتدا میخوایم اجزای یک تیم تولید نرم افزار رو مورد بررسی قرار بدیم ( چرا؟ چون اول باید زمینه مورد علاقمون رو پیدا کنیم تا بتونیم تشخیص بدیم چه چیزی برای حال و آینده ما بهتر و ایده آل تره! ) :طراح رابط / تجربه کاربری ( UI / UX Designer )توسعه دهنده سمت کلاینت ( Front-End Developer )توسعه دهنده سمت سرور ( Back-End Developer )مدیر پروژه / رهبر تیم ( Project Manager / Leader )آنالیزور نرم افزار ( Software Analyzer )تستر نرم افزار ( Software Tester )معمولا یک تیم برنامه نویسی از اجزای بالا تشکیل میشه که بسته به نوع، سایز و بودجه تیم، مشاغل جدیدی اضافه یا بعضی از اونها حذف میشه! (برای مثال در بعضی از شرکت / تیم های کوچیک که بودجه کمی دارن، وظیفه تست برعهده خود توسعه دهنگان هستش و فردی به عنوان تستر نرم افزار در تیم وجود نداره)بسیار خوب، وظیفه هرکدوم از این افراد در تیم چیه؟طراح رابط / تجربه کاربری، همینطور که از اسمش پیداست وظیفه طراحی ظاهر نرم افزار رو به عهده داره!وظیفه توسعه دهنده سمت کلاینت، پیاده سازی ظاهر نرم افزار در قالب کد و متصل شدن به API آماده شده توسط توسعه دهنده سمت سرور هستش.توسعه دهنده سمت سرور، کارهای مربوط به سرور و پس زمینه ( Back ) رو انجام میده! (برای مثال، کارهای مربوط به دیتابیس)مدیر پروژه / رهبر تیم، وظیفه ارتباط و تعامل با مشتری، انتقال خواسته های مشتری به تیم توسعه، برنامه ریزی برای کارهای تیم، و نظارت برروی روند تکمیل پروژه رو به عهده داره تا کارها با نظم و سرعت پیش برن.وظیفه آنالیزور نرم افزار، بررسی و آنالیز کردن خواسته های مشتری در قالب نرم افزار هستش.وظیفه تستر نرم افزار هم که مشخصه! تست کردن بخش های تکمیل شده نرم افزار به روش های مختلف.درکل، اگر به طراحی ظاهر نرم افزار علاقه دارین میتونین برید سمت طراحی UI و UXاگر به طراحی ظاهر نرم افزار علاقمندین امَا دوست دارین در کنارش کد هم بزنین انتخاب مناسب برای شما Front-End هستشاگر عاشق برنامه نویسی و خلق کردن هستین و از طراحی بیزارید بی شک Back-End برای شما مناسبهاگر به تست کردن علاقمندین و در زندگی عادی هم تمامی روش هارو مورد بررسی قرار میدید بهتره که تستر بشینبسیار هم عالی؛ حالا که با اجزای یک تیم برنامه نویسی آشنا شدیم و تونستیم که زمینه مورد علاقه خودمونو پیدا کنیم بیایین با زبان ها و فریمورک های برنامه نویسی برتر در سال 2020 بیشتر آشنا بشیم!ابتدا بگم که طراحان UI / UX باید با نرم افزار های مخصوص طراحی مانند فتوشاپ یا XD کار کنن که این بخش شامل اونا نمیشه!خوب، بریم سراغ اصل مطلب!پیش نیازهای هرکدوم از فریمورک / کتابخانه های ذیل در کنارشون قرار داده شده!بهترین انتخاب ها برای یک توسعه دهنده Front-End در سال 2020 :React.js : HTML, CSS, JavascriptAngular.js : HTML, CSS, JavascriptVue.js : HTML, CSS, Javascriptبهترین انتخاب ها برای یک توسعه دهنده Back-End در سال 2020 :Node.js : JavascriptASP.NET Core : C#Laravel : PHPDjango : Pythonبهترین انتخاب ها برای یک توسعه دهنده موبایل در سال 2020 :Flutter : DartReact Native : JavascriptPWA : HTML, CSS, JavascriptKotlinطبق نظری که بنده و بسیاری از متخصصان این حوزه دارن Flutter بهترین گزینه برای توسعه دهنگان موبایل و فریمورک ها و کتابخانه های Javascript بهترین گزینه برای توسعه دهنگان وب در سال 2020 هستن!یک سری مهارت (که اکثرشون هم قابل یادگیرین) وجود داره که باعث میشه توی برنامه نویسی به سرعت پیشرفت کنین!خوب، این مهارت ها چیَن ؟زبان انگلیسیتوانایی حل مسائل و الگوریتم های مختلفتوانایی انجام کارهای گروهیعلاقه به برنامه نویسی [ میدونم مهارت نیست ولی مهمه :)) ]روی زبان انگلیسی زیاد وقت بزارین که در آینده نزدیک پشیمون نشین!اگر قصد داشته باشین توی شرکت های بزرگ تکنولوژی (مثل مایکروسافت، گوگل و غیره) استخدام بشین یا در حد برنامه نویسای اونجا باشین باید روی حل مسائل و الگوریتم ها وقت زیادی بزارین (حتی بیشتر از کدنویسی) چرا؟ چون زبان های برنامه نویسی و... فقط ابزاری برای پیاده سازی مسائل و الگوریتم های مختلف هستن (مهم درک و حل مسائل و الگوریتم هاست نه صرفا کدنویسی)در اینجا یک مسیر برای تبدیل شدن به یک برنامه نویس خوب (نه حرفه ای) براتون قرار دادم که پس از یادگیری زبان برنامه نویسی مورد علاقه تون به کارتون میاد!یادگیری اصول کدنویسی تمیزیادگیری برنامه نویسی شی گرا (OOP) و الگوهای طراحی (Design Patterns)یادگیری تست نرم افزاریادگیری کار با ورژن کنترل ها (مثل Git)یادگیری فرآیند های توسعه نرم افزار (مثل TDD یا DDD)یادگیری متدولوژی های توسعه نرم افزار (مثل Scrum)یادگیری در برنامه نویسی انتها نداره...و در آخر یک نقل قول فوق العاده از مارتین فولر (نویسنده کتاب های پرطرفدار صنعت نرم افزار) :هر احمقی میتونه کدی بنویسه که کامپیوتر اون هارو بفهمه، امّا برنامه نویسای خوب کدهایی مینویسند که انسانها بتونن اون رو بفهمن.</description>
                <category>حسام اثناعشری</category>
                <author>حسام اثناعشری</author>
                <pubDate>Sun, 29 Mar 2020 12:38:01 +0430</pubDate>
            </item>
            </channel>
</rss>