مقایسه ملال آور Angular و React

همواره در حوزه برنامه نویسی درباره استفاده از زبان‌ها، ابزارها، تکنولوژی‌ها و... بحث و جدل بوده است. به ویژه در مواردی که می‌توان با دو یا چند تکنولوژی کارهای مشابه انجام داد.البته اینگونه بحث ها تا حدودی جذاب است ولی گاهی ملال آور می‌شود. هزاران نوشته در این باره نوشته می‌شوند و برنامه‌نویسان و توسعه‌دهندگان که هر کدام طرفدار یکی هستند گاهی دشمنان خونی هم می‌شوند!!این موضوع درباره Angular و React وجود دارد که تکنولوزی‌های مطرح در حوزه توسعه سمت کاربر وب هستند. طرفداران هر کدام از برتری یکی بر دیگری می‌نویسند. البته نوشته‌های بی طرف فراوانی هم وجود دارند که درباره هر کدام توضیح مفصل می‌دهند و با توجه به آمارها و قابلیت‌های هر کدام نظر می‌دهند.در این میان برخی غرض‌ورزی‌هایی هم می‌‌کنند به طوری که نوشته‌ای خواندم که گویا نویسنده آن به دنبال ریشه کن کردن Angular می باشد و در جایی نوشته است:If you’re a web developer, Angular is harming you and your world, even if you’re not using it. The more support it gets in the developer world, the less support there will be for more sensible approaches to development [1].من با چندین نوشته از این دست برخورد کردم که گویا برخی با Angular مشکل اساسی دارند. بسیاری از نویسنده‌های اینگونه نوشته‌ها توسعه دهندگانی هستند که با React بیشتر کار کردند. با این حال Angular به راه خود ادامه می‌دهد و نسخه های جدیدتر و بهتر ارائه می‌دهد.مهم ترین تفاوت React و Angular آن است که React یک کتابخانه (library) است در صورتی که Angular یک چهارچوب (Framework) است و البته سایت رسمی Angular آن را یک بستر توسعه (Development Platform) معرفی می‌کند [2].این را هم باید توجه داشته باشیم که React کتابخانه‌ای مانند jQuery نیست که بتوان آن را در بسترهای مختلف استفاده کرد و این خود می‌تواند مزایا و معایبی داشته باشد.به هر حال اکثر نوشته‌های منطقی ذکر کردند که تعداد توسعه دهندگان React بسیار بیشتر است و این کتابخانه بسیار محبوب است. از طرفی Angular برای توسعه برنامه های Enterprise و پروژه‌های بزرگ بسیار مناسب است.قطعا من به عنوان کسی که با Angular بیشتر کار کردم و تسلط بیشتری روی آن دارم نگاهم بیشتر به سمت Angular است.به نطر من چند نکته در Angular بسیار جذاب است۱- ابزارهایی مانند Angular CLI که باعث آسانی توسعه، به همراه دقت و نظم در کار می‌شود.۲- چهارچوب (Framework) بودن Angular که باعث می‌شود package‌های خارج از فضای Angular را کمتر نصب کنیم.۳- ساختار و معماری بسیار جالب Angular که کاملا بر اساس نیازهای برنامه نویسی سمت کاربر می‌باشد. نیازهایی که در طول چندین و چند سال به دست آمده است. این ساختار به کار گروهی کمک شایانی می‌کند.۴- با توجه به تحولات بسیار زیاد در حوزه توسعه سمت کاربر وب به ویژه تغییرات و ویژگی‌های جدید در زبان JavaScript باید پذیرفت که وجود یک بستر مطمئن که برای سال‌های آینده هم قابل استفاده باشد از نیازهای اساسی توسعه سمت کاربر است. چهارچوب Angular با استفاده از TypeScript و دیگر موارد این امکان را فراهم کرده است تا اگر امکانات جدیدی در حوزه توسعه سمت کاربر ایجاد شد با همان کدهای پیشین در نسخه های جدید این امکانات جدید و کاربردی قابل استفاده باشند. گرچه نسخه‌های چند سال پیش طبیعتا تحت تاثیر دنیای پر از تحول توسعه سمت کاربر بودند و تغییرات فراوانی در نسخه‌های مختلف Angular مشاهده می‌شد که خوشبختانه چند وقتی است که تغییرات اندک شده و بیشتر ویژگی اضافه شده و بر روی زیرساخت‌ها و Performance کار شده است.واقعیت آنکه کسانی که بر روی موارد تسلط کافی ندارند نمی‌توانند نظر دقیقی دهند. برای مثال اگر React را با ذهنیت انگولاری بررسی کنیم به جای خوبی نمی‌رسیم. همچنین اگر بر عکس این کار را انجام دهیم.برای مثال برخی می‌گویند Angular دارای Performance خوبی نیست. البته که شاید برای پروژه‌های کوچک آن Performance که با Vue یا React توسعه داده می شود را نداشته باشد ولی درباره پروژه‌های بزرگ قصیه کاملا متفاوت است. شاید هم نسخه‌های قدیمی Angular این ذهنیت را ایجاد کرده است ولی در نسخه‌های جدیدتر، Performance بهبود قابل توجهی پیدا کرده است به ویژه از زمانی که از Ivy استفاده شد.اما اگر از این بحث‌ها و مقایسه‌هایی که گاه ملال آور می‌شود بگدریم من فکر می‌کنم بیشتر از آنکه تکنولوژی، زبان برنامه‌نویسی، کتابخانه، چهارچوب و... در موفقیت یک پروژه نقش داشته باشند، اشخاص و توسعه دهندگانی که خوب کار می‌کنند و کار را خوب بلد هستند، نقش دارند!یعنی این پشتکار، مسئولیت پذیری و علاقه توسعه دهنده است که باعث می‌شود یک محصول عالی رقم بخورد.بسیاری از تصمیم گیرندگان و مدیران و... تلاش می‌کنند با توجه به قابلیت‌های تکنولوژی‌ها یک مورد را انتخاب کنند. البته این کار کاملا منطقی و درست است ولی به نظرم وقتی کارهای مشترک با تکنولوژی ها می توان کرد، بیشتر از آنکه تکنولوژی اثر بخش باشد اشخاص تاثیر گذار هستند.از سوی دیگر به نظرم اصلا نباید از کسی که تسلط به یک کتابخانه یا چهارچوب دارد، به خاطر اینکه می‌دانیم شخص مسئولیت پذیری است، یا رزومه خوبی دارد، بخواهیم برود یک کتابخانه یا چهارچوب دیگر را یاد بگیرد.بارها دیده‌ام که از یک توسعه دهنده Angular می‌خواهند که Vue یا React یاد بگیرد و وقتی یاد گرفت بیاید و برای آنها کار کند!! این توهین بزرگی به یک توسعه دهنده است که راه خودش را انتخاب کرده و به علاقه و مسئولیت پذیری در حوزه دلخواه دست یافته است.البته که برای خود توسعه دهندگان بسیار مفید است که با تکنولوژی های مختلف آشنا باشند ولی اگر این موضوع تحمیلی یا از سر ناچاری برای دریافت حقوق بیشتر باشد تاثیرات بسیار نامطلوبی می گذارد. موضوعی که متاسفانه در ایران زیاد دیده می‌شود.پانویس:1- Brown, Mike (May 5, 2018). Angular — Stop Already!. Medium.2- What is Angular?. Angular