در دنیای امروز، یکی از بحثهای مهم برای هر استارتاپ و سازمانی، اینه که چطور و با چه ابزاری، محصول خودشون رو بسازند. این موضوع میتونه از لحظه تصمیمگیری برای راهاندازی استارتاپ در ذهن بنیانگذاران باشه، حین پیادهسازی محصول کمینه ارزشمند (MVP) ذهنشون رو بیشتر درگیر کنه و حتی پس از ارائه محصول نهایی هم همیشه فکر بازسازی و بازنویسی محصول یکی از مشغلههای ذهنیشون باقی بمونه. چند وقت اخیر، یکی از فازهایی که میان خیلی از برنامهنویسان – بخصوص نسل جدید و تازهنفس برنامهنویس – رایج شده، استفاده از گولنگ در ساخت MVP و … است.
در این پست، قصد من اینه که توضیح بدم چرا گولنگ انتخاب مناسبی نیست و چرا بهتره که در یک سازمان کوچک، سمتش نریم و از ابزارهای دمدستیتری مثل پایتون یا PHP استفاده کنیم. ضمنا اینجا یک سلب ادعا بکنم که «دمستی» به معنای «بد» بودن اون ابزار نیست و اتفاقا در این متن بخصوص، یک مزیت برای اون ابزار ایجاد کرده.
چطور برای پروژه خود یک زبان یا فرمورک مناسب انتخاب کنیم؟
مطلب اصلی، در واقع اینجا شروع میشه. در این قسمت یک سری ویژگی رو کنار هم میچینیم و گولنگ رو در کنار ابزارهای قدیمیتر مثل PHP یا پایتون قرار میدیم که ببینیم کدوم یکی برنده از میدان بیرون میاد و اگر قراره که یک استارتاپ راه بندازیم، محصولمون رو با کدوم یکی از این ابزارها بنویسیم. توجه هم داشته باشید که این بخش متاثر از نظرات شخصی من هم هست و طبیعتا ازتون میخوام که در نقدهایی که به این مطلب وارد میکنید، این مورد هم در نظر بگیرید.
جمعیت توسعهدهندگان
مهمترین فاکتور در انتخاب زبان و فرمورک برنامهنویسی، دقیقا جمعیت توسعهدهندگان اونه. میپرسید چرا؟ چون اگر امروز خودتون کد رو بزنید، طبیعتا وقتی بیشتر با جنبه بیزنسی کارتون مواجه شید، وقت کمتری برای کد زدن خواهید داشت و نیازمند بزرگتر کردن تیم توسعه استارتاپتون هستید. پس از این جهت نیاز دارید که این مورد رو حتما در نظر بگیرید. دقت کنید که Go از سال ۲۰۰۹ عرضه عمومی شده و چندین ساله که داره بعنوان یک ابزار توسعه وب دیده میشه (که تعداد این سالها به انگشتای دست هم نمیرسه).
حالا از طرف دیگر، شما نگاه کنید که چقدر میتونید لاراولکار پیدا کنید؟ افرادی که لاراول یا جنگو (یا حتی روبی آن ریلز!!!) کار میکنند تعدادشون به شدت بیشتر از کسانیه که با Go کار میکنند. نتیجه منطقی اینه که سمت ابزاری برید که بزرگ کردن تیم توسعهش براتون کمهزینه باشه.
تعداد کتابخانهها و ابزارهای توسعه
مورد مهمی که باید بهش توجه کنید، اینه که زبان مورد استفادهتون چقدر ابزار داره؟ چندتا ORM استخواندار داره؟ چقدر طول میکشه تا ایده اولیتون رو صرفا با «به هم چسبوندن ابزارهای موجود» بسازید؟ متاسفانه در این مورد هم باید بگم که Go بازندست. البته این رو هم باید در نظر داشت که Go زیادی جوانه و خب طبیعتا از بین این همه شرکت بزرگی که برای توسعه به سمتش رفتند، بالاخره از این جهت هم به بلوغ کافی میرسه. اما بحث ما، بحث حال حاضره. در حال حاضر، پایتون از این جهت – به نظر من – بهترین گزینه میتونه باشه. میدونید چرا؟ چون برای هر چیزی که فکرش رو بکنید یک کتابخونه ارائه کرده و واقعا شما نیاز به پیاده سازی منطقی جز منطق خالص کسب و کار خودتون ندارید.
مقیاسپذیری
خب، جایی که Go واقعا حرفی برای گفتن داره و برندهست، در مقیاسپذیریه. سرعت بالای Go باعث میشه با حداقل سختافزار روی مقدار زیادی درخواست و کاربر همزمان پاسخ خوبی بده. در صورتی که مقیاس کردن پایتون یا PHP انقدر راحت نیست. اگر مقیاسپذیری براتون امری به شدت حیاتیه و حس میکنید که میتونید تو مدت زمان کوتاهی ممکنه نیاز به مقیاس بالایی داشته باشید، سمت Go برید.
سهولت استقرار
قبلتر در همین وبلاگ در مورد مهندسین DevOps توضیح داده بودم (لینک) و خب یه حقیقت تلخ در مورد این عزیزان اینه که نیروهای گرانقیمتی هستند. وقتی شما از ابزاری مثل Go یا حتی پایتون برای توسعه محصولتون استفاده کنید، احتمالا بعد مدتی نیاز دارید که برای استقرار و … محصول، از یک مهندس DevOps کمک بگیرید. این نیاز ممکنه از لحظه استقرار MVP با شما باشه تا وقتی که محصولتون رو بازسازی و ریفکتور میکنید. در صورتی که برای مثال یک پروژه Laravel ای رو میتونید به سادگی روی یک هاست سیپنل، میزبانی کنید.
و تیر آخر: زمان توسعه محصول!
در قسمت اول به این موضوع اشاره کردم ولی لازمه که دوباره هم اشاره بشه. چرا که این بخش به بخش کدنویسی و تست (و کلا کارهای برنامهنویسانه) محدود نیست و لازمه که موارد دیگر مثل استراتژی ورود به بازار، ارائه بتاهای عمومی و … هم در نظر بگیرید. متاسفانه Go در این مورد بازندست چرا که ابزارهایی به کاملی و خوبی جنگو، ریلز یا لاراول نداره. تنها راهحلی که بتونید با Go با سرعت زیادی به این مرحله برسید؛ اینه که چند توسعهدهنده حرفهای استخدام کنید که خب هزینههاتون رو شدیدا افزایش میده.
جمعبندی
حالا که این همه مثنوی هفتاد من سرودم، جای داره که یک جمعبندی کلی ارائه بدم از مباحث بالا. اگر موارد بالا رو در نظر گرفتید و دیدید که زبانی مثل Go یا Rust در فاکتورهای بالا برای شما کارآمد و مناسب هستند و انتخاب شخصیتونن و در عین حال، منابع کافی هم براشون دارید؛ خب دیگه پرسش نداره و بهتره هرچه سریعتر کارتون رو شروع کنید. در غیر این صورت، اگر از سر جوزدگی قراره از این ابزارها استفاده کنید، چند بار با خودتون مرور کنید که کدوم یکی از اینها، نیازهای شما رو مرتفع میکنند.
در پایان جا داره بگم که زبان برنامهنویسی صرفا ابزاریه که ما بتونیم باهاش برنامه بسازیم و برنامههای کامپیوتری، پاسخهایی هستند به نیازهای ما. انتخاب ابزار مناسب، امکانسنجی خودش رو نیاز داره و امیدوارم که در این پست؛ تونسته باشم به شما کمی در این امکانسنجی، کمک کرده باشم.
با تشکر از وقتی که گذاشتید و این مطلب رو خوندید. امیدوارم این مطلب براتون مفید واقع شده باشه.