بتاني مقال بسلستنا رح نتطرق لموضوع كتير مهم و اللي هو "ال Tech Stack المناسبة vs ال Tech Stack الأفضل". ما هو المقصد من انو ال Tech Stack العندي تكون الأنسب و أنو تكون الأفضل؟ هاد الشي اللي رح ندخل بتفاصيلو بمقالنا اليوم ، و نعرض في كتير من الأخطاء اللي بيوقع فيها كل المهندسين و المطورين من ال juniors الى ال CTOs.
رح نقسم اختيار ال Tech Stack لحالتين ، هم اختيار الفرد للادوات و اللغات ، و اختيار الفرق التجارية للادوات و اللغات اللي رح تترجم رؤية الشركة/عميل الشركة/الفئة المستهدفة من قبل الشركة ، الى منتج نهائي.
طيب من منظور فردي ، و طريقة تفكير freelancer ، فأنت صاحب القرار في كيفية ترجمة أفكار
العملاء اللي بيجوك الى منتجات على أرض الواقع ، و في هذه الحالة عليك بتحقيق النقاط التالية:
- السرعة: كل ما كانت الادوات اللي بتشتغل بواسطتا بتمكنك تعطي نتائج بشكل أسرع ، كل ما قدرت تنجز أعمالك أسرع و قدرت تنجز أعمال أكتر ، صح؟ طيب هاد كلام بديهي وين الجديد؟ انا رح اقلك وين الجديد …
السرعة اللي بتنجز فيها شغل بأي أداة أو لغة بتكون محكومة بشغلتين: قابلية عمل وظيفة معينة بأداتنا/لغتنا ، و مدى اتقاااااننا للأداااااة/اللللغة ، بعيد مرة تانية ، مدااااااااا اتقاااااااننا للأدااااااااااة/اللللللللللغة … لأنو ، التكاملية اللي بقدر اشتغل فيا عن طريق framework مثل laravel و ال community الكتير قديم و ناضج المحيط في ، من توفر ORM ، Queues management ، Routing و غيرو كتير من المكاتب الشبه متفق عليها من قبل مطورين laravel بتخلي عملية التفكير بالخيارات اسهل ، و ايجاد الأمثلة و البناء عليها أسرع ، و امكانية تنفيذ MVP في وقت قصير ممكنة جدا ، و لكن ، كل هاد اذا و فقط اذا ، كنت متمكن من laravel بشكل كافي يخليك تقدر تسخر هالادوات لصالحك بصورة فعالة . طيب هاد الحكي بياخد وقت كم؟ أنت و شطارتك 😂. و حتى بعد ما تتمكن من أداة أو لغة بشكل قوي ، رح تقابل مهندسين اخرين شغالين بأدوات أصعب و لكن بتمكن أعلى بخلي شغلهم يظهر على أنو أسهل في التنفيذ بكتير ، و هو في الحقيقة تمكنهم هو اللي مخلي الشغل اسهل بكتير.
معناها ، اللي بحدد سرعتنا في العمل دائما و أبدا هو مقدار اتقاننا و تمكننا من الادوات المستخدمة في العمل ، هاد الشي معناه أنو مافي أداة أحسن من أداة ، و لكن اتقانك للأداة هو اللي بيظهر مدى قوة الأداة و فعاليتها (أو عدمها) في العمل.
- توفر المصادر: حتقابل في مسيرتك في عالم البرمجة مراحل كتيرة جدا جدا جدا مليئة بال Trends ، بتشتهر فيها أدوات جديدة أو لغات جديدة أو أو أو ، و كتير منها رح يكون معمول لحتى "ينجز مهمة معينة بالصورة الأفضل" أو "يوفر 90% من وقت العمل على ميزة معينة" ، و أنا بقول في هي الأحوال اصصصصصبر و لا تحول أدواتك اللي بتستخدما بعملك الى الترند الجديد القوي السريع الفعال على طول ، لأنو اللي بيتعمل بالأداة الجديدة كان بيتعمل قبلها عادي جدا ، يمكن كان أصعب ، يمكن كان بياخد وقت أكبر ، موارد اكثر ، اللي هو ، بس الفرق أنو الأدوات الناضجة أكثر و اللي عندها مستخدمين أو كما يسمى community اكثر و بتعداد أكبر ، واجهو حالات استخدام و أخطاء استخدام و حلول باستخدام هالأدوات أكثر بمراحل كتيرة من اللي بيستخدمو الأدوات الجديدة ، و بالتالي ، اذا أنت لا سمح الله مريت ب error أو حل صعبين و محتاجين معجزة ليتحلو ، غالبا رح تلاقي حدا قبلك مر بنفس المعضلة أو معضلة قريبة منها و في عندو حل أو على الأقل معالجة لهالمشكلة. و أكبر دليل على هالشي وجود منصات مثل Stack Overflow و Qoura و غيرا من المنصات اللي بشاركو فيها المبرمجين مشاكلهم و حلولهم. اذا ، لا تمشي مع ال Trend فورا ، اصبر و اعطيه فرصة ينضج و يمر بمراحل كافية تخليه موضع ثقة و تجربة.
- التكلفة: أنت شخص شغال لوحدك ، راس مالك مهارتك و سمعتك ، ف حاول ما تخلي الأدوات اللي رح تستخدما تكون عبئ عليك في أنك توجد عملاء ممكن يتحملو تكاليف التطوير الخاص بفكرتهم أو منتجهم ، و بنفس الوقت ما تختار أداة أو لغة رح تكلفك فوق طاقتك أثناء رحلة تعلمك الها ، مشان ما تستنزف نفسك قبل ما توصل لهدفك.
كل نقاطنا السابقة بيحكمها رأينا الشخصي و مدى ارتياحنا لوسائل العمل و ملاءمتها لأسلوب عملنا ، و هو الشي اللي في أغلب الأحيان ما بنعطي أي أهمية لما بنكون في بيئة عمل بتضمن فريق مبرمجين و شركة و أجندة عمل و ما الى هنالك.
و هو الشي اللي بجينا للنقاط اللي رح نحققا أثناء اختيارنا لأدواتنا/لغتنا لما نكون في البيئة المذكورة:
- ال MVP vs Final Product: فكرة ال MVP بحد نفسا بتفرض على التيم اقصى سرعة ممكنة لأنو نطلع منتج همو الوحيد أنو يكون "شغال" و في "مثال للميزات المطلوبة". و هاد الشي بيفرض على التيم (اذا فرضنا انو متوسط مهارة التيم بمستوى فوق العادي) أنو يشتغلو يا أما بالأدوات أو اللغات اللي هم كلهم احسن شي فيها ، أو بالحل/أداة/لغة المعروف انها بتهتم بالسرعة أو سهولة عمل نوع معين من المواصفات أو الخصائص المطلوبة. فطبيعي نلاقي شركات بتمشي في بداية المشروع ب Tech Stack معينة ، بتفضل هي المعتمدة لحد ما تصير غير مناسبة للمرحلة اللي وصلا المشروع (وصل scale في ال production اكبر من اسطاعة ما تم صنعه في مرحلة ال MVP) ، ف بيبدا وقتها فقط تغيير ال Stack جزء بعد جزء الى الحلول الأفضل.
- سياسة الشركة: في شركات أو فرق هندسية بدأت و استمرت تحت رأي و تأثير شخص ما في الشركة ، سواء كان مؤسس الفريق أو القسم ، أو حتى في بعض الأحيان السيئة شخص ذو نفوذ بس عديم الخبرة في المجال ، ف بتكمل الشركة بعد أول قرار بال Tech Stack اللي بدت معها.
- حجم العمل: أكيد كلنا متفقين أنو الغالب في مشاريع الشركات أنها تكون أكبر من مشاريع الأفراد ، و أنو مشاريع الأفراد اللي بتكبر بتوصل في مرحلة ما الى أنها لازم تتنظم تحت ادارة فريق أو شركة بشكل من الأشكال. و هاد اللي بنسمي ب Scale ، اللي في مرحلة ما بيجبرك أنك تترك أداة أو لغة كنت بتشتغل بواسطتا و تروح لخيار اخر فقط بسبب أنو اللغة أو الأداة بتبطل تقدر تلبي احتياجات السوق اللي بتنافس فيه.
ف في حالة كنت تحت عمل فريق أو عمل فردي ، ف في الحالتين لازم تنتبه لأسس لا يمكن أنك تخل فيها بتحكم طبيعة العمل و السوق اللي أنت فيه. و لكن بيبقا في خيارات بطبيعتا و طريقة عملها و استخداما بتكون أنسب لكل حالة من حالاتنا:
- مثلا النقاش المطول بين أنو laravel متكاملة أكتر من Nodejs ، فبالتالي أسرع في التنفيذ ، ولكن Nodejs احسن من laravel في ما يخص ال asynchronous processing. هاد الخكي ما مطلق أبدا ، و ممكن يثبت عكسو على حسب مين ؟ مهااارة و سرعة عمل المبرمج نفسو مثل ما ذكرنا فوق.
- أنو Expressjs أنسب للعمل الفردي و Nestjs أنسب لعمل الفرق.
- لغات Go و Rust احسن من غيرهم من ناحية ال efficiency و ال performance و لكن في بعض الأحيان أصعب في التنفيذ و الاستخدام
- لغة Python مناسبة للحلول اللي محتاجة abstraction من ناحية المطور لحتى يقدر يركز على حل المشكلة أكتر من اختيار الأدوات و الأساليب اللي رح يحل بواسطتها المشكلة
و غيرا كتير من الممارسات و الأفكار اللي شبه متفق عليها من قبل مجتمع المطورين.
طيب خلاصة كلامنا:
- اذا انت فرد ، ركز على اللغات و الأدوات الأسرع و الأقل تكلفة بالنسبة الك.
- اذا رح تشتغل مع تيم ، ركز على انك تكون مرن في التحويل من أداة للأخرى على حسب ما يطلبه المنتج اللي بتشتغل عليه.
- الاتقان ثم الاتقان ثم الاتقان ، لأنو الاتقان بيهدم جزء كبير من الفروق و التفاوتات بين مختلف الأدوات و اللغات.
- اياك و اللحاق بال Trends لحد ما يكون في نضج كافي في المجتمع المتبني لل Trend يعطيك أريحية و أمان في استخدام اللغات و الأدوات اللي بيقدما هال Trend.
و بس ✨