از چه تکنولوژی برای توسعه وب اپلیکیشن استفاده کنیم؟

انتخاب تکنولوژی توسعه وب اپلیکیشن

با سلام و درود، چند وقتی میشه برای پروژه بزرگی درگیر همین مسئله شده ام : «از چه تکنولوژی استفاده کنم؟»، ترکیب بین زبان برنامه نویسی، پایگاه داده ها و طراحی front-end …. در ادامه سعی کردم با تحقیقی که انجام دادم به بررسی کامل این مسئله بپردازم که برای توسعه وب اپلیکیشن چه مسائلی را باید در نظر گرفت. 🙂

مقدمه

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

انتخاب فناوری مناسب، کلید موفقیت پروژه شما خواهد بود و انتخاب نا مناسب می تواند منجر به شکست پروژه شما شود.

در ادامه تصمیم دارم در این زمینه و انتخاب تکنولوژی مناسب شما را راهنمایی کنم و معیارهای انتخاب فناوری برتر را به شما معرفی خواهم کرد.

آشنایی با فناوری های توسعه وب اپلیکیشن

خب ابتدا وارد جزییات زبان ها و فناوری ها نمی شیم، صرفا اینجا می خوایم به معرفی دوقسمت توسعه وب بپردازیم : سمت مشتری(client side)، سمت سرور(server side) که به سمت مشتری Front_end و به سمت سرور Back-end هم گفته می شود.

برنامه نویسی Client-Side

سمت مشتری یا frontend شامل هرچیزی می شود که کاربر روی صفحه نمایشش آن را می بیند. در ادامه به فناوری های اصلی frontend اشاره شده است:

  • Hypertext Markup Language (HTML) و Cascading Style Sheets (CSS)، « اچ تی ام ال » به مرورگر می گوید که چگونه محتوای صفحات وب را نمایش دهد در حالی که « سی اس اس » به محتوا استایل می دهد. بوت استرپ (Bootstrap ) چارچوبی است که برای مدیریت HTML و CSS کاربردی و کمک کننده می باشد.
  • JavaScript (JS) ، جاوااسکریپت صفحات وب را تعاملی می کند. کتابخانه های مختلفی از جاوا اسکریپت وجود دارد (jQuery, React.js, and Zepto.js). و همچنین چارچوب های متنوع (Angular, Vue, Backbone, وEmber) برای توسعه سریعتر و آسانتر صفحات وب.

برنامه نویسی Server-Side

سمت سرور توسط کاربران قابل مشاهده نمی باشد اما قدرت سمت-مشتری از سمت-سرور می آید. همانند نیروگاه برق که برق حانه شما را فراهم و تولید می کند.

در ادامه به معرفی تعدادی از زبان های برنامه نویسی سمت-سرور و چارچوب های آنها پرداخته شده است:

  • Ruby (Ruby on Rails)
  • Python (Django, Flask, Pylons)
  • PHP (Laravel)
  • Java (Spring)
  • Scala (Play)
  • C#(dotNet)

البته از Node.js به عنوان backend نیز استفاده می شود.

وب اپلیکیشن نیازی به فضایی دارد که اطلاعات خود را ذخیره کند، و اون فضا پایگاه داده های ما می باشد. دو نوع پایگاه داده وجود دارد : رابطه ای و غیر رابطه ای که هر کد ام مزایا و معایب خود را دارندو. در ادامه به رایجترین پایگاه داده ها در توسعه وب اشاره شده است:

  • MySQL – Relational
  • PostgreSQL – Relational
  • MongoDB – non-relational
  • Microsoft SQL Server – relational برای زبان C#

اپلیکیشن تحت وب نیاز به یک سیستم کش برای کاهش زمان بارگذاری و مدیریت ترافیک بالا را دارد. Memcached  و Redis سیستم های کش با بیشترین استفاد ه هستند.

در انتها اپلیکیشن تخت وب نیاز به یک سرور برای اجرای شدن و مدیریت درخواست ها از سمت کامیوترهای کلاینت ها را دارد در این زمینه نیز سه بازیکن رایج داریم:

  • Apache
  • Nginx
  • IIS برای استفاده از زبان C# .Net
تکنولوژی های سمت کاربر و سرور

چگونه تکنولوژی توسعه وب انتخاب نکنیم ؟ (چطور زبان برنامه نویسی انتخاب نکنیم!ْ)

تا اینجای کار یه دید کلی نسبت به پشته (Stack) فناوری های مورد استفاده در وب پیدا کرده اید. در ادامه به مواردی که باید از آنها به هنگام انتخاب تکنولوژی مورد نظر اجتناب کنید پرداخته شده است:

۱- بر اساس تجربه ی رُقبایتان زبان برنامه نویسی وب انتخاب نکنید.

استفاده از تجربه ی رقبایتان ممکن است مفید باشد ولی برای انتخاب مجموعه تکنولوژی های مورد نیازتان در طراحی وب کار درستی نیست. توجه داشته باشید که پروژه شما منحصر به فرد می باشد و هدف نهایی شما شکست شرکت های رقیب می باشد.

پس چطوری می تونید اطمینان حاصل کنید که تکنولوژی های استفاده شده در شرکت رقیبتان مناسب پروژه شما است؟ اگر در ابتدا انتخاب بدی انجام دهید، در آینده مجبور به تغییر خواهید شد که برای شما هزینه بر خواهد بود.

۲- بر اساس ترجیحات شخصی انتخاب نکنید

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

به عنوان مثال اگر مدیر ارشد اجرایی فناوری هستید و تجربه خوبی در توسعه وب دارید، ممکن است انتخاب تکنولوژی شما درست باشد. اما اگر شما دانش کافی و عمیق در فرآیند توسعه وب ندارید، این استراتژی ممکن است با انتخاب نادرست تکنولوژی، منجر به خطا شود.

۳- بر مبنای پروژه قبلی تان تکنولوژی را انتخاب نکنید

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

۴- بر مبنای تحقیق و جستجوی آنلاین تصمیم نگیرید

امروزه اینترنت مملو از نظرسنجی، مقایسه و سایر اطلاعات است که به شما برای انتخاب یه استک مناسب از انتخاب تکنولوژی کمک می کند.

با این وجود یه مشکل اساسی وجود داره، به احتمال زیاد با منابعی مواجه می شوید که دقیقا پیشنهاد های متفاوت همدیگر دارند، پیشنهادهایشان نیز با استدلال های قوی هستند !! کدوم پیشنهاد رو باور می کنید؟

انتخاب پُشته تکنولوژی کاملا بر اساس تجربه عملی می باشد. شما در صورتی انتخاب درست را انجام می دهید که از تعدادی از این تکنولوژٰی ها قبلا استفاده کرده باشید و بدانید که برای چه نوع کاری خوب هستند. اگر دانش شما صرفا نظری است و بر مبنای تحقیقات آنلاین صورت گرفته، شانس تان از انتخاب تکنولوژی مناسب خیلی پایین است.

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

معیارهای انتخاب پُشته فنی (Tech Stack)

تا اینجا یاد گرفتیم که چه کارهایی را به هنگام انتخاب تکنولوژی مناسب نباید انجام داد. حال وقتش رسیده که به هسته اصلی این مقاله برسیم، به عبارت دیگر معیارهایی که باید در نظر بگیرید.

معیار اول : نوع وب اپلیکیشن

اولین چیزی که باید تصمیم گرفت نوع وب اپلیکیشنی هست که قصد توسعه آن را دارید. یک پشته تکنولوژی، مجموعه ی ابزاری برای ساخت یک Web App می باشد، در نتیجه شما نیاز دارید که به طور کامل آنچه را که قصد توسعه اش را دارید بشناسید. شما باید مجموعه ابزاری را پیدا کنید که مزایای منحصر به فردی را برای وب اپلیکیشن شما داشته باشد.

از نظر پیچیدگی، تمامی پروژه های وب را می توان به سه نوع تقسیم کرد:

  1. ساده، این وب اپلیکیشن ها با ابزارها و راهکارهای تقریبا آماده ساخته می شوند (مانند CMS هایی چون وردپرس-wordpress)
  2. سطح-میانه، این اپ (app)ها توابع بیشتری نسبت به اپ های ساده دارند، و به کمک فریمورک ها ساخته می شوند، برای مثال اپ هایی که برای فروشگاه های فروش اینترنتی بزرگ ساخته می شود. (مثلا دیجی کالا)
  3. پیچیده، این اپ ها شامل تعداد زیادی توابع و انطباق هستند، با استفاده از چند نوع تکنولوژی مختلف وب، توسعه داده می شوند و ممکن است که چند تا زبان برنامه نویسی درگیر آن باشد. برای مثال شبکه های اجتماعی و …

دانستن نوع وب اپی که شما آن را توسعه خواهید داد، کفایت نمی کند. شما باید اهداف تجاری آن را نیز در نظر بگیرید. این مهم هست چرا که اهداف تجاری شما روی انتخاب تکنولوژی برای توسعه تاثیر می گذارد. web app شما می تواند موارد زیر را در بر بگیرد:

  • پردازش بارهای سنگین ، اگر پروژه وب شما متکی برپردازش بار باشد، شما باید دنبال زبان برنامه نویسی و فریمورک ی باشید که این مسئله را در نظر بگیرد. مثال برای این نوع پروژه ها، اپ های استریم کننده ویدیو/صدا و سرویس های اشتراک فایل هستند.
  • زمان تاخیر پایین، برای ایجاد web app که به شدت واکنشگرا، پاسخگو و دارای تاخیر زمانی کم باشد، پشته ای از تکنولوژی متفاوت مورد نیاز است. بهترین مثال برای این نوع web appها ، شبکه های اجتماعی هستند.

معیار دوم: زمان ارائه با بازار

زمان بازار (Time to Market) که به صورت مخفف TTM گفته می شود، زمانی که پُشته تکنولوژی برای یک استارت آپ و بیزینس های کوچک انتخاب می کنیم، بسیار پر اهمیت می باشد.هرچه اپلیکیشن خود را سریعتر توسعه داده و وارد بازار کنید، از رقبای خود جلو زده اید. علاوه بر این هر چه زمان کمتری برای توسعه مصرف کنید، هزینه کمتری نیز برای توسعه دهنده انجام داده اید.

TTM به پُشته تکنولوژی که شما برای توسعه وب اپ خودتان انتخاب می کنید، شدیدا وابسته می باشد. در ادامه لیستی از موضوعاتی که بهنگام انتخاب پشته مناسب باید در نظر بگیرید آورده شده است:

  • راهکار های نرم‌افزار یا سخت افزار آماده (Out-of-the-box solutions) : بررسی کنید ببینید راهکار های آماده ای وجود داره که عملکردهای ضروری را به وب اپلیکیشن خودتان اضافه کند. برای مثال فریمورک Ruby on Rails به توسعه دهنده اجازه می دهد که از تعداد زیادی کتابخانه های متن باز استفاده کند (gem نامیده می شوند) که منجر به سرعت بخشیدن به توسعه شده و TTM را کاهش می دهند.
  • ادغام با راهکار های ثالث (Integration with third-party solutions)، مطمیئن شوید پشته تکنولوژی که شما برای توسعه انتخاب کرده اید از ادغام با راهکارهای ثالث پشتیبانی می کند. این مورد به شما کمک می کند که دوباره چرخ را تولید نکنید.
  • توانایی توسعه دهنده (Developer availability)، حتی اگرتصمیم بر انتخاب پشته تکنولوژی را گرفته باشید، باز هم یک مشکل وجود دارد: شما به توسعه دهنده برای کد زدن نیاز دارید. باید بررسی کنید ببینید می توانید توسعه دهندگانی را پیدا کنید که بر پشته تکنولوژی مورد نظر شما مسلط باشند ومتخصص باشند؟ به یاد داشته باشید که ساختن یک وب اپلیکیشن شروع کار هست. شما به توسعه دهندگانی نیاز دارید که پس از راه اندازی و استقرار از آن نگهداری maintain کنند.
  • مستندات و جامعه توسعه دهندگان، تولید کد خوب، سخت است و هر تیم توسعه دهنده ای ممکن است در برخی مسائل لغزش داشته باشه و دچار مشکل شود و ممکن است زمان زیادی را از تیم توسعه دهنده برای پیدا کردن جواب بگیرد که خود منجر به تاخیر در ارائه اپلیکیشن در زمان مورد نظر می شود. برای همین هست که شما باید مستندات غنی و موجود و جامعه توسعه دهندگان پشته تکنولوژی انتخاب شده را در نظر بگیرید.
آمار Pull request های مربوط به سه ماه اول سال ۲۰۲۰ در سایت گیت هاب

یا به آمار ۱۰ زبان پر استفاده از سایت Pypl توجه کنید:

مرجع سایت Pypl

به آمار زیر از ساست tiobe نیز توجه داشته باشید:

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

معیار سوم: هزینه توسعه وب اپلیکیشن

خب مشخصه که تبدیل ایده شما به یک وب اپلیکیشن رایگان نیست و خرج داره. انتخاب پشته تکنولوژی توسعه، تاثیر مستقیم روی هزینه توسعه دارد. دو مسئله اصلی نیاز است که حساب کنید:

  • حقوق توسعه دهنده ها. توسعه دهنده های وب افراد حرفه ای با مهارت های بالا می باشند که خوب پول می گیرند (البته تو ایران همه جا این طور نیست متاسفانه و در حق توسعه دهنده جماعت کم اجحاف نمیشه). حقوق ماهیانه بستگی به تکنولوژی که روی آن کار می کنند دارد. در نتیجه هزینه های شما با توجه به پشته تکنولوژی متفاوت خواهد بود. باید به یاد داشته باشید که هرچه تکنولوژی پیشرفته تر باشد، دستمزد توسعه دهنده بیشتر خواهد شد.داخل ایران نیز هرچه یه تکنولوژی جدیدتر باشد هزینه توسعه دهندگان آن بیشتر است.
حقوق سالیانه توسعه دهنده بر اساس تکنولوژی و زبان برنامه نویسی در آمریکا

توجه داشته باشید درآمد توسعه دهندگان در امریکا تقریبا دو برابر درآمد در کشور های اروپایی می باشد. نسبت به ایران که دیگه بیشتر فرق می کنه و خودتون یه دودوتا چارتا یی بکنید 🙂

  • هزینه نگهداری اپلیکیشن، ساخت وب اپلیکیشن فقط یک روی سکه است، نگهداری روی دیگه سکه است. برای کاهش هزینه نگهداری بهتر هست که از یک تکنولوژی متن باز استفاده کنید که رایگان باشد.

معیار چهارم: امنیت

در دو دهه ی اخیر جامعه به سمت دیجیتال حرکت کرده و در این زمینه جرمها نیز پدیدار شده اند. حمله های سایبری بزرگترین تهدید برای مشاغل آنلاین محسوب می شوند: طبق پیش بینی انجام شده توسط Juniper Research، خسارت های مالی سالیانه ناشی از نقض داده ها در سال ۲۰۱۹ حدود ۲.۱ تریلیون دلار بوده است.

شکی نیست شما انتظار دارید وب اپلیکیشن شما امنیت داشته باشد. به همین دلیل شما باید تکنولوژی را انتخاب کنید که به شما اجازه ساخت اپلیکیشن امن را بدهد.نظرات مختلفی در مورد اینکه کدام زبان برنامه نوپیسی امن ترین است مطرح است، اما در حقیقت هیچ زبانی ۱۰۰ درصد امنیت را تضمین نمی کند.

هر تکنولوژی توسعه وب در خدمت هدف خود می باشد، پس شما ابتدا ابزار صحیح را انتخاب کنید و سپس در مرحله دوم دستورالعمل های امنیتی را دنبال کنید. اکثر فناوری های توسعه وب دارای دستورالعمل های امنیتی هستند که در آن کلیه مراحل جلوگیری از تهدیدها و به حداقل رساندن آسیب پذیری ها ارائه شده است. شما نیاز دارید که مطمیئن شوید وب اپ شما مطابق با دستورالعمل های امنیتی ایجاد شده است.

معیار پنجم: مقیاس پذیری

مقیاس پذیری ویژگی نیست که به هنگام توسعه وب از آن فرار کنید. شکی نیست که میخواهید پروژه وب خود را در حال رشد و محبوبیت بیشتری ببینید. به طور کلی دو نوع مقیاس پذیری داریم:

  • مقیاس پذیری افقی (Horizontal scalability)، به معنای توانایی یک وب اپلیکیشن برای پذیریش درخواست های بیشتر است. به عبارتی اگر تعداد کاربران به طور چشمگیری افزایش پیدا کرد، اپلیکیشن نباید متوقف شود و باید کار کند.
  • مقیاس پذیری عمودی (Vertical scalability)، به معنی توانایی افزودن اجزای جدید به یک وب اپلیکیشن بدون صدمه زدن به کارایی و عملکرد آن می باشد.

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

نتیجه گیری

خب سعی شد تو این مقاله به صورت جزیی به بحث انتخاب تکنولوژی (زبان برنامه نویسی و پایگاه داده) برای پروژه توسعه وب اپلیکیشن پرداخته شود. من در نتیجه گیری یه مقدار به این مبحث درفضای توسعه وب اپلیکیشن در ایران می پردازم.

پشته های توسعه وب اپ در ایران تقریبا شبیه به پشته های توسعه در دیگر نقاط دنیا می باشد. ولی شاید بشه گفت دو زبان PHP و DotNet در ایران مطرح تر باشند و در سال های اخیر Python Django نیز به این دو زبان اضافه شده اند.

یکی از مسائل مهم تعداد درخواست هایی است که به وب اپلیکیشن شما داده می شود. معمولا در وب اپ هایی که تعداد درخواست ها زیر ۱ میلیون باشد، تفاوت بین زبان ها و تکنولوژی مورد استفاده خیلی فرق نمی کند. پس به نظر من در انتخاب تکنولوژی به مواردی همچون نیروی کار حرفه ای، مستندات و هزینه ای که می خواهید انجام دهید توجه داشته باشید.

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