مقدمه:
در زمانی زندگی میکنیم که ده ها زبان برنامه نویس وجود دارند و میلیارد ها ابزار که توسط افراد و شرکت های مختلف برای این زبان ها توسعه داده شدهاند.
برنامه نویس طبق نیاز شرکت و پروژه و بر اساس دانش خود، برای شروع پروژه در اولین قدم یک مقایسه کلی میان زبان ها یک زبان که برای پروژه مناسب تر است را انتخاب میکند و سپس شروع به انتخاب از بین ابزار های از پیشآماده آن زبان میکند و در نهایت یک پشته یا همان stack از انتخاب ها را خواهد داشت که قرار است مجموع آن ها به طور منظم و با کمک هم به نوشتن یک نرم افزار خوب کمک کنند.
tech stack به مجموعه ابزار ها و تکنولوژی هایی که برای ساخت یک نرم افزار مورد استفاده قرار میگیرد گفته میشود
مراحل ساخته شدن یک tech stack:
در ابتدا باید یک زبان برنامه نویسی انتخاب کرد. زبان ها به انواع گوناگونی تقسیم میشوند. یک متخصص senior به خوبی میتواند بر اساس نیاز شما بهترین زبان که همخوانی خوبی با خواسته های شما دارد به شما پیشنهاد دهد برای مثال برای پروژه های هوش مصنوعی آن ها در گام اول پروژه معمولا پایتون انتخاب اول است چرا که پیچیدگی های زبان های شی گرا و یا strong type را ندارد و کتابخانه های آماده بسیاری برای تحلیل داده در آن توسعه داده شده است که سرعت کار را به شدت بالا میبرد.
البته این یک گوشه ماجرا است، همین پایتون در اجرا از خیلی زبان ها کندتر است و منابع بسیار بیشتری مصرف میکند و از آن طرف با بزرگ شدن نرم افزار و بالا رفتن حجم کد های نوشته شده، مدیریت و نگهداری آن بسیار سخت و طاقت فرسا خواهد شد بنابراین بسته به نیاز پروژه باید از یک متخصص که زبان های مختلف را میشناسد کمک بگیرید تا بر اساس نیاز شما یک زبان برنامه نویسی مناسب برای شما انتخاب کند.
بعد از زبان نوبت انتخاب فریمورک (framework) است، فریم ورک به زبان ساده ترکیبی از ابزار های از پیش آماده در کنار قوانین از پیش نوشته است. یعنی یک شخص یا شرکت ثالث (مثلا گوگل) یک سری ابزار را توسعه میدهد که نوشتن پروژه های جدید را ساده تر کند و در کنار آن قوانینی وضع میکند که چطور از آن ابزار ها در کنار هم استفاده کنیم تا بتوانبم یک اپلیکیشن را بدون مشکل توسعه دهیم،
به عنوان مثال در صنعت ساختمان سازی ما یک متریال به نام بتون میسازیم ابزار های قالب گیری و پاشش و ترکیب و ساخت این بتون را هم میسازیم بعد مجموعه قوانین برای ساخت اسکلت یک ساختمان با بتون را هم در یک فایل راهنما و یا سند منتشر میکنیم تا مهندسان عمران بتوانند به کمک آن یک ساختمان بتونی را بنا کنند، حالا این قوانین لزوما مشخص و ثابت نیستند و مدام توسط افراد مختلف به چالش کشیده میشوند و انواع جدید اسکلت سازی با بتون و یا طاق سازی با بتون به تدریج توسط افراد خبره این صنعت طراحی و ساخته میشوند و این علم در مرور زمان توسعه داده میشود و تکامل پیدا میکند،
همانطور که در ساختمان سازی بعد از انتخاب بتون و پایان عملیات بتون ریزی کار پیان نمییابد، در نرم افزار نیز بعد از انتخاب و پیکر بندی framework تازه کار شروع میشود.
در گام بعدی باید سراغ معماری پروژه و انتخاب ابزار های مورد نیاز برویم. معماری ها اغلب نه بر اساس جنس پروژه و بیزینس پشت آن بلکه بر اساس سایز پروژه و تعداد برنامه نویس ها و... تعیین میشود. گرچه نوع پروژه هم در انتخاب معماری موثر است ولی تاثیر آن بسیار کمتر از حجم کد و تنوع بیزینس و میزان وابستگی بخش های مختلف پروژه به هم است.
معماری در واقع تنها یک انتخاب نیست، بلکه بخش های مختلف پروژه معماری های متفاوتی هم دارند مثلا معماری نحوه ارتباط سرویس ها، معماری بانک اطلاعاتی یا همان database ، معماری نحوه نگهداری state های مشترک و... همه از انواع معماری هستند که بسته به نیاز پروژه طراحی و پیاده سازی میشوند.
ابزار ها آخرین قطعه های پازل هستند و معمولا در طول توسعه و به تدریج به پروژه اضافه میشوند. نقطه تمایز ابزار ها با مباحث قبلی در تعداد بالای آنها و امکان جایگزین کردن راحت تر آنان است. جایگزینی زبان یا فریمورک و معماری با بازنویسی مجدد پروژه فرق چندانی ندارد اما ابزار میتواند با هزینه بسیار کمتر و در اکثر موارد به صورت تدریجی جایگزین شود.
توجه به دورنما یا vision محصول
از آنجا که تغییر زبان، فریمورک و یا معماری محصول بسیار هزینه بردار است باید توجه کنید که برای انتخاب آنها حتما یک دورنما از محصول کلی باید داشته باشید.
مثلا ممکن است بگویید: از یک استک با سرعت توسعه بالا برای تست market fit بودن محصول استفاده میکنید. ولی اگر در بازار محبوب شدیم برای مراحل بعدی رشد حتما از ابتدا با یک استک مقیاس پذیر (scalable) نرم افزار را مجددا خواهیم نوشت و یا به کمک نیرو های مشاور و متخصص یک فرآیند گذار به یک استک مقیاس پذیر را اجرا خواهیم کرد.